Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(604)

Unified Diff: chrome/browser/extensions/settings/managed_value_store_cache.cc

Issue 10807086: Trigger chrome.storage.onChanged events for policy updates on the 'managed' namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased, addressed comments, fixed ManagedStorageDisabled test Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/settings/managed_value_store_cache.cc
diff --git a/chrome/browser/extensions/settings/managed_value_store_cache.cc b/chrome/browser/extensions/settings/managed_value_store_cache.cc
index 9327e859ffc5bac36c6c8bd0201faf6ffa780c6a..06f786857e18c545abdb8bcb4997a2bfc75f0dd9 100644
--- a/chrome/browser/extensions/settings/managed_value_store_cache.cc
+++ b/chrome/browser/extensions/settings/managed_value_store_cache.cc
@@ -4,11 +4,13 @@
#include "chrome/browser/extensions/settings/managed_value_store_cache.h"
+#include <set>
+
#include "base/logging.h"
#include "base/message_loop_proxy.h"
#include "base/sequenced_task_runner.h"
-#include "chrome/browser/policy/policy_service.h"
#include "chrome/browser/value_store/policy_value_store.h"
+#include "chrome/browser/value_store/value_store_change.h"
#include "chrome/common/extensions/extension.h"
#include "content/public/browser/browser_thread.h"
@@ -17,13 +19,22 @@ using content::BrowserThread;
namespace extensions {
ManagedValueStoreCache::ManagedValueStoreCache(
- policy::PolicyService* policy_service)
- : policy_service_(policy_service) {}
+ policy::PolicyService* policy_service,
+ scoped_refptr<SettingsObserverList> observers)
+ : policy_service_(policy_service),
+ observers_(observers) {
+ policy_service_->AddObserver(policy::POLICY_DOMAIN_EXTENSIONS, this);
+}
ManagedValueStoreCache::~ManagedValueStoreCache() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
}
+void ManagedValueStoreCache::ShutdownOnUI() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ policy_service_->RemoveObserver(policy::POLICY_DOMAIN_EXTENSIONS, this);
+}
+
scoped_refptr<base::MessageLoopProxy>
ManagedValueStoreCache::GetMessageLoop() const {
return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
@@ -45,4 +56,37 @@ void ManagedValueStoreCache::DeleteStorageSoon(
// There's no real storage backing this cache, so this is a nop.
}
+void ManagedValueStoreCache::OnPolicyUpdated(policy::PolicyDomain domain,
+ const std::string& component_id,
+ const policy::PolicyMap& previous,
+ const policy::PolicyMap& current) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ ValueStoreChangeList changes;
+ std::set<std::string> changed_keys;
+ previous.GetDifferingKeys(current, &changed_keys);
+ for (std::set<std::string>::iterator it = changed_keys.begin();
+ it != changed_keys.end(); ++it) {
+ // A policy might've changed only its scope or level, while the value
+ // stayed the same. Events should be triggered only for mandatory values
+ // that have changed.
+ const policy::PolicyMap::Entry* old_entry = previous.Get(*it);
+ const policy::PolicyMap::Entry* new_entry = current.Get(*it);
+ scoped_ptr<base::Value> old_value;
+ scoped_ptr<base::Value> new_value;
+ if (old_entry && old_entry->level == policy::POLICY_LEVEL_MANDATORY)
+ old_value.reset(old_entry->value->DeepCopy());
+ if (new_entry && new_entry->level == policy::POLICY_LEVEL_MANDATORY)
+ new_value.reset(new_entry->value->DeepCopy());
+ if (!base::Value::Equals(old_value.get(), new_value.get())) {
+ changes.push_back(
+ ValueStoreChange(*it, old_value.release(), new_value.release()));
+ }
+ }
+ observers_->Notify(
+ &SettingsObserver::OnSettingsChanged,
+ component_id,
+ settings_namespace::MANAGED,
+ ValueStoreChange::ToJson(changes));
+}
+
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/settings/managed_value_store_cache.h ('k') | chrome/browser/extensions/settings/settings_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698