tenfourfox/browser/base/content/test/general/browser_addKeywordSearch.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

83 lines
3.2 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
var testData = [
/* baseURI, field name, expected */
[ 'http://example.com/', 'q', 'http://example.com/?q=%s' ],
[ 'http://example.com/new-path-here/', 'q', 'http://example.com/new-path-here/?q=%s' ],
[ '', 'q', 'http://example.org/browser/browser/base/content/test/general/dummy_page.html?q=%s' ],
// Tests for proper behaviour when called on a form whose action contains a question mark.
[ 'http://example.com/search?oe=utf-8', 'q', 'http://example.com/search?oe=utf-8&q=%s' ],
];
var mm = gBrowser.selectedBrowser.messageManager;
add_task(function*() {
yield BrowserTestUtils.withNewTab({
gBrowser,
url: "http://example.org/browser/browser/base/content/test/general/dummy_page.html",
}, function* (browser) {
yield ContentTask.spawn(browser, null, function* () {
let doc = content.document;
let base = doc.createElement("base");
doc.head.appendChild(base);
});
for (let [baseURI, fieldName, expected] of testData) {
let popupShownPromise = BrowserTestUtils.waitForEvent(document.getElementById("contentAreaContextMenu"),
"popupshown");
yield ContentTask.spawn(browser, { baseURI, fieldName }, function* (args) {
let doc = content.document;
let base = doc.querySelector('head > base');
base.href = args.baseURI;
let form = doc.createElement("form");
form.id = "keyword-form";
let element = doc.createElement("input");
element.setAttribute("type", "text");
element.setAttribute("name", args.fieldName);
form.appendChild(element);
doc.body.appendChild(form);
/* Open context menu so chrome can access the element */
const domWindowUtils =
content.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(Components.interfaces.nsIDOMWindowUtils);
let rect = element.getBoundingClientRect();
let left = rect.left + rect.width / 2;
let top = rect.top + rect.height / 2;
domWindowUtils.sendMouseEvent("contextmenu", left, top, 2,
1, 0, false, 0, 0, true);
});
yield popupShownPromise;
let target = gContextMenuContentData.popupNode;
let urlCheck = new Promise((resolve, reject) => {
let onMessage = (message) => {
mm.removeMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage);
is(message.data.spec, expected,
`Bookmark spec for search field named ${fieldName} and baseURI ${baseURI} incorrect`);
resolve();
};
mm.addMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage);
mm.sendAsyncMessage("ContextMenu:SearchFieldBookmarkData", null, { target });
});
yield urlCheck;
document.getElementById("contentAreaContextMenu").hidePopup();
yield ContentTask.spawn(browser, null, function* () {
let doc = content.document;
doc.body.removeChild(doc.getElementById("keyword-form"));
});
}
});
});