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

Unified Diff: chrome/browser/extensions/api/storage/managed_value_store_cache.cc

Issue 78953002: Fixes and improvements to cloud policy for extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 1 month 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/api/storage/managed_value_store_cache.cc
diff --git a/chrome/browser/extensions/api/storage/managed_value_store_cache.cc b/chrome/browser/extensions/api/storage/managed_value_store_cache.cc
index 267ee70b05d050a76dbb7fb3508d71c07d9959f3..98e7b955bff76877162167fb96c28621e17677c4 100644
--- a/chrome/browser/extensions/api/storage/managed_value_store_cache.cc
+++ b/chrome/browser/extensions/api/storage/managed_value_store_cache.cc
@@ -106,6 +106,13 @@ void ManagedValueStoreCache::ExtensionTracker::Observe(
int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
+ // Some extensions are installed on the first run before the ExtensionService
+ // becomes ready. Wait until all of them are ready before registering the
+ // schemas of managed extensions, so that the policy loaders are reloaded at
+ // most once.
+ if (!ExtensionSystem::Get(profile_)->ready().is_signaled())
bartfab (slow) 2013/11/25 14:24:02 Nit: #include "extensions/common/one_shot_event.h"
Joao da Silva 2013/11/25 15:40:38 Done.
+ return;
+
scoped_ptr<ExtensionSet> added;
const Extension* removed = NULL;
@@ -269,8 +276,7 @@ void ManagedValueStoreCache::DeleteStorageSoon(
// It's possible that the store exists, but hasn't been loaded yet
// (because the extension is unloaded, for example). Open the database to
// clear it if it exists.
- // TODO(joaodasilva): move this check to a ValueStore method.
- if (!base::DirectoryExists(base_path_.AppendASCII(extension_id)))
+ if (!HasStore(extension_id))
return;
GetStoreFor(extension_id)->DeleteStorage();
store_map_.erase(extension_id);
@@ -328,6 +334,14 @@ void ManagedValueStoreCache::UpdatePolicyOnFILE(
const std::string& extension_id,
scoped_ptr<policy::PolicyMap> current_policy) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+
+ if (!HasStore(extension_id) && current_policy->empty()) {
+ // Don't create the store now if there are no concrete policies configured
bartfab (slow) 2013/11/25 14:24:02 Nit: What do you mean by "concrete policies"? Do y
Joao da Silva 2013/11/25 15:40:38 Yes; removed the "concrete" since it was just conf
+ // for this extension. If the extension uses the storage.managed API then
+ // the store will be created at RunWithValueStoreForExtension().
+ return;
+ }
+
GetStoreFor(extension_id)->SetCurrentPolicy(*current_policy);
}
@@ -350,4 +364,9 @@ PolicyValueStore* ManagedValueStoreCache::GetStoreFor(
return store;
}
+bool ManagedValueStoreCache::HasStore(const std::string& extension_id) {
+ // TODO(joaodasilva): move this check to a ValueStore method.
+ return base::DirectoryExists(base_path_.AppendASCII(extension_id));
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698