Handle policy refresh internally in ConfigurationPolicyPrefStore.

This removes the final bits of thread-switching madness from PrefValueStore and also makes sure only the PrefStores and PrefService instances that are actually affected by a policy change get reconfigured.

BUG=67715
TEST=unit tests in configuration_policy_provider_unittest.cc

Review URL: http://codereview.chromium.org/6074003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70050 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/policy/mock_configuration_policy_provider.cc b/chrome/browser/policy/mock_configuration_policy_provider.cc
index 9c2db8d..a2566b0 100644
--- a/chrome/browser/policy/mock_configuration_policy_provider.cc
+++ b/chrome/browser/policy/mock_configuration_policy_provider.cc
@@ -11,7 +11,8 @@
 
 MockConfigurationPolicyProvider::MockConfigurationPolicyProvider()
     : ConfigurationPolicyProvider(
-        ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList()) {
+          ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList()),
+      initialization_complete_(false) {
 }
 
 MockConfigurationPolicyProvider::~MockConfigurationPolicyProvider() {
@@ -24,6 +25,20 @@
   delete value;
 }
 
+void MockConfigurationPolicyProvider::RemovePolicy(
+    ConfigurationPolicyType policy) {
+  const PolicyMap::iterator entry = policy_map_.find(policy);
+  if (entry != policy_map_.end()) {
+    delete entry->second;
+    policy_map_.erase(entry);
+  }
+}
+
+void MockConfigurationPolicyProvider::SetInitializationComplete(
+    bool initialization_complete) {
+  initialization_complete_ = initialization_complete;
+}
+
 bool MockConfigurationPolicyProvider::Provide(
     ConfigurationPolicyStoreInterface* store) {
   for (PolicyMap::const_iterator current = policy_map_.begin();
@@ -33,4 +48,8 @@
   return true;
 }
 
+bool MockConfigurationPolicyProvider::IsInitializationComplete() const {
+  return initialization_complete_;
+}
+
 }