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

Unified Diff: chrome/browser/extensions/extension_special_storage_policy.cc

Issue 802593003: Implement unlimitedStorage content capability (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/extension_special_storage_policy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/extension_special_storage_policy.cc
diff --git a/chrome/browser/extensions/extension_special_storage_policy.cc b/chrome/browser/extensions/extension_special_storage_policy.cc
index 79d06547fd0cb242787cb8fe637ae4b7dd8a28fd..3f8de179106ee938c621b2151e043ee82001d99b 100644
--- a/chrome/browser/extensions/extension_special_storage_policy.cc
+++ b/chrome/browser/extensions/extension_special_storage_policy.cc
@@ -25,6 +25,7 @@
#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_set.h"
+#include "extensions/common/manifest_handlers/content_capabilities_handler.h"
#include "extensions/common/permissions/permissions_data.h"
#include "storage/browser/quota/quota_manager.h"
#include "storage/common/quota/quota_status_code.h"
@@ -96,7 +97,8 @@ bool ExtensionSpecialStoragePolicy::IsStorageUnlimited(const GURL& origin) {
return true;
base::AutoLock locker(lock_);
- return unlimited_extensions_.Contains(origin);
+ return unlimited_extensions_.Contains(origin) ||
+ unlimited_extensions_.GrantsCapabilitiesTo(origin);
}
bool ExtensionSpecialStoragePolicy::IsStorageSessionOnly(const GURL& origin) {
@@ -152,18 +154,21 @@ void ExtensionSpecialStoragePolicy::GrantRightsForExtension(
const extensions::Extension* extension,
content::BrowserContext* browser_context) {
DCHECK(extension);
- if (!(NeedsProtection(extension) ||
+
+ int change_flags = 0;
+ if (extensions::ContentCapabilitiesInfo::Get(extension).permissions.count(
not at google - send to devlin 2014/12/12 16:33:40 Am I missing something; what guarantees the extens
Ken Rockot(use gerrit already) 2014/12/12 16:39:07 It's lazily constructed as needed. An extension wi
not at google - send to devlin 2014/12/12 17:35:39 Is that always the way these things work?
Ken Rockot(use gerrit already) 2014/12/12 20:51:13 It's the way some of them work. Others may be OK r
+ APIPermission::kUnlimitedStorage) > 0) {
+ unlimited_extensions_.Add(extension);
not at google - send to devlin 2014/12/12 16:33:40 I'm not sure; am I reading this correctly, and doe
Ken Rockot(use gerrit already) 2014/12/12 16:39:08 This only adds the extension to the unlimited_exte
not at google - send to devlin 2014/12/12 17:35:39 Oh, I see. So unlimited extensions is just some ki
Ken Rockot(use gerrit already) 2014/12/12 20:51:13 It was pretty ugly, so I changed it. There's a sep
+ change_flags |= SpecialStoragePolicy::STORAGE_UNLIMITED;
+ }
+
+ if (NeedsProtection(extension) ||
extension->permissions_data()->HasAPIPermission(
APIPermission::kUnlimitedStorage) ||
extension->permissions_data()->HasAPIPermission(
APIPermission::kFileBrowserHandler) ||
extensions::AppIsolationInfo::HasIsolatedStorage(extension) ||
- extension->is_app())) {
- return;
- }
-
- int change_flags = 0;
- {
+ extension->is_app()) {
base::AutoLock locker(lock_);
if (NeedsProtection(extension) && protected_apps_.Add(extension))
change_flags |= SpecialStoragePolicy::STORAGE_PROTECTED;
@@ -172,11 +177,10 @@ void ExtensionSpecialStoragePolicy::GrantRightsForExtension(
installed_apps_.Add(extension);
if (extension->permissions_data()->HasAPIPermission(
- APIPermission::kUnlimitedStorage) &&
+ APIPermission::kUnlimitedStorage) &&
unlimited_extensions_.Add(extension)) {
if (extension->is_hosted_app())
LogHostedAppUnlimitedStorageUsage(extension, browser_context);
-
change_flags |= SpecialStoragePolicy::STORAGE_UNLIMITED;
}
@@ -298,6 +302,17 @@ bool ExtensionSpecialStoragePolicy::SpecialCollection::Contains(
return !ExtensionsContaining(origin)->is_empty();
}
+bool ExtensionSpecialStoragePolicy::SpecialCollection::GrantsCapabilitiesTo(
+ const GURL& origin) {
+ for (scoped_refptr<const Extension> extension : extensions_) {
+ if (extensions::ContentCapabilitiesInfo::Get(extension.get()).url_patterns
+ .MatchesURL(origin)) {
+ return true;
+ }
+ }
+ return false;
+}
+
const extensions::ExtensionSet*
ExtensionSpecialStoragePolicy::SpecialCollection::ExtensionsContaining(
const GURL& origin) {
« no previous file with comments | « chrome/browser/extensions/extension_special_storage_policy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698