Chromium Code Reviews| Index: chrome/browser/prefs/supervised_user_pref_store_unittest.cc |
| diff --git a/chrome/browser/prefs/supervised_user_pref_store_unittest.cc b/chrome/browser/prefs/supervised_user_pref_store_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..704f3f29ecbc06e5ae8e7225eff1abbb6ce7e270 |
| --- /dev/null |
| +++ b/chrome/browser/prefs/supervised_user_pref_store_unittest.cc |
| @@ -0,0 +1,209 @@ |
| +// Copyright 2013 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/pref_store.h" |
| +#include "base/values.h" |
| +#include "chrome/browser/managed_mode/managed_user_settings.h" |
| +#include "chrome/browser/managed_mode/managed_user_settings_service.h" |
| +#include "chrome/browser/prefs/supervised_user_pref_store.h" |
| +#include "chrome/common/pref_names.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +using base::DictionaryValue; |
| +using base::Value; |
| + |
| +namespace { |
| + |
| +/////////////////////////////////////////////////////////////////////////////// |
| +// |
| +// FakeManagedUserSettingsService |
| +// |
| +/////////////////////////////////////////////////////////////////////////////// |
| + |
| +class FakeManagedUserSettingsService : public ManagedUserSettingsService { |
| + public: |
| + FakeManagedUserSettingsService(); |
| + virtual ~FakeManagedUserSettingsService(); |
| + |
| + // Takes ownership of |value|. |
| + void SetValueForSetting(const std::string& name, Value* value); |
| + |
| + void SetReady(); |
| + |
| + // ManagedUserSettingsService implementation: |
| + virtual scoped_ptr<DictionaryValue> GetSettings() const OVERRIDE; |
| + virtual bool IsReady() const OVERRIDE; |
| + |
| + private: |
| + bool is_ready_; |
| + DictionaryValue settings_; |
| +}; |
| + |
| +FakeManagedUserSettingsService::FakeManagedUserSettingsService() |
| + : is_ready_(false) {} |
| +FakeManagedUserSettingsService::~FakeManagedUserSettingsService() {} |
| + |
| +void FakeManagedUserSettingsService::SetValueForSetting(const std::string& name, |
| + Value* value) { |
| + settings_.SetWithoutPathExpansion(name, value); |
| + NotifySettingsChanged(); |
| +} |
| + |
| +void FakeManagedUserSettingsService::SetReady() { |
| + is_ready_ = true; |
| + NotifySettingsChanged(); |
| +} |
| + |
| +scoped_ptr<DictionaryValue> |
| +FakeManagedUserSettingsService::GetSettings() const { |
| + return make_scoped_ptr(settings_.DeepCopy()); |
| +} |
| + |
| +bool FakeManagedUserSettingsService::IsReady() const { |
| + return is_ready_; |
| +} |
| + |
| +/////////////////////////////////////////////////////////////////////////////// |
| +// |
| +// SupervisedUserPrefStoreFixture |
| +// |
| +/////////////////////////////////////////////////////////////////////////////// |
| + |
| +class SupervisedUserPrefStoreFixture : public PrefStore::Observer { |
| + public: |
| + explicit SupervisedUserPrefStoreFixture( |
| + ManagedUserSettingsService* settings_service); |
| + virtual ~SupervisedUserPrefStoreFixture(); |
| + |
| + DictionaryValue* changed_prefs() { |
| + return &changed_prefs_; |
| + } |
| + |
| + bool initialization_completed() const { |
| + return initialization_completed_; |
| + } |
| + |
| + // PrefStore::Observer implementation: |
| + virtual void OnPrefValueChanged(const std::string& key) OVERRIDE; |
| + virtual void OnInitializationCompleted(bool succeeded) OVERRIDE; |
| + |
| +private: |
| + scoped_refptr<SupervisedUserPrefStore> pref_store_; |
| + DictionaryValue changed_prefs_; |
| + bool initialization_completed_; |
| +}; |
| + |
| +SupervisedUserPrefStoreFixture::SupervisedUserPrefStoreFixture( |
| + ManagedUserSettingsService* 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 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 |
| + |
| +TEST(SupervisedUserPrefStoreTest, ConfigureSettings) { |
| + FakeManagedUserSettingsService service; |
| + SupervisedUserPrefStoreFixture fixture(&service); |
| + EXPECT_FALSE(fixture.initialization_completed()); |
| + |
| + // Prefs should not change yet when the service is ready, but not |
| + // activated yet. |
| + service.SetReady(); |
| + EXPECT_TRUE(fixture.initialization_completed()); |
| + EXPECT_EQ(0u, fixture.changed_prefs()->size()); |
| + |
| + service.Activate(); |
| + |
| + // kAllowDeletingBrowserHistory is hardcoded to false for managed 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); |
| + |
| + // kManagedModeManualHosts does not have a hardcoded value. |
| + DictionaryValue* manual_hosts = NULL; |
| + EXPECT_FALSE(fixture.changed_prefs()->GetDictionary( |
| + prefs::kManagedModeManualHosts, &manual_hosts)); |
| + |
| + // kForceSafeSearch defaults to true for managed 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.Activate(); |
| + EXPECT_EQ(0u, fixture.changed_prefs()->size()); |
| + |
| + // kManagedModeManualHosts can be configured by the custodian. |
| + scoped_ptr<DictionaryValue> dict(new DictionaryValue); |
| + dict->SetBoolean("example.com", true); |
| + dict->SetBoolean("moose.org", false); |
| + service.SetValueForSetting(managed_users::kContentPackManualBehaviorHosts, |
| + dict->DeepCopy()); |
| + EXPECT_EQ(1u, fixture.changed_prefs()->size()); |
| + ASSERT_TRUE(fixture.changed_prefs()->GetDictionary( |
| + prefs::kManagedModeManualHosts, &manual_hosts)); |
| + EXPECT_TRUE(manual_hosts->Equals(dict.get())); |
| + |
| + // kManagedModeManualHosts can be configured by the custodian, overriding the |
|
Pam (message me for reviews)
2013/08/30 13:35:53
kForceSafeSearch
Bernhard Bauer
2013/08/30 14:54:27
Done.
|
| + // hardcoded default. |
| + fixture.changed_prefs()->Clear(); |
| + service.SetValueForSetting(managed_users::kForceSafeSearch, |
| + 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(SupervisedUserPrefStoreTest, ActivateSettingsBeforeInitialization) { |
| + FakeManagedUserSettingsService service; |
| + SupervisedUserPrefStoreFixture fixture(&service); |
| + EXPECT_FALSE(fixture.initialization_completed()); |
| + |
| + service.Activate(); |
| + EXPECT_FALSE(fixture.initialization_completed()); |
| + EXPECT_EQ(0u, fixture.changed_prefs()->size()); |
| + |
| + service.SetReady(); |
| + EXPECT_TRUE(fixture.initialization_completed()); |
| + EXPECT_EQ(0u, fixture.changed_prefs()->size()); |
| +} |
| + |
| +TEST(SupervisedUserPrefStoreTest, CreatePrefStoreAfterInitialization) { |
| + FakeManagedUserSettingsService service; |
| + service.SetReady(); |
| + service.Activate(); |
| + |
| + SupervisedUserPrefStoreFixture fixture(&service); |
| + EXPECT_TRUE(fixture.initialization_completed()); |
| + EXPECT_EQ(0u, fixture.changed_prefs()->size()); |
| +} |
| + |
| + |
|
Pam (message me for reviews)
2013/08/30 13:35:53
extra blank lines
Bernhard Bauer
2013/08/30 14:54:27
Removed.
|