Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3281)

Unified Diff: chrome/common/extensions/extension_unittest.cc

Issue 10443105: Take 2 at implementing activeTab. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: uninstall, tests, aa Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/extension_messages.cc ('k') | chrome/common/extensions/url_pattern_set.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..93bf1e52de2be470c57146a604c6a95e979a4473 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) {
@@ -689,77 +689,132 @@ TEST(ExtensionTest, ExtraFlags) {
// Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage
// methods of Extension for extensions with various permissions.
class ExtensionScriptAndCaptureVisibleTest : public testing::Test {
- public:
- ExtensionScriptAndCaptureVisibleTest() {
- PathService::Get(chrome::DIR_TEST_DATA, &dirpath_);
+ protected:
+ ExtensionScriptAndCaptureVisibleTest()
+ : http_url_("http://www.google.com"),
+ http_url_with_path_("http://www.google.com/index.html"),
+ https_url_("https://www.google.com"),
+ file_url_("file:///foo/bar"),
+ favicon_url_("chrome://favicon/http://www.google.com"),
+ extension_url_("chrome-extension://" +
+ Extension::GenerateIdForPath(FilePath(FILE_PATH_LITERAL("foo")))),
+ settings_url_("chrome://settings"),
+ about_url_("about:flags") {
+ urls_.insert(http_url_);
+ urls_.insert(http_url_with_path_);
+ urls_.insert(https_url_);
+ urls_.insert(file_url_);
+ urls_.insert(favicon_url_);
+ urls_.insert(extension_url_);
+ urls_.insert(settings_url_);
+ urls_.insert(about_url_);
}
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);
}
- protected:
- FilePath dirpath_;
-};
+ 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));
+ }
-TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
- scoped_refptr<Extension> extension;
+ bool AllowedExclusivelyOnTab(
+ const Extension* extension,
+ const std::set<GURL>& allowed_urls,
+ int tab_id) {
+ bool result = true;
+ for (std::set<GURL>::iterator it = urls_.begin(); it != urls_.end(); ++it) {
+ const GURL& url = *it;
+ if (allowed_urls.count(url))
+ result &= Allowed(extension, url, tab_id);
+ else
+ result &= Blocked(extension, url, tab_id);
+ }
+ return result;
+ }
+
+ const GURL& http_url() { return http_url_; }
+ const GURL& http_url_with_path() { return http_url_with_path_; }
+ const GURL& https_url() { return https_url_; }
+ const GURL& file_url() { return file_url_; }
+ const GURL& favicon_url() { return favicon_url_; }
+ const GURL& extension_url() { return extension_url_; }
+ const GURL& settings_url() { return settings_url_; }
+ const GURL& about_url() { return about_url_; }
+
+ const std::set<GURL> urls() { return urls_; }
+
+ private:
// URLs that are "safe" to provide scripting and capture visible tab access
// to if the permissions allow it.
- GURL http_url("http://www.google.com");
- GURL https_url("https://www.google.com");
- GURL file_url("file:///foo/bar");
+ GURL http_url_;
+ GURL http_url_with_path_;
+ GURL https_url_;
+ GURL file_url_;
// We should allow host permission but not scripting permission for favicon
// urls.
- GURL favicon_url("chrome://favicon/http://www.google.com");
-
- std::string dummy_id =
- Extension::GenerateIdForPath(FilePath(FILE_PATH_LITERAL("whatever")));
+ GURL favicon_url_;
// URLs that regular extensions should never get access to.
- GURL extension_url("chrome-extension://" + dummy_id);
- GURL settings_url("chrome://settings");
- GURL about_url("about:flags");
+ GURL extension_url_;
+ GURL settings_url_;
+ GURL about_url_;
+
+ // The set of all URLs above.
+ std::set<GURL> urls_;
+};
+
+TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
+ 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(CaptureOnly(extension, favicon_url));
- EXPECT_TRUE(Blocked(extension, about_url));
- EXPECT_TRUE(Blocked(extension, extension_url));
-
- EXPECT_FALSE(extension->HasHostPermission(settings_url));
- EXPECT_FALSE(extension->HasHostPermission(about_url));
- EXPECT_TRUE(extension->HasHostPermission(favicon_url));
+ 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(CaptureOnly(extension, favicon_url()));
+ EXPECT_TRUE(Blocked(extension, about_url()));
+ EXPECT_TRUE(Blocked(extension, 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));
+ 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));
+ EXPECT_TRUE(Blocked(extension, settings_url()));
// Having chrome://*/ should not work for regular extensions. Note that
// for favicon access, we require the explicit pattern chrome://favicon/*.
@@ -775,39 +830,115 @@ TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
// 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(CaptureOnly(extension, favicon_url));
- EXPECT_TRUE(Blocked(extension, about_url));
- EXPECT_TRUE(extension->HasHostPermission(favicon_url));
+ EXPECT_TRUE(Blocked(extension, settings_url()));
+ EXPECT_TRUE(CaptureOnly(extension, favicon_url()));
+ 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));
+ 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",
Extension::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));
+ 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", Extension::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));
+ 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()));
not at google - send to devlin 2012/06/06 07:38:40 Looking at the damage I made here, I should revert
+}
+
+TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecific) {
+ scoped_refptr<Extension> extension =
+ LoadManifestStrict("script_and_capture", "tab_specific.json");
+
+ EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0));
+ EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(1));
+ EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(2));
+
+ std::set<GURL> no_urls;
+
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
+
+ URLPatternSet allowed_hosts;
+ allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL,
+ http_url().spec()));
+ std::set<GURL> allowed_urls;
+ allowed_urls.insert(http_url());
+ // http_url_with_path() will also be allowed, because Extension should be
+ // considering the security origin of the URL not the URL itself, and
+ // http_url() is in allowed_hosts.
+ allowed_urls.insert(http_url_with_path());
+
+ extension->SetTabSpecificHostPermissions(0, allowed_hosts);
+ EXPECT_EQ(allowed_hosts, *extension->GetTabSpecificHostPermissions(0));
+
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
+
+ extension->ClearTabSpecificHostPermissions(0);
+ EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0));
+
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
+
+ std::set<GURL> more_allowed_urls = allowed_urls;
+ more_allowed_urls.insert(https_url());
+ URLPatternSet more_allowed_hosts = allowed_hosts;
+ more_allowed_hosts.AddPattern(URLPattern(URLPattern::SCHEME_ALL,
+ https_url().spec()));
+
+ extension->SetTabSpecificHostPermissions(0, allowed_hosts);
+ EXPECT_EQ(allowed_hosts, *extension->GetTabSpecificHostPermissions(0));
+ extension->SetTabSpecificHostPermissions(1, more_allowed_hosts);
+ EXPECT_EQ(more_allowed_hosts, *extension->GetTabSpecificHostPermissions(1));
+
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, allowed_urls, 0));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
+
+ extension->ClearTabSpecificHostPermissions(0);
+ EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(0));
+
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, more_allowed_urls, 1));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
+
+ extension->ClearTabSpecificHostPermissions(1);
+ EXPECT_EQ(NULL, extension->GetTabSpecificHostPermissions(1));
+
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 0));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 1));
+ EXPECT_TRUE(AllowedExclusivelyOnTab(extension, no_urls, 2));
+}
+
+TEST_F(ExtensionScriptAndCaptureVisibleTest, TabSpecificActiveHostPermissions) {
+ // - no active permissions.
+ // - no tab specific permissions
+ // - changing active permissions.
+ // - changing tab specific permissions.
+ // - lots of tab specific permissions (test merge algorithm).
}
TEST(ExtensionTest, GenerateId) {
« no previous file with comments | « chrome/common/extensions/extension_messages.cc ('k') | chrome/common/extensions/url_pattern_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698