summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-24 20:43:29 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-24 20:43:29 +0000
commit653b5ece3b864b6adffd54dc8c0cc47e0325a063 (patch)
treebd38675271a30f4924e0f5f005779ec33d8cab86
parent38bfd79373ccf2f8fef57e7de7b284404eda8d9f (diff)
downloadchromium_src-653b5ece3b864b6adffd54dc8c0cc47e0325a063.zip
chromium_src-653b5ece3b864b6adffd54dc8c0cc47e0325a063.tar.gz
chromium_src-653b5ece3b864b6adffd54dc8c0cc47e0325a063.tar.bz2
Merge r147634: Fix checking for implied permissions in PermissionSet
Checking for implied permissions (e.g., kWebRequest => kWebRequestInternal) was previously done only in the constructor parametrised by an extension. Since the permissions should be implied independently of such context, this applies the check in situations when the extension is not known. Browser-test is being considered, but not written yet. If that happens, it will be on a separate CL. BUG=136103 TEST=Install the extension referenced by the bug, go to Options, click Allow, and observe no error in the background-page console log. Review URL: https://chromiumcodereview.appspot.com/10805088 git-svn-id: svn://svn.chromium.org/chrome/branches/1180/src@148189 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/api/permissions/permissions_api_helpers_unittest.cc2
-rw-r--r--chrome/common/extensions/extension_permission_set.cc23
-rw-r--r--chrome/common/extensions/extension_permission_set.h3
-rw-r--r--chrome/common/extensions/extension_permission_set_unittest.cc12
4 files changed, 30 insertions, 10 deletions
diff --git a/chrome/browser/extensions/api/permissions/permissions_api_helpers_unittest.cc b/chrome/browser/extensions/api/permissions/permissions_api_helpers_unittest.cc
index 7d03989d..50192bb 100644
--- a/chrome/browser/extensions/api/permissions/permissions_api_helpers_unittest.cc
+++ b/chrome/browser/extensions/api/permissions/permissions_api_helpers_unittest.cc
@@ -44,7 +44,7 @@ TEST(ExtensionPermissionsAPIHelpers, Pack) {
EXPECT_TRUE(value->GetList("permissions", &api_list));
EXPECT_TRUE(value->GetList("origins", &origin_list));
- EXPECT_EQ(2u, api_list->GetSize());
+ EXPECT_EQ(3u, api_list->GetSize());
EXPECT_EQ(2u, origin_list->GetSize());
std::string expected_apis[] = { "tabs", "webRequest" };
diff --git a/chrome/common/extensions/extension_permission_set.cc b/chrome/common/extensions/extension_permission_set.cc
index 1380f9e..21de276 100644
--- a/chrome/common/extensions/extension_permission_set.cc
+++ b/chrome/common/extensions/extension_permission_set.cc
@@ -266,7 +266,7 @@ void ExtensionAPIPermission::RegisterAllPermissions(
{ kInputMethodPrivate, "inputMethodPrivate", kFlagCannotBeOptional },
{ kEchoPrivate, "echoPrivate", kFlagCannotBeOptional },
{ kTerminalPrivate, "terminalPrivate", kFlagCannotBeOptional },
- { kWebRequestInternal, "webRequestInternal", kFlagCannotBeOptional },
+ { kWebRequestInternal, "webRequestInternal" },
{ kWebSocketProxyPrivate, "webSocketProxyPrivate", kFlagCannotBeOptional },
{ kWebstorePrivate, "webstorePrivate", kFlagCannotBeOptional },
@@ -404,6 +404,7 @@ ExtensionPermissionSet::ExtensionPermissionSet(
DCHECK(extension);
AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_);
InitImplicitExtensionPermissions(extension);
+ InitImplicitPermissions();
InitEffectiveHosts();
}
@@ -414,6 +415,7 @@ ExtensionPermissionSet::ExtensionPermissionSet(
: apis_(apis),
scriptable_hosts_(scriptable_hosts) {
AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_);
+ InitImplicitPermissions();
InitEffectiveHosts();
}
@@ -426,6 +428,7 @@ ExtensionPermissionSet::ExtensionPermissionSet(
scriptable_hosts_(scriptable_hosts),
scopes_(scopes) {
AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_);
+ InitImplicitPermissions();
InitEffectiveHosts();
}
@@ -835,6 +838,16 @@ std::set<std::string> ExtensionPermissionSet::GetDistinctHosts(
return distinct_hosts;
}
+void ExtensionPermissionSet::InitImplicitPermissions() {
+ // The webRequest permission implies the internal version as well.
+ if (apis_.find(ExtensionAPIPermission::kWebRequest) != apis_.end())
+ apis_.insert(ExtensionAPIPermission::kWebRequestInternal);
+
+ // The fileBrowserHandler permission implies the internal version as well.
+ if (apis_.find(ExtensionAPIPermission::kFileBrowserHandler) != apis_.end())
+ apis_.insert(ExtensionAPIPermission::kFileBrowserHandlerInternal);
+}
+
void ExtensionPermissionSet::InitImplicitExtensionPermissions(
const extensions::Extension* extension) {
// Add the implied permissions.
@@ -844,14 +857,6 @@ void ExtensionPermissionSet::InitImplicitExtensionPermissions(
if (!extension->devtools_url().is_empty())
apis_.insert(ExtensionAPIPermission::kDevtools);
- // The webRequest permission implies the internal version as well.
- if (apis_.find(ExtensionAPIPermission::kWebRequest) != apis_.end())
- apis_.insert(ExtensionAPIPermission::kWebRequestInternal);
-
- // The fileBrowserHandler permission implies the internal version as well.
- if (apis_.find(ExtensionAPIPermission::kFileBrowserHandler) != apis_.end())
- apis_.insert(ExtensionAPIPermission::kFileBrowserHandlerInternal);
-
// Add the scriptable hosts.
for (UserScriptList::const_iterator content_script =
extension->content_scripts().begin();
diff --git a/chrome/common/extensions/extension_permission_set.h b/chrome/common/extensions/extension_permission_set.h
index 239d266..ba80aca 100644
--- a/chrome/common/extensions/extension_permission_set.h
+++ b/chrome/common/extensions/extension_permission_set.h
@@ -428,6 +428,9 @@ class ExtensionPermissionSet
// Initializes the set based on |extension|'s manifest data.
void InitImplicitExtensionPermissions(const extensions::Extension* extension);
+ // Adds permissions implied independently of other context.
+ void InitImplicitPermissions();
+
// Initializes the effective host permission based on the data in this set.
void InitEffectiveHosts();
diff --git a/chrome/common/extensions/extension_permission_set_unittest.cc b/chrome/common/extensions/extension_permission_set_unittest.cc
index 24efd54..2eedcee 100644
--- a/chrome/common/extensions/extension_permission_set_unittest.cc
+++ b/chrome/common/extensions/extension_permission_set_unittest.cc
@@ -1157,3 +1157,15 @@ TEST(ExtensionPermissionsTest, IsEmpty) {
empty_apis, empty_extent, non_empty_extent);
EXPECT_FALSE(perm_set->IsEmpty());
}
+
+TEST(ExtensionPermissionsTest, ImpliedPermissions) {
+ URLPatternSet empty_extent;
+ ExtensionAPIPermissionSet apis;
+ apis.insert(ExtensionAPIPermission::kWebRequest);
+ apis.insert(ExtensionAPIPermission::kFileBrowserHandler);
+ EXPECT_EQ(2U, apis.size());
+
+ scoped_refptr<ExtensionPermissionSet> perm_set;
+ perm_set = new ExtensionPermissionSet(apis, empty_extent, empty_extent);
+ EXPECT_EQ(4U, perm_set->apis().size());
+}