Index: chrome/browser/extensions/extension_special_storage_policy.cc |
=================================================================== |
--- chrome/browser/extensions/extension_special_storage_policy.cc (revision 96595) |
+++ chrome/browser/extensions/extension_special_storage_policy.cc (working copy) |
@@ -7,6 +7,7 @@ |
#include "base/logging.h" |
#include "chrome/common/extensions/extension.h" |
#include "chrome/common/url_constants.h" |
+#include "content/browser/browser_thread.h" |
ExtensionSpecialStoragePolicy::ExtensionSpecialStoragePolicy() {} |
@@ -40,13 +41,18 @@ |
ExtensionAPIPermission::kFileBrowserHandler)) { |
return; |
} |
- base::AutoLock locker(lock_); |
- if (extension->is_hosted_app()) |
- protected_apps_.Add(extension); |
- if (extension->HasAPIPermission(ExtensionAPIPermission::kUnlimitedStorage)) |
- unlimited_extensions_.Add(extension); |
- if (extension->HasAPIPermission(ExtensionAPIPermission::kFileBrowserHandler)) |
- file_handler_extensions_.Add(extension); |
+ { |
+ base::AutoLock locker(lock_); |
+ if (extension->is_hosted_app()) |
+ protected_apps_.Add(extension); |
+ if (extension->HasAPIPermission(ExtensionAPIPermission::kUnlimitedStorage)) |
+ unlimited_extensions_.Add(extension); |
+ if (extension->HasAPIPermission( |
+ ExtensionAPIPermission::kFileBrowserHandler)) { |
+ file_handler_extensions_.Add(extension); |
+ } |
+ } |
+ NotifyChanged(); |
} |
void ExtensionSpecialStoragePolicy::RevokeRightsForExtension( |
@@ -59,22 +65,40 @@ |
ExtensionAPIPermission::kFileBrowserHandler)) { |
return; |
} |
- base::AutoLock locker(lock_); |
- if (extension->is_hosted_app()) |
- protected_apps_.Remove(extension); |
- if (extension->HasAPIPermission(ExtensionAPIPermission::kUnlimitedStorage)) |
- unlimited_extensions_.Remove(extension); |
- if (extension->HasAPIPermission(ExtensionAPIPermission::kFileBrowserHandler)) |
- file_handler_extensions_.Remove(extension); |
+ { |
+ base::AutoLock locker(lock_); |
+ if (extension->is_hosted_app()) |
+ protected_apps_.Remove(extension); |
+ if (extension->HasAPIPermission(ExtensionAPIPermission::kUnlimitedStorage)) |
+ unlimited_extensions_.Remove(extension); |
+ if (extension->HasAPIPermission( |
+ ExtensionAPIPermission::kFileBrowserHandler)) { |
+ file_handler_extensions_.Remove(extension); |
+ } |
+ } |
+ NotifyChanged(); |
} |
void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() { |
- base::AutoLock locker(lock_); |
- protected_apps_.Clear(); |
- unlimited_extensions_.Clear(); |
- file_handler_extensions_.Clear(); |
+ { |
+ base::AutoLock locker(lock_); |
+ protected_apps_.Clear(); |
+ unlimited_extensions_.Clear(); |
+ file_handler_extensions_.Clear(); |
+ } |
+ NotifyChanged(); |
} |
+void ExtensionSpecialStoragePolicy::NotifyChanged() { |
+ if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
+ NewRunnableMethod(this, |
+ &ExtensionSpecialStoragePolicy::NotifyChanged)); |
+ return; |
+ } |
+ SpecialStoragePolicy::NotifyObservers(); |
+} |
+ |
//----------------------------------------------------------------------------- |
// SpecialCollection helper class |
//----------------------------------------------------------------------------- |