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

Side by Side Diff: chrome/browser/extensions/extension_special_storage_policy.cc

Issue 7618025: Send notifications on the IO thread when changes are made to the special storage policy. Listen f... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_special_storage_policy.h" 5 #include "chrome/browser/extensions/extension_special_storage_policy.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/common/extensions/extension.h" 8 #include "chrome/common/extensions/extension.h"
9 #include "chrome/common/url_constants.h" 9 #include "chrome/common/url_constants.h"
10 #include "content/browser/browser_thread.h"
10 11
11 ExtensionSpecialStoragePolicy::ExtensionSpecialStoragePolicy() {} 12 ExtensionSpecialStoragePolicy::ExtensionSpecialStoragePolicy() {}
12 13
13 ExtensionSpecialStoragePolicy::~ExtensionSpecialStoragePolicy() {} 14 ExtensionSpecialStoragePolicy::~ExtensionSpecialStoragePolicy() {}
14 15
15 bool ExtensionSpecialStoragePolicy::IsStorageProtected(const GURL& origin) { 16 bool ExtensionSpecialStoragePolicy::IsStorageProtected(const GURL& origin) {
16 if (origin.SchemeIs(chrome::kExtensionScheme)) 17 if (origin.SchemeIs(chrome::kExtensionScheme))
17 return true; 18 return true;
18 base::AutoLock locker(lock_); 19 base::AutoLock locker(lock_);
19 return protected_apps_.Contains(origin); 20 return protected_apps_.Contains(origin);
(...skipping 13 matching lines...) Expand all
33 void ExtensionSpecialStoragePolicy::GrantRightsForExtension( 34 void ExtensionSpecialStoragePolicy::GrantRightsForExtension(
34 const Extension* extension) { 35 const Extension* extension) {
35 DCHECK(extension); 36 DCHECK(extension);
36 if (!extension->is_hosted_app() && 37 if (!extension->is_hosted_app() &&
37 !extension->HasAPIPermission( 38 !extension->HasAPIPermission(
38 ExtensionAPIPermission::kUnlimitedStorage) && 39 ExtensionAPIPermission::kUnlimitedStorage) &&
39 !extension->HasAPIPermission( 40 !extension->HasAPIPermission(
40 ExtensionAPIPermission::kFileBrowserHandler)) { 41 ExtensionAPIPermission::kFileBrowserHandler)) {
41 return; 42 return;
42 } 43 }
43 base::AutoLock locker(lock_); 44 {
44 if (extension->is_hosted_app()) 45 base::AutoLock locker(lock_);
45 protected_apps_.Add(extension); 46 if (extension->is_hosted_app())
46 if (extension->HasAPIPermission(ExtensionAPIPermission::kUnlimitedStorage)) 47 protected_apps_.Add(extension);
47 unlimited_extensions_.Add(extension); 48 if (extension->HasAPIPermission(ExtensionAPIPermission::kUnlimitedStorage))
48 if (extension->HasAPIPermission(ExtensionAPIPermission::kFileBrowserHandler)) 49 unlimited_extensions_.Add(extension);
49 file_handler_extensions_.Add(extension); 50 if (extension->HasAPIPermission(
51 ExtensionAPIPermission::kFileBrowserHandler)) {
52 file_handler_extensions_.Add(extension);
53 }
54 }
55 NotifyChanged();
50 } 56 }
51 57
52 void ExtensionSpecialStoragePolicy::RevokeRightsForExtension( 58 void ExtensionSpecialStoragePolicy::RevokeRightsForExtension(
53 const Extension* extension) { 59 const Extension* extension) {
54 DCHECK(extension); 60 DCHECK(extension);
55 if (!extension->is_hosted_app() && 61 if (!extension->is_hosted_app() &&
56 !extension->HasAPIPermission( 62 !extension->HasAPIPermission(
57 ExtensionAPIPermission::kUnlimitedStorage) && 63 ExtensionAPIPermission::kUnlimitedStorage) &&
58 !extension->HasAPIPermission( 64 !extension->HasAPIPermission(
59 ExtensionAPIPermission::kFileBrowserHandler)) { 65 ExtensionAPIPermission::kFileBrowserHandler)) {
60 return; 66 return;
61 } 67 }
62 base::AutoLock locker(lock_); 68 {
63 if (extension->is_hosted_app()) 69 base::AutoLock locker(lock_);
64 protected_apps_.Remove(extension); 70 if (extension->is_hosted_app())
65 if (extension->HasAPIPermission(ExtensionAPIPermission::kUnlimitedStorage)) 71 protected_apps_.Remove(extension);
66 unlimited_extensions_.Remove(extension); 72 if (extension->HasAPIPermission(ExtensionAPIPermission::kUnlimitedStorage))
67 if (extension->HasAPIPermission(ExtensionAPIPermission::kFileBrowserHandler)) 73 unlimited_extensions_.Remove(extension);
68 file_handler_extensions_.Remove(extension); 74 if (extension->HasAPIPermission(
75 ExtensionAPIPermission::kFileBrowserHandler)) {
76 file_handler_extensions_.Remove(extension);
77 }
78 }
79 NotifyChanged();
69 } 80 }
70 81
71 void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() { 82 void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() {
72 base::AutoLock locker(lock_); 83 {
73 protected_apps_.Clear(); 84 base::AutoLock locker(lock_);
74 unlimited_extensions_.Clear(); 85 protected_apps_.Clear();
75 file_handler_extensions_.Clear(); 86 unlimited_extensions_.Clear();
87 file_handler_extensions_.Clear();
88 }
89 NotifyChanged();
90 }
91
92 void ExtensionSpecialStoragePolicy::NotifyChanged() {
93 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
94 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
95 NewRunnableMethod(this,
96 &ExtensionSpecialStoragePolicy::NotifyChanged));
97 return;
98 }
99 SpecialStoragePolicy::NotifyObservers();
76 } 100 }
77 101
78 //----------------------------------------------------------------------------- 102 //-----------------------------------------------------------------------------
79 // SpecialCollection helper class 103 // SpecialCollection helper class
80 //----------------------------------------------------------------------------- 104 //-----------------------------------------------------------------------------
81 105
82 ExtensionSpecialStoragePolicy::SpecialCollection::SpecialCollection() {} 106 ExtensionSpecialStoragePolicy::SpecialCollection::SpecialCollection() {}
83 107
84 ExtensionSpecialStoragePolicy::SpecialCollection::~SpecialCollection() {} 108 ExtensionSpecialStoragePolicy::SpecialCollection::~SpecialCollection() {}
85 109
(...skipping 28 matching lines...) Expand all
114 void ExtensionSpecialStoragePolicy::SpecialCollection::Remove( 138 void ExtensionSpecialStoragePolicy::SpecialCollection::Remove(
115 const Extension* extension) { 139 const Extension* extension) {
116 cached_results_.clear(); 140 cached_results_.clear();
117 extensions_.erase(extension->id()); 141 extensions_.erase(extension->id());
118 } 142 }
119 143
120 void ExtensionSpecialStoragePolicy::SpecialCollection::Clear() { 144 void ExtensionSpecialStoragePolicy::SpecialCollection::Clear() {
121 cached_results_.clear(); 145 cached_results_.clear();
122 extensions_.clear(); 146 extensions_.clear();
123 } 147 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_special_storage_policy.h ('k') | webkit/quota/mock_special_storage_policy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698