summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-07 03:45:33 +0000
committerjstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-07 03:45:33 +0000
commitf71f7e6a0bddf30ea86043412ef2859b1d05e472 (patch)
tree8f30674f242610f20b5743de6a6a97be2c96ba5e
parentce49a47906658f04537e25406d429de38cb99119 (diff)
downloadchromium_src-f71f7e6a0bddf30ea86043412ef2859b1d05e472.zip
chromium_src-f71f7e6a0bddf30ea86043412ef2859b1d05e472.tar.gz
chromium_src-f71f7e6a0bddf30ea86043412ef2859b1d05e472.tar.bz2
Update valid URLPattern schemes in ExtensionPrefs::GetGrantedPermissions.
Adds SCHEME_CHROMEUI as a valid URLPattern scheme in GetGrantedPermissions. Ensures these schemes stay in sync with those in Extension. BUG=65309 TEST=ExtensionPrefsGrantedPermissions Review URL: http://codereview.chromium.org/5626004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@68439 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_prefs.cc6
-rw-r--r--chrome/browser/extensions/extension_prefs_unittest.cc2
-rw-r--r--chrome/common/extensions/extension.cc9
-rw-r--r--chrome/common/extensions/extension.h3
4 files changed, 16 insertions, 4 deletions
diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
index 4ab239d..14d4017 100644
--- a/chrome/browser/extensions/extension_prefs.cc
+++ b/chrome/browser/extensions/extension_prefs.cc
@@ -495,10 +495,14 @@ bool ExtensionPrefs::GetGrantedPermissions(
ReadExtensionPrefStringSet(
extension_id, kPrefGrantedPermissionsHost, &host_permissions);
+ // The granted host permissions contain hosts from the manifest's
+ // "permissions" array and from the content script "matches" arrays,
+ // so the URLPattern needs to accept valid schemes from both types.
for (std::set<std::string>::iterator i = host_permissions.begin();
i != host_permissions.end(); ++i)
host_extent->AddPattern(URLPattern(
- Extension::kValidWebExtentSchemes | UserScript::kValidUserScriptSchemes,
+ Extension::kValidHostPermissionSchemes |
+ UserScript::kValidUserScriptSchemes,
*i));
return true;
diff --git a/chrome/browser/extensions/extension_prefs_unittest.cc b/chrome/browser/extensions/extension_prefs_unittest.cc
index a670692..05ccb42 100644
--- a/chrome/browser/extensions/extension_prefs_unittest.cc
+++ b/chrome/browser/extensions/extension_prefs_unittest.cc
@@ -202,6 +202,7 @@ class ExtensionPrefsGrantedPermissions : public ExtensionPrefsTest {
AddPattern(&host_perm_set1_, "http://*.google.com/*");
AddPattern(&host_perm_set1_, "http://example.com/*");
+ AddPattern(&host_perm_set1_, "chrome://favicon/*");
AddPattern(&host_perm_set2_, "https://*.google.com/*");
// with duplicate:
@@ -213,6 +214,7 @@ class ExtensionPrefsGrantedPermissions : public ExtensionPrefsTest {
AddPattern(&host_permissions_, "http://*.google.com/*");
AddPattern(&host_permissions_, "http://example.com/*");
+ AddPattern(&host_permissions_, "chrome://favicon/*");
AddPattern(&host_permissions_, "https://*.google.com/*");
std::set<std::string> empty_set;
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index c3b4419..f83202c 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -250,6 +250,10 @@ const char Extension::kOldUnlimitedStoragePermission[] = "unlimited_storage";
const int Extension::kValidWebExtentSchemes =
URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS;
+const int Extension::kValidHostPermissionSchemes =
+ (UserScript::kValidUserScriptSchemes |
+ URLPattern::SCHEME_CHROMEUI) & ~URLPattern::SCHEME_FILE;
+
//
// Extension
//
@@ -1741,9 +1745,8 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_key,
// Check if it's a host pattern permission.
URLPattern pattern = URLPattern(CanExecuteScriptEverywhere() ?
- URLPattern::SCHEME_ALL :
- (UserScript::kValidUserScriptSchemes |
- URLPattern::SCHEME_CHROMEUI) & ~URLPattern::SCHEME_FILE);
+ URLPattern::SCHEME_ALL : kValidHostPermissionSchemes);
+
if (URLPattern::PARSE_SUCCESS == pattern.Parse(permission_str)) {
if (!CanSpecifyHostPermission(pattern)) {
diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h
index b9ec910..a8a05f5 100644
--- a/chrome/common/extensions/extension.h
+++ b/chrome/common/extensions/extension.h
@@ -169,6 +169,9 @@ class Extension : public base::RefCountedThreadSafe<Extension> {
// Valid schemes for web extent URLPatterns.
static const int kValidWebExtentSchemes;
+ // Valid schemes for host permission URLPatterns.
+ static const int kValidHostPermissionSchemes;
+
// Returns true if the string is one of the known hosted app permissions (see
// kHostedAppPermissionNames).
static bool IsHostedAppPermission(const std::string& permission);