diff options
author | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-07 03:45:33 +0000 |
---|---|---|
committer | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-12-07 03:45:33 +0000 |
commit | f71f7e6a0bddf30ea86043412ef2859b1d05e472 (patch) | |
tree | 8f30674f242610f20b5743de6a6a97be2c96ba5e | |
parent | ce49a47906658f04537e25406d429de38cb99119 (diff) | |
download | chromium_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.cc | 6 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_prefs_unittest.cc | 2 | ||||
-rw-r--r-- | chrome/common/extensions/extension.cc | 9 | ||||
-rw-r--r-- | chrome/common/extensions/extension.h | 3 |
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); |