diff options
author | joaodasilva@chromium.org <joaodasilva@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-29 15:08:33 +0000 |
---|---|---|
committer | joaodasilva@chromium.org <joaodasilva@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-29 15:08:33 +0000 |
commit | b6e695a9c6fa185592c01bd16fcbd7b95296e571 (patch) | |
tree | 10349ec3142cca9f7dcb01f6d519c7964a90d899 /chrome/browser | |
parent | 8373335453c1100bcaa43f070b30a00217bd3216 (diff) | |
download | chromium_src-b6e695a9c6fa185592c01bd16fcbd7b95296e571.zip chromium_src-b6e695a9c6fa185592c01bd16fcbd7b95296e571.tar.gz chromium_src-b6e695a9c6fa185592c01bd16fcbd7b95296e571.tar.bz2 |
Move observers to ConfigurationPolicyProvider.
Share more code for ConfigurationPolicyProviders at the base class.
Removed the DummyConfigurationPolicyProvider.
Removed the DummyCloudPolicyProvider.
Moved ApplyPolicyValueTree to PolicyMap.
BUG=chromium-os:17309
TEST=Everything works as before
Review URL: http://codereview.chromium.org/8059029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@103274 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
24 files changed, 102 insertions, 287 deletions
diff --git a/chrome/browser/policy/asynchronous_policy_loader.cc b/chrome/browser/policy/asynchronous_policy_loader.cc index c87b906..b2f747b 100644 --- a/chrome/browser/policy/asynchronous_policy_loader.cc +++ b/chrome/browser/policy/asynchronous_policy_loader.cc @@ -19,7 +19,8 @@ AsynchronousPolicyLoader::AsynchronousPolicyLoader( origin_loop_(MessageLoop::current()), stopped_(false) {} -void AsynchronousPolicyLoader::Init() { +void AsynchronousPolicyLoader::Init(const base::Closure& callback) { + updates_callback_ = callback; policy_.reset(delegate_->Load()); // Initialization can happen early when the file thread is not yet available, // but the subclass of the loader must do some of their initialization on the @@ -37,9 +38,6 @@ void AsynchronousPolicyLoader::Init() { void AsynchronousPolicyLoader::Stop() { if (!stopped_) { stopped_ = true; - FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer, - observer_list_, - OnProviderGoingAway()); BrowserThread::PostTask( BrowserThread::FILE, FROM_HERE, NewRunnableMethod(this, &AsynchronousPolicyLoader::StopOnFileThread)); @@ -75,16 +73,6 @@ void AsynchronousPolicyLoader::Reload() { } } -void AsynchronousPolicyLoader::AddObserver( - ConfigurationPolicyProvider::Observer* observer) { - observer_list_.AddObserver(observer); -} - -void AsynchronousPolicyLoader::RemoveObserver( - ConfigurationPolicyProvider::Observer* observer) { - observer_list_.RemoveObserver(observer); -} - void AsynchronousPolicyLoader::CancelReloadTask() { if (reload_task_) { // Only check the thread if there's still a reload task. During @@ -143,10 +131,9 @@ void AsynchronousPolicyLoader::UpdatePolicy(DictionaryValue* new_policy_raw) { scoped_ptr<DictionaryValue> new_policy(new_policy_raw); DCHECK(policy_.get()); if (!policy_->Equals(new_policy.get())) { - policy_.reset(new_policy.release()); - FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer, - observer_list_, - OnUpdatePolicy()); + policy_.swap(new_policy); + if (!stopped_) + updates_callback_.Run(); } } diff --git a/chrome/browser/policy/asynchronous_policy_loader.h b/chrome/browser/policy/asynchronous_policy_loader.h index 1458d82..4289d66 100644 --- a/chrome/browser/policy/asynchronous_policy_loader.h +++ b/chrome/browser/policy/asynchronous_policy_loader.h @@ -6,9 +6,9 @@ #define CHROME_BROWSER_POLICY_ASYNCHRONOUS_POLICY_LOADER_H_ #pragma once +#include "base/callback.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" -#include "base/observer_list.h" #include "base/time.h" #include "base/values.h" #include "chrome/browser/policy/asynchronous_policy_provider.h" @@ -27,19 +27,18 @@ class AsynchronousPolicyLoader AsynchronousPolicyLoader(AsynchronousPolicyProvider::Delegate* delegate, int reload_interval_minutes); - // Triggers initial policy load. - virtual void Init(); + // Triggers initial policy load, and installs |callback| as the callback to + // invoke on policy updates. + virtual void Init(const base::Closure& callback); // Reloads policy, sending notification of changes if necessary. Must be // called on the file thread. virtual void Reload(); - // Stops any pending reload tasks. + // Stops any pending reload tasks. Updates callbacks won't be performed + // anymore once the loader is stopped. virtual void Stop(); - void AddObserver(ConfigurationPolicyProvider::Observer* observer); - void RemoveObserver(ConfigurationPolicyProvider::Observer* observer); - const DictionaryValue* policy() const { return policy_.get(); } protected: @@ -111,7 +110,8 @@ class AsynchronousPolicyLoader // True if Stop has been called. bool stopped_; - ObserverList<ConfigurationPolicyProvider::Observer, true> observer_list_; + // Callback to invoke on policy updates. + base::Closure updates_callback_; DISALLOW_COPY_AND_ASSIGN(AsynchronousPolicyLoader); }; diff --git a/chrome/browser/policy/asynchronous_policy_loader_unittest.cc b/chrome/browser/policy/asynchronous_policy_loader_unittest.cc index 44ab3c2..5163f61 100644 --- a/chrome/browser/policy/asynchronous_policy_loader_unittest.cc +++ b/chrome/browser/policy/asynchronous_policy_loader_unittest.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/bind.h" +#include "base/callback.h" #include "chrome/browser/policy/asynchronous_policy_loader.h" #include "chrome/browser/policy/asynchronous_policy_provider.h" #include "chrome/browser/policy/asynchronous_policy_test_base.h" @@ -14,6 +16,13 @@ using ::testing::Return; namespace policy { +namespace { + +void IgnoreCallback() { +} + +} // namespace + class MockConfigurationPolicyObserver : public ConfigurationPolicyProvider::Observer { public: @@ -29,9 +38,11 @@ class AsynchronousPolicyLoaderTest : public AsynchronousPolicyTestBase { virtual void SetUp() { AsynchronousPolicyTestBase::SetUp(); mock_provider_.reset(new MockConfigurationPolicyProvider()); + ignore_callback_ = base::Bind(&IgnoreCallback); } protected: + base::Closure ignore_callback_; scoped_ptr<MockConfigurationPolicyProvider> mock_provider_; private: @@ -58,7 +69,7 @@ TEST_F(AsynchronousPolicyLoaderTest, InitialLoad) { EXPECT_CALL(*delegate_, Load()).WillOnce(Return(template_dict)); scoped_refptr<AsynchronousPolicyLoader> loader = new AsynchronousPolicyLoader(delegate_.release(), 10); - loader->Init(); + loader->Init(ignore_callback_); const DictionaryValue* loaded_dict(loader->policy()); EXPECT_TRUE(loaded_dict->Equals(template_dict)); } @@ -73,7 +84,7 @@ TEST_F(AsynchronousPolicyLoaderTest, InitialLoadWithFallback) { CreateSequencedTestDictionary(&dictionary_number)); scoped_refptr<AsynchronousPolicyLoader> loader = new AsynchronousPolicyLoader(delegate_.release(), 10); - loader->Init(); + loader->Init(ignore_callback_); loop_.RunAllPending(); loader->Reload(); loop_.RunAllPending(); @@ -91,7 +102,7 @@ TEST_F(AsynchronousPolicyLoaderTest, Stop) { EXPECT_CALL(*delegate_, Load()).Times(1); scoped_refptr<AsynchronousPolicyLoader> loader = new AsynchronousPolicyLoader(delegate_.release(), 10); - loader->Init(); + loader->Init(ignore_callback_); loop_.RunAllPending(); loader->Stop(); loop_.RunAllPending(); diff --git a/chrome/browser/policy/asynchronous_policy_provider.cc b/chrome/browser/policy/asynchronous_policy_provider.cc index 38b00e5..403d08e 100644 --- a/chrome/browser/policy/asynchronous_policy_provider.cc +++ b/chrome/browser/policy/asynchronous_policy_provider.cc @@ -4,7 +4,9 @@ #include "chrome/browser/policy/asynchronous_policy_provider.h" +#include "base/bind.h" #include "chrome/browser/policy/asynchronous_policy_loader.h" +#include "chrome/browser/policy/policy_map.h" namespace policy { @@ -13,31 +15,25 @@ AsynchronousPolicyProvider::AsynchronousPolicyProvider( scoped_refptr<AsynchronousPolicyLoader> loader) : ConfigurationPolicyProvider(policy_list), loader_(loader) { - loader_->Init(); + loader_->Init( + base::Bind(&AsynchronousPolicyProvider::NotifyPolicyUpdated, + base::Unretained(this))); } AsynchronousPolicyProvider::~AsynchronousPolicyProvider() { DCHECK(CalledOnValidThread()); + // |loader_| won't invoke its callback anymore after Stop(), therefore + // Unretained(this) is safe in the ctor. loader_->Stop(); } bool AsynchronousPolicyProvider::Provide(PolicyMap* map) { DCHECK(CalledOnValidThread()); DCHECK(loader_->policy()); - ApplyPolicyValueTree(loader_->policy(), map); + map->LoadFrom(loader_->policy(), policy_definition_list()); return true; } -void AsynchronousPolicyProvider::AddObserver( - ConfigurationPolicyProvider::Observer* observer) { - loader_->AddObserver(observer); -} - -void AsynchronousPolicyProvider::RemoveObserver( - ConfigurationPolicyProvider::Observer* observer) { - loader_->RemoveObserver(observer); -} - scoped_refptr<AsynchronousPolicyLoader> AsynchronousPolicyProvider::loader() { return loader_; } diff --git a/chrome/browser/policy/asynchronous_policy_provider.h b/chrome/browser/policy/asynchronous_policy_provider.h index 337a4ab..6e32b1e 100644 --- a/chrome/browser/policy/asynchronous_policy_provider.h +++ b/chrome/browser/policy/asynchronous_policy_provider.h @@ -48,12 +48,6 @@ class AsynchronousPolicyProvider scoped_refptr<AsynchronousPolicyLoader> loader_; private: - // ConfigurationPolicyProvider overrides: - virtual void AddObserver(ConfigurationPolicyProvider::Observer* observer) - OVERRIDE; - virtual void RemoveObserver(ConfigurationPolicyProvider::Observer* observer) - OVERRIDE; - DISALLOW_COPY_AND_ASSIGN(AsynchronousPolicyProvider); }; diff --git a/chrome/browser/policy/browser_policy_connector.cc b/chrome/browser/policy/browser_policy_connector.cc index a302e81..848289d 100644 --- a/chrome/browser/policy/browser_policy_connector.cc +++ b/chrome/browser/policy/browser_policy_connector.cc @@ -13,8 +13,6 @@ #include "chrome/browser/policy/cloud_policy_subsystem.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" #include "chrome/browser/policy/configuration_policy_provider.h" -#include "chrome/browser/policy/dummy_cloud_policy_provider.h" -#include "chrome/browser/policy/dummy_configuration_policy_provider.h" #include "chrome/browser/policy/user_policy_cache.h" #include "chrome/browser/policy/user_policy_token_cache.h" #include "chrome/common/chrome_notification_types.h" @@ -371,14 +369,7 @@ CloudPolicyDataStore::UserAffiliation // static BrowserPolicyConnector* BrowserPolicyConnector::CreateForTests() { - const ConfigurationPolicyProvider::PolicyDefinitionList* - policy_list = ConfigurationPolicyPrefStore:: - GetChromePolicyDefinitionList(); - return new BrowserPolicyConnector( - new policy::DummyConfigurationPolicyProvider(policy_list), - new policy::DummyConfigurationPolicyProvider(policy_list), - new policy::DummyCloudPolicyProvider(policy_list), - new policy::DummyCloudPolicyProvider(policy_list)); + return new BrowserPolicyConnector(NULL, NULL, NULL, NULL); } // static @@ -397,29 +388,29 @@ ConfigurationPolicyProvider* policy_list, config_dir_path.Append(FILE_PATH_LITERAL("managed"))); } else { - return new DummyConfigurationPolicyProvider(policy_list); + return NULL; } #else - return new DummyConfigurationPolicyProvider(policy_list); + return NULL; #endif } // static ConfigurationPolicyProvider* BrowserPolicyConnector::CreateRecommendedPlatformProvider() { +#if defined(OS_POSIX) && !defined(OS_MACOSX) const ConfigurationPolicyProvider::PolicyDefinitionList* policy_list = ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(); -#if defined(OS_POSIX) && !defined(OS_MACOSX) FilePath config_dir_path; if (PathService::Get(chrome::DIR_POLICY_FILES, &config_dir_path)) { return new ConfigDirPolicyProvider( policy_list, config_dir_path.Append(FILE_PATH_LITERAL("recommended"))); } else { - return new DummyConfigurationPolicyProvider(policy_list); + return NULL; } #else - return new DummyConfigurationPolicyProvider(policy_list); + return NULL; #endif } diff --git a/chrome/browser/policy/cloud_policy_provider_impl.cc b/chrome/browser/policy/cloud_policy_provider_impl.cc index 716b131..ba1e8b0 100644 --- a/chrome/browser/policy/cloud_policy_provider_impl.cc +++ b/chrome/browser/policy/cloud_policy_provider_impl.cc @@ -18,9 +18,6 @@ CloudPolicyProviderImpl::CloudPolicyProviderImpl( CloudPolicyProviderImpl::~CloudPolicyProviderImpl() { for (ListType::iterator i = caches_.begin(); i != caches_.end(); ++i) (*i)->RemoveObserver(this); - - FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer, - observer_list_, OnProviderGoingAway()); } bool CloudPolicyProviderImpl::Provide(PolicyMap* result) { @@ -32,16 +29,6 @@ bool CloudPolicyProviderImpl::IsInitializationComplete() const { return initialization_complete_; } -void CloudPolicyProviderImpl::AddObserver( - ConfigurationPolicyProvider::Observer* observer) { - observer_list_.AddObserver(observer); -} - -void CloudPolicyProviderImpl::RemoveObserver( - ConfigurationPolicyProvider::Observer* observer) { - observer_list_.RemoveObserver(observer); -} - void CloudPolicyProviderImpl::OnCacheUpdate(CloudPolicyCacheBase* cache) { RecombineCachesAndMaybeTriggerUpdate(); } @@ -130,8 +117,7 @@ void CloudPolicyProviderImpl::RecombineCachesAndMaybeTriggerUpdate() { // Trigger a notification if there was a change. combined_.Swap(&newly_combined); - FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer, - observer_list_, OnUpdatePolicy()); + NotifyPolicyUpdated(); } } // namespace policy diff --git a/chrome/browser/policy/cloud_policy_provider_impl.h b/chrome/browser/policy/cloud_policy_provider_impl.h index c1ff449..a00b54d 100644 --- a/chrome/browser/policy/cloud_policy_provider_impl.h +++ b/chrome/browser/policy/cloud_policy_provider_impl.h @@ -8,7 +8,6 @@ #include <vector> -#include "base/observer_list.h" #include "chrome/browser/policy/cloud_policy_cache_base.h" #include "chrome/browser/policy/cloud_policy_provider.h" #include "chrome/browser/policy/policy_map.h" @@ -25,10 +24,6 @@ class CloudPolicyProviderImpl : public CloudPolicyProvider, // ConfigurationPolicyProvider implementation. virtual bool Provide(PolicyMap* result) OVERRIDE; virtual bool IsInitializationComplete() const OVERRIDE; - virtual void AddObserver(ConfigurationPolicyProvider::Observer* observer) - OVERRIDE; - virtual void RemoveObserver(ConfigurationPolicyProvider::Observer* observer) - OVERRIDE; // CloudPolicyCacheBase::Observer implementation. virtual void OnCacheUpdate(CloudPolicyCacheBase* cache) OVERRIDE; @@ -65,9 +60,6 @@ class CloudPolicyProviderImpl : public CloudPolicyProvider, // Whether all caches are fully initialized. bool initialization_complete_; - // Provider observers that are registered with this provider. - ObserverList<ConfigurationPolicyProvider::Observer, true> observer_list_; - // The currently valid combination of all the maps in |caches_|. Will be // applied as is on call of Provide. PolicyMap combined_; diff --git a/chrome/browser/policy/configuration_policy_loader_win.h b/chrome/browser/policy/configuration_policy_loader_win.h index 713a460..88fafe4 100644 --- a/chrome/browser/policy/configuration_policy_loader_win.h +++ b/chrome/browser/policy/configuration_policy_loader_win.h @@ -25,8 +25,8 @@ class ConfigurationPolicyLoaderWin protected: // AsynchronousPolicyLoader overrides: - virtual void InitOnFileThread(); - virtual void StopOnFileThread(); + virtual void InitOnFileThread() OVERRIDE; + virtual void StopOnFileThread() OVERRIDE; private: // Updates the watchers and schedules the reload task if appropriate. @@ -36,7 +36,7 @@ class ConfigurationPolicyLoaderWin void Reload(); // ObjectWatcher::Delegate overrides: - virtual void OnObjectSignaled(HANDLE object); + virtual void OnObjectSignaled(HANDLE object) OVERRIDE; base::WaitableEvent user_policy_changed_event_; base::WaitableEvent machine_policy_changed_event_; diff --git a/chrome/browser/policy/configuration_policy_pref_store.cc b/chrome/browser/policy/configuration_policy_pref_store.cc index 79913d9..2cae83c 100644 --- a/chrome/browser/policy/configuration_policy_pref_store.cc +++ b/chrome/browser/policy/configuration_policy_pref_store.cc @@ -959,9 +959,9 @@ ConfigurationPolicyPrefStore::ConfigurationPolicyPrefStore( initialization_complete_(false) { if (provider_) { // Read initial policy. - policy_keeper_.reset(new ConfigurationPolicyPrefKeeper(provider)); + policy_keeper_.reset(new ConfigurationPolicyPrefKeeper(provider_)); registrar_.Init(provider_, this); - initialization_complete_ = provider->IsInitializationComplete(); + initialization_complete_ = provider_->IsInitializationComplete(); } else { initialization_complete_ = true; } diff --git a/chrome/browser/policy/configuration_policy_provider.cc b/chrome/browser/policy/configuration_policy_provider.cc index 99dd1a6..0768183 100644 --- a/chrome/browser/policy/configuration_policy_provider.cc +++ b/chrome/browser/policy/configuration_policy_provider.cc @@ -4,8 +4,6 @@ #include "chrome/browser/policy/configuration_policy_provider.h" -#include "chrome/browser/policy/policy_map.h" - namespace policy { // Class ConfigurationPolicyProvider. @@ -15,25 +13,28 @@ ConfigurationPolicyProvider::ConfigurationPolicyProvider( : policy_definition_list_(policy_list) { } -ConfigurationPolicyProvider::~ConfigurationPolicyProvider() {} +ConfigurationPolicyProvider::~ConfigurationPolicyProvider() { + FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer, + observer_list_, + OnProviderGoingAway()); +} bool ConfigurationPolicyProvider::IsInitializationComplete() const { return true; } -void ConfigurationPolicyProvider::ApplyPolicyValueTree( - const DictionaryValue* policies, - PolicyMap* result) { - const PolicyDefinitionList* policy_list(policy_definition_list()); - for (const PolicyDefinitionList::Entry* i = policy_list->begin; - i != policy_list->end; ++i) { - Value* value; - if (policies->Get(i->name, &value) && value->IsType(i->value_type)) - result->Set(i->policy_type, value->DeepCopy()); - } - - // TODO(mnissler): Handle preference overrides once |ConfigurationPolicyStore| - // supports it. +void ConfigurationPolicyProvider::NotifyPolicyUpdated() { + FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer, + observer_list_, + OnUpdatePolicy()); +} + +void ConfigurationPolicyProvider::AddObserver(Observer* observer) { + observer_list_.AddObserver(observer); +} + +void ConfigurationPolicyProvider::RemoveObserver(Observer* observer) { + observer_list_.RemoveObserver(observer); } // Class ConfigurationPolicyObserverRegistrar. diff --git a/chrome/browser/policy/configuration_policy_provider.h b/chrome/browser/policy/configuration_policy_provider.h index 202c0d1..5eec497 100644 --- a/chrome/browser/policy/configuration_policy_provider.h +++ b/chrome/browser/policy/configuration_policy_provider.h @@ -10,6 +10,7 @@ #include <string> #include "base/basictypes.h" +#include "base/observer_list.h" #include "base/values.h" #include "policy/configuration_policy_type.h" @@ -60,8 +61,8 @@ class ConfigurationPolicyProvider { virtual bool IsInitializationComplete() const; protected: - // Decodes the value tree and writes the configuration to |result|. - void ApplyPolicyValueTree(const DictionaryValue* policies, PolicyMap* result); + // Sends a policy update notification to observers. + void NotifyPolicyUpdated(); const PolicyDefinitionList* policy_definition_list() const { return policy_definition_list_; @@ -70,19 +71,16 @@ class ConfigurationPolicyProvider { private: friend class ConfigurationPolicyObserverRegistrar; - // Temporarily needed for access to ApplyPolicyValueTree as long as we need - // to support old-style policy. - friend class UserPolicyCache; - - virtual void AddObserver(ConfigurationPolicyProvider::Observer* observer) = 0; + virtual void AddObserver(ConfigurationPolicyProvider::Observer* observer); virtual void RemoveObserver( - ConfigurationPolicyProvider::Observer* observer) = 0; + ConfigurationPolicyProvider::Observer* observer); // Contains the default mapping from policy values to the actual names. const ConfigurationPolicyProvider::PolicyDefinitionList* policy_definition_list_; - private: + ObserverList<ConfigurationPolicyProvider::Observer, true> observer_list_; + DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyProvider); }; diff --git a/chrome/browser/policy/configuration_policy_provider_win_unittest.cc b/chrome/browser/policy/configuration_policy_provider_win_unittest.cc index 4200430..20dd8ba 100644 --- a/chrome/browser/policy/configuration_policy_provider_win_unittest.cc +++ b/chrome/browser/policy/configuration_policy_provider_win_unittest.cc @@ -25,14 +25,14 @@ using base::win::RegKey; namespace policy { +namespace { + const wchar_t kUnitTestRegistrySubKey[] = L"SOFTWARE\\Chromium Unit Tests"; const wchar_t kUnitTestMachineOverrideSubKey[] = L"SOFTWARE\\Chromium Unit Tests\\HKLM Override"; const wchar_t kUnitTestUserOverrideSubKey[] = L"SOFTWARE\\Chromium Unit Tests\\HKCU Override"; -namespace { - // Holds policy type, corresponding policy name string and a valid value for use // in parametrized value tests. class PolicyTestParams { diff --git a/chrome/browser/policy/configuration_policy_reader.cc b/chrome/browser/policy/configuration_policy_reader.cc index 9dd1d4a..49d957c 100644 --- a/chrome/browser/policy/configuration_policy_reader.cc +++ b/chrome/browser/policy/configuration_policy_reader.cc @@ -103,7 +103,7 @@ ConfigurationPolicyReader::ConfigurationPolicyReader( if (provider_) { // Read initial policy. policy_keeper_.reset( - new ConfigurationPolicyStatusKeeper(provider, policy_level)); + new ConfigurationPolicyStatusKeeper(provider_, policy_level)); registrar_.Init(provider_, this); } } @@ -166,7 +166,9 @@ ConfigurationPolicyReader* DictionaryValue* ConfigurationPolicyReader::GetPolicyStatus( ConfigurationPolicyType policy) const { - return policy_keeper_->GetPolicyStatus(policy); + if (policy_keeper_.get()) + return policy_keeper_->GetPolicyStatus(policy); + return NULL; } ConfigurationPolicyReader::ConfigurationPolicyReader() diff --git a/chrome/browser/policy/dummy_cloud_policy_provider.cc b/chrome/browser/policy/dummy_cloud_policy_provider.cc deleted file mode 100644 index f522388..0000000 --- a/chrome/browser/policy/dummy_cloud_policy_provider.cc +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) 2011 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 "chrome/browser/policy/dummy_cloud_policy_provider.h" - -namespace policy { - -DummyCloudPolicyProvider::DummyCloudPolicyProvider( - const PolicyDefinitionList* policy_list) - : CloudPolicyProvider(policy_list) { -} - -DummyCloudPolicyProvider::~DummyCloudPolicyProvider() { - FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer, - observer_list_, - OnProviderGoingAway()); -} - -void DummyCloudPolicyProvider::AppendCache(CloudPolicyCacheBase* cache) { -} - -void DummyCloudPolicyProvider::PrependCache(CloudPolicyCacheBase* cache) { -} - -bool DummyCloudPolicyProvider::Provide(PolicyMap* map) { - return true; -} -void DummyCloudPolicyProvider::AddObserver( - ConfigurationPolicyProvider::Observer* observer) { - observer_list_.AddObserver(observer); -} - -void DummyCloudPolicyProvider::RemoveObserver( - ConfigurationPolicyProvider::Observer* observer) { - observer_list_.RemoveObserver(observer); -} - -} // namespace policy diff --git a/chrome/browser/policy/dummy_cloud_policy_provider.h b/chrome/browser/policy/dummy_cloud_policy_provider.h deleted file mode 100644 index 80cbefc..0000000 --- a/chrome/browser/policy/dummy_cloud_policy_provider.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2011 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. - -#ifndef CHROME_BROWSER_POLICY_DUMMY_CLOUD_POLICY_PROVIDER_H_ -#define CHROME_BROWSER_POLICY_DUMMY_CLOUD_POLICY_PROVIDER_H_ -#pragma once - -#include "base/observer_list.h" -#include "chrome/browser/policy/cloud_policy_provider.h" - -namespace policy { - -// A cloud policy provider for tests, that provides 0 policies, but always -// reports that it is initialized. -class DummyCloudPolicyProvider : public CloudPolicyProvider { - public: - explicit DummyCloudPolicyProvider(const PolicyDefinitionList* policy_list); - virtual ~DummyCloudPolicyProvider(); - - // CloudPolicyProvider overrides: - virtual void AppendCache(CloudPolicyCacheBase* cache) OVERRIDE; - virtual void PrependCache(CloudPolicyCacheBase* cache) OVERRIDE; - - virtual bool Provide(PolicyMap* map); - - private: - // ConfigurationPolicyProvider overrides: - virtual void AddObserver( - ConfigurationPolicyProvider::Observer* observer) OVERRIDE; - virtual void RemoveObserver( - ConfigurationPolicyProvider::Observer* observer) OVERRIDE; - - ObserverList<ConfigurationPolicyProvider::Observer, true> observer_list_; - - DISALLOW_COPY_AND_ASSIGN(DummyCloudPolicyProvider); -}; - -} // namespace policy - -#endif // CHROME_BROWSER_POLICY_DUMMY_CLOUD_POLICY_PROVIDER_H_ diff --git a/chrome/browser/policy/dummy_configuration_policy_provider.cc b/chrome/browser/policy/dummy_configuration_policy_provider.cc deleted file mode 100644 index a6f3bb5..0000000 --- a/chrome/browser/policy/dummy_configuration_policy_provider.cc +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2011 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 "chrome/browser/policy/dummy_configuration_policy_provider.h" - -namespace policy { - -DummyConfigurationPolicyProvider::DummyConfigurationPolicyProvider( - const PolicyDefinitionList* policy_list) - : ConfigurationPolicyProvider(policy_list) { -} - -DummyConfigurationPolicyProvider::~DummyConfigurationPolicyProvider() { - FOR_EACH_OBSERVER(ConfigurationPolicyProvider::Observer, - observer_list_, - OnProviderGoingAway()); -} - -bool DummyConfigurationPolicyProvider::Provide(PolicyMap* map) { - return true; -} - -void DummyConfigurationPolicyProvider::AddObserver( - ConfigurationPolicyProvider::Observer* observer) { - observer_list_.AddObserver(observer); -} - -void DummyConfigurationPolicyProvider::RemoveObserver( - ConfigurationPolicyProvider::Observer* observer) { - observer_list_.RemoveObserver(observer); -} - -} // namespace policy diff --git a/chrome/browser/policy/dummy_configuration_policy_provider.h b/chrome/browser/policy/dummy_configuration_policy_provider.h deleted file mode 100644 index 77ee8d0..0000000 --- a/chrome/browser/policy/dummy_configuration_policy_provider.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2011 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. - -#ifndef CHROME_BROWSER_POLICY_DUMMY_CONFIGURATION_POLICY_PROVIDER_H_ -#define CHROME_BROWSER_POLICY_DUMMY_CONFIGURATION_POLICY_PROVIDER_H_ -#pragma once - -#include "base/observer_list.h" -#include "chrome/browser/policy/configuration_policy_provider.h" - -namespace policy { - -class DummyConfigurationPolicyProvider : public ConfigurationPolicyProvider { - public: - explicit DummyConfigurationPolicyProvider( - const PolicyDefinitionList* policy_list); - virtual ~DummyConfigurationPolicyProvider(); - - virtual bool Provide(PolicyMap* map) OVERRIDE; - - private: - // ConfigurationPolicyProvider overrides: - virtual void AddObserver(ConfigurationPolicyProvider::Observer* observer); - virtual void RemoveObserver(ConfigurationPolicyProvider::Observer* observer); - - ObserverList<ConfigurationPolicyProvider::Observer, true> observer_list_; - - DISALLOW_COPY_AND_ASSIGN(DummyConfigurationPolicyProvider); -}; - -} // namespace policy - -#endif // CHROME_BROWSER_POLICY_DUMMY_CONFIGURATION_POLICY_PROVIDER_H_ diff --git a/chrome/browser/policy/file_based_policy_provider_unittest.cc b/chrome/browser/policy/file_based_policy_provider_unittest.cc index fd392e5c..45ef9fe 100644 --- a/chrome/browser/policy/file_based_policy_provider_unittest.cc +++ b/chrome/browser/policy/file_based_policy_provider_unittest.cc @@ -11,9 +11,9 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using testing::_; using testing::InSequence; using testing::Return; +using testing::_; namespace policy { diff --git a/chrome/browser/policy/mock_configuration_policy_provider.h b/chrome/browser/policy/mock_configuration_policy_provider.h index bb61215..24e0087 100644 --- a/chrome/browser/policy/mock_configuration_policy_provider.h +++ b/chrome/browser/policy/mock_configuration_policy_provider.h @@ -28,11 +28,6 @@ class MockConfigurationPolicyProvider : public ConfigurationPolicyProvider { virtual bool IsInitializationComplete() const OVERRIDE; private: - // ConfigurationPolicyProvider overrides: - virtual void AddObserver( - ConfigurationPolicyProvider::Observer* observer) OVERRIDE {} - virtual void RemoveObserver( - ConfigurationPolicyProvider::Observer* observer) OVERRIDE {} PolicyMap policy_map_; bool initialization_complete_; diff --git a/chrome/browser/policy/policy_map.cc b/chrome/browser/policy/policy_map.cc index 9d93172..a9c16d9 100644 --- a/chrome/browser/policy/policy_map.cc +++ b/chrome/browser/policy/policy_map.cc @@ -46,6 +46,17 @@ void PolicyMap::CopyFrom(const PolicyMap& other) { } } +void PolicyMap::LoadFrom( + const DictionaryValue* policies, + const ConfigurationPolicyProvider::PolicyDefinitionList* list) { + const ConfigurationPolicyProvider::PolicyDefinitionList::Entry* entry; + for (entry = list->begin; entry != list->end; ++entry) { + Value* value; + if (policies->Get(entry->name, &value) && value->IsType(entry->value_type)) + Set(entry->policy_type, value->DeepCopy()); + } +} + bool PolicyMap::Equals(const PolicyMap& other) const { return other.map_.size() == map_.size() && std::equal(map_.begin(), map_.end(), other.map_.begin(), MapEntryEquals); diff --git a/chrome/browser/policy/policy_map.h b/chrome/browser/policy/policy_map.h index 8a71ccc..765d0fa 100644 --- a/chrome/browser/policy/policy_map.h +++ b/chrome/browser/policy/policy_map.h @@ -8,6 +8,7 @@ #include <map> #include "base/values.h" +#include "chrome/browser/policy/configuration_policy_provider.h" #include "policy/configuration_policy_type.h" namespace policy { @@ -36,6 +37,12 @@ class PolicyMap { void Swap(PolicyMap* other); void CopyFrom(const PolicyMap& other); + // Loads the values in |policies| into this PolicyMap, mapped to their + // corresponding policy type. The policies to load, and their types, are + // listed in |list|. + void LoadFrom(const DictionaryValue* policies, + const ConfigurationPolicyProvider::PolicyDefinitionList* list); + bool Equals(const PolicyMap& other) const; bool empty() const; size_t size() const; diff --git a/chrome/browser/policy/user_policy_cache.cc b/chrome/browser/policy/user_policy_cache.cc index 03f583b..b0d92cf 100644 --- a/chrome/browser/policy/user_policy_cache.cc +++ b/chrome/browser/policy/user_policy_cache.cc @@ -11,9 +11,7 @@ #include "base/file_path.h" #include "base/logging.h" #include "base/metrics/histogram.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/policy/browser_policy_connector.h" -#include "chrome/browser/policy/cloud_policy_provider.h" +#include "chrome/browser/policy/configuration_policy_pref_store.h" #include "chrome/browser/policy/enterprise_metrics.h" #include "chrome/browser/policy/policy_map.h" #include "chrome/browser/policy/proto/cloud_policy.pb.h" @@ -141,10 +139,9 @@ void UserPolicyCache::MaybeDecodeOldstylePolicy( result.Set(named_value->name(), decoded_value); } } - // Hack: Let one of the providers do the transformation from DictionaryValue - // to PolicyMap, since they have the required code anyway. - g_browser_process->browser_policy_connector()->GetManagedCloudProvider()-> - ApplyPolicyValueTree(&result, mandatory); + mandatory->LoadFrom( + &result, + ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList()); } Value* UserPolicyCache::DecodeIntegerValue( diff --git a/chrome/browser/prefs/pref_value_store_unittest.cc b/chrome/browser/prefs/pref_value_store_unittest.cc index 85a8c14..f368a38 100644 --- a/chrome/browser/prefs/pref_value_store_unittest.cc +++ b/chrome/browser/prefs/pref_value_store_unittest.cc @@ -2,26 +2,21 @@ // 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/memory/scoped_ptr.h" #include "base/values.h" -#include "chrome/browser/policy/configuration_policy_pref_store.h" -#include "chrome/browser/policy/dummy_configuration_policy_provider.h" #include "chrome/browser/prefs/pref_model_associator.h" #include "chrome/browser/prefs/pref_notifier.h" #include "chrome/browser/prefs/pref_value_store.h" #include "chrome/browser/prefs/testing_pref_store.h" #include "chrome/common/pref_names.h" -#include "content/browser/browser_thread.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -using testing::_; -using testing::AnyNumber; using testing::Mock; -using testing::Invoke; +using testing::_; namespace { |