tor-browser

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

browser_net_duration-sort.js (5476B)


      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 if initial and pending requests are sorted correctly in the Duration column.
      8 */
      9 
     10 add_task(async function () {
     11  const { monitor } = await initNetMonitor(HTTPS_SIMPLE_URL, {
     12    requestCount: 1,
     13  });
     14  const { document, store, windowRequire } = monitor.panelWin;
     15  const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
     16  store.dispatch(Actions.batchEnable(false));
     17 
     18  const delay1 = 50;
     19  const delay2 = 500;
     20  const delay3 = 1500;
     21  const delay4 = 2500;
     22 
     23  info("Starting test... ");
     24  info("Sending initial requests.");
     25  const initialRequests = [
     26    `sjs_delay-test-server.sjs?delay=${delay1}`,
     27    `sjs_delay-test-server.sjs?delay=${delay2}`,
     28    `sjs_delay-test-server.sjs?delay=${delay3}`,
     29  ];
     30  let waitForResponse = waitForNetworkEvents(monitor, 3);
     31  sendRequests(initialRequests);
     32  await waitForResponse;
     33 
     34  info("Testing initial items duration sort, ascending.");
     35  EventUtils.sendMouseEvent(
     36    { type: "click" },
     37    document.querySelector("#requests-list-duration-button")
     38  );
     39  await testInitialContents([0, 1, 2]);
     40 
     41  info("Testing initial items duration sort, descending.");
     42  EventUtils.sendMouseEvent(
     43    { type: "click" },
     44    document.querySelector("#requests-list-duration-button")
     45  );
     46  await testInitialContents([2, 1, 0]);
     47 
     48  info("Sending new requests.");
     49  const newRequests = [
     50    "sjs_long-polling-server.sjs",
     51    `sjs_delay-test-server.sjs?delay=${delay4}`,
     52  ];
     53  waitForResponse = waitForNetworkEvents(monitor, 1, {
     54    expectedEventTimings: 1,
     55  });
     56  sendRequests(newRequests);
     57  await waitForResponse;
     58 
     59  info("Testing pending items duration sort, ascending.");
     60  EventUtils.sendMouseEvent(
     61    { type: "click" },
     62    document.querySelector("#requests-list-duration-button")
     63  );
     64  await testPendingContents([0, 1, 2, 3, 4]);
     65 
     66  info("Testing pending items duration sort, descending.");
     67  EventUtils.sendMouseEvent(
     68    { type: "click" },
     69    document.querySelector("#requests-list-duration-button")
     70  );
     71  await testPendingContents([4, 3, 2, 1, 0]);
     72 
     73  info("Complete pending request.");
     74  waitForResponse = waitForNetworkEvents(monitor, 1, {
     75    expectedPayloadReady: 2,
     76  });
     77  sendRequests(["sjs_long-polling-server.sjs?unblock"]);
     78  await waitForResponse;
     79 
     80  info("Testing resolved items duration sort, ascending.");
     81  EventUtils.sendMouseEvent(
     82    { type: "click" },
     83    document.querySelector("#requests-list-duration-button")
     84  );
     85  await testResolvedContents([0, 1, 2, 3, 4]);
     86 
     87  info("Testing resolved items duration sort, descending.");
     88  EventUtils.sendMouseEvent(
     89    { type: "click" },
     90    document.querySelector("#requests-list-duration-button")
     91  );
     92  await testResolvedContents([4, 3, 2, 1, 0]);
     93 
     94  return teardown(monitor);
     95 
     96  async function sendRequests(urls) {
     97    await SpecialPowers.spawn(gBrowser.selectedBrowser, [urls], _urls => {
     98      _urls.forEach(u => content.fetch(u));
     99    });
    100  }
    101 
    102  async function testInitialContents([a, b, c]) {
    103    const requestItems = [
    104      ...document.querySelectorAll(".request-list-item .requests-list-url"),
    105    ].map(el => el.innerText);
    106 
    107    is(
    108      requestItems[a],
    109      DELAY_SJS + `?delay=${delay1}`,
    110      `${delay1}ms request sorted correctly.`
    111    );
    112    is(
    113      requestItems[b],
    114      DELAY_SJS + `?delay=${delay2}`,
    115      `${delay2}ms request sorted correctly.`
    116    );
    117    is(
    118      requestItems[c],
    119      DELAY_SJS + `?delay=${delay3}`,
    120      `${delay3}ms request sorted correctly.`
    121    );
    122  }
    123 
    124  async function testPendingContents([a, b, c, d, e]) {
    125    const requestItems = [
    126      ...document.querySelectorAll(".request-list-item .requests-list-url"),
    127    ].map(el => el.innerText);
    128 
    129    is(
    130      requestItems[a],
    131      DELAY_SJS + `?delay=${delay1}`,
    132      `${delay1}ms request sorted correctly.`
    133    );
    134    is(
    135      requestItems[b],
    136      DELAY_SJS + `?delay=${delay2}`,
    137      `${delay2}ms request sorted correctly.`
    138    );
    139    is(
    140      requestItems[c],
    141      DELAY_SJS + `?delay=${delay3}`,
    142      `${delay3}ms request sorted correctly.`
    143    );
    144    is(
    145      requestItems[d],
    146      DELAY_SJS + `?delay=${delay4}`,
    147      `${delay4}ms request sorted correctly.`
    148    );
    149    is(
    150      requestItems[e],
    151      "https://example.com/browser/devtools/client/netmonitor/test/sjs_long-polling-server.sjs",
    152      "Pending request sorted correctly."
    153    );
    154  }
    155 
    156  async function testResolvedContents([a, b, c, d, e]) {
    157    const requestItems = [
    158      ...document.querySelectorAll(".request-list-item .requests-list-url"),
    159    ]
    160      .map(el => el.innerText)
    161      // Filter out the unblock request which might take a random time to resolve
    162      .filter(text => !text.endsWith("sjs_long-polling-server.sjs?unblock"));
    163 
    164    is(
    165      requestItems[a],
    166      DELAY_SJS + `?delay=${delay1}`,
    167      `${delay1}ms request sorted correctly.`
    168    );
    169    is(
    170      requestItems[b],
    171      DELAY_SJS + `?delay=${delay2}`,
    172      `${delay2}ms request sorted correctly.`
    173    );
    174    is(
    175      requestItems[c],
    176      DELAY_SJS + `?delay=${delay3}`,
    177      `${delay3}ms request sorted correctly.`
    178    );
    179    is(
    180      requestItems[d],
    181      DELAY_SJS + `?delay=${delay4}`,
    182      `${delay4}ms request sorted correctly.`
    183    );
    184    is(
    185      requestItems[e],
    186      "https://example.com/browser/devtools/client/netmonitor/test/sjs_long-polling-server.sjs",
    187      "Long polling request sorted correctly."
    188    );
    189  }
    190 });