forked from mirrors/gecko-dev
100 lines
3.6 KiB
JavaScript
100 lines
3.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* * http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
/*
|
|
* Test searching for the selected text using the context menu
|
|
*/
|
|
|
|
add_task(async function() {
|
|
const ss = Services.search;
|
|
const ENGINE_NAME = "Foo";
|
|
var contextMenu;
|
|
|
|
// We want select events to be fired.
|
|
await SpecialPowers.pushPrefEnv({set: [["dom.select_events.enabled", true]]});
|
|
|
|
let envService = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment);
|
|
let originalValue = envService.get("XPCSHELL_TEST_PROFILE_DIR");
|
|
envService.set("XPCSHELL_TEST_PROFILE_DIR", "1");
|
|
|
|
let url = "chrome://mochitests/content/browser/browser/components/search/test/";
|
|
let resProt = Services.io.getProtocolHandler("resource")
|
|
.QueryInterface(Ci.nsIResProtocolHandler);
|
|
let originalSubstitution = resProt.getSubstitution("search-plugins");
|
|
resProt.setSubstitution("search-plugins",
|
|
Services.io.newURI(url));
|
|
|
|
let searchDonePromise;
|
|
await new Promise(resolve => {
|
|
function observer(aSub, aTopic, aData) {
|
|
switch (aData) {
|
|
case "engine-added":
|
|
var engine = ss.getEngineByName(ENGINE_NAME);
|
|
ok(engine, "Engine was added.");
|
|
ss.currentEngine = engine;
|
|
envService.set("XPCSHELL_TEST_PROFILE_DIR", originalValue);
|
|
resProt.setSubstitution("search-plugins", originalSubstitution);
|
|
break;
|
|
case "engine-current":
|
|
is(ss.currentEngine.name, ENGINE_NAME, "currentEngine set");
|
|
resolve();
|
|
break;
|
|
case "engine-removed":
|
|
Services.obs.removeObserver(observer, "browser-search-engine-modified");
|
|
if (searchDonePromise) {
|
|
searchDonePromise();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
Services.obs.addObserver(observer, "browser-search-engine-modified");
|
|
ss.addEngine("resource://search-plugins/testEngine_mozsearch.xml",
|
|
null, "data:image/x-icon,%00", false);
|
|
});
|
|
|
|
contextMenu = document.getElementById("contentAreaContextMenu");
|
|
ok(contextMenu, "Got context menu XUL");
|
|
|
|
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "data:text/plain;charset=utf8,test%20search");
|
|
|
|
await ContentTask.spawn(tab.linkedBrowser, "", async function() {
|
|
return new Promise(resolve => {
|
|
content.document.addEventListener("selectionchange", function() {
|
|
resolve();
|
|
}, {once: true});
|
|
content.document.getSelection().selectAllChildren(content.document.body);
|
|
});
|
|
});
|
|
|
|
var eventDetails = { type: "contextmenu", button: 2 };
|
|
|
|
let popupPromise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
|
|
BrowserTestUtils.synthesizeMouseAtCenter("body", eventDetails, gBrowser.selectedBrowser);
|
|
await popupPromise;
|
|
|
|
info("checkContextMenu");
|
|
var searchItem = contextMenu.getElementsByAttribute("id", "context-searchselect")[0];
|
|
ok(searchItem, "Got search context menu item");
|
|
is(searchItem.label, "Search " + ENGINE_NAME + " for \u201ctest search\u201d", "Check context menu label");
|
|
is(searchItem.disabled, false, "Check that search context menu item is enabled");
|
|
|
|
await BrowserTestUtils.openNewForegroundTab(gBrowser, () => {
|
|
searchItem.click();
|
|
});
|
|
|
|
is(gBrowser.currentURI.spec,
|
|
"http://mochi.test:8888/browser/browser/components/search/test/?test=test+search&ie=utf-8&channel=contextsearch",
|
|
"Checking context menu search URL");
|
|
|
|
contextMenu.hidePopup();
|
|
|
|
// Remove the tab opened by the search
|
|
gBrowser.removeCurrentTab();
|
|
|
|
await new Promise(resolve => {
|
|
searchDonePromise = resolve;
|
|
ss.removeEngine(ss.currentEngine);
|
|
});
|
|
|
|
gBrowser.removeCurrentTab();
|
|
});
|