Index: chrome/browser/extensions/active_tab_unittest.cc |
diff --git a/chrome/browser/extensions/active_tab_unittest.cc b/chrome/browser/extensions/active_tab_unittest.cc |
index 150ba607c9a350b550c8b84122d46c9cda5bb701..186f0d9a2efa29bb0f53b67c319818f64a6ceba7 100644 |
--- a/chrome/browser/extensions/active_tab_unittest.cc |
+++ b/chrome/browser/extensions/active_tab_unittest.cc |
@@ -57,6 +57,13 @@ scoped_refptr<const Extension> CreateTestExtension( |
.Build(); |
} |
+enum PermittedFeature { |
+ PERMITTED_NONE, |
+ PERMITTED_SCRIPT_ONLY, |
+ PERMITTED_CAPTURE_ONLY, |
+ PERMITTED_BOTH |
+}; |
+ |
class ActiveTabTest : public ChromeRenderViewHostTestHarness { |
protected: |
ActiveTabTest() |
@@ -86,17 +93,35 @@ class ActiveTabTest : public ChromeRenderViewHostTestHarness { |
bool IsAllowed(const scoped_refptr<const Extension>& extension, |
const GURL& url) { |
- return IsAllowed(extension, url, tab_id()); |
+ return IsAllowed(extension, url, PERMITTED_BOTH, tab_id()); |
} |
bool IsAllowed(const scoped_refptr<const Extension>& extension, |
const GURL& url, |
+ PermittedFeature feature) { |
+ return IsAllowed(extension, url, feature, tab_id()); |
+ } |
+ |
+ bool IsAllowed(const scoped_refptr<const Extension>& extension, |
+ const GURL& url, |
+ PermittedFeature feature, |
int tab_id) { |
- return PermissionsData::CanExecuteScriptOnPage( |
- extension.get(), url, url, tab_id, NULL, -1, NULL) && |
- PermissionsData::CanCaptureVisiblePage( |
- extension.get(), url, tab_id, NULL) && |
- HasTabsPermission(extension, tab_id); |
+ bool script = PermissionsData::CanExecuteScriptOnPage( |
+ extension.get(), url, url, tab_id, NULL, -1, NULL); |
+ bool capture = HasTabsPermission(extension, tab_id) && |
+ PermissionsData::CanCaptureVisiblePage(extension.get(), tab_id, NULL); |
+ switch (feature) { |
+ case PERMITTED_SCRIPT_ONLY: |
+ return script && !capture; |
+ case PERMITTED_CAPTURE_ONLY: |
+ return capture && !script; |
+ case PERMITTED_BOTH: |
+ return script && capture; |
+ case PERMITTED_NONE: |
+ return !script && !capture; |
+ } |
+ NOTREACHED(); |
+ return false; |
} |
bool IsBlocked(const scoped_refptr<const Extension>& extension, |
@@ -107,11 +132,7 @@ class ActiveTabTest : public ChromeRenderViewHostTestHarness { |
bool IsBlocked(const scoped_refptr<const Extension>& extension, |
const GURL& url, |
int tab_id) { |
- // Note: can't check HasTabsPermission because it isn't URL specific. |
- return !PermissionsData::CanExecuteScriptOnPage( |
- extension.get(), url, url, tab_id, NULL, -1, NULL) && |
- !PermissionsData::CanCaptureVisiblePage( |
- extension.get(), url, tab_id, NULL); |
+ return IsAllowed(extension, url, PERMITTED_NONE, tab_id); |
} |
bool HasTabsPermission(const scoped_refptr<const Extension>& extension) { |
@@ -173,7 +194,7 @@ TEST_F(ActiveTabTest, GrantToSinglePage) { |
// Other subdomains shouldn't be given access. |
GURL mail_google("http://mail.google.com"); |
- EXPECT_TRUE(IsBlocked(extension, mail_google)); |
+ EXPECT_TRUE(IsAllowed(extension, mail_google, PERMITTED_CAPTURE_ONLY)); |
EXPECT_TRUE(IsBlocked(another_extension, mail_google)); |
EXPECT_TRUE(IsBlocked(extension_without_active_tab, mail_google)); |
@@ -233,8 +254,8 @@ TEST_F(ActiveTabTest, GrantToSinglePage) { |
active_tab_permission_granter()->GrantIfRequested( |
extension_without_active_tab.get()); |
- EXPECT_TRUE(IsBlocked(extension, google)); |
- EXPECT_TRUE(IsBlocked(another_extension, google)); |
+ EXPECT_TRUE(IsAllowed(extension, google, PERMITTED_CAPTURE_ONLY)); |
+ EXPECT_TRUE(IsAllowed(another_extension, google, PERMITTED_CAPTURE_ONLY)); |
EXPECT_TRUE(IsBlocked(extension_without_active_tab, google)); |
EXPECT_TRUE(IsAllowed(extension, chromium)); |
@@ -253,8 +274,8 @@ TEST_F(ActiveTabTest, GrantToSinglePage) { |
EXPECT_TRUE(IsAllowed(another_extension, google)); |
EXPECT_TRUE(IsBlocked(extension_without_active_tab, google)); |
- EXPECT_TRUE(IsBlocked(extension, chromium)); |
- EXPECT_TRUE(IsBlocked(another_extension, chromium)); |
+ EXPECT_TRUE(IsAllowed(extension, chromium, PERMITTED_CAPTURE_ONLY)); |
+ EXPECT_TRUE(IsAllowed(another_extension, chromium, PERMITTED_CAPTURE_ONLY)); |
EXPECT_TRUE(IsBlocked(extension_without_active_tab, chromium)); |
}; |
@@ -294,7 +315,7 @@ TEST_F(ActiveTabTest, OnlyActiveTab) { |
active_tab_permission_granter()->GrantIfRequested(extension.get()); |
- EXPECT_TRUE(IsAllowed(extension, google, tab_id())); |
+ EXPECT_TRUE(IsAllowed(extension, google, PERMITTED_BOTH, tab_id())); |
EXPECT_TRUE(IsBlocked(extension, google, tab_id() + 1)); |
EXPECT_FALSE(HasTabsPermission(extension, tab_id() + 1)); |
} |
@@ -310,36 +331,36 @@ TEST_F(ActiveTabTest, NavigateInPage) { |
GURL google_h1("http://www.google.com#h1"); |
NavigateAndCommit(google_h1); |
- EXPECT_TRUE(IsAllowed(extension, google, tab_id())); |
- EXPECT_TRUE(IsAllowed(extension, google_h1, tab_id())); |
+ EXPECT_TRUE(IsAllowed(extension, google)); |
+ EXPECT_TRUE(IsAllowed(extension, google_h1)); |
GURL chromium("http://www.chromium.org"); |
NavigateAndCommit(chromium); |
- EXPECT_FALSE(IsAllowed(extension, google, tab_id())); |
- EXPECT_FALSE(IsAllowed(extension, google_h1, tab_id())); |
- EXPECT_FALSE(IsAllowed(extension, chromium, tab_id())); |
+ EXPECT_FALSE(IsAllowed(extension, google)); |
+ EXPECT_FALSE(IsAllowed(extension, google_h1)); |
+ EXPECT_FALSE(IsAllowed(extension, chromium)); |
active_tab_permission_granter()->GrantIfRequested(extension.get()); |
- EXPECT_FALSE(IsAllowed(extension, google, tab_id())); |
- EXPECT_FALSE(IsAllowed(extension, google_h1, tab_id())); |
- EXPECT_TRUE(IsAllowed(extension, chromium, tab_id())); |
+ EXPECT_FALSE(IsAllowed(extension, google)); |
+ EXPECT_FALSE(IsAllowed(extension, google_h1)); |
+ EXPECT_TRUE(IsAllowed(extension, chromium)); |
GURL chromium_h1("http://www.chromium.org#h1"); |
NavigateAndCommit(chromium_h1); |
- EXPECT_FALSE(IsAllowed(extension, google, tab_id())); |
- EXPECT_FALSE(IsAllowed(extension, google_h1, tab_id())); |
- EXPECT_TRUE(IsAllowed(extension, chromium, tab_id())); |
- EXPECT_TRUE(IsAllowed(extension, chromium_h1, tab_id())); |
+ EXPECT_FALSE(IsAllowed(extension, google)); |
+ EXPECT_FALSE(IsAllowed(extension, google_h1)); |
+ EXPECT_TRUE(IsAllowed(extension, chromium)); |
+ EXPECT_TRUE(IsAllowed(extension, chromium_h1)); |
Reload(); |
- EXPECT_FALSE(IsAllowed(extension, google, tab_id())); |
- EXPECT_FALSE(IsAllowed(extension, google_h1, tab_id())); |
- EXPECT_FALSE(IsAllowed(extension, chromium, tab_id())); |
- EXPECT_FALSE(IsAllowed(extension, chromium_h1, tab_id())); |
+ EXPECT_FALSE(IsAllowed(extension, google)); |
+ EXPECT_FALSE(IsAllowed(extension, google_h1)); |
+ EXPECT_FALSE(IsAllowed(extension, chromium)); |
+ EXPECT_FALSE(IsAllowed(extension, chromium_h1)); |
} |
TEST_F(ActiveTabTest, ChromeUrlGrants) { |
@@ -348,7 +369,8 @@ TEST_F(ActiveTabTest, ChromeUrlGrants) { |
active_tab_permission_granter()->GrantIfRequested( |
extension_with_tab_capture.get()); |
// Do not grant tabs/hosts permissions for tab. |
- EXPECT_TRUE(IsBlocked(extension_with_tab_capture, internal, tab_id())); |
+ EXPECT_TRUE(IsAllowed(extension_with_tab_capture, internal, |
+ PERMITTED_CAPTURE_ONLY)); |
EXPECT_TRUE(PermissionsData::HasAPIPermissionForTab( |
extension_with_tab_capture.get(), |
tab_id(), |