Index: chrome/browser/extensions/active_script_controller_unittest.cc |
diff --git a/chrome/browser/extensions/active_script_controller_unittest.cc b/chrome/browser/extensions/active_script_controller_unittest.cc |
index 0b40328c14329891aeb22953d731e3e46710b495..6cc521e1e0f0e3445741a2b11189f5d06f593cc5 100644 |
--- a/chrome/browser/extensions/active_script_controller_unittest.cc |
+++ b/chrome/browser/extensions/active_script_controller_unittest.cc |
@@ -15,6 +15,7 @@ |
#include "content/public/browser/navigation_entry.h" |
#include "content/public/browser/web_contents.h" |
#include "extensions/browser/extension_registry.h" |
+#include "extensions/common/constants.h" |
#include "extensions/common/extension.h" |
#include "extensions/common/extension_builder.h" |
#include "extensions/common/feature_switch.h" |
@@ -43,19 +44,28 @@ class ActiveScriptControllerUnitTest : public ChromeRenderViewHostTestHarness { |
// Creates an extension with all hosts permission and adds it to the registry. |
const Extension* AddExtension(); |
- // Returns the current page id. |
- int GetPageId(); |
+ // Returns true if the |extension| requires user consent before injecting |
+ // a script. |
+ bool RequiresUserConsent(const Extension* extension) const; |
- // Returns a closure to use as a script execution for a given extension. |
- base::Closure GetExecutionCallbackForExtension( |
- const std::string& extension_id); |
+ // Request an injection for the given |extension|. |
+ void RequestInjection(const Extension* extension); |
// Returns the number of times a given extension has had a script execute. |
size_t GetExecutionCountForExtension(const std::string& extension_id) const; |
- ActiveScriptController* controller() { return active_script_controller_; } |
+ ActiveScriptController* controller() const { |
+ return active_script_controller_; |
+ } |
private: |
+ // Returns the current page id. |
+ int GetPageId(); |
+ |
+ // Returns a closure to use as a script execution for a given extension. |
+ base::Closure GetExecutionCallbackForExtension( |
+ const std::string& extension_id); |
+ |
// Increment the number of executions for the given |extension_id|. |
void IncrementExecutionCount(const std::string& extension_id); |
@@ -101,6 +111,33 @@ const Extension* ActiveScriptControllerUnitTest::AddExtension() { |
return extension; |
} |
+bool ActiveScriptControllerUnitTest::RequiresUserConsent( |
+ const Extension* extension) const { |
+ PermissionsData::AccessType access_type = |
+ controller()->RequiresUserConsentForScriptInjectionForTesting( |
+ extension, extension_misc::PROGRAMMATIC_SCRIPT); |
+ // We should never downright refuse access in these tests. |
+ DCHECK_NE(PermissionsData::DENY_ACCESS, access_type); |
+ return access_type == PermissionsData::REQUEST_ACCESS; |
+} |
+ |
+void ActiveScriptControllerUnitTest::RequestInjection( |
+ const Extension* extension) { |
+ controller()->RequestScriptInjectionForTesting( |
+ extension, |
+ GetPageId(), |
+ GetExecutionCallbackForExtension(extension->id())); |
+} |
+ |
+size_t ActiveScriptControllerUnitTest::GetExecutionCountForExtension( |
+ const std::string& extension_id) const { |
+ std::map<std::string, int>::const_iterator iter = |
+ extension_executions_.find(extension_id); |
+ if (iter != extension_executions_.end()) |
+ return iter->second; |
+ return 0u; |
+} |
+ |
int ActiveScriptControllerUnitTest::GetPageId() { |
content::NavigationEntry* navigation_entry = |
web_contents()->GetController().GetVisibleEntry(); |
@@ -117,15 +154,6 @@ base::Closure ActiveScriptControllerUnitTest::GetExecutionCallbackForExtension( |
extension_id); |
} |
-size_t ActiveScriptControllerUnitTest::GetExecutionCountForExtension( |
- const std::string& extension_id) const { |
- std::map<std::string, int>::const_iterator iter = |
- extension_executions_.find(extension_id); |
- if (iter != extension_executions_.end()) |
- return iter->second; |
- return 0u; |
-} |
- |
void ActiveScriptControllerUnitTest::IncrementExecutionCount( |
const std::string& extension_id) { |
++extension_executions_[extension_id]; |
@@ -157,14 +185,10 @@ TEST_F(ActiveScriptControllerUnitTest, RequestPermissionAndExecute) { |
ASSERT_FALSE(controller()->GetActionForExtension(extension)); |
// Since the extension requests all_hosts, we should require user consent. |
- EXPECT_TRUE( |
- controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_TRUE(RequiresUserConsent(extension)); |
// Request an injection. There should be an action visible, but no executions. |
- controller()->RequestScriptInjection( |
- extension, |
- GetPageId(), |
- GetExecutionCallbackForExtension(extension->id())); |
+ RequestInjection(extension); |
EXPECT_TRUE(controller()->GetActionForExtension(extension)); |
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
@@ -177,28 +201,22 @@ TEST_F(ActiveScriptControllerUnitTest, RequestPermissionAndExecute) { |
// Since we already executed on the given page, we shouldn't need permission |
// for a second time. |
- EXPECT_FALSE( |
- controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_FALSE(RequiresUserConsent(extension)); |
// Reloading should clear those permissions, and we should again require user |
// consent. |
Reload(); |
- EXPECT_TRUE( |
- controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_TRUE(RequiresUserConsent(extension)); |
// Grant access. |
- controller()->RequestScriptInjection( |
- extension, |
- GetPageId(), |
- GetExecutionCallbackForExtension(extension->id())); |
+ RequestInjection(extension); |
controller()->OnClicked(extension); |
EXPECT_EQ(2u, GetExecutionCountForExtension(extension->id())); |
EXPECT_FALSE(controller()->GetActionForExtension(extension)); |
// Navigating to another site should also clear the permissions. |
NavigateAndCommit(GURL("https://www.foo.com")); |
- EXPECT_TRUE( |
- controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_TRUE(RequiresUserConsent(extension)); |
} |
// Test that injections that are not executed by the time the user navigates are |
@@ -212,10 +230,7 @@ TEST_F(ActiveScriptControllerUnitTest, PendingInjectionsRemovedAtNavigation) { |
ASSERT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
// Request an injection. There should be an action visible, but no executions. |
- controller()->RequestScriptInjection( |
- extension, |
- GetPageId(), |
- GetExecutionCallbackForExtension(extension->id())); |
+ RequestInjection(extension); |
EXPECT_TRUE(controller()->GetActionForExtension(extension)); |
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
@@ -226,10 +241,7 @@ TEST_F(ActiveScriptControllerUnitTest, PendingInjectionsRemovedAtNavigation) { |
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
// Request and accept a new injection. |
- controller()->RequestScriptInjection( |
- extension, |
- GetPageId(), |
- GetExecutionCallbackForExtension(extension->id())); |
+ RequestInjection(extension); |
controller()->OnClicked(extension); |
// The extension should only have executed once, even though a grand total |
@@ -249,12 +261,9 @@ TEST_F(ActiveScriptControllerUnitTest, MultiplePendingInjection) { |
const size_t kNumInjections = 3u; |
// Queue multiple pending injections. |
- for (size_t i = 0u; i < kNumInjections; ++i) { |
- controller()->RequestScriptInjection( |
- extension, |
- GetPageId(), |
- GetExecutionCallbackForExtension(extension->id())); |
- } |
+ for (size_t i = 0u; i < kNumInjections; ++i) |
+ RequestInjection(extension); |
+ |
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
controller()->OnClicked(extension); |
@@ -278,17 +287,14 @@ TEST_F(ActiveScriptControllerUnitTest, ActiveScriptsUseActiveTabPermissions) { |
// Since we have active tab permissions, we shouldn't need user consent |
// anymore. |
- EXPECT_FALSE(controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_FALSE(RequiresUserConsent(extension)); |
// Also test that granting active tab runs any pending tasks. |
Reload(); |
// Navigating should mean we need permission again. |
- EXPECT_TRUE(controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_TRUE(RequiresUserConsent(extension)); |
- controller()->RequestScriptInjection( |
- extension, |
- GetPageId(), |
- GetExecutionCallbackForExtension(extension->id())); |
+ RequestInjection(extension); |
EXPECT_TRUE(controller()->GetActionForExtension(extension)); |
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id())); |
@@ -306,23 +312,23 @@ TEST_F(ActiveScriptControllerUnitTest, ActiveScriptsCanHaveAllUrlsPref) { |
ASSERT_TRUE(extension); |
NavigateAndCommit(GURL("https://www.google.com")); |
- EXPECT_TRUE(controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_TRUE(RequiresUserConsent(extension)); |
// Enable the extension on all urls. |
util::SetAllowedScriptingOnAllUrls(extension->id(), profile(), true); |
- EXPECT_FALSE(controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_FALSE(RequiresUserConsent(extension)); |
// This should carry across navigations, and websites. |
NavigateAndCommit(GURL("http://www.foo.com")); |
- EXPECT_FALSE(controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_FALSE(RequiresUserConsent(extension)); |
// Turning off the preference should have instant effect. |
util::SetAllowedScriptingOnAllUrls(extension->id(), profile(), false); |
- EXPECT_TRUE(controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_TRUE(RequiresUserConsent(extension)); |
// And should also persist across navigations and websites. |
NavigateAndCommit(GURL("http://www.bar.com")); |
- EXPECT_TRUE(controller()->RequiresUserConsentForScriptInjection(extension)); |
+ EXPECT_TRUE(RequiresUserConsent(extension)); |
} |
} // namespace extensions |