OLD | NEW |
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 <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 content_capabilities_unlimited_extensions_.GrantsCapabilitiesTo( | 107 content_capabilities_unlimited_extensions_.GrantsCapabilitiesTo( |
108 origin); | 108 origin); |
109 } | 109 } |
110 | 110 |
111 bool ExtensionSpecialStoragePolicy::IsStorageSessionOnly(const GURL& origin) { | 111 bool ExtensionSpecialStoragePolicy::IsStorageSessionOnly(const GURL& origin) { |
112 if (cookie_settings_.get() == NULL) | 112 if (cookie_settings_.get() == NULL) |
113 return false; | 113 return false; |
114 return cookie_settings_->IsCookieSessionOnly(origin); | 114 return cookie_settings_->IsCookieSessionOnly(origin); |
115 } | 115 } |
116 | 116 |
| 117 bool ExtensionSpecialStoragePolicy::CanQueryDiskSize(const GURL& origin) { |
| 118 base::AutoLock locker(lock_); |
| 119 return installed_apps_.Contains(origin); |
| 120 } |
| 121 |
117 bool ExtensionSpecialStoragePolicy::HasSessionOnlyOrigins() { | 122 bool ExtensionSpecialStoragePolicy::HasSessionOnlyOrigins() { |
118 if (cookie_settings_.get() == NULL) | 123 if (cookie_settings_.get() == NULL) |
119 return false; | 124 return false; |
120 if (cookie_settings_->GetDefaultCookieSetting(NULL) == | 125 if (cookie_settings_->GetDefaultCookieSetting(NULL) == |
121 CONTENT_SETTING_SESSION_ONLY) | 126 CONTENT_SETTING_SESSION_ONLY) |
122 return true; | 127 return true; |
123 ContentSettingsForOneType entries; | 128 ContentSettingsForOneType entries; |
124 cookie_settings_->GetCookieSettings(&entries); | 129 cookie_settings_->GetCookieSettings(&entries); |
125 for (size_t i = 0; i < entries.size(); ++i) { | 130 for (size_t i = 0; i < entries.size(); ++i) { |
126 if (entries[i].setting == CONTENT_SETTING_SESSION_ONLY) | 131 if (entries[i].setting == CONTENT_SETTING_SESSION_ONLY) |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 | 170 |
166 if (NeedsProtection(extension) || | 171 if (NeedsProtection(extension) || |
167 extension->permissions_data()->HasAPIPermission( | 172 extension->permissions_data()->HasAPIPermission( |
168 APIPermission::kUnlimitedStorage) || | 173 APIPermission::kUnlimitedStorage) || |
169 extension->permissions_data()->HasAPIPermission( | 174 extension->permissions_data()->HasAPIPermission( |
170 APIPermission::kFileBrowserHandler) || | 175 APIPermission::kFileBrowserHandler) || |
171 extensions::AppIsolationInfo::HasIsolatedStorage(extension) || | 176 extensions::AppIsolationInfo::HasIsolatedStorage(extension) || |
172 extension->is_app()) { | 177 extension->is_app()) { |
173 if (NeedsProtection(extension) && protected_apps_.Add(extension)) | 178 if (NeedsProtection(extension) && protected_apps_.Add(extension)) |
174 change_flags |= SpecialStoragePolicy::STORAGE_PROTECTED; | 179 change_flags |= SpecialStoragePolicy::STORAGE_PROTECTED; |
| 180 // FIXME: Does GrantRightsForExtension imply |extension| is installed? |
| 181 if (extension->is_app()) |
| 182 installed_apps_.Add(extension); |
175 | 183 |
176 if (extension->permissions_data()->HasAPIPermission( | 184 if (extension->permissions_data()->HasAPIPermission( |
177 APIPermission::kUnlimitedStorage) && | 185 APIPermission::kUnlimitedStorage) && |
178 unlimited_extensions_.Add(extension)) { | 186 unlimited_extensions_.Add(extension)) { |
179 if (extension->is_hosted_app()) | 187 if (extension->is_hosted_app()) |
180 LogHostedAppUnlimitedStorageUsage(extension, browser_context); | 188 LogHostedAppUnlimitedStorageUsage(extension, browser_context); |
181 change_flags |= SpecialStoragePolicy::STORAGE_UNLIMITED; | 189 change_flags |= SpecialStoragePolicy::STORAGE_UNLIMITED; |
182 } | 190 } |
183 | 191 |
184 if (extension->permissions_data()->HasAPIPermission( | 192 if (extension->permissions_data()->HasAPIPermission( |
(...skipping 25 matching lines...) Expand all Loading... |
210 if (NeedsProtection(extension) || | 218 if (NeedsProtection(extension) || |
211 extension->permissions_data()->HasAPIPermission( | 219 extension->permissions_data()->HasAPIPermission( |
212 APIPermission::kUnlimitedStorage) || | 220 APIPermission::kUnlimitedStorage) || |
213 extension->permissions_data()->HasAPIPermission( | 221 extension->permissions_data()->HasAPIPermission( |
214 APIPermission::kFileBrowserHandler) || | 222 APIPermission::kFileBrowserHandler) || |
215 extensions::AppIsolationInfo::HasIsolatedStorage(extension) || | 223 extensions::AppIsolationInfo::HasIsolatedStorage(extension) || |
216 extension->is_app()) { | 224 extension->is_app()) { |
217 if (NeedsProtection(extension) && protected_apps_.Remove(extension)) | 225 if (NeedsProtection(extension) && protected_apps_.Remove(extension)) |
218 change_flags |= SpecialStoragePolicy::STORAGE_PROTECTED; | 226 change_flags |= SpecialStoragePolicy::STORAGE_PROTECTED; |
219 | 227 |
| 228 if (extension->is_app()) |
| 229 installed_apps_.Remove(extension); |
| 230 |
220 if (extension->permissions_data()->HasAPIPermission( | 231 if (extension->permissions_data()->HasAPIPermission( |
221 APIPermission::kUnlimitedStorage) && | 232 APIPermission::kUnlimitedStorage) && |
222 unlimited_extensions_.Remove(extension)) | 233 unlimited_extensions_.Remove(extension)) |
223 change_flags |= SpecialStoragePolicy::STORAGE_UNLIMITED; | 234 change_flags |= SpecialStoragePolicy::STORAGE_UNLIMITED; |
224 | 235 |
225 if (extension->permissions_data()->HasAPIPermission( | 236 if (extension->permissions_data()->HasAPIPermission( |
226 APIPermission::kFileBrowserHandler)) | 237 APIPermission::kFileBrowserHandler)) |
227 file_handler_extensions_.Remove(extension); | 238 file_handler_extensions_.Remove(extension); |
228 | 239 |
229 if (extensions::AppIsolationInfo::HasIsolatedStorage(extension)) | 240 if (extensions::AppIsolationInfo::HasIsolatedStorage(extension)) |
230 isolated_extensions_.Remove(extension); | 241 isolated_extensions_.Remove(extension); |
231 } | 242 } |
232 | 243 |
233 if (change_flags) { | 244 if (change_flags) { |
234 NotifyRevoked(Extension::GetBaseURLFromExtensionId(extension->id()), | 245 NotifyRevoked(Extension::GetBaseURLFromExtensionId(extension->id()), |
235 change_flags); | 246 change_flags); |
236 } | 247 } |
237 } | 248 } |
238 | 249 |
239 void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() { | 250 void ExtensionSpecialStoragePolicy::RevokeRightsForAllExtensions() { |
240 { | 251 { |
241 base::AutoLock locker(lock_); | 252 base::AutoLock locker(lock_); |
242 protected_apps_.Clear(); | 253 protected_apps_.Clear(); |
| 254 installed_apps_.Clear(); |
243 unlimited_extensions_.Clear(); | 255 unlimited_extensions_.Clear(); |
244 file_handler_extensions_.Clear(); | 256 file_handler_extensions_.Clear(); |
245 isolated_extensions_.Clear(); | 257 isolated_extensions_.Clear(); |
246 content_capabilities_unlimited_extensions_.Clear(); | 258 content_capabilities_unlimited_extensions_.Clear(); |
247 } | 259 } |
248 | 260 |
249 NotifyCleared(); | 261 NotifyCleared(); |
250 } | 262 } |
251 | 263 |
252 void ExtensionSpecialStoragePolicy::NotifyGranted( | 264 void ExtensionSpecialStoragePolicy::NotifyGranted( |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 } | 355 } |
344 | 356 |
345 void ExtensionSpecialStoragePolicy::SpecialCollection::Clear() { | 357 void ExtensionSpecialStoragePolicy::SpecialCollection::Clear() { |
346 ClearCache(); | 358 ClearCache(); |
347 extensions_.Clear(); | 359 extensions_.Clear(); |
348 } | 360 } |
349 | 361 |
350 void ExtensionSpecialStoragePolicy::SpecialCollection::ClearCache() { | 362 void ExtensionSpecialStoragePolicy::SpecialCollection::ClearCache() { |
351 cached_results_.clear(); | 363 cached_results_.clear(); |
352 } | 364 } |
OLD | NEW |