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