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

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: addressed comments 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..770c330ce8860f7bcd5fffae6f2a8a96ca074f53 100644
--- a/chrome/browser/extensions/api/storage/managed_value_store_cache.cc
+++ b/chrome/browser/extensions/api/storage/managed_value_store_cache.cc
@@ -38,6 +38,7 @@
#include "extensions/common/extension.h"
#include "extensions/common/manifest.h"
#include "extensions/common/manifest_constants.h"
+#include "extensions/common/one_shot_event.h"
#include "extensions/common/permissions/api_permission.h"
using content::BrowserThread;
@@ -106,6 +107,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())
+ return;
+
scoped_ptr<ExtensionSet> added;
const Extension* removed = NULL;
@@ -269,8 +277,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 +335,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 policies configured 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 +365,9 @@ PolicyValueStore* ManagedValueStoreCache::GetStoreFor(
return store;
}
+bool ManagedValueStoreCache::HasStore(const std::string& extension_id) const {
+ // 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