fune/browser/base/content/test/general/browser_addKeywordSearch.js
Perry Jiang 15d0cf7b73 Bug 1360406 - Remove context menu sync IPC. r=felipe
MozReview-Commit-ID: 1oCwC283Suv
2017-08-21 15:42:37 -07:00

81 lines
2.9 KiB
JavaScript

var testData = [
{ desc: "No path",
action: "http://example.com/",
param: "q",
},
{ desc: "With path",
action: "http://example.com/new-path-here/",
param: "q",
},
{ desc: "No action",
action: "",
param: "q",
},
{ desc: "With Query String",
action: "http://example.com/search?oe=utf-8",
param: "q",
},
];
add_task(async function() {
const TEST_URL = "http://example.org/browser/browser/base/content/test/general/dummy_page.html";
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_URL);
let count = 0;
for (let method of ["GET", "POST"]) {
for (let {desc, action, param } of testData) {
info(`Running ${method} keyword test '${desc}'`);
let id = `keyword-form-${count++}`;
let contextMenu = document.getElementById("contentAreaContextMenu");
let contextMenuPromise =
BrowserTestUtils.waitForEvent(contextMenu, "popupshown")
.then(() => gContextMenuContentData.target);
await ContentTask.spawn(tab.linkedBrowser,
{ action, param, method, id }, async function(args) {
let doc = content.document;
let form = doc.createElement("form");
form.id = args.id;
form.method = args.method;
form.action = args.action;
let element = doc.createElement("input");
element.setAttribute("type", "text");
element.setAttribute("name", args.param);
form.appendChild(element);
doc.body.appendChild(form);
});
await BrowserTestUtils.synthesizeMouseAtCenter(`#${id} > input`,
{ type: "contextmenu", button: 2 },
tab.linkedBrowser);
let target = await contextMenuPromise;
await new Promise(resolve => {
let url = action || tab.linkedBrowser.currentURI.spec;
let mm = tab.linkedBrowser.messageManager;
let onMessage = (message) => {
mm.removeMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage);
if (method == "GET") {
ok(message.data.spec.endsWith(`${param}=%s`),
`Check expected url for field named ${param} and action ${action}`);
} else {
is(message.data.spec, url,
`Check expected url for field named ${param} and action ${action}`);
is(message.data.postData, `${param}%3D%25s`,
`Check expected POST data for field named ${param} and action ${action}`);
}
resolve();
};
mm.addMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage);
mm.sendAsyncMessage("ContextMenu:SearchFieldBookmarkData", null, { target });
});
let popupHiddenPromise = BrowserTestUtils.waitForEvent(contextMenu, "popuphidden");
contextMenu.hidePopup();
await popupHiddenPromise;
}
}
await BrowserTestUtils.removeTab(tab);
});