Index: chrome/common/extensions/extension_unittest.cc |
diff --git a/chrome/common/extensions/extension_unittest.cc b/chrome/common/extensions/extension_unittest.cc |
index edc99bcda0b9bab69410216b438e11ad9a546697..8d88f4bd49f95c16c8975f5aa444ce94930b0059 100644 |
--- a/chrome/common/extensions/extension_unittest.cc |
+++ b/chrome/common/extensions/extension_unittest.cc |
@@ -4,6 +4,7 @@ |
#include "chrome/common/extensions/extension.h" |
+#include "base/command_line.h" |
#include "base/file_util.h" |
#include "base/files/file_path.h" |
#include "base/format_macros.h" |
@@ -13,6 +14,7 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/utf_string_conversions.h" |
#include "chrome/common/chrome_paths.h" |
+#include "chrome/common/chrome_switches.h" |
#include "chrome/common/extensions/api/commands/commands_handler.h" |
#include "chrome/common/extensions/api/plugins/plugins_handler.h" |
#include "chrome/common/extensions/background_info.h" |
@@ -657,11 +659,10 @@ class ExtensionScriptAndCaptureVisibleTest : public testing::Test { |
}; |
TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { |
- scoped_refptr<Extension> extension; |
- |
// Test <all_urls> for regular extensions. |
- extension = LoadManifestStrict("script_and_capture", |
+ scoped_refptr<Extension> extension = LoadManifestStrict("script_and_capture", |
"extension_regular_all.json"); |
+ |
EXPECT_TRUE(Allowed(extension, http_url)); |
EXPECT_TRUE(Allowed(extension, https_url)); |
EXPECT_TRUE(Blocked(extension, file_url)); |
@@ -745,6 +746,103 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { |
EXPECT_FALSE(extension->HasHostPermission(settings_url)); |
} |
+ |
+TEST_F(ExtensionScriptAndCaptureVisibleTest, PermissionsWithChromeURLsEnabled) { |
+ CommandLine::ForCurrentProcess()->AppendSwitch( |
+ switches::kExtensionsOnChromeURLs); |
+ |
+ scoped_refptr<Extension> extension; |
+ |
+ // Test <all_urls> for regular extensions. |
+ extension = LoadManifestStrict("script_and_capture", |
+ "extension_regular_all.json"); |
+ EXPECT_TRUE(Allowed(extension, http_url)); |
+ EXPECT_TRUE(Allowed(extension, https_url)); |
+ EXPECT_TRUE(Blocked(extension, file_url)); |
+ EXPECT_TRUE(Blocked(extension, settings_url)); |
+ EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested |
+ EXPECT_TRUE(Blocked(extension, about_url)); |
+ EXPECT_TRUE(Blocked(extension, extension_url)); |
+ |
+ // Test access to iframed content. |
+ GURL within_extension_url = extension->GetResourceURL("page.html"); |
+ EXPECT_TRUE(AllowedScript(extension, http_url, http_url_with_path)); |
+ EXPECT_TRUE(AllowedScript(extension, https_url, http_url_with_path)); |
+ EXPECT_TRUE(AllowedScript(extension, http_url, within_extension_url)); |
+ EXPECT_TRUE(AllowedScript(extension, https_url, within_extension_url)); |
+ EXPECT_TRUE(BlockedScript(extension, http_url, extension_url)); |
+ EXPECT_TRUE(BlockedScript(extension, https_url, extension_url)); |
+ |
+ EXPECT_FALSE(extension->HasHostPermission(settings_url)); |
+ EXPECT_FALSE(extension->HasHostPermission(about_url)); |
+ EXPECT_TRUE(extension->HasHostPermission(favicon_url)); |
+ |
+ // Test * for scheme, which implies just the http/https schemes. |
+ extension = LoadManifestStrict("script_and_capture", |
+ "extension_wildcard.json"); |
+ EXPECT_TRUE(Allowed(extension, http_url)); |
+ EXPECT_TRUE(Allowed(extension, https_url)); |
+ EXPECT_TRUE(Blocked(extension, settings_url)); |
+ EXPECT_TRUE(Blocked(extension, about_url)); |
+ EXPECT_TRUE(Blocked(extension, file_url)); |
+ EXPECT_TRUE(Blocked(extension, favicon_url)); |
+ extension = LoadManifest("script_and_capture", |
+ "extension_wildcard_settings.json"); |
+ EXPECT_TRUE(Blocked(extension, settings_url)); |
+ |
+ // Having chrome://*/ should work for regular extensions with the flag |
+ // enabled. |
+ std::string error; |
+ extension = LoadManifestUnchecked("script_and_capture", |
+ "extension_wildcard_chrome.json", |
+ Manifest::INTERNAL, Extension::NO_FLAGS, |
+ &error); |
+ EXPECT_FALSE(extension == NULL); |
+ EXPECT_TRUE(Blocked(extension, http_url)); |
+ EXPECT_TRUE(Blocked(extension, https_url)); |
+ EXPECT_TRUE(Allowed(extension, settings_url)); |
+ EXPECT_TRUE(Blocked(extension, about_url)); |
+ EXPECT_TRUE(Blocked(extension, file_url)); |
+ EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested |
+ |
+ // Having chrome://favicon/* should not give you chrome://* |
+ extension = LoadManifestStrict("script_and_capture", |
+ "extension_chrome_favicon_wildcard.json"); |
+ EXPECT_TRUE(Blocked(extension, settings_url)); |
+ EXPECT_TRUE(Allowed(extension, favicon_url)); // chrome:// requested |
+ EXPECT_TRUE(Blocked(extension, about_url)); |
+ EXPECT_TRUE(extension->HasHostPermission(favicon_url)); |
+ |
+ // Having http://favicon should not give you chrome://favicon |
+ extension = LoadManifestStrict("script_and_capture", |
+ "extension_http_favicon.json"); |
+ EXPECT_TRUE(Blocked(extension, settings_url)); |
+ EXPECT_TRUE(Blocked(extension, favicon_url)); |
+ |
+ // Component extensions with <all_urls> should get everything. |
+ extension = LoadManifest("script_and_capture", "extension_component_all.json", |
+ Manifest::COMPONENT, Extension::NO_FLAGS); |
+ EXPECT_TRUE(Allowed(extension, http_url)); |
+ EXPECT_TRUE(Allowed(extension, https_url)); |
+ EXPECT_TRUE(Allowed(extension, settings_url)); |
+ EXPECT_TRUE(Allowed(extension, about_url)); |
+ EXPECT_TRUE(Allowed(extension, favicon_url)); |
+ EXPECT_TRUE(extension->HasHostPermission(favicon_url)); |
+ |
+ // Component extensions should only get access to what they ask for. |
+ extension = LoadManifest("script_and_capture", |
+ "extension_component_google.json", Manifest::COMPONENT, |
+ Extension::NO_FLAGS); |
+ EXPECT_TRUE(Allowed(extension, http_url)); |
+ EXPECT_TRUE(Blocked(extension, https_url)); |
+ EXPECT_TRUE(Blocked(extension, file_url)); |
+ EXPECT_TRUE(Blocked(extension, settings_url)); |
+ EXPECT_TRUE(Blocked(extension, favicon_url)); |
+ EXPECT_TRUE(Blocked(extension, about_url)); |
+ EXPECT_TRUE(Blocked(extension, extension_url)); |
+ EXPECT_FALSE(extension->HasHostPermission(settings_url)); |
+} |
+ |
TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { |
scoped_refptr<Extension> extension = |
LoadManifestStrict("script_and_capture", "tab_specific.json"); |