summaryrefslogtreecommitdiffstats
path: root/browser/components/customizableui/test/browser_widget_recreate_events.js
diff options
context:
space:
mode:
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..3eca9231a8
--- /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();
+});