diff options
Diffstat (limited to 'browser/components/search/test/browser_oneOffContextMenu.js')
-rw-r--r-- | browser/components/search/test/browser_oneOffContextMenu.js | 105 |
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"); +} |