summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorjoaodasilva@chromium.org <joaodasilva@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-29 15:08:33 +0000
committerjoaodasilva@chromium.org <joaodasilva@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-29 15:08:33 +0000
commitb6e695a9c6fa185592c01bd16fcbd7b95296e571 (patch)
tree10349ec3142cca9f7dcb01f6d519c7964a90d899 /chrome/browser
parent8373335453c1100bcaa43f070b30a00217bd3216 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/policy/asynchronous_policy_loader.cc23
-rw-r--r--chrome/browser/policy/asynchronous_policy_loader.h16
-rw-r--r--chrome/browser/policy/asynchronous_policy_loader_unittest.cc17
-rw-r--r--chrome/browser/policy/asynchronous_policy_provider.cc20
-rw-r--r--chrome/browser/policy/asynchronous_policy_provider.h6
-rw-r--r--chrome/browser/policy/browser_policy_connector.cc21
-rw-r--r--chrome/browser/policy/cloud_policy_provider_impl.cc16
-rw-r--r--chrome/browser/policy/cloud_policy_provider_impl.h8
-rw-r--r--chrome/browser/policy/configuration_policy_loader_win.h6
-rw-r--r--chrome/browser/policy/configuration_policy_pref_store.cc4
-rw-r--r--chrome/browser/policy/configuration_policy_provider.cc33
-rw-r--r--chrome/browser/policy/configuration_policy_provider.h16
-rw-r--r--chrome/browser/policy/configuration_policy_provider_win_unittest.cc4
-rw-r--r--chrome/browser/policy/configuration_policy_reader.cc6
-rw-r--r--chrome/browser/policy/dummy_cloud_policy_provider.cc39
-rw-r--r--chrome/browser/policy/dummy_cloud_policy_provider.h41
-rw-r--r--chrome/browser/policy/dummy_configuration_policy_provider.cc34
-rw-r--r--chrome/browser/policy/dummy_configuration_policy_provider.h34
-rw-r--r--chrome/browser/policy/file_based_policy_provider_unittest.cc2
-rw-r--r--chrome/browser/policy/mock_configuration_policy_provider.h5
-rw-r--r--chrome/browser/policy/policy_map.cc11
-rw-r--r--chrome/browser/policy/policy_map.h7
-rw-r--r--chrome/browser/policy/user_policy_cache.cc11
-rw-r--r--chrome/browser/prefs/pref_value_store_unittest.cc9
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 {