| 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
|
| //-----------------------------------------------------------------------------
|
|
|