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

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

Issue 270153004: Introduce ActiveScriptController; track active extension scripts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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
new file mode 100644
index 0000000000000000000000000000000000000000..66c09f48c94282d6829fb413d331e587f655ef22
--- /dev/null
+++ b/chrome/browser/extensions/active_script_controller_browsertest.cc
@@ -0,0 +1,144 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/macros.h"
+#include "chrome/browser/extensions/active_script_controller.h"
+#include "chrome/browser/extensions/extension_action.h"
+#include "chrome/browser/extensions/extension_browsertest.h"
+#include "chrome/browser/extensions/extension_test_message_listener.h"
+#include "chrome/browser/extensions/location_bar_controller.h"
+#include "chrome/browser/extensions/tab_helper.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "extensions/common/feature_switch.h"
+#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+class ActiveScriptControllerBrowserTest : public ExtensionBrowserTest {
+ public:
+ ActiveScriptControllerBrowserTest()
+ : feature_override_(FeatureSwitch::scripts_require_action(),
+ FeatureSwitch::OVERRIDE_ENABLED) {}
+ private:
+ FeatureSwitch::ScopedOverride feature_override_;
+};
+
+class ActiveScriptTester {
+ public:
+ ActiveScriptTester(const std::string& name,
+ const Extension* extension,
+ bool expect_has_action);
+ ~ActiveScriptTester();
+
+ testing::AssertionResult Verify(Browser* browser);
+
+ private:
+ // The name of the extension, and also the message it sends.
+ std::string name_;
+
+ // The extension associated with this tester.
+ const Extension* extension_;
+
+ // Whether or not we expect the extension to have an action for script
+ // injection.
+ bool expect_has_action_;
+
+ // All of these extensions should inject a script (either through content
+ // scripts or through chrome.tabs.executeScript()) that sends a message with
+ // their names (for verification).
+ // Be prepared to wait for each extension to inject the script.
+ linked_ptr<ExtensionTestMessageListener> listener_;
+};
+
+ActiveScriptTester::ActiveScriptTester(
+ const std::string& name,
+ const Extension* extension,
+ bool expect_has_action)
+ : name_(name),
+ extension_(extension),
+ expect_has_action_(expect_has_action),
+ listener_(
+ new ExtensionTestMessageListener(name, false /* won't reply */)) {
+}
+
+ActiveScriptTester::~ActiveScriptTester() {
+}
+
+testing::AssertionResult ActiveScriptTester::Verify(Browser* browser) {
+ if (!extension_)
+ return testing::AssertionFailure() << "Could not load extension: " << name_;
not at google - send to devlin 2014/05/08 23:33:19 what happened to your RETURN_IF_FALSE macro?
Devlin 2014/05/09 00:15:32 I don't wanna just chuck it into a test file. I'l
+
+ listener_->WaitUntilSatisfied();
+ content::WebContents* web_contents =
+ browser ? browser->tab_strip_model()->GetActiveWebContents() : NULL;
+
+ if (!web_contents)
+ return testing::AssertionFailure() << "Could not find web contents.";
+
+ TabHelper* tab_helper = TabHelper::FromWebContents(web_contents);
+ if (!tab_helper)
+ return testing::AssertionFailure() << "Could not find tab helper.";
+
+ ActiveScriptController* controller =
+ tab_helper->location_bar_controller()->active_script_controller();
+ if (!controller)
+ return testing::AssertionFailure() << "Could not find controller.";
+
+ bool has_action = controller->GetActionForExtension(extension_) != NULL;
+ if (expect_has_action_ != has_action) {
+ return testing::AssertionFailure()
+ << "Improper action status: expected " << expect_has_action_
+ << ", found " << has_action;
+ }
+
+ return testing::AssertionSuccess();
+}
+
+
+IN_PROC_BROWSER_TEST_F(ActiveScriptControllerBrowserTest,
+ ActiveScriptsAreDisplayed) {
+ base::FilePath active_script_path =
+ test_data_dir_.AppendASCII("active_script");
+
+ const char* kExtensionNames[] = {
+ "content_scripts_all_hosts",
+ "inject_scripts_all_hosts",
+ "content_scripts_explicit_hosts"
+ };
+
+ // First, we load up three extensions:
+ // - An extension with a content script that runs on all hosts,
+ // - An extension that injects scripts into all hosts,
+ // - An extension with a content script that runs on explicit hosts.
+ ActiveScriptTester testers[] = {
+ ActiveScriptTester(
+ kExtensionNames[0],
+ LoadExtension(active_script_path.AppendASCII(kExtensionNames[0])),
+ true /* expect action */),
+ ActiveScriptTester(
+ kExtensionNames[1],
+ LoadExtension(active_script_path.AppendASCII(kExtensionNames[1])),
+ true /* expect action */),
+ ActiveScriptTester(
+ kExtensionNames[2],
+ LoadExtension(active_script_path.AppendASCII(kExtensionNames[2])),
+ false /* expect action */)
+ };
+
+ // Navigate to an URL (which matches the explicit host specified in the
+ // extension content_scripts_explicit_hosts). All three extensions should
+ // inject the 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)
+ ASSERT_TRUE(testers[i].Verify(browser())) << kExtensionNames[i];
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698