1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <set>
#include <string>
#include "base/memory/ref_counted.h"
#include "base/prefs/testing_pref_store.h"
#include "base/values.h"
#include "chrome/browser/supervised_user/supervised_user_constants.h"
#include "chrome/browser/supervised_user/supervised_user_pref_store.h"
#include "chrome/browser/supervised_user/supervised_user_settings_service.h"
#include "chrome/common/pref_names.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::DictionaryValue;
using base::Value;
namespace {
class SupervisedUserPrefStoreFixture : public PrefStore::Observer {
public:
explicit SupervisedUserPrefStoreFixture(
SupervisedUserSettingsService* settings_service);
~SupervisedUserPrefStoreFixture() override;
base::DictionaryValue* changed_prefs() {
return &changed_prefs_;
}
bool initialization_completed() const {
return initialization_completed_;
}
// PrefStore::Observer implementation:
void OnPrefValueChanged(const std::string& key) override;
void OnInitializationCompleted(bool succeeded) override;
private:
scoped_refptr<SupervisedUserPrefStore> pref_store_;
base::DictionaryValue changed_prefs_;
bool initialization_completed_;
};
SupervisedUserPrefStoreFixture::SupervisedUserPrefStoreFixture(
SupervisedUserSettingsService* settings_service)
: pref_store_(new SupervisedUserPrefStore(settings_service)),
initialization_completed_(pref_store_->IsInitializationComplete()) {
pref_store_->AddObserver(this);
}
SupervisedUserPrefStoreFixture::~SupervisedUserPrefStoreFixture() {
pref_store_->RemoveObserver(this);
}
void SupervisedUserPrefStoreFixture::OnPrefValueChanged(
const std::string& key) {
const base::Value* value = NULL;
ASSERT_TRUE(pref_store_->GetValue(key, &value));
changed_prefs_.Set(key, value->DeepCopy());
}
void SupervisedUserPrefStoreFixture::OnInitializationCompleted(bool succeeded) {
EXPECT_FALSE(initialization_completed_);
EXPECT_TRUE(succeeded);
EXPECT_TRUE(pref_store_->IsInitializationComplete());
initialization_completed_ = true;
}
} // namespace
class SupervisedUserPrefStoreTest : public ::testing::Test {
public:
void SetUp() override;
void TearDown() override;
protected:
SupervisedUserSettingsService service_;
scoped_refptr<TestingPrefStore> pref_store_;
};
void SupervisedUserPrefStoreTest::SetUp() {
pref_store_ = new TestingPrefStore();
service_.Init(pref_store_);
}
void SupervisedUserPrefStoreTest::TearDown() {
service_.Shutdown();
}
TEST_F(SupervisedUserPrefStoreTest, ConfigureSettings) {
SupervisedUserPrefStoreFixture fixture(&service_);
EXPECT_FALSE(fixture.initialization_completed());
// Prefs should not change yet when the service is ready, but not
// activated yet.
pref_store_->SetInitializationCompleted();
EXPECT_TRUE(fixture.initialization_completed());
EXPECT_EQ(0u, fixture.changed_prefs()->size());
service_.SetActive(true);
// kAllowDeletingBrowserHistory is hardcoded to false for supervised users.
bool allow_deleting_browser_history = true;
EXPECT_TRUE(fixture.changed_prefs()->GetBoolean(
prefs::kAllowDeletingBrowserHistory, &allow_deleting_browser_history));
EXPECT_FALSE(allow_deleting_browser_history);
// kSupervisedModeManualHosts does not have a hardcoded value.
base::DictionaryValue* manual_hosts = NULL;
EXPECT_FALSE(fixture.changed_prefs()->GetDictionary(
prefs::kSupervisedUserManualHosts, &manual_hosts));
// kForceSafeSearch defaults to true for supervised users.
bool force_safesearch = false;
EXPECT_TRUE(fixture.changed_prefs()->GetBoolean(prefs::kForceSafeSearch,
&force_safesearch));
EXPECT_TRUE(force_safesearch);
// Activating the service again should not change anything.
fixture.changed_prefs()->Clear();
service_.SetActive(true);
EXPECT_EQ(0u, fixture.changed_prefs()->size());
// kSupervisedModeManualHosts can be configured by the custodian.
scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
dict->SetBoolean("example.com", true);
dict->SetBoolean("moose.org", false);
service_.SetLocalSetting(
supervised_users::kContentPackManualBehaviorHosts,
scoped_ptr<base::Value>(dict->DeepCopy()));
EXPECT_EQ(1u, fixture.changed_prefs()->size());
ASSERT_TRUE(fixture.changed_prefs()->GetDictionary(
prefs::kSupervisedUserManualHosts, &manual_hosts));
EXPECT_TRUE(manual_hosts->Equals(dict.get()));
// kForceSafeSearch can be configured by the custodian, overriding the
// hardcoded default.
fixture.changed_prefs()->Clear();
service_.SetLocalSetting(
supervised_users::kForceSafeSearch,
scoped_ptr<base::Value>(new base::FundamentalValue(false)));
EXPECT_EQ(1u, fixture.changed_prefs()->size());
EXPECT_TRUE(fixture.changed_prefs()->GetBoolean(prefs::kForceSafeSearch,
&force_safesearch));
EXPECT_FALSE(force_safesearch);
}
TEST_F(SupervisedUserPrefStoreTest, ActivateSettingsBeforeInitialization) {
SupervisedUserPrefStoreFixture fixture(&service_);
EXPECT_FALSE(fixture.initialization_completed());
service_.SetActive(true);
EXPECT_FALSE(fixture.initialization_completed());
EXPECT_EQ(0u, fixture.changed_prefs()->size());
pref_store_->SetInitializationCompleted();
EXPECT_TRUE(fixture.initialization_completed());
EXPECT_EQ(0u, fixture.changed_prefs()->size());
}
TEST_F(SupervisedUserPrefStoreTest, CreatePrefStoreAfterInitialization) {
pref_store_->SetInitializationCompleted();
service_.SetActive(true);
SupervisedUserPrefStoreFixture fixture(&service_);
EXPECT_TRUE(fixture.initialization_completed());
EXPECT_EQ(0u, fixture.changed_prefs()->size());
}
|