summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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());
+}