summaryrefslogtreecommitdiffstats
path: root/browser/components/customizableui/test/browser_widget_recreate_events.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /browser/components/customizableui/test/browser_widget_recreate_events.js
parentInitial commit. (diff)
downloadfirefox-upstream.tar.xz
firefox-upstream.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/customizableui/test/browser_widget_recreate_events.js')
-rw-r--r--browser/components/customizableui/test/browser_widget_recreate_events.js99
1 files changed, 99 insertions, 0 deletions
diff --git a/browser/components/customizableui/test/browser_widget_recreate_events.js b/browser/components/customizableui/test/browser_widget_recreate_events.js
new file mode 100644
index 0000000000..b5d9b9c91b
--- /dev/null
+++ b/browser/components/customizableui/test/browser_widget_recreate_events.js
@@ -0,0 +1,99 @@
+"use strict";
+
+const widgetData = {
+ id: "test-widget",
+ type: "view",
+ viewId: "PanelUI-testbutton",
+ label: "test widget label",
+ onViewShowing() {},
+ onViewHiding() {},
+};
+
+async function simulateWidgetOpen() {
+ let testWidgetButton = document.getElementById("test-widget");
+ let testWidgetShowing = BrowserTestUtils.waitForEvent(
+ document,
+ "popupshowing",
+ true
+ );
+ testWidgetButton.click();
+ await testWidgetShowing;
+}
+
+async function simulateWidgetClose() {
+ let panel = document.getElementById("customizationui-widget-panel");
+ let panelHidden = BrowserTestUtils.waitForEvent(panel, "popuphidden");
+
+ panel.hidePopup();
+ await panelHidden;
+}
+
+function createPanelView() {
+ let panelView = document.createXULElement("panelview");
+ panelView.id = "PanelUI-testbutton";
+ let vbox = document.createXULElement("vbox");
+ panelView.appendChild(vbox);
+ return panelView;
+}
+
+/**
+ * Check that panel view/hide events are added back,
+ * if widget is destroyed and created again in one session.
+ */
+add_task(async function() {
+ let viewCache = document.getElementById("appMenu-viewCache");
+ let panelView = createPanelView();
+ viewCache.appendChild(panelView);
+
+ CustomizableUI.createWidget(widgetData);
+ CustomizableUI.addWidgetToArea("test-widget", "nav-bar");
+
+ // Simulate clicking and wait for the open
+ // so we ensure the lazy event creation is done.
+ await simulateWidgetOpen();
+
+ let listeners = Services.els.getListenerInfoFor(panelView);
+ ok(
+ listeners.some(info => info.type == "ViewShowing"),
+ "ViewShowing event added"
+ );
+ ok(
+ listeners.some(info => info.type == "ViewHiding"),
+ "ViewHiding event added"
+ );
+
+ await simulateWidgetClose();
+ CustomizableUI.destroyWidget("test-widget");
+
+ listeners = Services.els.getListenerInfoFor(panelView);
+ // Ensure the events got removed after destorying the widget.
+ ok(
+ !listeners.some(info => info.type == "ViewShowing"),
+ "ViewShowing event removed"
+ );
+ ok(
+ !listeners.some(info => info.type == "ViewHiding"),
+ "ViewHiding event removed"
+ );
+
+ CustomizableUI.createWidget(widgetData);
+ // Simulate clicking and wait for the open
+ // so we ensure the lazy event creation is done.
+ // We need to do this again because we destroyed the widget.
+ await simulateWidgetOpen();
+
+ listeners = Services.els.getListenerInfoFor(panelView);
+ ok(
+ listeners.some(info => info.type == "ViewShowing"),
+ "ViewShowing event added again"
+ );
+ ok(
+ listeners.some(info => info.type == "ViewHiding"),
+ "ViewHiding event added again"
+ );
+
+ await simulateWidgetClose();
+ CustomizableUI.destroyWidget("test-widget");
+ panelView.remove();
+ CustomizableUI.reset();
+});