summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/urlbar/browser_action_keyword.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/urlbar/browser_action_keyword.js')
-rw-r--r--browser/base/content/test/urlbar/browser_action_keyword.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/browser/base/content/test/urlbar/browser_action_keyword.js b/browser/base/content/test/urlbar/browser_action_keyword.js
new file mode 100644
index 000000000..854a7b82f
--- /dev/null
+++ b/browser/base/content/test/urlbar/browser_action_keyword.js
@@ -0,0 +1,119 @@
+function* promise_first_result(inputText) {
+ yield promiseAutocompleteResultPopup(inputText);
+
+ let firstResult = gURLBar.popup.richlistbox.firstChild;
+ return firstResult;
+}
+
+const TEST_URL = "http://mochi.test:8888/browser/browser/base/content/test/urlbar/print_postdata.sjs";
+
+add_task(function* setup() {
+ yield PlacesUtils.keywords.insert({ keyword: "get",
+ url: TEST_URL + "?q=%s" });
+ yield PlacesUtils.keywords.insert({ keyword: "post",
+ url: TEST_URL,
+ postData: "q=%s" });
+ registerCleanupFunction(function* () {
+ yield PlacesUtils.keywords.remove("get");
+ yield PlacesUtils.keywords.remove("post");
+ while (gBrowser.tabs.length > 1) {
+ yield BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ }
+ });
+});
+
+add_task(function* get_keyword() {
+ let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
+
+ let result = yield promise_first_result("get something");
+ isnot(result, null, "Expect a keyword result");
+
+ let types = new Set(result.getAttribute("type").split(/\s+/));
+ Assert.ok(types.has("keyword"));
+ is(result.getAttribute("actiontype"), "keyword", "Expect correct `actiontype` attribute");
+ is(result.getAttribute("title"), "mochi.test:8888", "Expect correct title");
+
+ // We need to make a real URI out of this to ensure it's normalised for
+ // comparison.
+ let uri = NetUtil.newURI(result.getAttribute("url"));
+ is(uri.spec, PlacesUtils.mozActionURI("keyword",
+ { url: TEST_URL + "?q=something",
+ input: "get something"}),
+ "Expect correct url");
+
+ let titleHbox = result._titleText.parentNode.parentNode;
+ ok(titleHbox.classList.contains("ac-title"), "Title hbox element sanity check");
+ is_element_visible(titleHbox, "Title element should be visible");
+ is(result._titleText.textContent, "mochi.test:8888: something",
+ "Node should contain the name of the bookmark and query");
+
+ let urlHbox = result._urlText.parentNode.parentNode;
+ ok(urlHbox.classList.contains("ac-url"), "URL hbox element sanity check");
+ is_element_hidden(urlHbox, "URL element should be hidden");
+
+ let actionHbox = result._actionText.parentNode.parentNode;
+ ok(actionHbox.classList.contains("ac-action"), "Action hbox element sanity check");
+ is_element_visible(actionHbox, "Action element should be visible");
+ is(result._actionText.textContent, "", "Action text should be empty");
+
+ // Click on the result
+ info("Normal click on result");
+ let tabPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ EventUtils.synthesizeMouseAtCenter(result, {});
+ yield tabPromise;
+ is(tab.linkedBrowser.currentURI.spec, TEST_URL + "?q=something",
+ "Tab should have loaded from clicking on result");
+
+ // Middle-click on the result
+ info("Middle-click on result");
+ result = yield promise_first_result("get somethingmore");
+ isnot(result, null, "Expect a keyword result");
+ // We need to make a real URI out of this to ensure it's normalised for
+ // comparison.
+ uri = NetUtil.newURI(result.getAttribute("url"));
+ is(uri.spec, PlacesUtils.mozActionURI("keyword",
+ { url: TEST_URL + "?q=somethingmore",
+ input: "get somethingmore" }),
+ "Expect correct url");
+
+ tabPromise = BrowserTestUtils.waitForEvent(gBrowser.tabContainer, "TabOpen");
+ EventUtils.synthesizeMouseAtCenter(result, {button: 1});
+ let tabOpenEvent = yield tabPromise;
+ let newTab = tabOpenEvent.target;
+ yield BrowserTestUtils.browserLoaded(newTab.linkedBrowser);
+ is(newTab.linkedBrowser.currentURI.spec,
+ TEST_URL + "?q=somethingmore",
+ "Tab should have loaded from middle-clicking on result");
+});
+
+
+add_task(function* post_keyword() {
+ let tab = yield BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
+
+ let result = yield promise_first_result("post something");
+ isnot(result, null, "Expect a keyword result");
+
+ let types = new Set(result.getAttribute("type").split(/\s+/));
+ Assert.ok(types.has("keyword"));
+ is(result.getAttribute("actiontype"), "keyword", "Expect correct `actiontype` attribute");
+ is(result.getAttribute("title"), "mochi.test:8888", "Expect correct title");
+
+ is(result.getAttribute("url"),
+ PlacesUtils.mozActionURI("keyword", { url: TEST_URL,
+ input: "post something",
+ "postData": "q=something" }),
+ "Expect correct url");
+
+ // Click on the result
+ info("Normal click on result");
+ let tabPromise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ EventUtils.synthesizeMouseAtCenter(result, {});
+ yield tabPromise;
+ is(tab.linkedBrowser.currentURI.spec, TEST_URL,
+ "Tab should have loaded from clicking on result");
+
+ let postData = yield ContentTask.spawn(tab.linkedBrowser, null, function* () {
+ return content.document.body.textContent;
+ });
+ is(postData, "q=something", "post data was submitted correctly");
+});