tor-browser

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

browser_wasm-source-map.js (3409B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 // Test source mappings WASM sources.
      7 // This test is quite general and test various functions.
      8 
      9 const {
     10  WasmRemap,
     11 } = require("resource://devtools/client/shared/source-map-loader/utils/wasmRemap.js");
     12 const {
     13  SourceMapConsumer,
     14 } = require("resource://devtools/client/shared/vendor/source-map/source-map.js");
     15 
     16 SourceMapConsumer.initialize({
     17  "lib/mappings.wasm":
     18    "resource://devtools/client/shared/vendor/source-map/lib/mappings.wasm",
     19 });
     20 
     21 add_setup(function () {
     22  return SpecialPowers.pushPrefEnv({
     23    set: [["security.allow_eval_with_system_principal", true]],
     24  });
     25 });
     26 
     27 add_task(async function smokeTest() {
     28  const testMap1 = {
     29    version: 3,
     30    file: "min.js",
     31    names: [],
     32    sources: ["one.js", "two.js"],
     33    sourceRoot: "/the/root",
     34    mappings: "CAAC,IAAM,SACU,GAAC",
     35  };
     36  const testMap1Entries = [
     37    { offset: 1, line: 1, column: 1 },
     38    { offset: 5, line: 1, column: 7 },
     39    { offset: 14, line: 2, column: 17 },
     40    { offset: 17, line: 2, column: 18 },
     41  ];
     42 
     43  const map1 = await new SourceMapConsumer(testMap1);
     44 
     45  const remap1 = new WasmRemap(map1);
     46 
     47  is(remap1.file, "min.js");
     48  is(remap1.hasContentsOfAllSources(), false);
     49  is(remap1.sources.length, 2);
     50  is(remap1.sources[0], "/the/root/one.js");
     51  is(remap1.sources[1], "/the/root/two.js");
     52 
     53  const expectedEntries = testMap1Entries.slice(0);
     54  remap1.eachMapping(function (entry) {
     55    const expected = expectedEntries.shift();
     56    is(entry.generatedLine, expected.offset);
     57    is(entry.generatedColumn, 0);
     58    is(entry.originalLine, expected.line);
     59    is(entry.originalColumn, expected.column);
     60    is(entry.name, null);
     61  });
     62 
     63  const pos1 = remap1.originalPositionFor({ line: 5, column: 0 });
     64  is(pos1.line, 1);
     65  is(pos1.column, 7);
     66  is(pos1.source, "/the/root/one.js");
     67 
     68  const pos2 = remap1.generatedPositionFor({
     69    source: "/the/root/one.js",
     70    line: 2,
     71    column: 18,
     72  });
     73  is(pos2.line, 17);
     74  is(pos2.column, 0);
     75  is(pos2.lastColumn, undefined);
     76 
     77  remap1.computeColumnSpans();
     78  const pos3 = remap1.allGeneratedPositionsFor({
     79    source: "/the/root/one.js",
     80    line: 2,
     81    column: 17,
     82  });
     83  is(pos3.length, 1);
     84  is(pos3[0].line, 14);
     85  is(pos3[0].column, 0);
     86  is(pos3[0].lastColumn, 0);
     87 
     88  map1.destroy();
     89 });
     90 
     91 add_task(async function contentPresents() {
     92  const testMap2 = {
     93    version: 3,
     94    file: "none.js",
     95    names: [],
     96    sources: ["zero.js"],
     97    mappings: "",
     98    sourcesContent: ["//test"],
     99  };
    100 
    101  const map2 = await new SourceMapConsumer(testMap2);
    102  const remap2 = new WasmRemap(map2);
    103  is(remap2.file, "none.js");
    104  ok(remap2.hasContentsOfAllSources());
    105  is(remap2.sourceContentFor("zero.js"), "//test");
    106 
    107  map2.destroy();
    108 });
    109 
    110 add_task(async function readAndTransposeWasmMap() {
    111  const source = {
    112    id: "wasm.js",
    113    sourceMapBaseURL: "wasm:http://example.com/whatever/:min.js",
    114    sourceMapURL: `${URL_ROOT}fixtures/wasm.js.map`,
    115    isWasm: true,
    116  };
    117 
    118  const urls = await gSourceMapLoader.getOriginalURLs(source);
    119  Assert.deepEqual(urls, [
    120    {
    121      id: "wasm.js/originalSource-63954a1c231200652c0d99c6a69cd178",
    122      url: `${URL_ROOT}fixtures/one.js`,
    123    },
    124  ]);
    125 
    126  const { line, column } = await gSourceMapLoader.getOriginalLocation({
    127    sourceId: source.id,
    128    line: 5,
    129  });
    130  is(line, 1);
    131  is(column, 7);
    132 });