summaryrefslogtreecommitdiffstats
path: root/browser/components/customizableui/test/browser_1484275_PanelMultiView_toggle_with_other_popup.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/customizableui/test/browser_1484275_PanelMultiView_toggle_with_other_popup.js')
-rw-r--r--browser/components/customizableui/test/browser_1484275_PanelMultiView_toggle_with_other_popup.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/browser/components/customizableui/test/browser_1484275_PanelMultiView_toggle_with_other_popup.js b/browser/components/customizableui/test/browser_1484275_PanelMultiView_toggle_with_other_popup.js
new file mode 100644
index 0000000000..89b86dba20
--- /dev/null
+++ b/browser/components/customizableui/test/browser_1484275_PanelMultiView_toggle_with_other_popup.js
@@ -0,0 +1,69 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const TEST_URL = "data:text/html,<html><body></body></html>";
+
+/**
+ * Test steps that may lead to the panel being stuck on Windows (bug 1484275).
+ */
+add_task(async function test_PanelMultiView_toggle_with_other_popup() {
+ // For proper cleanup, create a bookmark that we will remove later.
+ let bookmark = await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ url: TEST_URL,
+ });
+ registerCleanupFunction(() => PlacesUtils.bookmarks.remove(bookmark));
+
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: TEST_URL,
+ },
+ async function (browser) {
+ // 1. Open the main menu.
+ await gCUITestUtils.openMainMenu();
+
+ // 2. Open another popup not managed by PanelMultiView.
+ StarUI._createPanelIfNeeded();
+ let bookmarkPanel = document.getElementById("editBookmarkPanel");
+ let shown = BrowserTestUtils.waitForEvent(bookmarkPanel, "popupshown");
+ let hidden = BrowserTestUtils.waitForEvent(bookmarkPanel, "popuphidden");
+ EventUtils.synthesizeKey("D", { accelKey: true });
+ await shown;
+
+ // 3. Click the button to which the main menu is anchored. We need a native
+ // mouse event to simulate the exact platform behavior with popups.
+ let clickFn = () =>
+ EventUtils.promiseNativeMouseEventAndWaitForEvent({
+ type: "click",
+ target: document.getElementById("PanelUI-button"),
+ atCenter: true,
+ eventTypeToWait: "mouseup",
+ });
+
+ // On Windows and macOS, the operation will close both popups.
+ if (AppConstants.platform == "win" || AppConstants.platform == "macosx") {
+ await gCUITestUtils.hidePanelMultiView(PanelUI.panel, clickFn);
+ await new Promise(resolve => executeSoon(resolve));
+
+ // 4. Test that the popup can be opened again after it's been closed.
+ await gCUITestUtils.openMainMenu();
+ Assert.equal(PanelUI.panel.state, "open");
+ } else {
+ // On other platforms, the operation will close both popups and reopen the
+ // main menu immediately, so we wait for the reopen to occur.
+ shown = BrowserTestUtils.waitForEvent(PanelUI.mainView, "ViewShown");
+ clickFn();
+ await shown;
+ }
+
+ await gCUITestUtils.hideMainMenu();
+
+ // Make sure the events for the bookmarks panel have also been processed
+ // before closing the tab and removing the bookmark.
+ await hidden;
+ }
+ );
+});