michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: /* michael@0: * Test searching for the selected text using the context menu michael@0: */ michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: const ss = Services.search; michael@0: const ENGINE_NAME = "Foo"; michael@0: var contextMenu; michael@0: michael@0: function observer(aSub, aTopic, aData) { michael@0: switch (aData) { michael@0: case "engine-added": michael@0: var engine = ss.getEngineByName(ENGINE_NAME); michael@0: ok(engine, "Engine was added."); michael@0: ss.currentEngine = engine; michael@0: break; michael@0: case "engine-current": michael@0: is(ss.currentEngine.name, ENGINE_NAME, "currentEngine set"); michael@0: startTest(); michael@0: break; michael@0: case "engine-removed": michael@0: Services.obs.removeObserver(observer, "browser-search-engine-modified"); michael@0: finish(); michael@0: break; michael@0: } michael@0: } michael@0: michael@0: Services.obs.addObserver(observer, "browser-search-engine-modified", false); michael@0: ss.addEngine("http://mochi.test:8888/browser/browser/components/search/test/testEngine_mozsearch.xml", michael@0: Ci.nsISearchEngine.DATA_XML, "data:image/x-icon,%00", michael@0: false); michael@0: michael@0: function startTest() { michael@0: contextMenu = document.getElementById("contentAreaContextMenu"); michael@0: ok(contextMenu, "Got context menu XUL"); michael@0: michael@0: doOnloadOnce(testContextMenu); michael@0: let tab = gBrowser.selectedTab = gBrowser.addTab("data:text/plain;charset=utf8,test%20search"); michael@0: registerCleanupFunction(function () { michael@0: gBrowser.removeTab(tab); michael@0: }); michael@0: } michael@0: michael@0: function testContextMenu() { michael@0: function rightClickOnDocument() { michael@0: info("rightClickOnDocument: " + content.window.location); michael@0: waitForBrowserContextMenu(checkContextMenu); michael@0: var clickTarget = content.document.body; michael@0: var eventDetails = { type: "contextmenu", button: 2 }; michael@0: EventUtils.synthesizeMouseAtCenter(clickTarget, eventDetails, content); michael@0: } michael@0: michael@0: // check the search menu item and then perform a search michael@0: function checkContextMenu() { michael@0: info("checkContextMenu"); michael@0: var searchItem = contextMenu.getElementsByAttribute("id", "context-searchselect")[0]; michael@0: ok(searchItem, "Got search context menu item"); michael@0: is(searchItem.label, 'Search ' + ENGINE_NAME + ' for "test search"', "Check context menu label"); michael@0: is(searchItem.disabled, false, "Check that search context menu item is enabled"); michael@0: doOnloadOnce(checkSearchURL); michael@0: searchItem.click(); michael@0: contextMenu.hidePopup(); michael@0: } michael@0: michael@0: function checkSearchURL(event) { michael@0: is(event.originalTarget.URL, michael@0: "http://mochi.test:8888/browser/browser/components/search/test/?test=test+search&ie=utf-8&client=app&channel=contextsearch", michael@0: "Checking context menu search URL"); michael@0: // Remove the tab opened by the search michael@0: gBrowser.removeCurrentTab(); michael@0: ss.removeEngine(ss.currentEngine); michael@0: } michael@0: michael@0: var selectionListener = { michael@0: notifySelectionChanged: function(doc, sel, reason) { michael@0: if (reason != Ci.nsISelectionListener.SELECTALL_REASON || sel.toString() != "test search") michael@0: return; michael@0: info("notifySelectionChanged: Text selected"); michael@0: content.window.getSelection().QueryInterface(Ci.nsISelectionPrivate). michael@0: removeSelectionListener(selectionListener); michael@0: SimpleTest.executeSoon(rightClickOnDocument); michael@0: } michael@0: }; michael@0: michael@0: // Delay the select all to avoid intermittent selection failures. michael@0: setTimeout(function delaySelectAll() { michael@0: info("delaySelectAll: " + content.window.location.toString()); michael@0: // add a listener to know when the selection takes effect michael@0: content.window.getSelection().QueryInterface(Ci.nsISelectionPrivate). michael@0: addSelectionListener(selectionListener); michael@0: // select the text on the page michael@0: goDoCommand('cmd_selectAll'); michael@0: }, 500); michael@0: } michael@0: }