tor-browser

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

test_Stack.js (3150B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 const { getFramesFromStack, isChromeFrame } = ChromeUtils.importESModule(
      6  "chrome://remote/content/shared/Stack.sys.mjs"
      7 );
      8 
      9 const sourceFrames = [
     10  {
     11    column: 1,
     12    functionDisplayName: "foo",
     13    line: 2,
     14    source: "cheese",
     15    sourceId: 1,
     16  },
     17  {
     18    column: 3,
     19    functionDisplayName: null,
     20    line: 4,
     21    source: "cake",
     22    sourceId: 2,
     23  },
     24  {
     25    column: 5,
     26    functionDisplayName: "chrome",
     27    line: 6,
     28    source: "chrome://foo",
     29    sourceId: 3,
     30  },
     31 ];
     32 
     33 const targetFrames = [
     34  {
     35    columnNumber: 1,
     36    functionName: "foo",
     37    lineNumber: 2,
     38    filename: "cheese",
     39    sourceId: 1,
     40  },
     41  {
     42    columnNumber: 3,
     43    functionName: "",
     44    lineNumber: 4,
     45    filename: "cake",
     46    sourceId: 2,
     47  },
     48  {
     49    columnNumber: 5,
     50    functionName: "chrome",
     51    lineNumber: 6,
     52    filename: "chrome://foo",
     53    sourceId: 3,
     54  },
     55 ];
     56 
     57 add_task(async function test_getFramesFromStack() {
     58  const stack = buildStack(sourceFrames);
     59  const frames = getFramesFromStack(stack, { includeChrome: false });
     60 
     61  ok(Array.isArray(frames), "frames is of expected type Array");
     62  equal(frames.length, 3, "Got expected amount of frames");
     63  checkFrame(frames.at(0), targetFrames.at(0));
     64  checkFrame(frames.at(1), targetFrames.at(1));
     65  checkFrame(frames.at(2), targetFrames.at(2));
     66 });
     67 
     68 add_task(async function test_getFramesFromStack_asyncStack() {
     69  const stack = buildStack(sourceFrames, true);
     70  const frames = getFramesFromStack(stack);
     71 
     72  ok(Array.isArray(frames), "frames is of expected type Array");
     73  equal(frames.length, 3, "Got expected amount of frames");
     74  checkFrame(frames.at(0), targetFrames.at(0));
     75  checkFrame(frames.at(1), targetFrames.at(1));
     76  checkFrame(frames.at(2), targetFrames.at(2));
     77 });
     78 
     79 add_task(async function test_isChromeFrame() {
     80  for (const filename of ["chrome://foo/bar", "resource://foo/bar"]) {
     81    ok(isChromeFrame({ filename }), "Frame is of expected chrome scope");
     82  }
     83 
     84  for (const filename of ["http://foo.bar", "about:blank"]) {
     85    ok(!isChromeFrame({ filename }), "Frame is of expected content scope");
     86  }
     87 });
     88 
     89 function buildStack(frames, async = false) {
     90  const parent = async ? "asyncParent" : "parent";
     91 
     92  let currentFrame, stack;
     93  for (const frame of frames) {
     94    if (currentFrame) {
     95      currentFrame[parent] = Object.assign({}, frame);
     96      currentFrame = currentFrame[parent];
     97    } else {
     98      stack = Object.assign({}, frame);
     99      currentFrame = stack;
    100    }
    101  }
    102 
    103  return stack;
    104 }
    105 
    106 function checkFrame(frame, expectedFrame) {
    107  equal(
    108    frame.columnNumber,
    109    expectedFrame.columnNumber,
    110    "Got expected column number"
    111  );
    112  equal(
    113    frame.functionName,
    114    expectedFrame.functionName,
    115    "Got expected function name"
    116  );
    117  equal(frame.lineNumber, expectedFrame.lineNumber, "Got expected line number");
    118  equal(frame.filename, expectedFrame.filename, "Got expected filename");
    119  equal(frame.sourceId, expectedFrame.sourceId, "Got expected source id");
    120 }