tor-browser

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

browser_markup_view-source.js (3482B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 Services.scriptloader.loadSubScript(
      7  "chrome://mochitests/content/browser/devtools/client/debugger/test/mochitest/shared-head.js",
      8  this
      9 );
     10 
     11 const DOCUMENT_SRC = `
     12 <body>
     13 <button id="btn-eval">Eval</button>
     14 <button id="btn-dom0" onclick="console.info('bloup')">DOM0</button>
     15 <script>
     16 var script = \`
     17  function foo() {
     18    console.log('handler');
     19  }
     20 \`;
     21 eval(script);
     22 
     23 var button = document.getElementById("btn-eval");
     24 button.addEventListener("click", foo, false);
     25 </script>
     26 </body>`;
     27 
     28 const TEST_URI = "data:text/html;charset=utf-8," + DOCUMENT_SRC;
     29 
     30 add_task(async function () {
     31  const { inspector, toolbox } = await openInspectorForURL(TEST_URI);
     32 
     33  info(
     34    "Test that event handler links go to the right debugger source when it came from an eval()"
     35  );
     36  const evaledSource = await clickOnJumpToDebuggerIconForNode(
     37    inspector,
     38    toolbox,
     39    "#btn-eval"
     40  );
     41  is(evaledSource.url, null, "no expected url for eval source");
     42 
     43  info("Add a breakpoint in opened source");
     44  const debuggerContext = createDebuggerContext(toolbox);
     45  await addBreakpoint(
     46    debuggerContext,
     47    debuggerContext.selectors.getSelectedSource(),
     48    1
     49  );
     50  await safeSynthesizeMouseEventAtCenterInContentPage("#btn-eval");
     51 
     52  await waitForPaused(debuggerContext);
     53  ok(true, "The debugger paused on the evaled source breakpoint");
     54  await resume(debuggerContext);
     55 
     56  info(
     57    "Test that event handler links go to the right debugger source when it's a dom0 event listener."
     58  );
     59  await toolbox.selectTool("inspector");
     60  const dom0Source = await clickOnJumpToDebuggerIconForNode(
     61    inspector,
     62    toolbox,
     63    "#btn-dom0"
     64  );
     65  is(dom0Source.url, null, "no expected url for dom0 event listener source");
     66  await addBreakpoint(
     67    debuggerContext,
     68    debuggerContext.selectors.getSelectedSource(),
     69    1
     70  );
     71  await safeSynthesizeMouseEventAtCenterInContentPage("#btn-dom0");
     72  await waitForPaused(debuggerContext);
     73  ok(true, "The debugger paused on the dom0 source breakpoint");
     74  await resume(debuggerContext);
     75 });
     76 
     77 async function clickOnJumpToDebuggerIconForNode(
     78  inspector,
     79  toolbox,
     80  nodeSelector
     81 ) {
     82  const nodeFront = await getNodeFront(nodeSelector, inspector);
     83  const container = getContainerForNodeFront(nodeFront, inspector);
     84 
     85  const evHolder = container.elt.querySelector(
     86    ".inspector-badge.interactive[data-event]"
     87  );
     88  evHolder.scrollIntoView();
     89  info(`Display event tooltip for node "${nodeSelector}"`);
     90  evHolder.click();
     91 
     92  const tooltip = inspector.markup.eventDetailsTooltip;
     93  await tooltip.once("shown");
     94 
     95  info(`Tooltip displayed, click on the "jump to debugger" icon`);
     96  const debuggerIcon = tooltip.panel.querySelector(
     97    ".event-tooltip-debugger-icon"
     98  );
     99 
    100  if (!debuggerIcon) {
    101    ok(
    102      false,
    103      `There is no jump to debugger icon in event tooltip for node "${nodeSelector}"`
    104    );
    105    return null;
    106  }
    107 
    108  const onDebuggerSelected = toolbox.once(`jsdebugger-selected`);
    109  EventUtils.synthesizeMouse(debuggerIcon, 2, 2, {}, debuggerIcon.ownerGlobal);
    110 
    111  const dbg = await onDebuggerSelected;
    112  ok(true, "The debugger was opened");
    113 
    114  let source;
    115  info("Wait for source to be opened");
    116  await BrowserTestUtils.waitForCondition(
    117    () => {
    118      source = dbg._selectors.getSelectedSource(dbg._getState());
    119      return !!source;
    120    },
    121    "loaded source",
    122    100,
    123    20
    124  );
    125  return source;
    126 }