tor-browser

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

browser_jsterm_helpers_no_override.js (3928B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 // Check that console helpers are not set when existing variables with similar names
      7 // exists in the page.
      8 
      9 const TEST_URI = `data:text/html,<!DOCTYPE html><script>
     10    var $ = "var_$";
     11    const $$ = "const_$$";
     12    let help = "let_help";
     13    globalThis.values = "globalThis_values";
     14    function keys() {
     15      return "function_keys";
     16    }
     17 
     18    function pauseInDebugger() {
     19      let $x = "let_$x";
     20      debugger;
     21    }
     22  </script>`;
     23 
     24 add_task(async function () {
     25  const hud = await openNewTabAndConsole(TEST_URI);
     26 
     27  let message = await executeAndWaitForResultMessage(hud, "$", "var_$");
     28  ok(message, "$ was not overridden");
     29 
     30  message = await executeAndWaitForResultMessage(hud, "$$", "const_$$");
     31  ok(message, "$$ was not overridden");
     32 
     33  message = await executeAndWaitForResultMessage(hud, "help", "let_help");
     34  ok(message, "help was not overridden");
     35 
     36  message = await executeAndWaitForResultMessage(
     37    hud,
     38    "values",
     39    "globalThis_values"
     40  );
     41  ok(message, "values was not overridden");
     42 
     43  message = await executeAndWaitForResultMessage(
     44    hud,
     45    "keys()",
     46    "function_keys"
     47  );
     48  ok(message, "keys was not overridden");
     49 
     50  info("Pause in Debugger");
     51  await openDebugger();
     52  const toolbox = gDevTools.getToolboxForTab(gBrowser.selectedTab);
     53  const dbg = createDebuggerContext(toolbox);
     54  SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
     55    content.wrappedJSObject.pauseInDebugger();
     56  });
     57  await pauseDebugger(dbg);
     58 
     59  info("Go back to Console");
     60  await toolbox.selectTool("webconsole");
     61  message = await executeAndWaitForResultMessage(hud, "$x", "let_$x");
     62  ok(
     63    message,
     64    `frame variable "$x" was not overridden while paused in the debugger`
     65  );
     66 
     67  await resume(dbg);
     68 });
     69 
     70 add_task(async function () {
     71  // Test the behavior when the variables are declared in the script.
     72 
     73  const hud = await openNewTabAndConsole("data:text/html,Nothing");
     74 
     75  let message = await executeAndWaitForResultMessage(
     76    hud,
     77    "var $ = 'var_$'; $",
     78    "var_$"
     79  );
     80  ok(message, "$ was not overridden");
     81 
     82  message = await executeAndWaitForResultMessage(
     83    hud,
     84    "const $$ = 'const_$$'; $$",
     85    "const_$$"
     86  );
     87  ok(message, "$$ was not overridden");
     88 
     89  message = await executeAndWaitForResultMessage(
     90    hud,
     91    "function keys() { return 'function_keys';  } keys()",
     92    "function_keys"
     93  );
     94  ok(message, "keys was not overridden");
     95 
     96  // Hoisted variable.
     97  message = await executeAndWaitForResultMessage(
     98    hud,
     99    "{ var clear = 'var_clear';  } clear",
    100    "var_clear"
    101  );
    102  ok(message, "clear was not overridden");
    103 
    104  // Hoisted function.
    105  message = await executeAndWaitForResultMessage(
    106    hud,
    107    "{ function help() { return 'function_help';  } } help()",
    108    "function_help"
    109  );
    110  ok(message, "help was not overridden");
    111 
    112  // Lexical variables are not hoisted.
    113  message = await executeAndWaitForResultMessage(
    114    hud,
    115    "{ let values = 'let_values';  } typeof values",
    116    "function"
    117  );
    118  ok(message, "values was not overridden because it's not global");
    119 });
    120 
    121 add_task(async function () {
    122  // NOTE: Open a new page to use the same binding name again.
    123 
    124  const hud = await openNewTabAndConsole("data:text/html,Nothing");
    125 
    126  // An assignment on `globalThis` property inside the script doesn't shadow
    127  // the helper binding.
    128  let message = await executeAndWaitForResultMessage(
    129    hud,
    130    "globalThis.values = 'globalThis_values'; typeof values",
    131    "function"
    132  );
    133  ok(message, "values was overridden because it's not declaration");
    134 
    135  // Executing `values` again shadows the helper binding, given it exists
    136  // before the execution.
    137  message = await executeAndWaitForResultMessage(
    138    hud,
    139    "values",
    140    "globalThis_values"
    141  );
    142  ok(message, "values was not overridden if it exists before the execution");
    143 });