Index: chrome/common/extensions/extension_unittest.cc |
diff --git a/chrome/common/extensions/extension_unittest.cc b/chrome/common/extensions/extension_unittest.cc |
index 4c5f57a5ea7307dc9d661a69a931a01dcf1494f3..d11a20e8d6e05d6a3244194d5b7f61bda3d907d6 100644 |
--- a/chrome/common/extensions/extension_unittest.cc |
+++ b/chrome/common/extensions/extension_unittest.cc |
@@ -615,62 +615,62 @@ TEST(ExtensionTest, WantsFileAccess) { |
// <all_urls> permission |
extension = LoadManifest("permissions", "permissions_all_urls.json"); |
EXPECT_TRUE(extension->wants_file_access()); |
- EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
extension = LoadManifest( |
"permissions", "permissions_all_urls.json", Extension::ALLOW_FILE_ACCESS); |
EXPECT_TRUE(extension->wants_file_access()); |
- EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
// file:///* permission |
extension = LoadManifest("permissions", "permissions_file_scheme.json"); |
EXPECT_TRUE(extension->wants_file_access()); |
- EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
extension = LoadManifest("permissions", "permissions_file_scheme.json", |
Extension::ALLOW_FILE_ACCESS); |
EXPECT_TRUE(extension->wants_file_access()); |
- EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ EXPECT_TRUE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
// http://* permission |
extension = LoadManifest("permissions", "permissions_http_scheme.json"); |
EXPECT_FALSE(extension->wants_file_access()); |
- EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
extension = LoadManifest("permissions", "permissions_http_scheme.json", |
Extension::ALLOW_FILE_ACCESS); |
EXPECT_FALSE(extension->wants_file_access()); |
- EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, NULL, NULL)); |
+ EXPECT_FALSE(extension->CanExecuteScriptOnPage(file_url, -1, NULL, NULL)); |
// <all_urls> content script match |
extension = LoadManifest("permissions", "content_script_all_urls.json"); |
EXPECT_TRUE(extension->wants_file_access()); |
EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
- file_url, &extension->content_scripts()[0], NULL)); |
+ file_url, -1, &extension->content_scripts()[0], NULL)); |
extension = LoadManifest("permissions", "content_script_all_urls.json", |
Extension::ALLOW_FILE_ACCESS); |
EXPECT_TRUE(extension->wants_file_access()); |
EXPECT_TRUE(extension->CanExecuteScriptOnPage( |
- file_url, &extension->content_scripts()[0], NULL)); |
+ file_url, -1, &extension->content_scripts()[0], NULL)); |
// file:///* content script match |
extension = LoadManifest("permissions", "content_script_file_scheme.json"); |
EXPECT_TRUE(extension->wants_file_access()); |
EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
- file_url, &extension->content_scripts()[0], NULL)); |
+ file_url, -1, &extension->content_scripts()[0], NULL)); |
extension = LoadManifest("permissions", "content_script_file_scheme.json", |
Extension::ALLOW_FILE_ACCESS); |
EXPECT_TRUE(extension->wants_file_access()); |
EXPECT_TRUE(extension->CanExecuteScriptOnPage( |
- file_url, &extension->content_scripts()[0], NULL)); |
+ file_url, -1, &extension->content_scripts()[0], NULL)); |
// http://* content script match |
extension = LoadManifest("permissions", "content_script_http_scheme.json"); |
EXPECT_FALSE(extension->wants_file_access()); |
EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
- file_url, &extension->content_scripts()[0], NULL)); |
+ file_url, -1, &extension->content_scripts()[0], NULL)); |
extension = LoadManifest("permissions", "content_script_http_scheme.json", |
Extension::ALLOW_FILE_ACCESS); |
EXPECT_FALSE(extension->wants_file_access()); |
EXPECT_FALSE(extension->CanExecuteScriptOnPage( |
- file_url, &extension->content_scripts()[0], NULL)); |
+ file_url, -1, &extension->content_scripts()[0], NULL)); |
} |
TEST(ExtensionTest, ExtraFlags) { |
@@ -695,18 +695,30 @@ class ExtensionScriptAndCaptureVisibleTest : public testing::Test { |
} |
bool Allowed(const Extension* extension, const GURL& url) { |
- return (extension->CanExecuteScriptOnPage(url, NULL, NULL) && |
- extension->CanCaptureVisiblePage(url, NULL)); |
+ return Allowed(extension, url, -1); |
+ } |
+ |
+ bool Allowed(const Extension* extension, const GURL& url, int tab_id) { |
+ return (extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) && |
+ extension->CanCaptureVisiblePage(url, tab_id, NULL)); |
} |
bool CaptureOnly(const Extension* extension, const GURL& url) { |
- return !extension->CanExecuteScriptOnPage(url, NULL, NULL) && |
- extension->CanCaptureVisiblePage(url, NULL); |
+ return CaptureOnly(extension, url, -1); |
+ } |
+ |
+ bool CaptureOnly(const Extension* extension, const GURL& url, int tab_id) { |
+ return !extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) && |
+ extension->CanCaptureVisiblePage(url, tab_id, NULL); |
} |
bool Blocked(const Extension* extension, const GURL& url) { |
- return !(extension->CanExecuteScriptOnPage(url, NULL, NULL) || |
- extension->CanCaptureVisiblePage(url, NULL)); |
+ return Blocked(extension, url, -1); |
+ } |
+ |
+ bool Blocked(const Extension* extension, const GURL& url, int tab_id) { |
+ return !(extension->CanExecuteScriptOnPage(url, tab_id, NULL, NULL) || |
+ extension->CanCaptureVisiblePage(url, tab_id, NULL)); |
} |
protected: |
@@ -810,6 +822,93 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) { |
EXPECT_FALSE(extension->HasHostPermission(settings_url)); |
} |
+TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) { |
+ // TODO: these tests in progress. hastily assembled late at night. |
+ scoped_refptr<Extension> extension = |
+ LoadManifestStrict("script_and_capture", "tab_specific.json"); |
+ |
+ GURL http_url("http://www.google.com"); |
+ GURL https_url("https://www.google.com"); |
+ GURL file_url("file:///foo/bar"); |
+ GURL favicon_url("chrome://favicon/http://www.google.com"); |
+ GURL extension_url("chrome-extension://monkey"); |
+ GURL settings_url("chrome://settings"); |
+ GURL about_url("about:flags"); |
+ |
+ const GURL urls[] = { |
+ http_url, https_url, file_url, favicon_url, |
+ extension_url, settings_url, about_url, |
+ }; |
+ |
+ // Shouldn't have access to any URLs on any tabs. |
+ for (size_t i = 0; i < arraysize(urls); ++i) { |
+ GURL url = urls[i]; |
+ EXPECT_TRUE(Blocked(extension, url, 0)); |
+ EXPECT_TRUE(Blocked(extension, url, 1)); |
+ EXPECT_TRUE(Blocked(extension, url, 2)); |
+ } |
+ |
+ // TODO: GetEffectiveHostPermissions? |
+ |
+ // Grant access to http_url on tab 0. |
+ { |
+ URLPatternSet hosts; |
+ hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL, http_url.spec())); |
+ |
+ extension->SetTabSpecificHostPermissions(0, hosts); |
+ for (size_t i = 0; i < arraysize(urls); ++i) { |
+ GURL url = urls[i]; |
+ if (url == http_url) |
+ EXPECT_TRUE(Allowed(extension, url, 0)); |
+ else |
+ EXPECT_TRUE(Blocked(extension, url, 0)); |
+ EXPECT_TRUE(Blocked(extension, url, 1)); |
+ EXPECT_TRUE(Blocked(extension, url, 2)); |
+ } |
+ |
+ extension->ClearTabSpecificHostPermissions(0); |
+ for (size_t i = 0; i < arraysize(urls); ++i) { |
+ GURL url = urls[i]; |
+ EXPECT_TRUE(Blocked(extension, url, 0)); |
+ EXPECT_TRUE(Blocked(extension, url, 1)); |
+ EXPECT_TRUE(Blocked(extension, url, 2)); |
+ } |
+ |
+ extension->SetTabSpecificHostPermissions(0, hosts); |
+ extension->SetTabSpecificHostPermissions(1, hosts); |
+ for (size_t i = 0; i < arraysize(urls); ++i) { |
+ GURL url = urls[i]; |
+ if (url == http_url) { |
+ EXPECT_TRUE(Allowed(extension, url, 0)); |
+ EXPECT_TRUE(Allowed(extension, url, 1)); |
+ } else { |
+ EXPECT_TRUE(Blocked(extension, url, 0)); |
+ EXPECT_TRUE(Blocked(extension, url, 1)); |
+ } |
+ EXPECT_TRUE(Blocked(extension, url, 2)); |
+ } |
+ |
+ extension->ClearTabSpecificHostPermissions(0); |
+ for (size_t i = 0; i < arraysize(urls); ++i) { |
+ GURL url = urls[i]; |
+ EXPECT_TRUE(Blocked(extension, url, 0)); |
+ if (url == http_url) |
+ EXPECT_TRUE(Allowed(extension, url, 1)); |
+ else |
+ EXPECT_TRUE(Blocked(extension, url, 1)); |
+ EXPECT_TRUE(Blocked(extension, url, 2)); |
+ } |
+ |
+ extension->ClearTabSpecificHostPermissions(1); |
+ for (size_t i = 0; i < arraysize(urls); ++i) { |
+ GURL url = urls[i]; |
+ EXPECT_TRUE(Blocked(extension, url, 0)); |
+ EXPECT_TRUE(Blocked(extension, url, 1)); |
+ EXPECT_TRUE(Blocked(extension, url, 2)); |
+ } |
+ } |
+} |
+ |
TEST(ExtensionTest, GenerateId) { |
std::string result; |
EXPECT_TRUE(Extension::GenerateId("", &result)); |