diff options
32 files changed, 197 insertions, 337 deletions
diff --git a/chrome/browser/policy/asynchronous_policy_loader_unittest.cc b/chrome/browser/policy/asynchronous_policy_loader_unittest.cc index b3e4534..44ab3c2 100644 --- a/chrome/browser/policy/asynchronous_policy_loader_unittest.cc +++ b/chrome/browser/policy/asynchronous_policy_loader_unittest.cc @@ -6,7 +6,6 @@ #include "chrome/browser/policy/asynchronous_policy_provider.h" #include "chrome/browser/policy/asynchronous_policy_test_base.h" #include "chrome/browser/policy/mock_configuration_policy_provider.h" -#include "chrome/browser/policy/mock_configuration_policy_store.h" #include "testing/gmock/include/gmock/gmock.h" using ::testing::_; diff --git a/chrome/browser/policy/asynchronous_policy_provider.cc b/chrome/browser/policy/asynchronous_policy_provider.cc index 9b050ad..38b00e5 100644 --- a/chrome/browser/policy/asynchronous_policy_provider.cc +++ b/chrome/browser/policy/asynchronous_policy_provider.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// 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. @@ -21,11 +21,10 @@ AsynchronousPolicyProvider::~AsynchronousPolicyProvider() { loader_->Stop(); } -bool AsynchronousPolicyProvider::Provide( - ConfigurationPolicyStoreInterface* store) { +bool AsynchronousPolicyProvider::Provide(PolicyMap* map) { DCHECK(CalledOnValidThread()); DCHECK(loader_->policy()); - ApplyPolicyValueTree(loader_->policy(), store); + ApplyPolicyValueTree(loader_->policy(), map); return true; } diff --git a/chrome/browser/policy/asynchronous_policy_provider.h b/chrome/browser/policy/asynchronous_policy_provider.h index c030972..3c15a74 100644 --- a/chrome/browser/policy/asynchronous_policy_provider.h +++ b/chrome/browser/policy/asynchronous_policy_provider.h @@ -39,7 +39,7 @@ class AsynchronousPolicyProvider virtual ~AsynchronousPolicyProvider(); // ConfigurationPolicyProvider implementation. - virtual bool Provide(ConfigurationPolicyStoreInterface* store); + virtual bool Provide(PolicyMap* map); // For tests to trigger reloads. scoped_refptr<AsynchronousPolicyLoader> loader(); diff --git a/chrome/browser/policy/asynchronous_policy_provider_unittest.cc b/chrome/browser/policy/asynchronous_policy_provider_unittest.cc index 9d186b8..c078bf0 100644 --- a/chrome/browser/policy/asynchronous_policy_provider_unittest.cc +++ b/chrome/browser/policy/asynchronous_policy_provider_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// 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. @@ -6,7 +6,6 @@ #include "chrome/browser/policy/asynchronous_policy_provider.h" #include "chrome/browser/policy/asynchronous_policy_test_base.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" -#include "chrome/browser/policy/mock_configuration_policy_store.h" #include "policy/policy_constants.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -23,11 +22,13 @@ TEST_F(AsynchronousPolicyTestBase, Provide) { DictionaryValue* policies = new DictionaryValue(); policies->SetBoolean(policy::key::kSyncDisabled, true); EXPECT_CALL(*delegate_, Load()).WillOnce(Return(policies)); - EXPECT_CALL(*store_, Apply(policy::kPolicySyncDisabled, _)).Times(1); AsynchronousPolicyProvider provider( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), new AsynchronousPolicyLoader(delegate_.release(), 10)); - provider.Provide(store_.get()); + PolicyMap policy_map; + provider.Provide(&policy_map); + EXPECT_TRUE(policy_map.Get(policy::kPolicySyncDisabled)); + EXPECT_EQ(1U, policy_map.size()); } @@ -49,9 +50,10 @@ TEST_F(AsynchronousPolicyTestBase, ProvideAfterRefresh) { loader); loop_.RunAllPending(); loader->Reload(); - loop_.RunAllPending(); - EXPECT_CALL(*store_, Apply(policy::kPolicyJavascriptEnabled, _)).Times(1); - provider.Provide(store_.get()); + PolicyMap policy_map; + provider.Provide(&policy_map); + EXPECT_TRUE(policy_map.Get(policy::kPolicySyncDisabled)); + EXPECT_EQ(1U, policy_map.size()); } } // namespace policy diff --git a/chrome/browser/policy/asynchronous_policy_test_base.cc b/chrome/browser/policy/asynchronous_policy_test_base.cc index eadf41f..c7d9490 100644 --- a/chrome/browser/policy/asynchronous_policy_test_base.cc +++ b/chrome/browser/policy/asynchronous_policy_test_base.cc @@ -4,8 +4,6 @@ #include "chrome/browser/policy/asynchronous_policy_test_base.h" -#include "chrome/browser/policy/mock_configuration_policy_store.h" - namespace policy { ProviderDelegateMock::ProviderDelegateMock() @@ -21,7 +19,6 @@ AsynchronousPolicyTestBase::~AsynchronousPolicyTestBase() {} void AsynchronousPolicyTestBase::SetUp() { delegate_.reset(new ProviderDelegateMock()); - store_.reset(new MockConfigurationPolicyStore); } void AsynchronousPolicyTestBase::TearDown() { diff --git a/chrome/browser/policy/asynchronous_policy_test_base.h b/chrome/browser/policy/asynchronous_policy_test_base.h index a393852..4737261 100644 --- a/chrome/browser/policy/asynchronous_policy_test_base.h +++ b/chrome/browser/policy/asynchronous_policy_test_base.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// 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. @@ -14,8 +14,6 @@ namespace policy { -class MockConfigurationPolicyStore; - // A delegate for testing that can feed arbitrary information to the loader. class ProviderDelegateMock : public AsynchronousPolicyProvider::Delegate { public: @@ -42,7 +40,6 @@ class AsynchronousPolicyTestBase : public testing::Test { // The mocks that are used in the test must outlive the scope of the test // because they still get accessed in the RunAllPending of the TearDown. - scoped_ptr<MockConfigurationPolicyStore> store_; scoped_ptr<ProviderDelegateMock> delegate_; private: diff --git a/chrome/browser/policy/cloud_policy_provider_impl.cc b/chrome/browser/policy/cloud_policy_provider_impl.cc index 1ec3f71..ddec786 100644 --- a/chrome/browser/policy/cloud_policy_provider_impl.cc +++ b/chrome/browser/policy/cloud_policy_provider_impl.cc @@ -26,9 +26,8 @@ CloudPolicyProviderImpl::~CloudPolicyProviderImpl() { observer_list_, OnProviderGoingAway()); } -bool CloudPolicyProviderImpl::Provide( - ConfigurationPolicyStoreInterface* store) { - ApplyPolicyMap(&combined_, store); +bool CloudPolicyProviderImpl::Provide(PolicyMap* result) { + result->CopyFrom(combined_); return true; } diff --git a/chrome/browser/policy/cloud_policy_provider_impl.h b/chrome/browser/policy/cloud_policy_provider_impl.h index 4ebfe4d..ed1d33a 100644 --- a/chrome/browser/policy/cloud_policy_provider_impl.h +++ b/chrome/browser/policy/cloud_policy_provider_impl.h @@ -21,7 +21,7 @@ class CloudPolicyProviderImpl : public CloudPolicyProvider, virtual ~CloudPolicyProviderImpl(); // ConfigurationPolicyProvider implementation. - virtual bool Provide(ConfigurationPolicyStoreInterface* store) OVERRIDE; + virtual bool Provide(PolicyMap* result) OVERRIDE; virtual bool IsInitializationComplete() const OVERRIDE; virtual void AddObserver(ConfigurationPolicyProvider::Observer* observer) OVERRIDE; diff --git a/chrome/browser/policy/cloud_policy_provider_unittest.cc b/chrome/browser/policy/cloud_policy_provider_unittest.cc index f8f8768..11454f1 100644 --- a/chrome/browser/policy/cloud_policy_provider_unittest.cc +++ b/chrome/browser/policy/cloud_policy_provider_unittest.cc @@ -9,7 +9,6 @@ #include "chrome/browser/policy/cloud_policy_cache_base.h" #include "chrome/browser/policy/cloud_policy_provider_impl.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" -#include "chrome/browser/policy/mock_configuration_policy_store.h" #include "testing/gmock/include/gmock/gmock.h" using testing::AnyNumber; @@ -63,33 +62,32 @@ class CloudPolicyProviderTest : public testing::Test { } // Appends the caches to a provider and then provides the policies to - // |store_|. + // |policy_map_|. void RunCachesThroughProvider(MockCloudPolicyCache caches[], int n, CloudPolicyCacheBase::PolicyLevel level) { - store_.reset(new MockConfigurationPolicyStore); CloudPolicyProviderImpl provider( policy::ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), level); for (int i = 0; i < n; i++) { provider.AppendCache(&caches[i]); } - EXPECT_CALL(*store_.get(), Apply(_, _)).Times(AnyNumber()); - provider.Provide(store_.get()); + policy_map_.reset(new PolicyMap()); + provider.Provide(policy_map_.get()); } - // Checks a string policy in |store_|. + // Checks a string policy in |policy_map_|. void ExpectStringPolicy(const std::string& expected, ConfigurationPolicyType type) { - const Value* value = store_->Get(type); + const Value* value = policy_map_->Get(type); std::string string_value; ASSERT_TRUE(value != NULL); EXPECT_TRUE(value->GetAsString(&string_value)); EXPECT_EQ(expected, string_value); } - // Checks a boolean policy in |store_|. + // Checks a boolean policy in |policy_map_|. void ExpectBoolPolicy(bool expected, ConfigurationPolicyType type) { - const Value* value = store_->Get(type); + const Value* value = policy_map_->Get(type); bool bool_value; ASSERT_TRUE(value != NULL); EXPECT_TRUE(value->GetAsBoolean(&bool_value)); @@ -97,7 +95,7 @@ class CloudPolicyProviderTest : public testing::Test { } void ExpectNoPolicy(ConfigurationPolicyType type) { - EXPECT_TRUE(NULL == store_->Get(type)); + EXPECT_TRUE(NULL == policy_map_->Get(type)); } void CombineTwoPolicyMaps(const PolicyMap& base, @@ -114,7 +112,7 @@ class CloudPolicyProviderTest : public testing::Test { static const ConfigurationPolicyType simple_policies[]; scoped_ptr<CloudPolicyProviderImpl> cloud_policy_provider_; - scoped_ptr<MockConfigurationPolicyStore> store_; + scoped_ptr<PolicyMap> policy_map_; }; // Proxy setting distributed over multiple caches. diff --git a/chrome/browser/policy/config_dir_policy_provider_unittest.cc b/chrome/browser/policy/config_dir_policy_provider_unittest.cc index 629a635..0b3b32c 100644 --- a/chrome/browser/policy/config_dir_policy_provider_unittest.cc +++ b/chrome/browser/policy/config_dir_policy_provider_unittest.cc @@ -10,7 +10,6 @@ #include "base/string_number_conversions.h" #include "chrome/browser/policy/config_dir_policy_provider.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" -#include "chrome/browser/policy/mock_configuration_policy_store.h" #include "content/browser/browser_thread.h" #include "content/common/json_value_serializer.h" #include "policy/policy_constants.h" @@ -179,8 +178,6 @@ class ConfigDirPolicyProviderValueTest loop_.RunAllPending(); } - MockConfigurationPolicyStore policy_store_; - private: MessageLoop loop_; BrowserThread ui_thread_; @@ -191,8 +188,9 @@ TEST_P(ConfigDirPolicyProviderValueTest, Default) { ConfigDirPolicyProvider provider( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), test_dir()); - EXPECT_TRUE(provider.Provide(&policy_store_)); - EXPECT_TRUE(policy_store_.policy_map().empty()); + PolicyMap policy_map; + EXPECT_TRUE(provider.Provide(&policy_map)); + EXPECT_TRUE(policy_map.empty()); } TEST_P(ConfigDirPolicyProviderValueTest, NullValue) { @@ -202,8 +200,9 @@ TEST_P(ConfigDirPolicyProviderValueTest, NullValue) { ConfigDirPolicyProvider provider( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), test_dir()); - EXPECT_TRUE(provider.Provide(&policy_store_)); - EXPECT_TRUE(policy_store_.policy_map().empty()); + PolicyMap policy_map; + EXPECT_TRUE(provider.Provide(&policy_map)); + EXPECT_TRUE(policy_map.empty()); } TEST_P(ConfigDirPolicyProviderValueTest, TestValue) { @@ -213,9 +212,10 @@ TEST_P(ConfigDirPolicyProviderValueTest, TestValue) { ConfigDirPolicyProvider provider( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), test_dir()); - EXPECT_TRUE(provider.Provide(&policy_store_)); - EXPECT_EQ(1U, policy_store_.policy_map().size()); - const Value* value = policy_store_.Get(GetParam().type()); + PolicyMap policy_map; + EXPECT_TRUE(provider.Provide(&policy_map)); + EXPECT_EQ(1U, policy_map.size()); + const Value* value = policy_map.Get(GetParam().type()); ASSERT_TRUE(value); EXPECT_TRUE(GetParam().test_value()->Equals(value)); } diff --git a/chrome/browser/policy/configuration_policy_pref_store.cc b/chrome/browser/policy/configuration_policy_pref_store.cc index 2a99298..65011dd 100644 --- a/chrome/browser/policy/configuration_policy_pref_store.cc +++ b/chrome/browser/policy/configuration_policy_pref_store.cc @@ -35,8 +35,7 @@ namespace policy { // Accepts policy settings from a ConfigurationPolicyProvider, converts them // to preferences and caches the result. -class ConfigurationPolicyPrefKeeper - : private ConfigurationPolicyStoreInterface { +class ConfigurationPolicyPrefKeeper { public: explicit ConfigurationPolicyPrefKeeper(ConfigurationPolicyProvider* provider); virtual ~ConfigurationPolicyPrefKeeper(); @@ -51,8 +50,8 @@ class ConfigurationPolicyPrefKeeper std::vector<std::string>* differing_prefs) const; private: - // ConfigurationPolicyStore methods: - virtual void Apply(ConfigurationPolicyType setting, Value* value); + // Apply the policy settings stored in |policies|. + void Apply(PolicyMap* policies); // Policies that map to a single preference are handled // by an automated converter. Each one of these policies @@ -351,8 +350,11 @@ const ConfigurationPolicyPrefKeeper::PolicyToPreferenceMapEntry ConfigurationPolicyPrefKeeper::ConfigurationPolicyPrefKeeper( ConfigurationPolicyProvider* provider) { - if (!provider->Provide(this)) + scoped_ptr<PolicyMap> policies(new PolicyMap()); + if (!provider->Provide(policies.get())) LOG(WARNING) << "Failed to get policy from provider."; + + Apply(policies.get()); FinalizeProxyPolicySettings(); FinalizeDefaultSearchPolicySettings(); FinalizeIncognitoModeSettings(); @@ -385,24 +387,31 @@ void ConfigurationPolicyPrefKeeper::GetDifferingPrefPaths( prefs_.GetDifferingKeys(&other->prefs_, differing_prefs); } -void ConfigurationPolicyPrefKeeper::Apply(ConfigurationPolicyType policy, - Value* value) { - if (ApplyProxyPolicy(policy, value) || - ApplySyncPolicy(policy, value) || - ApplyAutofillPolicy(policy, value) || - ApplyDownloadDirPolicy(policy, value) || - ApplyDiskCacheDirPolicy(policy, value) || - ApplyFileSelectionDialogsPolicy(policy, value) || - ApplyDefaultSearchPolicy(policy, value) || - ApplyIncognitoModePolicy(policy, value) || - ApplyBookmarksPolicy(policy, value) || - ApplyPolicyFromMap(policy, value, kSimplePolicyMap, - arraysize(kSimplePolicyMap))) - return; +void ConfigurationPolicyPrefKeeper::Apply(PolicyMap* policies) { + PolicyMap::const_iterator current = policies->begin(); + for ( ; current != policies->end(); ++current) { + // TODO(simo) Use a separate ConfigurationPolicyHandler class to apply + // policy settings. + Value* value = current->second->DeepCopy(); + if (ApplyProxyPolicy(current->first, value) || + ApplySyncPolicy(current->first, value) || + ApplyAutofillPolicy(current->first, value) || + ApplyDownloadDirPolicy(current->first, value) || + ApplyDiskCacheDirPolicy(current->first, value) || + ApplyFileSelectionDialogsPolicy(current->first, + value) || + ApplyDefaultSearchPolicy(current->first, value) || + ApplyIncognitoModePolicy(current->first, value) || + ApplyBookmarksPolicy(current->first, value) || + ApplyPolicyFromMap(current->first, value, + kSimplePolicyMap, arraysize(kSimplePolicyMap))) { + continue; + } + delete value; - // Other policy implementations go here. - NOTIMPLEMENTED(); - delete value; + // Other policy implementations should go into the conditional above. + NOTIMPLEMENTED(); + } } bool ConfigurationPolicyPrefKeeper::RemovePreferencesOfMap( diff --git a/chrome/browser/policy/configuration_policy_pref_store.h b/chrome/browser/policy/configuration_policy_pref_store.h index 1d24b82..1ac47db 100644 --- a/chrome/browser/policy/configuration_policy_pref_store.h +++ b/chrome/browser/policy/configuration_policy_pref_store.h @@ -14,13 +14,30 @@ #include "base/observer_list.h" #include "base/values.h" #include "chrome/browser/policy/configuration_policy_provider.h" -#include "chrome/browser/policy/configuration_policy_store_interface.h" #include "chrome/common/pref_store.h" namespace policy { class ConfigurationPolicyPrefKeeper; +// Constants for the "Proxy Server Mode" defined in the policies. +// Note that these diverge from internal presentation defined in +// ProxyPrefs::ProxyMode for legacy reasons. The following four +// PolicyProxyModeType types were not very precise and had overlapping use +// cases. +enum PolicyProxyModeType { + // Disable Proxy, connect directly. + kPolicyNoProxyServerMode = 0, + // Auto detect proxy or use specific PAC script if given. + kPolicyAutoDetectProxyServerMode = 1, + // Use manually configured proxy servers (fixed servers). + kPolicyManuallyConfiguredProxyServerMode = 2, + // Use system proxy server. + kPolicyUseSystemProxyServerMode = 3, + + MODE_COUNT +}; + // An implementation of PrefStore that bridges policy settings as read from a // ConfigurationPolicyProvider to preferences. class ConfigurationPolicyPrefStore diff --git a/chrome/browser/policy/configuration_policy_provider.cc b/chrome/browser/policy/configuration_policy_provider.cc index 3f8e3fd..1c9e80d 100644 --- a/chrome/browser/policy/configuration_policy_provider.cc +++ b/chrome/browser/policy/configuration_policy_provider.cc @@ -24,31 +24,19 @@ bool ConfigurationPolicyProvider::IsInitializationComplete() const { void ConfigurationPolicyProvider::ApplyPolicyValueTree( const DictionaryValue* policies, - ConfigurationPolicyStoreInterface* store) { + 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)) - store->Apply(i->policy_type, value->DeepCopy()); + result->Set(i->policy_type, value->DeepCopy()); } // TODO(mnissler): Handle preference overrides once |ConfigurationPolicyStore| // supports it. } -void ConfigurationPolicyProvider::ApplyPolicyMap( - const PolicyMap* policies, - ConfigurationPolicyStoreInterface* store) { - const PolicyDefinitionList* policy_list(policy_definition_list()); - for (const PolicyDefinitionList::Entry* i = policy_list->begin; - i != policy_list->end; ++i) { - const Value* value = policies->Get(i->policy_type); - if (value && value->IsType(i->value_type)) - store->Apply(i->policy_type, value->DeepCopy()); - } -} - // Class ConfigurationPolicyObserverRegistrar. ConfigurationPolicyObserverRegistrar::ConfigurationPolicyObserverRegistrar() diff --git a/chrome/browser/policy/configuration_policy_provider.h b/chrome/browser/policy/configuration_policy_provider.h index 27b5472..1f21899 100644 --- a/chrome/browser/policy/configuration_policy_provider.h +++ b/chrome/browser/policy/configuration_policy_provider.h @@ -12,7 +12,7 @@ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "base/values.h" -#include "chrome/browser/policy/configuration_policy_store_interface.h" +#include "chrome/browser/policy/policy_map.h" #include "policy/configuration_policy_type.h" namespace policy { @@ -49,12 +49,12 @@ class ConfigurationPolicyProvider { virtual ~ConfigurationPolicyProvider(); // Must be implemented by provider subclasses to specify the provider-specific - // policy decisions. The preference service invokes this |Provide| method when - // it needs a policy provider to specify its policy choices. In |Provide|, the - // |ConfigurationPolicyProvider| must make calls to the |Apply| method of - // |store| to apply specific policies. Returns true if the policy could be - // provided, otherwise false. - virtual bool Provide(ConfigurationPolicyStoreInterface* store) = 0; + // policy decisions. The ConfigurationPolicyPrefStore invokes this |Provide| + // method when it needs a policy provider to specify its policy choices. In + // |Provide|, the |ConfigurationPolicyProvider| fills the given |result| with + // policy values. Returns true if the policy could be provided and false + // otherwise. + virtual bool Provide(PolicyMap* result) = 0; // Check whether this provider has completed initialization. This is used to // detect whether initialization is done in case providers implementations @@ -62,14 +62,8 @@ class ConfigurationPolicyProvider { virtual bool IsInitializationComplete() const; protected: - // Decodes the value tree and writes the configuration to the given |store|. - void ApplyPolicyValueTree(const DictionaryValue* policies, - ConfigurationPolicyStoreInterface* store); - - // Writes the configuration found in the already-decoded map |policies| to - // the given |store|. - void ApplyPolicyMap(const PolicyMap* policies, - ConfigurationPolicyStoreInterface* store); + // Decodes the value tree and writes the configuration to |result|. + void ApplyPolicyValueTree(const DictionaryValue* policies, PolicyMap* result); const PolicyDefinitionList* policy_definition_list() const { return policy_definition_list_; diff --git a/chrome/browser/policy/configuration_policy_provider_mac.h b/chrome/browser/policy/configuration_policy_provider_mac.h index 8be0d44..4f2e35f 100644 --- a/chrome/browser/policy/configuration_policy_provider_mac.h +++ b/chrome/browser/policy/configuration_policy_provider_mac.h @@ -7,7 +7,6 @@ #pragma once #include "base/memory/scoped_ptr.h" -#include "chrome/browser/policy/configuration_policy_store_interface.h" #include "chrome/browser/policy/file_based_policy_provider.h" #include "chrome/browser/preferences_mac.h" diff --git a/chrome/browser/policy/configuration_policy_provider_mac_unittest.cc b/chrome/browser/policy/configuration_policy_provider_mac_unittest.cc index f248bb5..e273f09 100644 --- a/chrome/browser/policy/configuration_policy_provider_mac_unittest.cc +++ b/chrome/browser/policy/configuration_policy_provider_mac_unittest.cc @@ -9,7 +9,6 @@ #include "base/sys_string_conversions.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" #include "chrome/browser/policy/configuration_policy_provider_mac.h" -#include "chrome/browser/policy/mock_configuration_policy_store.h" #include "chrome/browser/preferences_mock_mac.h" #include "policy/policy_constants.h" #include "testing/gtest/include/gtest/gtest.h" @@ -132,19 +131,18 @@ class ConfigurationPolicyProviderMacTest public: virtual void SetUp() { prefs_ = new MockPreferences; - store_.reset(new MockConfigurationPolicyStore); } protected: MockPreferences* prefs_; - scoped_ptr<MockConfigurationPolicyStore> store_; }; TEST_P(ConfigurationPolicyProviderMacTest, Default) { ConfigurationPolicyProviderMac provider( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), prefs_); - EXPECT_TRUE(provider.Provide(store_.get())); - EXPECT_TRUE(store_->policy_map().empty()); + PolicyMap policy_map; + EXPECT_TRUE(provider.Provide(&policy_map)); + EXPECT_TRUE(policy_map.empty()); } TEST_P(ConfigurationPolicyProviderMacTest, Invalid) { @@ -157,8 +155,9 @@ TEST_P(ConfigurationPolicyProviderMacTest, Invalid) { // Create the provider and have it read |prefs_|. ConfigurationPolicyProviderMac provider( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), prefs_); - EXPECT_TRUE(provider.Provide(store_.get())); - EXPECT_TRUE(store_->policy_map().empty()); + PolicyMap policy_map; + EXPECT_TRUE(provider.Provide(&policy_map)); + EXPECT_TRUE(policy_map.empty()); } TEST_P(ConfigurationPolicyProviderMacTest, TestNonForcedValue) { @@ -172,8 +171,9 @@ TEST_P(ConfigurationPolicyProviderMacTest, TestNonForcedValue) { // Create the provider and have it read |prefs_|. ConfigurationPolicyProviderMac provider( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), prefs_); - EXPECT_TRUE(provider.Provide(store_.get())); - EXPECT_TRUE(store_->policy_map().empty()); + PolicyMap policy_map; + EXPECT_TRUE(provider.Provide(&policy_map)); + EXPECT_TRUE(policy_map.empty()); } TEST_P(ConfigurationPolicyProviderMacTest, TestValue) { @@ -187,9 +187,10 @@ TEST_P(ConfigurationPolicyProviderMacTest, TestValue) { // Create the provider and have it read |prefs_|. ConfigurationPolicyProviderMac provider( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), prefs_); - EXPECT_TRUE(provider.Provide(store_.get())); - ASSERT_EQ(1U, store_->policy_map().size()); - const Value* value = store_->Get(GetParam().type()); + PolicyMap policy_map; + EXPECT_TRUE(provider.Provide(&policy_map)); + ASSERT_EQ(1U, policy_map.size()); + const Value* value = policy_map.Get(GetParam().type()); ASSERT_TRUE(value); EXPECT_TRUE(GetParam().test_value()->Equals(value)); } diff --git a/chrome/browser/policy/configuration_policy_provider_win_unittest.cc b/chrome/browser/policy/configuration_policy_provider_win_unittest.cc index 43879b1..383d84a 100644 --- a/chrome/browser/policy/configuration_policy_provider_win_unittest.cc +++ b/chrome/browser/policy/configuration_policy_provider_win_unittest.cc @@ -15,7 +15,6 @@ #include "chrome/browser/policy/asynchronous_policy_loader.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" #include "chrome/browser/policy/configuration_policy_provider_win.h" -#include "chrome/browser/policy/mock_configuration_policy_store.h" #include "chrome/common/pref_names.h" #include "content/browser/browser_thread.h" #include "policy/policy_constants.h" @@ -150,7 +149,6 @@ class ConfigurationPolicyProviderWinTest void WriteInvalidValue(HKEY hive, const char* name, const Value* value); protected: - scoped_ptr<MockConfigurationPolicyStore> store_; scoped_ptr<ConfigurationPolicyProviderWin> provider_; // A message loop must be declared and instantiated for these tests, @@ -193,7 +191,6 @@ void ConfigurationPolicyProviderWinTest::SetUp() { ActivateOverrides(); - store_.reset(new MockConfigurationPolicyStore); provider_.reset(new ConfigurationPolicyProviderWin( ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList())); } @@ -296,8 +293,9 @@ void ConfigurationPolicyProviderWinTest::WriteInvalidValue(HKEY hive, } TEST_P(ConfigurationPolicyProviderWinTest, Default) { - provider_->Provide(store_.get()); - EXPECT_TRUE(store_->policy_map().empty()); + PolicyMap policy_map; + provider_->Provide(&policy_map); + EXPECT_TRUE(policy_map.empty()); } TEST_P(ConfigurationPolicyProviderWinTest, InvalidValue) { @@ -309,8 +307,9 @@ TEST_P(ConfigurationPolicyProviderWinTest, InvalidValue) { GetParam().hkcu_value()); provider_->loader()->Reload(); loop_.RunAllPending(); - provider_->Provide(store_.get()); - EXPECT_TRUE(store_->policy_map().empty()); + PolicyMap policy_map; + provider_->Provide(&policy_map); + EXPECT_TRUE(policy_map.empty()); } TEST_P(ConfigurationPolicyProviderWinTest, HKLM) { @@ -319,8 +318,9 @@ TEST_P(ConfigurationPolicyProviderWinTest, HKLM) { GetParam().hklm_value()); provider_->loader()->Reload(); loop_.RunAllPending(); - provider_->Provide(store_.get()); - const Value* value = store_->Get(GetParam().type()); + PolicyMap policy_map; + provider_->Provide(&policy_map); + const Value* value = policy_map.Get(GetParam().type()); ASSERT_TRUE(value); EXPECT_TRUE(value->Equals(GetParam().hklm_value())); } @@ -331,8 +331,9 @@ TEST_P(ConfigurationPolicyProviderWinTest, HKCU) { GetParam().hkcu_value()); provider_->loader()->Reload(); loop_.RunAllPending(); - provider_->Provide(store_.get()); - const Value* value = store_->Get(GetParam().type()); + PolicyMap policy_map; + provider_->Provide(&policy_map); + const Value* value = policy_map.Get(GetParam().type()); ASSERT_TRUE(value); EXPECT_TRUE(value->Equals(GetParam().hkcu_value())); } @@ -346,8 +347,9 @@ TEST_P(ConfigurationPolicyProviderWinTest, HKLMOverHKCU) { GetParam().hkcu_value()); provider_->loader()->Reload(); loop_.RunAllPending(); - provider_->Provide(store_.get()); - const Value* value = store_->Get(GetParam().type()); + PolicyMap policy_map; + provider_->Provide(&policy_map); + const Value* value = policy_map.Get(GetParam().type()); ASSERT_TRUE(value); EXPECT_TRUE(value->Equals(GetParam().hklm_value())); } diff --git a/chrome/browser/policy/configuration_policy_reader.cc b/chrome/browser/policy/configuration_policy_reader.cc index 472a151..c8bf7e1 100644 --- a/chrome/browser/policy/configuration_policy_reader.cc +++ b/chrome/browser/policy/configuration_policy_reader.cc @@ -12,23 +12,19 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/policy/browser_policy_connector.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" -#include "chrome/browser/policy/configuration_policy_store_interface.h" +#include "chrome/browser/policy/policy_map.h" namespace policy { // This class functions as a container for policy status information used by the // ConfigurationPolicyReader class. It obtains policy values from a // ConfigurationPolicyProvider and maps them to their status information. -class ConfigurationPolicyStatusKeeper - : public ConfigurationPolicyStoreInterface { +class ConfigurationPolicyStatusKeeper { public: ConfigurationPolicyStatusKeeper(ConfigurationPolicyProvider* provider, PolicyStatusInfo::PolicyLevel policy_level); virtual ~ConfigurationPolicyStatusKeeper(); - // ConfigurationPolicyStoreInterface methods. - virtual void Apply(ConfigurationPolicyType policy, base::Value* value); - // Returns a pointer to a DictionaryValue containing the status information // of the policy |policy|. The caller acquires ownership of the returned // value. Returns NULL if no such policy is stored in this keeper. @@ -40,6 +36,9 @@ class ConfigurationPolicyStatusKeeper typedef ConfigurationPolicyProvider::PolicyDefinitionList PolicyDefinitionList; + // Calls Provide() on the passed in |provider| to get policy values. + void GetPoliciesFromProvider(ConfigurationPolicyProvider* provider); + // Mapping from ConfigurationPolicyType to PolicyStatusInfo. PolicyStatusMap policy_map_; @@ -54,9 +53,7 @@ class ConfigurationPolicyStatusKeeper ConfigurationPolicyStatusKeeper::ConfigurationPolicyStatusKeeper( ConfigurationPolicyProvider* provider, PolicyStatusInfo::PolicyLevel policy_level) : policy_level_(policy_level) { - - if (!provider->Provide(this)) - LOG(WARNING) << "Failed to get policy from provider."; + GetPoliciesFromProvider(provider); } ConfigurationPolicyStatusKeeper::~ConfigurationPolicyStatusKeeper() { @@ -64,26 +61,6 @@ ConfigurationPolicyStatusKeeper::~ConfigurationPolicyStatusKeeper() { policy_map_.clear(); } -void ConfigurationPolicyStatusKeeper::Apply( - ConfigurationPolicyType policy, base::Value* value) { - string16 name = PolicyStatus::GetPolicyName(policy); - - if (name == string16()) { - NOTREACHED(); - } - - // TODO(simo) actually determine whether the policy is a user or a device one - // and whether the policy could be enforced or not once this information - // is available. - PolicyStatusInfo* info = new PolicyStatusInfo(name, - PolicyStatusInfo::USER, - policy_level_, - value, - PolicyStatusInfo::ENFORCED, - string16()); - policy_map_[policy] = info; -} - DictionaryValue* ConfigurationPolicyStatusKeeper::GetPolicyStatus( ConfigurationPolicyType policy) const { PolicyStatusMap::const_iterator entry = policy_map_.find(policy); @@ -91,7 +68,47 @@ DictionaryValue* ConfigurationPolicyStatusKeeper::GetPolicyStatus( (entry->second)->GetDictionaryValue() : NULL; } +void ConfigurationPolicyStatusKeeper::GetPoliciesFromProvider( + ConfigurationPolicyProvider* provider) { + scoped_ptr<PolicyMap> policies(new PolicyMap()); + if (!provider->Provide(policies.get())) + LOG(WARNING) << "Failed to get policy from provider."; + + PolicyMap::const_iterator policy = policies->begin(); + for ( ; policy != policies->end(); ++policy) { + string16 name = PolicyStatus::GetPolicyName(policy->first); + + if (name == string16()) { + NOTREACHED(); + } + + // TODO(simo) actually determine whether the policy is a user or a device + // one and whether the policy could be enforced or not once this information + // is available. + PolicyStatusInfo* info = new PolicyStatusInfo(name, + PolicyStatusInfo::USER, + policy_level_, + policy->second->DeepCopy(), + PolicyStatusInfo::ENFORCED, + string16()); + policy_map_[policy->first] = info; + } +} + // ConfigurationPolicyReader +ConfigurationPolicyReader::ConfigurationPolicyReader( + ConfigurationPolicyProvider* provider, + PolicyStatusInfo::PolicyLevel policy_level) + : provider_(provider), + policy_level_(policy_level) { + if (provider_) { + // Read initial policy. + policy_keeper_.reset( + new ConfigurationPolicyStatusKeeper(provider, policy_level)); + registrar_.Init(provider_, this); + } +} + ConfigurationPolicyReader::~ConfigurationPolicyReader() { } @@ -145,19 +162,6 @@ DictionaryValue* ConfigurationPolicyReader::GetPolicyStatus( return policy_keeper_->GetPolicyStatus(policy); } -ConfigurationPolicyReader::ConfigurationPolicyReader( - ConfigurationPolicyProvider* provider, - PolicyStatusInfo::PolicyLevel policy_level) - : provider_(provider), - policy_level_(policy_level) { - if (provider_) { - // Read initial policy. - policy_keeper_.reset( - new ConfigurationPolicyStatusKeeper(provider, policy_level)); - registrar_.Init(provider_, this); - } -} - ConfigurationPolicyReader::ConfigurationPolicyReader() : provider_(NULL), policy_level_(PolicyStatusInfo::LEVEL_UNDEFINED), diff --git a/chrome/browser/policy/configuration_policy_store_interface.h b/chrome/browser/policy/configuration_policy_store_interface.h deleted file mode 100644 index 2043834..0000000 --- a/chrome/browser/policy/configuration_policy_store_interface.h +++ /dev/null @@ -1,56 +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_CONFIGURATION_POLICY_STORE_INTERFACE_H_ -#define CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_STORE_INTERFACE_H_ -#pragma once - -#include "base/basictypes.h" -#include "policy/configuration_policy_type.h" - -namespace base { -class Value; -} - -namespace policy { - -// Constants for the "Proxy Server Mode" defined in the policies. -// Note that these diverge from internal presentation defined in -// ProxyPrefs::ProxyMode for legacy reasons. The following four -// PolicyProxyModeType types were not very precise and had overlapping use -// cases. -enum PolicyProxyModeType { - // Disable Proxy, connect directly. - kPolicyNoProxyServerMode = 0, - // Auto detect proxy or use specific PAC script if given. - kPolicyAutoDetectProxyServerMode = 1, - // Use manually configured proxy servers (fixed servers). - kPolicyManuallyConfiguredProxyServerMode = 2, - // Use system proxy server. - kPolicyUseSystemProxyServerMode = 3, - - MODE_COUNT -}; - -// An abstract super class for policy stores that provides a method that can be -// called by a |ConfigurationPolicyProvider| to specify a policy. -class ConfigurationPolicyStoreInterface { - public: - virtual ~ConfigurationPolicyStoreInterface() {} - - // A |ConfigurationPolicyProvider| specifies the value of a policy - // setting through a call to |Apply|. The configuration policy pref - // store takes over the ownership of |value|. - virtual void Apply(ConfigurationPolicyType policy, base::Value* value) = 0; - - protected: - ConfigurationPolicyStoreInterface() {} - - private: - DISALLOW_COPY_AND_ASSIGN(ConfigurationPolicyStoreInterface); -}; - -} // namespace policy - -#endif // CHROME_BROWSER_POLICY_CONFIGURATION_POLICY_STORE_INTERFACE_H_ diff --git a/chrome/browser/policy/dummy_cloud_policy_provider.cc b/chrome/browser/policy/dummy_cloud_policy_provider.cc index 6646fc1..f522388 100644 --- a/chrome/browser/policy/dummy_cloud_policy_provider.cc +++ b/chrome/browser/policy/dummy_cloud_policy_provider.cc @@ -23,8 +23,7 @@ void DummyCloudPolicyProvider::AppendCache(CloudPolicyCacheBase* cache) { void DummyCloudPolicyProvider::PrependCache(CloudPolicyCacheBase* cache) { } -bool DummyCloudPolicyProvider::Provide( - ConfigurationPolicyStoreInterface* store) { +bool DummyCloudPolicyProvider::Provide(PolicyMap* map) { return true; } void DummyCloudPolicyProvider::AddObserver( diff --git a/chrome/browser/policy/dummy_cloud_policy_provider.h b/chrome/browser/policy/dummy_cloud_policy_provider.h index 269b5f2..3a75069 100644 --- a/chrome/browser/policy/dummy_cloud_policy_provider.h +++ b/chrome/browser/policy/dummy_cloud_policy_provider.h @@ -21,7 +21,7 @@ class DummyCloudPolicyProvider : public CloudPolicyProvider { virtual void AppendCache(CloudPolicyCacheBase* cache) OVERRIDE; virtual void PrependCache(CloudPolicyCacheBase* cache) OVERRIDE; - virtual bool Provide(ConfigurationPolicyStoreInterface* store); + virtual bool Provide(PolicyMap* map); private: // ConfigurationPolicyProvider overrides: diff --git a/chrome/browser/policy/dummy_configuration_policy_provider.cc b/chrome/browser/policy/dummy_configuration_policy_provider.cc index 973ee4c..a6f3bb5 100644 --- a/chrome/browser/policy/dummy_configuration_policy_provider.cc +++ b/chrome/browser/policy/dummy_configuration_policy_provider.cc @@ -17,8 +17,7 @@ DummyConfigurationPolicyProvider::~DummyConfigurationPolicyProvider() { OnProviderGoingAway()); } -bool DummyConfigurationPolicyProvider::Provide( - ConfigurationPolicyStoreInterface* store) { +bool DummyConfigurationPolicyProvider::Provide(PolicyMap* map) { return true; } diff --git a/chrome/browser/policy/dummy_configuration_policy_provider.h b/chrome/browser/policy/dummy_configuration_policy_provider.h index 119a74b..5d0a956 100644 --- a/chrome/browser/policy/dummy_configuration_policy_provider.h +++ b/chrome/browser/policy/dummy_configuration_policy_provider.h @@ -19,7 +19,7 @@ class DummyConfigurationPolicyProvider : public ConfigurationPolicyProvider { const PolicyDefinitionList* policy_list); virtual ~DummyConfigurationPolicyProvider(); - virtual bool Provide(ConfigurationPolicyStoreInterface* store); + virtual bool Provide(PolicyMap* map); private: // ConfigurationPolicyProvider overrides: diff --git a/chrome/browser/policy/file_based_policy_provider_unittest.cc b/chrome/browser/policy/file_based_policy_provider_unittest.cc index d5d0811..aee36c7 100644 --- a/chrome/browser/policy/file_based_policy_provider_unittest.cc +++ b/chrome/browser/policy/file_based_policy_provider_unittest.cc @@ -1,13 +1,11 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// 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/asynchronous_policy_loader.h" #include "chrome/browser/policy/asynchronous_policy_test_base.h" #include "chrome/browser/policy/configuration_policy_pref_store.h" -#include "chrome/browser/policy/configuration_policy_store_interface.h" #include "chrome/browser/policy/file_based_policy_provider.h" -#include "chrome/browser/policy/mock_configuration_policy_store.h" #include "policy/policy_constants.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -46,8 +44,10 @@ TEST_F(AsynchronousPolicyTestBase, ProviderInit) { ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(), provider_delegate); loop_.RunAllPending(); - EXPECT_CALL(*store_, Apply(policy::kPolicySyncDisabled, _)).Times(1); - provider.Provide(store_.get()); + PolicyMap policy_map; + provider.Provide(&policy_map); + EXPECT_TRUE(policy_map.Get(policy::kPolicySyncDisabled)); + EXPECT_EQ(1U, policy_map.size()); } TEST_F(AsynchronousPolicyTestBase, ProviderRefresh) { @@ -75,8 +75,10 @@ TEST_F(AsynchronousPolicyTestBase, ProviderRefresh) { EXPECT_CALL(*provider_delegate, Load()).WillOnce(Return(policies)); file_based_provider.loader()->Reload(); loop_.RunAllPending(); - EXPECT_CALL(*store_, Apply(policy::kPolicySyncDisabled, _)).Times(1); - file_based_provider.Provide(store_.get()); + PolicyMap policy_map; + file_based_provider.Provide(&policy_map); + EXPECT_TRUE(policy_map.Get(policy::kPolicySyncDisabled)); + EXPECT_EQ(1U, policy_map.size()); } } // namespace policy diff --git a/chrome/browser/policy/mock_configuration_policy_provider.cc b/chrome/browser/policy/mock_configuration_policy_provider.cc index d09db10..b659273 100644 --- a/chrome/browser/policy/mock_configuration_policy_provider.cc +++ b/chrome/browser/policy/mock_configuration_policy_provider.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// 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. @@ -32,12 +32,8 @@ void MockConfigurationPolicyProvider::SetInitializationComplete( initialization_complete_ = initialization_complete; } -bool MockConfigurationPolicyProvider::Provide( - ConfigurationPolicyStoreInterface* store) { - for (PolicyMap::const_iterator current = policy_map_.begin(); - current != policy_map_.end(); ++current) { - store->Apply(current->first, current->second->DeepCopy()); - } +bool MockConfigurationPolicyProvider::Provide(PolicyMap* policies) { + policies->CopyFrom(policy_map_); return true; } diff --git a/chrome/browser/policy/mock_configuration_policy_provider.h b/chrome/browser/policy/mock_configuration_policy_provider.h index f71f8db..de266dc 100644 --- a/chrome/browser/policy/mock_configuration_policy_provider.h +++ b/chrome/browser/policy/mock_configuration_policy_provider.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// 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. @@ -28,7 +28,7 @@ class MockConfigurationPolicyProvider : public ConfigurationPolicyProvider { void SetInitializationComplete(bool initialization_complete); // ConfigurationPolicyProvider method overrides. - virtual bool Provide(ConfigurationPolicyStoreInterface* store); + virtual bool Provide(PolicyMap* policies); virtual bool IsInitializationComplete() const; private: diff --git a/chrome/browser/policy/mock_configuration_policy_store.cc b/chrome/browser/policy/mock_configuration_policy_store.cc deleted file mode 100644 index 1cbf438..0000000 --- a/chrome/browser/policy/mock_configuration_policy_store.cc +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2010 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/mock_configuration_policy_store.h" - -namespace policy { - -using ::testing::_; -using ::testing::Invoke; - -MockConfigurationPolicyStore::MockConfigurationPolicyStore() { - ON_CALL(*this, Apply(_, _)).WillByDefault( - Invoke(this, &MockConfigurationPolicyStore::ApplyToMap)); -} - -MockConfigurationPolicyStore::~MockConfigurationPolicyStore() {} - -const Value* MockConfigurationPolicyStore::Get( - ConfigurationPolicyType type) const { - return policy_map_.Get(type); -} - -void MockConfigurationPolicyStore::ApplyToMap( - ConfigurationPolicyType policy, Value* value) { - policy_map_.Set(policy, value); -} - -} // namespace policy diff --git a/chrome/browser/policy/mock_configuration_policy_store.h b/chrome/browser/policy/mock_configuration_policy_store.h deleted file mode 100644 index 658c82d..0000000 --- a/chrome/browser/policy/mock_configuration_policy_store.h +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright (c) 2010 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_MOCK_CONFIGURATION_POLICY_STORE_H_ -#define CHROME_BROWSER_POLICY_MOCK_CONFIGURATION_POLICY_STORE_H_ -#pragma once - -#include <map> -#include <utility> - -#include "base/stl_util.h" -#include "base/values.h" -#include "chrome/browser/policy/configuration_policy_store_interface.h" -#include "chrome/browser/policy/policy_map.h" -#include "testing/gmock/include/gmock/gmock.h" - -namespace policy { - -// Mock ConfigurationPolicyStore implementation that records values for policy -// settings as they get set. -class MockConfigurationPolicyStore : public ConfigurationPolicyStoreInterface { - public: - MockConfigurationPolicyStore(); - virtual ~MockConfigurationPolicyStore(); - - const PolicyMap& policy_map() const { return policy_map_; } - - // Get a value for the given policy. Returns NULL if that key doesn't exist. - const Value* Get(ConfigurationPolicyType type) const; - // ConfigurationPolicyStore implementation. - void ApplyToMap(ConfigurationPolicyType policy, Value* value); - - MOCK_METHOD2(Apply, void(ConfigurationPolicyType policy, Value* value)); - - private: - PolicyMap policy_map_; - - DISALLOW_COPY_AND_ASSIGN(MockConfigurationPolicyStore); -}; - -} // namespace policy - -#endif // CHROME_BROWSER_POLICY_MOCK_CONFIGURATION_POLICY_STORE_H_ diff --git a/chrome/browser/policy/policy_map.cc b/chrome/browser/policy/policy_map.cc index 894d62a..9d93172 100644 --- a/chrome/browser/policy/policy_map.cc +++ b/chrome/browser/policy/policy_map.cc @@ -39,6 +39,13 @@ void PolicyMap::Swap(PolicyMap* other) { map_.swap(other->map_); } +void PolicyMap::CopyFrom(const PolicyMap& other) { + Clear(); + for (const_iterator i = other.begin(); i != other.end(); ++i) { + Set(i->first, i->second->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 c9e3d03..8a71ccc 100644 --- a/chrome/browser/policy/policy_map.h +++ b/chrome/browser/policy/policy_map.h @@ -34,6 +34,7 @@ class PolicyMap { void Erase(ConfigurationPolicyType policy); void Swap(PolicyMap* other); + void CopyFrom(const PolicyMap& other); bool Equals(const PolicyMap& other) const; bool empty() const; diff --git a/chrome/browser/policy/user_policy_cache.cc b/chrome/browser/policy/user_policy_cache.cc index f4be837..c546600 100644 --- a/chrome/browser/policy/user_policy_cache.cc +++ b/chrome/browser/policy/user_policy_cache.cc @@ -114,23 +114,6 @@ bool UserPolicyCache::DecodePolicyData(const em::PolicyData& policy_data, using google::protobuf::RepeatedField; using google::protobuf::RepeatedPtrField; -class PolicyMapProxy : public ConfigurationPolicyStoreInterface { - public: - // Does not take ownership of |policy_map|, and callers need to make sure - // that |policy_map| outlives this PolicyMapProxy. - explicit PolicyMapProxy(PolicyMap* policy_map) - : policy_map_(policy_map) {} - virtual ~PolicyMapProxy() {} - virtual void Apply(ConfigurationPolicyType policy, Value* value) { - policy_map_->Set(policy, value); - } - - private: - PolicyMap* policy_map_; - - DISALLOW_COPY_AND_ASSIGN(PolicyMapProxy); -}; - void UserPolicyCache::MaybeDecodeOldstylePolicy( const std::string& policy_data, PolicyMap* mandatory, @@ -160,9 +143,8 @@ void UserPolicyCache::MaybeDecodeOldstylePolicy( } // Hack: Let one of the providers do the transformation from DictionaryValue // to PolicyMap, since they have the required code anyway. - PolicyMapProxy map_proxy(mandatory); g_browser_process->browser_policy_connector()->GetManagedCloudProvider()-> - ApplyPolicyValueTree(&result, &map_proxy); + ApplyPolicyValueTree(&result, mandatory); } Value* UserPolicyCache::DecodeIntegerValue( diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 1096d6e..f8a48be 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1380,8 +1380,6 @@ 'browser/policy/mock_configuration_policy_provider.h', 'browser/policy/mock_configuration_policy_reader.cc', 'browser/policy/mock_configuration_policy_reader.h', - 'browser/policy/mock_configuration_policy_store.cc', - 'browser/policy/mock_configuration_policy_store.h', 'browser/policy/mock_device_management_backend.cc', 'browser/policy/mock_device_management_backend.h', 'browser/policy/policy_map_unittest.cc', |