2011-03-19 00:56:46 +03:00
|
|
|
/* 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
|
|
|
|
*/
|
|
|
|
|
2016-01-20 16:42:15 +03:00
|
|
|
add_task(function* () {
|
2011-03-19 00:56:46 +03:00
|
|
|
const ss = Services.search;
|
|
|
|
const ENGINE_NAME = "Foo";
|
|
|
|
var contextMenu;
|
|
|
|
|
2015-10-30 11:54:52 +03:00
|
|
|
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, null, null));
|
|
|
|
|
2016-01-20 16:42:15 +03:00
|
|
|
let searchDonePromise;
|
|
|
|
yield 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;
|
|
|
|
}
|
2011-03-19 00:56:46 +03:00
|
|
|
}
|
|
|
|
|
2016-01-20 16:42:15 +03:00
|
|
|
Services.obs.addObserver(observer, "browser-search-engine-modified", false);
|
|
|
|
ss.addEngine("resource://search-plugins/testEngine_mozsearch.xml",
|
|
|
|
null, "data:image/x-icon,%00", false);
|
|
|
|
});
|
2011-03-19 00:56:46 +03:00
|
|
|
|
2016-01-20 16:42:15 +03:00
|
|
|
contextMenu = document.getElementById("contentAreaContextMenu");
|
|
|
|
ok(contextMenu, "Got context menu XUL");
|
2011-03-19 00:56:46 +03:00
|
|
|
|
2016-01-20 16:42:15 +03:00
|
|
|
let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "data:text/plain;charset=utf8,test%20search");
|
|
|
|
|
|
|
|
yield ContentTask.spawn(tab.linkedBrowser, "", function*() {
|
|
|
|
return new Promise(resolve => {
|
|
|
|
content.document.addEventListener("selectionchange", function selectionChanged() {
|
|
|
|
content.document.removeEventListener("selectionchange", selectionChanged);
|
|
|
|
resolve();
|
|
|
|
});
|
|
|
|
content.document.getSelection().selectAllChildren(content.document.body);
|
2013-06-08 02:34:25 +04:00
|
|
|
});
|
2016-01-20 16:42:15 +03:00
|
|
|
});
|
2011-03-19 00:56:46 +03:00
|
|
|
|
2016-01-20 16:42:15 +03:00
|
|
|
var eventDetails = { type: "contextmenu", button: 2 };
|
2011-03-19 00:56:46 +03:00
|
|
|
|
2016-01-20 16:42:15 +03:00
|
|
|
let popupPromise = BrowserTestUtils.waitForEvent(contextMenu, "popupshown");
|
|
|
|
BrowserTestUtils.synthesizeMouseAtCenter("body", eventDetails, gBrowser.selectedBrowser);
|
|
|
|
yield popupPromise;
|
2011-03-19 00:56:46 +03:00
|
|
|
|
2016-01-20 16:42:15 +03:00
|
|
|
info("checkContextMenu");
|
|
|
|
var searchItem = contextMenu.getElementsByAttribute("id", "context-searchselect")[0];
|
|
|
|
ok(searchItem, "Got search context menu item");
|
|
|
|
is(searchItem.label, 'Search ' + ENGINE_NAME + ' for "test search"', "Check context menu label");
|
|
|
|
is(searchItem.disabled, false, "Check that search context menu item is enabled");
|
|
|
|
|
|
|
|
yield 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();
|
|
|
|
|
|
|
|
yield new Promise(resolve => {
|
|
|
|
searchDonePromise = resolve;
|
|
|
|
ss.removeEngine(ss.currentEngine);
|
|
|
|
});
|
|
|
|
|
|
|
|
gBrowser.removeCurrentTab();
|
|
|
|
});
|