tor-browser

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

browser_net_columns_showhide.js (5138B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 /**
      7 * Test showing/hiding columns.
      8 */
      9 add_task(async function () {
     10  const { monitor } = await initNetMonitor(HTTPS_SIMPLE_URL, {
     11    requestCount: 1,
     12  });
     13  info("Starting test... ");
     14 
     15  const { document, store, connector, windowRequire } = monitor.panelWin;
     16  const { requestData } = connector;
     17  const { getSortedRequests } = windowRequire(
     18    "devtools/client/netmonitor/src/selectors/index"
     19  );
     20 
     21  const wait = waitForNetworkEvents(monitor, 1);
     22  await navigateTo(HTTPS_SIMPLE_URL);
     23  await wait;
     24 
     25  const item = getSortedRequests(store.getState())[0];
     26  ok(
     27    item.responseHeadersAvailable,
     28    "headers are available for lazily fetching"
     29  );
     30 
     31  if (item.responseHeadersAvailable && !item.responseHeaders) {
     32    await requestData(item.id, "responseHeaders");
     33  }
     34 
     35  const requestsContainer = document.querySelector(".requests-list-row-group");
     36  ok(requestsContainer, "Container element exists as expected.");
     37  const headers = document.querySelector(".requests-list-headers");
     38 
     39  let columns = store.getState().ui.columns;
     40  for (const column in columns) {
     41    if (columns[column]) {
     42      await testVisibleColumnContextMenuItem(column, document, monitor);
     43      testColumnsAlignment(headers, requestsContainer);
     44      await testHiddenColumnContextMenuItem(column, document, monitor);
     45    } else {
     46      await testHiddenColumnContextMenuItem(column, document, monitor);
     47      testColumnsAlignment(headers, requestsContainer);
     48      await testVisibleColumnContextMenuItem(column, document, monitor);
     49    }
     50  }
     51 
     52  columns = store.getState().ui.columns;
     53  for (const column in columns) {
     54    if (columns[column]) {
     55      await testVisibleColumnContextMenuItem(column, document, monitor);
     56      // Right click on the white-space for the context menu to appear
     57      // and toggle column visibility
     58      await testWhiteSpaceContextMenuItem(column, document, monitor);
     59    }
     60  }
     61 });
     62 
     63 async function testWhiteSpaceContextMenuItem(column, document, monitor) {
     64  ok(
     65    !document.querySelector(`#requests-list-${column}-button`),
     66    `Column ${column} should be hidden`
     67  );
     68 
     69  info(`Right clicking on white-space in the header to get the context menu`);
     70  EventUtils.sendMouseEvent(
     71    { type: "contextmenu" },
     72    document.querySelector(".requests-list-headers")
     73  );
     74 
     75  // Wait for next tick to do stuff async and force repaint.
     76  await waitForTick();
     77  await toggleAndCheckColumnVisibility(column, document, monitor);
     78 }
     79 
     80 async function testVisibleColumnContextMenuItem(column, document, monitor) {
     81  ok(
     82    document.querySelector(`#requests-list-${column}-button`),
     83    `Column ${column} should be visible`
     84  );
     85 
     86  info(`Clicking context-menu item for ${column}`);
     87 
     88  EventUtils.sendMouseEvent(
     89    { type: "contextmenu" },
     90    document.querySelector("#requests-list-status-button") ||
     91      document.querySelector("#requests-list-waterfall-button")
     92  );
     93 
     94  await waitForTick();
     95 
     96  const id = `request-list-header-${column}-toggle`;
     97  const menuItem = getContextMenuItem(monitor, id);
     98 
     99  is(
    100    menuItem.getAttribute("type"),
    101    "checkbox",
    102    `${column} menu item should have type="checkbox" attribute`
    103  );
    104  is(
    105    menuItem.getAttribute("checked"),
    106    "true",
    107    `checked state of ${column} menu item should be correct`
    108  );
    109  ok(
    110    !menuItem.disabled,
    111    `disabled state of ${column} menu item should be correct`
    112  );
    113 
    114  const onHeaderRemoved = waitForDOM(
    115    document,
    116    `#requests-list-${column}-button`,
    117    0
    118  );
    119 
    120  await selectContextMenuItem(monitor, id);
    121 
    122  await onHeaderRemoved;
    123  await waitForTick();
    124 
    125  ok(
    126    !document.querySelector(`#requests-list-${column}-button`),
    127    `Column ${column} should be hidden`
    128  );
    129 }
    130 
    131 async function testHiddenColumnContextMenuItem(column, document, monitor) {
    132  ok(
    133    !document.querySelector(`#requests-list-${column}-button`),
    134    `Column ${column} should be hidden`
    135  );
    136 
    137  info(`Clicking context-menu item for ${column}`);
    138  EventUtils.sendMouseEvent(
    139    { type: "contextmenu" },
    140    document.querySelector("#requests-list-status-button") ||
    141      document.querySelector("#requests-list-waterfall-button")
    142  );
    143 
    144  await waitForTick();
    145  await toggleAndCheckColumnVisibility(column, document, monitor);
    146 }
    147 
    148 async function toggleAndCheckColumnVisibility(column, document, monitor) {
    149  const id = `request-list-header-${column}-toggle`;
    150  const menuItem = getContextMenuItem(monitor, id);
    151 
    152  is(
    153    menuItem.getAttribute("type"),
    154    "checkbox",
    155    `${column} menu item should have type="checkbox" attribute`
    156  );
    157  ok(
    158    !menuItem.getAttribute("checked"),
    159    `checked state of ${column} menu item should be correct`
    160  );
    161  ok(
    162    !menuItem.disabled,
    163    `disabled state of ${column} menu item should be correct`
    164  );
    165 
    166  const onHeaderAdded = waitForDOM(
    167    document,
    168    `#requests-list-${column}-button`,
    169    1
    170  );
    171 
    172  await selectContextMenuItem(monitor, id);
    173 
    174  await onHeaderAdded;
    175  await waitForTick();
    176 
    177  ok(
    178    document.querySelector(`#requests-list-${column}-button`),
    179    `Column ${column} should be visible`
    180  );
    181 }