forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			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();
 | |
| });
 | 
