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

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

Issue 10834383: Chrome OS "open with" picker allowing Web Intents (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: sync to head, comment Created 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "chrome/browser/content_settings/cookie_settings.h" 10 #include "chrome/browser/content_settings/cookie_settings.h"
11 #include "chrome/common/content_settings.h" 11 #include "chrome/common/content_settings.h"
12 #include "chrome/common/content_settings_types.h" 12 #include "chrome/common/content_settings_types.h"
13 #include "chrome/common/extensions/extension.h" 13 #include "chrome/common/extensions/extension.h"
14 #include "chrome/common/url_constants.h" 14 #include "chrome/common/url_constants.h"
15 #include "content/public/browser/browser_thread.h" 15 #include "content/public/browser/browser_thread.h"
16 #include "webkit/glue/web_intent_service_data.h"
16 17
17 using content::BrowserThread; 18 using content::BrowserThread;
18 using extensions::APIPermission; 19 using extensions::APIPermission;
19 20
20 ExtensionSpecialStoragePolicy::ExtensionSpecialStoragePolicy( 21 ExtensionSpecialStoragePolicy::ExtensionSpecialStoragePolicy(
21 CookieSettings* cookie_settings) 22 CookieSettings* cookie_settings)
22 : cookie_settings_(cookie_settings) {} 23 : cookie_settings_(cookie_settings) {}
23 24
24 ExtensionSpecialStoragePolicy::~ExtensionSpecialStoragePolicy() {} 25 ExtensionSpecialStoragePolicy::~ExtensionSpecialStoragePolicy() {}
25 26
(...skipping 30 matching lines...) Expand all
56 for (size_t i = 0; i < entries.size(); ++i) { 57 for (size_t i = 0; i < entries.size(); ++i) {
57 if (entries[i].setting == CONTENT_SETTING_SESSION_ONLY) 58 if (entries[i].setting == CONTENT_SETTING_SESSION_ONLY)
58 return true; 59 return true;
59 } 60 }
60 return false; 61 return false;
61 } 62 }
62 63
63 bool ExtensionSpecialStoragePolicy::IsFileHandler( 64 bool ExtensionSpecialStoragePolicy::IsFileHandler(
64 const std::string& extension_id) { 65 const std::string& extension_id) {
65 base::AutoLock locker(lock_); 66 base::AutoLock locker(lock_);
66 return file_handler_extensions_.ContainsExtension(extension_id); 67 return web_intent_extensions_.ContainsExtension(extension_id) ||
68 file_handler_extensions_.ContainsExtension(extension_id);
67 } 69 }
68 70
69 bool ExtensionSpecialStoragePolicy::NeedsProtection( 71 bool ExtensionSpecialStoragePolicy::NeedsProtection(
70 const extensions::Extension* extension) { 72 const extensions::Extension* extension) {
71 return extension->is_hosted_app() && !extension->from_bookmark(); 73 return extension->is_hosted_app() && !extension->from_bookmark();
72 } 74 }
73 75
74 const ExtensionSet* ExtensionSpecialStoragePolicy::ExtensionsProtectingOrigin( 76 const ExtensionSet* ExtensionSpecialStoragePolicy::ExtensionsProtectingOrigin(
75 const GURL& origin) { 77 const GURL& origin) {
76 base::AutoLock locker(lock_); 78 base::AutoLock locker(lock_);
77 return protected_apps_.ExtensionsContaining(origin); 79 return protected_apps_.ExtensionsContaining(origin);
78 } 80 }
79 81
80 void ExtensionSpecialStoragePolicy::GrantRightsForExtension( 82 void ExtensionSpecialStoragePolicy::GrantRightsForExtension(
81 const extensions::Extension* extension) { 83 const extensions::Extension* extension) {
82 DCHECK(extension); 84 DCHECK(extension);
83 if (!NeedsProtection(extension) && 85 if (!NeedsProtection(extension) &&
84 !extension->HasAPIPermission( 86 !extension->HasAPIPermission(
85 APIPermission::kUnlimitedStorage) && 87 APIPermission::kUnlimitedStorage) &&
86 !extension->HasAPIPermission( 88 !extension->HasAPIPermission(
87 APIPermission::kFileBrowserHandler)) { 89 APIPermission::kFileBrowserHandler) &&
90 extension->intents_services().empty()) {
88 return; 91 return;
89 } 92 }
90 { 93 {
91 base::AutoLock locker(lock_); 94 base::AutoLock locker(lock_);
92 if (NeedsProtection(extension)) 95 if (NeedsProtection(extension))
93 protected_apps_.Add(extension); 96 protected_apps_.Add(extension);
94 // FIXME: Does GrantRightsForExtension imply |extension| is installed? 97 // FIXME: Does GrantRightsForExtension imply |extension| is installed?
95 if (extension->is_app()) 98 if (extension->is_app())
96 installed_apps_.Add(extension); 99 installed_apps_.Add(extension);
97 if (extension->HasAPIPermission(APIPermission::kUnlimitedStorage)) 100 if (extension->HasAPIPermission(APIPermission::kUnlimitedStorage))
98 unlimited_extensions_.Add(extension); 101 unlimited_extensions_.Add(extension);
99 if (extension->HasAPIPermission( 102 if (extension->HasAPIPermission(
100 APIPermission::kFileBrowserHandler)) { 103 APIPermission::kFileBrowserHandler))
101 file_handler_extensions_.Add(extension); 104 file_handler_extensions_.Add(extension);
102 } 105 if (!extension->intents_services().empty())
106 web_intent_extensions_.Add(extension);
103 } 107 }
104 NotifyChanged(); 108 NotifyChanged();
105 } 109 }
106 110
107 void ExtensionSpecialStoragePolicy::RevokeRightsForExtension( 111 void ExtensionSpecialStoragePolicy::RevokeRightsForExtension(
108 const extensions::Extension* extension) { 112 const extensions::Extension* extension) {
109 DCHECK(extension); 113 DCHECK(extension);
110 if (!NeedsProtection(extension) && 114 if (!NeedsProtection(extension) &&
111 !extension->HasAPIPermission( 115 !extension->HasAPIPermission(
112 APIPermission::kUnlimitedStorage) && 116 APIPermission::kUnlimitedStorage) &&
113 !extension->HasAPIPermission( 117 !extension->HasAPIPermission(
114 APIPermission::kFileBrowserHandler)) { 118 APIPermission::kFileBrowserHandler) &&
119 extension->intents_services().empty()) {
115 return; 120 return;
116 } 121 }
117 { 122 {
118 base::AutoLock locker(lock_); 123 base::AutoLock locker(lock_);
119 if (NeedsProtection(extension)) 124 if (NeedsProtection(extension))
120 protected_apps_.Remove(extension); 125 protected_apps_.Remove(extension);
121 if (extension->is_app()) 126 if (extension->is_app())
122 installed_apps_.Remove(extension); 127 installed_apps_.Remove(extension);
123 if (extension->HasAPIPermission(APIPermission::kUnlimitedStorage)) 128 if (extension->HasAPIPermission(APIPermission::kUnlimitedStorage))
124 unlimited_extensions_.Remove(extension); 129 unlimited_extensions_.Remove(extension);
125 if (extension->HasAPIPermission(APIPermission::kFileBrowserHandler)) 130 if (extension->HasAPIPermission(APIPermission::kFileBrowserHandler))
126 file_handler_extensions_.Remove(extension); 131 file_handler_extensions_.Remove(extension);
132 if (!extension->intents_services().empty())
133 web_intent_extensions_.Add(extension);
127 } 134 }
128 NotifyChanged(); 135 NotifyChanged();
129 } 136 }
130 137
131 void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() { 138 void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() {
132 { 139 {
133 base::AutoLock locker(lock_); 140 base::AutoLock locker(lock_);
134 protected_apps_.Clear(); 141 protected_apps_.Clear();
135 installed_apps_.Clear(); 142 installed_apps_.Clear();
136 unlimited_extensions_.Clear(); 143 unlimited_extensions_.Clear();
137 file_handler_extensions_.Clear(); 144 file_handler_extensions_.Clear();
145 web_intent_extensions_.Clear();
138 } 146 }
139 NotifyChanged(); 147 NotifyChanged();
140 } 148 }
141 149
142 void ExtensionSpecialStoragePolicy::NotifyChanged() { 150 void ExtensionSpecialStoragePolicy::NotifyChanged() {
143 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 151 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
144 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 152 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
145 base::Bind(&ExtensionSpecialStoragePolicy::NotifyChanged, this)); 153 base::Bind(&ExtensionSpecialStoragePolicy::NotifyChanged, this));
146 return; 154 return;
147 } 155 }
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 207
200 void ExtensionSpecialStoragePolicy::SpecialCollection::Clear() { 208 void ExtensionSpecialStoragePolicy::SpecialCollection::Clear() {
201 ClearCache(); 209 ClearCache();
202 extensions_.Clear(); 210 extensions_.Clear();
203 } 211 }
204 212
205 void ExtensionSpecialStoragePolicy::SpecialCollection::ClearCache() { 213 void ExtensionSpecialStoragePolicy::SpecialCollection::ClearCache() {
206 STLDeleteValues(&cached_results_); 214 STLDeleteValues(&cached_results_);
207 cached_results_.clear(); 215 cached_results_.clear();
208 } 216 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698