99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
"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();
|
|
});
|