| 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));
|
|
|