summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_autocompletepopup.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_autocompletepopup.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_autocompletepopup.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_autocompletepopup.js b/browser/components/extensions/test/browser/browser_ext_autocompletepopup.js
new file mode 100644
index 0000000000..7188d61ca6
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_autocompletepopup.js
@@ -0,0 +1,90 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+add_task(async function testAutocompletePopup() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_action: {
+ default_popup: "page.html",
+ browser_style: false,
+ },
+ page_action: {
+ default_popup: "page.html",
+ browser_style: false,
+ },
+ },
+ background: async function () {
+ let [tab] = await browser.tabs.query({
+ active: true,
+ currentWindow: true,
+ });
+ await browser.pageAction.show(tab.id);
+ browser.test.sendMessage("ready");
+ },
+ files: {
+ "page.html": `<!DOCTYPE html>
+ <html>
+ <head><meta charset="utf-8"></head>
+ <body>
+ <div>
+ <input placeholder="Test input" id="test-input" list="test-list" />
+ <datalist id="test-list">
+ <option value="aa">
+ <option value="ab">
+ <option value="ae">
+ <option value="af">
+ <option value="ak">
+ <option value="am">
+ <option value="an">
+ <option value="ar">
+ </datalist>
+ </div>
+ </body>
+ </html>`,
+ },
+ });
+
+ async function testDatalist(browser, doc) {
+ let autocompletePopup = doc.getElementById("PopupAutoComplete");
+ let opened = promisePopupShown(autocompletePopup);
+ info("click in test-input now");
+ // two clicks to open
+ await BrowserTestUtils.synthesizeMouseAtCenter("#test-input", {}, browser);
+ await BrowserTestUtils.synthesizeMouseAtCenter("#test-input", {}, browser);
+ info("wait for opened event");
+ await opened;
+ // third to close
+ let closed = promisePopupHidden(autocompletePopup);
+ info("click in test-input now");
+ await BrowserTestUtils.synthesizeMouseAtCenter("#test-input", {}, browser);
+ info("wait for closed event");
+ await closed;
+ // If this didn't work, we hang. Other tests deal with testing the actual functionality of datalist.
+ ok(true, "datalist popup has been shown");
+ }
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "http://example.com/"
+ );
+ await extension.startup();
+ await extension.awaitMessage("ready");
+
+ clickPageAction(extension);
+ // intentional misspell so eslint is ok with browser in background script.
+ let bowser = await awaitExtensionPanel(extension);
+ ok(!!bowser, "panel opened with browser");
+ await testDatalist(bowser, document);
+ closePageAction(extension);
+ await new Promise(resolve => setTimeout(resolve, 0));
+
+ clickBrowserAction(extension);
+ bowser = await awaitExtensionPanel(extension);
+ ok(!!bowser, "panel opened with browser");
+ await testDatalist(bowser, document);
+ closeBrowserAction(extension);
+ await new Promise(resolve => setTimeout(resolve, 0));
+
+ await extension.unload();
+ BrowserTestUtils.removeTab(tab);
+});