gecko-dev/browser/components/search/test/browser_contextmenu.js

101 строка
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();
});