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

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: UMA 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..2716e8bce0981bed865fdaca664a1ee449b8aad3
--- /dev/null
+++ b/chrome/browser/extensions/active_script_controller_browsertest.cc
@@ -0,0 +1,109 @@
+// 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 "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 {
+
+namespace {
+
+// Returns true if there is an ExtensionAction with the given |extension_id| in
+// |actions|.
+bool ActionsContainId(const std::vector<ExtensionAction*>& actions,
+ const std::string& extension_id) {
+ for (std::vector<ExtensionAction*>::const_iterator iter = actions.begin();
+ iter != actions.end();
+ ++iter) {
+ if ((*iter)->extension_id() == extension_id)
+ return true;
+ }
+ return false;
+}
+
+} // namespace
+
+class ActiveScriptControllerBrowserTest : public ExtensionBrowserTest {
+ public:
+ ActiveScriptControllerBrowserTest()
+ : feature_override_(FeatureSwitch::active_script_enforcement(),
+ FeatureSwitch::OVERRIDE_ENABLED) {}
+ private:
+ FeatureSwitch::ScopedOverride feature_override_;
+};
+
+IN_PROC_BROWSER_TEST_F(ActiveScriptControllerBrowserTest,
+ ActiveScriptsAreDisplayed) {
+ base::FilePath active_script_path =
+ test_data_dir_.AppendASCII("active_script");
+
+ // 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.
+ const Extension* content_scripts_all_hosts = LoadExtension(
+ active_script_path.AppendASCII("content_scripts_all_hosts"));
+ ASSERT_TRUE(content_scripts_all_hosts);
+ const Extension* inject_scripts_all_hosts = LoadExtension(
+ active_script_path.AppendASCII("inject_scripts_all_hosts"));
+ ASSERT_TRUE(inject_scripts_all_hosts);
+ const Extension* content_scripts_explicit_hosts = LoadExtension(
+ active_script_path.AppendASCII("content_scripts_explicit_hosts"));
+ ASSERT_TRUE(content_scripts_explicit_hosts);
+
+ // 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.
+ ExtensionTestMessageListener content_scripts_all_hosts_listener(
+ "content_scripts_all_hosts", false /* won't reply */);
+ ExtensionTestMessageListener inject_scripts_all_hosts_listener(
+ "inject_scripts_all_hosts", false /* won't reply */);
+ ExtensionTestMessageListener content_scripts_explicit_hosts_listener(
+ "content_scripts_explicit_hosts", false /* won't reply */);
+
+ // 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"));
+
+ // Wait for them all to complete.
+ content_scripts_all_hosts_listener.WaitUntilSatisfied();
+ content_scripts_explicit_hosts_listener.WaitUntilSatisfied();
+ inject_scripts_all_hosts_listener.WaitUntilSatisfied();
+
+ // Retrieve the ActiveScriptController for that tab.
+ content::WebContents* web_contents =
+ browser()->tab_strip_model()->GetActiveWebContents();
+ ASSERT_TRUE(web_contents);
+ TabHelper* tab_helper = TabHelper::FromWebContents(web_contents);
+ ASSERT_TRUE(tab_helper);
+ ActiveScriptController* controller =
+ tab_helper->location_bar_controller()->active_script_controller();
+ ASSERT_TRUE(controller);
+
+ // Verify the shown ExtensionActions. Each of the extensions with "all hosts"
+ // should be displayed, but the extension that specified explicit hosts
+ // should not.
+ std::vector<ExtensionAction*> actions = controller->GetCurrentActions();
+ EXPECT_EQ(2u, actions.size());
+ EXPECT_TRUE(ActionsContainId(actions, content_scripts_all_hosts->id()));
+ EXPECT_TRUE(ActionsContainId(actions, inject_scripts_all_hosts->id()));
+ EXPECT_FALSE(ActionsContainId(actions, content_scripts_explicit_hosts->id()));
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698