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

Unified Diff: chrome/browser/extensions/active_script_controller_browsertest.cc

Issue 288053002: Block content scripts from executing until user grants permission (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CQ Time! Created 6 years, 7 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
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
« no previous file with comments | « chrome/browser/extensions/active_script_controller.cc ('k') | chrome/browser/extensions/user_script_master.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698