summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/statuspanel
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--browser/base/content/test/statuspanel/browser.toml7
-rw-r--r--browser/base/content/test/statuspanel/browser_show_statuspanel_idn.js33
-rw-r--r--browser/base/content/test/statuspanel/browser_show_statuspanel_twice.js29
-rw-r--r--browser/base/content/test/statuspanel/head.js58
4 files changed, 127 insertions, 0 deletions
diff --git a/browser/base/content/test/statuspanel/browser.toml b/browser/base/content/test/statuspanel/browser.toml
new file mode 100644
index 0000000000..3c08e73912
--- /dev/null
+++ b/browser/base/content/test/statuspanel/browser.toml
@@ -0,0 +1,7 @@
+[DEFAULT]
+support-files = ["head.js"]
+
+["browser_show_statuspanel_idn.js"]
+skip-if = ["verify"]
+
+["browser_show_statuspanel_twice.js"]
diff --git a/browser/base/content/test/statuspanel/browser_show_statuspanel_idn.js b/browser/base/content/test/statuspanel/browser_show_statuspanel_idn.js
new file mode 100644
index 0000000000..308321f8c2
--- /dev/null
+++ b/browser/base/content/test/statuspanel/browser_show_statuspanel_idn.js
@@ -0,0 +1,33 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+ChromeUtils.defineESModuleGetters(this, {
+ UrlbarTestUtils: "resource://testing-common/UrlbarTestUtils.sys.mjs",
+});
+
+const TEST_PAGE_URL = encodeURI(
+ `data:text/html;charset=utf-8,<a id="foo" href="http://nic.xn--rhqv96g/">abc</a><span id="bar">def</span>`
+);
+// eslint-disable-next-line @microsoft/sdl/no-insecure-url
+const TEST_STATUS_TEXT = UrlbarTestUtils.trimURL("http://nic.\u4E16\u754C");
+
+/**
+ * Test that if the StatusPanel displays an IDN
+ * (Bug 1450538).
+ */
+add_task(async function test_show_statuspanel_twice() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ TEST_PAGE_URL
+ );
+
+ let promise = promiseStatusPanelShown(window, TEST_STATUS_TEXT);
+ SpecialPowers.spawn(tab.linkedBrowser, [], async () => {
+ content.document.links[0].focus();
+ });
+ await promise;
+
+ await BrowserTestUtils.removeTab(tab);
+});
diff --git a/browser/base/content/test/statuspanel/browser_show_statuspanel_twice.js b/browser/base/content/test/statuspanel/browser_show_statuspanel_twice.js
new file mode 100644
index 0000000000..6ed9b6d3a8
--- /dev/null
+++ b/browser/base/content/test/statuspanel/browser_show_statuspanel_twice.js
@@ -0,0 +1,29 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// eslint-disable-next-line @microsoft/sdl/no-insecure-url
+const TEST_URL = "http://example.com";
+
+/**
+ * Test that if the StatusPanel is shown for a link, and then
+ * hidden, that it can be shown again for that same link.
+ * (Bug 1445455).
+ */
+add_task(async function test_show_statuspanel_twice() {
+ let win = await BrowserTestUtils.openNewBrowserWindow();
+ win.XULBrowserWindow.overLink = TEST_URL;
+ win.StatusPanel.update();
+ await promiseStatusPanelShown(win, TEST_URL);
+
+ win.XULBrowserWindow.overLink = "";
+ win.StatusPanel.update();
+ await promiseStatusPanelHidden(win);
+
+ win.XULBrowserWindow.overLink = TEST_URL;
+ win.StatusPanel.update();
+ await promiseStatusPanelShown(win, TEST_URL);
+
+ await BrowserTestUtils.closeWindow(win);
+});
diff --git a/browser/base/content/test/statuspanel/head.js b/browser/base/content/test/statuspanel/head.js
new file mode 100644
index 0000000000..23df2e6271
--- /dev/null
+++ b/browser/base/content/test/statuspanel/head.js
@@ -0,0 +1,58 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Returns a Promise that resolves when a StatusPanel for a
+ * window has finished being shown. Also asserts that the
+ * text content of the StatusPanel matches a value.
+ *
+ * @param win (browser window)
+ * The window that the StatusPanel belongs to.
+ * @param value (string)
+ * The value that the StatusPanel should show.
+ * @returns Promise
+ */
+async function promiseStatusPanelShown(win, value) {
+ let panel = win.StatusPanel.panel;
+ info("Waiting to show panel");
+ await BrowserTestUtils.waitForEvent(panel, "transitionend", e => {
+ return (
+ e.propertyName === "opacity" &&
+ win.getComputedStyle(e.target).opacity == "1"
+ );
+ });
+
+ Assert.equal(win.StatusPanel._labelElement.value, value);
+}
+
+/**
+ * Returns a Promise that resolves when a StatusPanel for a
+ * window has finished being hidden.
+ *
+ * @param win (browser window)
+ * The window that the StatusPanel belongs to.
+ */
+async function promiseStatusPanelHidden(win) {
+ let panel = win.StatusPanel.panel;
+ info("Waiting to hide panel");
+ await new Promise(resolve => {
+ let l = e => {
+ if (
+ e.propertyName === "opacity" &&
+ win.getComputedStyle(e.target).opacity == "0"
+ ) {
+ info("Panel hid after " + e.type + " event");
+ panel.removeEventListener("transitionend", l);
+ panel.removeEventListener("transitioncancel", l);
+ is(
+ getComputedStyle(panel).display,
+ "none",
+ "Should be hidden for good"
+ );
+ resolve();
+ }
+ };
+ panel.addEventListener("transitionend", l);
+ panel.addEventListener("transitioncancel", l);
+ });
+}