tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });