tor-browser

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

browser_net_raw_response.js (4841B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 /**
      7 * Tests if showing raw response works and is persisted.
      8 */
      9 
     10 const DEFAULT_RAW_RESPONSE_PREF = "devtools.netmonitor.ui.default-raw-response";
     11 
     12 add_task(async function () {
     13  await pushPref(DEFAULT_RAW_RESPONSE_PREF, false);
     14 
     15  const { tab, monitor } = await initNetMonitor(
     16    JSON_BASIC_URL + "?name=nogrip",
     17    {
     18      requestCount: 1,
     19    }
     20  );
     21  info("Starting test... ");
     22 
     23  const { document, store, windowRequire } = monitor.panelWin;
     24  const Actions = windowRequire("devtools/client/netmonitor/src/actions/index");
     25 
     26  store.dispatch(Actions.batchEnable(false));
     27 
     28  // Trigger JSON request
     29  await performRequests(monitor, tab, 1);
     30 
     31  info("selecting first request");
     32  const firstRequestItem = document.querySelectorAll(".request-list-item")[0];
     33  EventUtils.sendMouseEvent({ type: "mousedown" }, firstRequestItem);
     34 
     35  info("switching to response panel");
     36  const waitForRespPanel = waitForDOM(
     37    document,
     38    "#response-panel .properties-view"
     39  );
     40  const respPanelButton = document.querySelector("#response-tab");
     41  respPanelButton.click();
     42  await waitForRespPanel;
     43 
     44  ok(
     45    !getRawResponseToggle(document).checked,
     46    "Raw Response toggle isn't checked"
     47  );
     48  ok(
     49    !getRawResponseCodeMirrorElement(document),
     50    "The CodeMirror instance is not rendered"
     51  );
     52 
     53  info("Click on toggle to show raw response");
     54  getRawResponseToggle(document).click();
     55  await waitFor(() => getRawResponseToggle(document).checked);
     56  ok(true, "Toggle is now checked");
     57  await waitFor(() => getRawResponseCodeMirrorElement(document));
     58  ok(true, "The CodeMirror instance is rendered");
     59  is(
     60    Services.prefs.getBoolPref(DEFAULT_RAW_RESPONSE_PREF),
     61    true,
     62    "Pref is now true"
     63  );
     64 
     65  info("Check that the toggle is persisted when navigating within side panels");
     66  info("Switch to request panel");
     67  const waitForRequestPanel = waitForDOM(document, "#request-panel");
     68  document.querySelector("#request-tab").click();
     69  await waitForRequestPanel;
     70 
     71  info("Switch back to response panel");
     72  const waitForRawResponsePanel = waitFor(() =>
     73    getRawResponseCodeMirrorElement(document)
     74  );
     75  respPanelButton.click();
     76  await waitForRawResponsePanel;
     77  ok(
     78    true,
     79    "The CodeMirror instance is rendered when switching back to response panel"
     80  );
     81  ok(getRawResponseToggle(document).checked, "Raw toggle is still checked");
     82 
     83  await closeDetailPanel(document);
     84 
     85  info("Reload the page to see the HTML request");
     86  let waitForHTMLRequest = waitForNetworkEvents(monitor, 1);
     87  await reloadBrowser();
     88  await waitForHTMLRequest;
     89 
     90  info("Click on HTML request and wait for raw HTML response to be displayed");
     91  EventUtils.sendMouseEvent(
     92    { type: "mousedown" },
     93    document.querySelectorAll(".request-list-item")[0]
     94  );
     95  await waitFor(() => getRawResponseCodeMirrorElement(document));
     96  ok(true, "Raw response is displayed");
     97  ok(!getHtmlPreviewElement(document), "The html preview is not displayed");
     98  ok(getRawResponseToggle(document).checked, "Raw toggle is still checked");
     99 
    100  info("Click on toggle to hide raw response");
    101  getRawResponseToggle(document).click();
    102  await waitFor(() => !getRawResponseToggle(document).checked);
    103  ok(true, "Toggle is not checked anymore");
    104  await waitFor(() => !getRawResponseCodeMirrorElement(document));
    105  ok(true, "CodeMirror editor isn't displayed anymore");
    106  ok(!!getHtmlPreviewElement(document), "The html preview is displayed");
    107  is(
    108    Services.prefs.getBoolPref(DEFAULT_RAW_RESPONSE_PREF),
    109    false,
    110    "Pref is now false"
    111  );
    112 
    113  await closeDetailPanel(document);
    114 
    115  info("Reload the page to see the HTML request");
    116  waitForHTMLRequest = waitForNetworkEvents(monitor, 1);
    117  await reloadBrowser();
    118  await waitForHTMLRequest;
    119 
    120  info(
    121    "Click on HTML request and wait for rendered HTML response to be displayed"
    122  );
    123  EventUtils.sendMouseEvent(
    124    { type: "mousedown" },
    125    document.querySelectorAll(".request-list-item")[0]
    126  );
    127  await waitFor(() => getHtmlPreviewElement(document));
    128  ok(true, "The html preview is displayed");
    129  ok(
    130    !getRawResponseCodeMirrorElement(document),
    131    "The CodeMirror editor is not displayed"
    132  );
    133  ok(
    134    !getRawResponseToggle(document).checked,
    135    "The Raw toggle is not checked anymore"
    136  );
    137 
    138  return teardown(monitor);
    139 });
    140 
    141 function getRawResponseToggle(doc) {
    142  return doc.querySelector("#response-panel .devtools-checkbox-toggle");
    143 }
    144 
    145 function getRawResponseCodeMirrorElement(doc) {
    146  return doc.querySelector("#response-panel .cm-editor");
    147 }
    148 
    149 function getHtmlPreviewElement(doc) {
    150  return doc.querySelector(".html-preview");
    151 }
    152 
    153 function closeDetailPanel(doc) {
    154  doc.querySelector(".sidebar-toggle").click();
    155  return waitFor(() => !doc.querySelector(".network-details-bar"));
    156 }