browser_widget_recreate_events.js (2705B)
1 "use strict"; 2 3 const widgetData = { 4 id: "test-widget", 5 type: "view", 6 viewId: "PanelUI-testbutton", 7 label: "test widget label", 8 onViewShowing() {}, 9 onViewHiding() {}, 10 }; 11 12 async function simulateWidgetOpen() { 13 let testWidgetButton = document.getElementById("test-widget"); 14 let testWidgetShowing = BrowserTestUtils.waitForEvent( 15 document, 16 "popupshowing", 17 true 18 ); 19 testWidgetButton.click(); 20 await testWidgetShowing; 21 } 22 23 async function simulateWidgetClose() { 24 let panel = document.getElementById("customizationui-widget-panel"); 25 let panelHidden = BrowserTestUtils.waitForEvent(panel, "popuphidden"); 26 27 panel.hidePopup(); 28 await panelHidden; 29 } 30 31 function createPanelView() { 32 let panelView = document.createXULElement("panelview"); 33 panelView.id = "PanelUI-testbutton"; 34 let vbox = document.createXULElement("vbox"); 35 panelView.appendChild(vbox); 36 return panelView; 37 } 38 39 /** 40 * Check that panel view/hide events are added back, 41 * if widget is destroyed and created again in one session. 42 */ 43 add_task(async function () { 44 let viewCache = document.getElementById("appMenu-viewCache"); 45 let panelView = createPanelView(); 46 viewCache.appendChild(panelView); 47 48 CustomizableUI.createWidget(widgetData); 49 CustomizableUI.addWidgetToArea("test-widget", "nav-bar"); 50 51 // Simulate clicking and wait for the open 52 // so we ensure the lazy event creation is done. 53 await simulateWidgetOpen(); 54 55 let listeners = Services.els.getListenerInfoFor(panelView); 56 ok( 57 listeners.some(info => info.type == "ViewShowing"), 58 "ViewShowing event added" 59 ); 60 ok( 61 listeners.some(info => info.type == "ViewHiding"), 62 "ViewHiding event added" 63 ); 64 65 await simulateWidgetClose(); 66 CustomizableUI.destroyWidget("test-widget"); 67 68 listeners = Services.els.getListenerInfoFor(panelView); 69 // Ensure the events got removed after destorying the widget. 70 ok( 71 !listeners.some(info => info.type == "ViewShowing"), 72 "ViewShowing event removed" 73 ); 74 ok( 75 !listeners.some(info => info.type == "ViewHiding"), 76 "ViewHiding event removed" 77 ); 78 79 CustomizableUI.createWidget(widgetData); 80 // Simulate clicking and wait for the open 81 // so we ensure the lazy event creation is done. 82 // We need to do this again because we destroyed the widget. 83 await simulateWidgetOpen(); 84 85 listeners = Services.els.getListenerInfoFor(panelView); 86 ok( 87 listeners.some(info => info.type == "ViewShowing"), 88 "ViewShowing event added again" 89 ); 90 ok( 91 listeners.some(info => info.type == "ViewHiding"), 92 "ViewHiding event added again" 93 ); 94 95 await simulateWidgetClose(); 96 CustomizableUI.destroyWidget("test-widget"); 97 panelView.remove(); 98 CustomizableUI.reset(); 99 });