Index: chrome/browser/extensions/active_script_controller_browsertest.cc |
diff --git a/chrome/browser/extensions/active_script_controller_browsertest.cc b/chrome/browser/extensions/active_script_controller_browsertest.cc |
index 6234be632b03aae07a700e022288c18b34e73c83..d850b018033715cf4d9e3c3e6c2994408444607a 100644 |
--- a/chrome/browser/extensions/active_script_controller_browsertest.cc |
+++ b/chrome/browser/extensions/active_script_controller_browsertest.cc |
@@ -16,6 +16,7 @@ |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
#include "chrome/test/base/ui_test_utils.h" |
#include "extensions/common/feature_switch.h" |
+#include "extensions/common/switches.h" |
#include "net/test/embedded_test_server/embedded_test_server.h" |
#include "testing/gtest/include/gtest/gtest.h" |
@@ -61,10 +62,9 @@ enum RequiresConsent { |
class ActiveScriptControllerBrowserTest : public ExtensionBrowserTest { |
public: |
- ActiveScriptControllerBrowserTest() |
- : feature_override_(FeatureSwitch::scripts_require_action(), |
- FeatureSwitch::OVERRIDE_ENABLED) {} |
+ ActiveScriptControllerBrowserTest() {} |
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; |
virtual void CleanUpOnMainThread() OVERRIDE; |
// Returns an extension with the given |host_type| and |injection_type|. If |
@@ -75,11 +75,19 @@ class ActiveScriptControllerBrowserTest : public ExtensionBrowserTest { |
InjectionType injection_type); |
private: |
- FeatureSwitch::ScopedOverride feature_override_; |
ScopedVector<TestExtensionDir> test_extension_dirs_; |
std::vector<const Extension*> extensions_; |
}; |
+void ActiveScriptControllerBrowserTest::SetUpCommandLine( |
+ base::CommandLine* command_line) { |
+ ExtensionBrowserTest::SetUpCommandLine(command_line); |
+ // We append the actual switch to the commandline because it needs to be |
+ // passed over to the renderer, which a FeatureSwitch::ScopedOverride will |
+ // not do. |
+ command_line->AppendSwitch(switches::kEnableScriptsRequireAction); |
+} |
+ |
void ActiveScriptControllerBrowserTest::CleanUpOnMainThread() { |
test_extension_dirs_.clear(); |
} |
@@ -266,10 +274,7 @@ testing::AssertionResult ActiveScriptTester::Verify() { |
// Otherwise, we don't have permission, and have to grant it. Ensure the |
// script has *not* already executed. |
- // Currently, it's okay for content scripts to execute, because we don't |
- // block them. |
- // TODO(rdevlin.cronin): Fix this. |
- if (inject_success_listener_->was_satisfied() && type_ != CONTENT_SCRIPT) { |
+ if (inject_success_listener_->was_satisfied()) { |
return testing::AssertionFailure() << |
name_ << "'s script ran without permission."; |
} |
@@ -316,7 +321,7 @@ ExtensionAction* ActiveScriptTester::GetAction() { |
} |
IN_PROC_BROWSER_TEST_F(ActiveScriptControllerBrowserTest, |
- ActiveScriptsAreDisplayed) { |
+ ActiveScriptsAreDisplayedAndDelayExecution) { |
base::FilePath active_script_path = |
test_data_dir_.AppendASCII("active_script"); |
@@ -362,7 +367,7 @@ IN_PROC_BROWSER_TEST_F(ActiveScriptControllerBrowserTest, |
}; |
// Navigate to an URL (which matches the explicit host specified in the |
- // extension content_scripts_explicit_hosts). All three extensions should |
+ // extension content_scripts_explicit_hosts). All four extensions should |
// inject the script. |
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
ui_test_utils::NavigateToURL( |
@@ -372,4 +377,44 @@ IN_PROC_BROWSER_TEST_F(ActiveScriptControllerBrowserTest, |
EXPECT_TRUE(testers[i].Verify()) << kExtensionNames[i]; |
} |
+// A version of the test with the flag off, in order to test that everything |
+// still works as expected. |
+class FlagOffActiveScriptControllerBrowserTest |
+ : public ActiveScriptControllerBrowserTest { |
+ private: |
+ // Simply don't append the flag. |
+ virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { |
+ ExtensionBrowserTest::SetUpCommandLine(command_line); |
+ } |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(FlagOffActiveScriptControllerBrowserTest, |
+ ScriptsExecuteWhenFlagAbsent) { |
+ const char* kExtensionNames[] = { |
+ "content_scripts_all_hosts", |
+ "inject_scripts_all_hosts", |
+ }; |
+ ActiveScriptTester testers[] = { |
+ ActiveScriptTester( |
+ kExtensionNames[0], |
+ GetOrCreateExtension(ALL_HOSTS, CONTENT_SCRIPT), |
+ browser(), |
+ DOES_NOT_REQUIRE_CONSENT, |
+ CONTENT_SCRIPT), |
+ ActiveScriptTester( |
+ kExtensionNames[1], |
+ GetOrCreateExtension(ALL_HOSTS, EXECUTE_SCRIPT), |
+ browser(), |
+ DOES_NOT_REQUIRE_CONSENT, |
+ EXECUTE_SCRIPT), |
+ }; |
+ |
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
+ ui_test_utils::NavigateToURL( |
+ browser(), embedded_test_server()->GetURL("/extensions/test_file.html")); |
+ |
+ for (size_t i = 0u; i < arraysize(testers); ++i) |
+ EXPECT_TRUE(testers[i].Verify()) << kExtensionNames[i]; |
+} |
+ |
} // namespace extensions |