diff options
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()); +} |