summaryrefslogtreecommitdiffstats
path: root/browser/components/search/test/browser_oneOffContextMenu.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/search/test/browser_oneOffContextMenu.js')
-rw-r--r--browser/components/search/test/browser_oneOffContextMenu.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/browser/components/search/test/browser_oneOffContextMenu.js b/browser/components/search/test/browser_oneOffContextMenu.js
new file mode 100644
index 000000000..69207923b
--- /dev/null
+++ b/browser/components/search/test/browser_oneOffContextMenu.js
@@ -0,0 +1,105 @@
+"use strict";
+
+const TEST_ENGINE_NAME = "Foo";
+const TEST_ENGINE_BASENAME = "testEngine.xml";
+
+const searchbar = document.getElementById("searchbar");
+const searchPopup = document.getElementById("PopupSearchAutoComplete");
+const searchIcon = document.getAnonymousElementByAttribute(
+ searchbar, "anonid", "searchbar-search-button"
+);
+const oneOffBinding = document.getAnonymousElementByAttribute(
+ searchPopup, "anonid", "search-one-off-buttons"
+);
+const contextMenu = document.getAnonymousElementByAttribute(
+ oneOffBinding, "anonid", "search-one-offs-context-menu"
+);
+const oneOffButtons = document.getAnonymousElementByAttribute(
+ oneOffBinding, "anonid", "search-panel-one-offs"
+);
+const searchInNewTabMenuItem = document.getAnonymousElementByAttribute(
+ oneOffBinding, "anonid", "search-one-offs-context-open-in-new-tab"
+);
+
+add_task(function* init() {
+ yield promiseNewEngine(TEST_ENGINE_BASENAME, {
+ setAsCurrent: false,
+ });
+});
+
+add_task(function* extendedTelemetryDisabled() {
+ yield SpecialPowers.pushPrefEnv({set: [["toolkit.telemetry.enabled", false]]});
+ yield doTest();
+ checkTelemetry("other");
+});
+
+add_task(function* extendedTelemetryEnabled() {
+ yield SpecialPowers.pushPrefEnv({set: [["toolkit.telemetry.enabled", true]]});
+ yield doTest();
+ checkTelemetry("other-" + TEST_ENGINE_NAME);
+});
+
+function* doTest() {
+ // Open the popup.
+ let promise = promiseEvent(searchPopup, "popupshown");
+ info("Opening search panel");
+ EventUtils.synthesizeMouseAtCenter(searchIcon, {});
+ yield promise;
+
+ // Get the one-off button for the test engine.
+ let oneOffButton;
+ for (let node of oneOffButtons.childNodes) {
+ if (node.engine && node.engine.name == TEST_ENGINE_NAME) {
+ oneOffButton = node;
+ break;
+ }
+ }
+ Assert.notEqual(oneOffButton, undefined,
+ "One-off for test engine should exist");
+
+ // Open the context menu on the one-off.
+ promise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
+ EventUtils.synthesizeMouseAtCenter(oneOffButton, {
+ type: "contextmenu",
+ button: 2,
+ });
+ yield promise;
+
+ // Click the Search in New Tab menu item.
+ promise = BrowserTestUtils.waitForNewTab(gBrowser);
+ EventUtils.synthesizeMouseAtCenter(searchInNewTabMenuItem, {});
+ let tab = yield promise;
+
+ // By default the search will open in the background and the popup will stay open:
+ promise = promiseEvent(searchPopup, "popuphidden");
+ info("Closing search panel");
+ EventUtils.synthesizeKey("VK_ESCAPE", {});
+ yield promise;
+
+ // Check the loaded tab.
+ Assert.equal(tab.linkedBrowser.currentURI.spec,
+ "http://mochi.test:8888/browser/browser/components/search/test/",
+ "Expected search tab should have loaded");
+
+ yield BrowserTestUtils.removeTab(tab);
+
+ // Move the cursor out of the panel area to avoid messing with other tests.
+ yield EventUtils.synthesizeNativeMouseMove(searchbar);
+}
+
+function checkTelemetry(expectedEngineName) {
+ let propertyPath = [
+ "countableEvents",
+ "__DEFAULT__",
+ "search-oneoff",
+ expectedEngineName + ".oneoff-context-searchbar",
+ "unknown",
+ "tab-background",
+ ];
+ let telem = BrowserUITelemetry.getToolbarMeasures();
+ for (let prop of propertyPath) {
+ Assert.ok(prop in telem, "Property " + prop + " should be in the telemetry");
+ telem = telem[prop];
+ }
+ Assert.equal(telem, 1, "Click count");
+}