tor-browser

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

common.js (4047B)


      1 /**
      2 * Common infrastructure for manifest tests.
      3 */
      4 "use strict";
      5 const { ManifestProcessor } = SpecialPowers.ChromeUtils.importESModule(
      6  "resource://gre/modules/ManifestProcessor.sys.mjs"
      7 );
      8 const processor = ManifestProcessor;
      9 const manifestURL = new URL(document.location.origin + "/manifest.json");
     10 const docURL = document.location;
     11 const seperators =
     12  "\u2028\u2029\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000";
     13 const lineTerminators = "\u000D\u000A\u2028\u2029";
     14 const whiteSpace = `${seperators}${lineTerminators}`;
     15 const typeTests = [1, null, {}, [], false];
     16 const data = {
     17  jsonText: "{}",
     18  manifestURL,
     19  docURL,
     20 };
     21 
     22 const validThemeColors = [
     23  ["maroon", "#800000ff"],
     24  ["#f00", "#ff0000ff"],
     25  ["#ff0000", "#ff0000ff"],
     26  ["rgb(255,0,0)", "#ff0000ff"],
     27  ["rgb(255,0,0,1)", "#ff0000ff"],
     28  ["rgb(255,0,0,1.0)", "#ff0000ff"],
     29  ["rgb(255,0,0,100%)", "#ff0000ff"],
     30  ["rgb(255 0 0)", "#ff0000ff"],
     31  ["rgb(255 0 0 / 1)", "#ff0000ff"],
     32  ["rgb(255 0 0 / 1.0)", "#ff0000ff"],
     33  ["rgb(255 0 0 / 100%)", "#ff0000ff"],
     34  ["rgb(100%, 0%, 0%)", "#ff0000ff"],
     35  ["rgb(100%, 0%, 0%, 1)", "#ff0000ff"],
     36  ["rgb(100%, 0%, 0%, 1.0)", "#ff0000ff"],
     37  ["rgb(100%, 0%, 0%, 100%)", "#ff0000ff"],
     38  ["rgb(100% 0% 0%)", "#ff0000ff"],
     39  ["rgb(100% 0% 0% / 1)", "#ff0000ff"],
     40  ["rgb(100%, 0%, 0%, 1.0)", "#ff0000ff"],
     41  ["rgb(100%, 0%, 0%, 100%)", "#ff0000ff"],
     42  ["rgb(300,0,0)", "#ff0000ff"],
     43  ["rgb(300 0 0)", "#ff0000ff"],
     44  ["rgb(255,-10,0)", "#ff0000ff"],
     45  ["rgb(110%, 0%, 0%)", "#ff0000ff"],
     46  ["rgba(255,0,0)", "#ff0000ff"],
     47  ["rgba(255,0,0,1)", "#ff0000ff"],
     48  ["rgba(255 0 0 / 1)", "#ff0000ff"],
     49  ["rgba(100%,0%,0%,1)", "#ff0000ff"],
     50  ["rgba(0,0,255,0.5)", "#0000ff80"],
     51  ["rgba(100%, 50%, 0%, 0.1)", "#ff80001a"],
     52  ["hsl(120, 100%, 50%)", "#00ff00ff"],
     53  ["hsl(120 100% 50%)", "#00ff00ff"],
     54  ["hsl(120, 100%, 50%, 1.0)", "#00ff00ff"],
     55  ["hsl(120 100% 50% / 1.0)", "#00ff00ff"],
     56  ["hsla(120, 100%, 50%)", "#00ff00ff"],
     57  ["hsla(120 100% 50%)", "#00ff00ff"],
     58  ["hsla(120, 100%, 50%, 1.0)", "#00ff00ff"],
     59  ["hsla(120 100% 50% / 1.0)", "#00ff00ff"],
     60  ["hsl(120deg, 100%, 50%)", "#00ff00ff"],
     61  ["hsl(133.33333333grad, 100%, 50%)", "#00ff00ff"],
     62  ["hsl(2.0943951024rad, 100%, 50%)", "#00ff00ff"],
     63  ["hsl(0.3333333333turn, 100%, 50%)", "#00ff00ff"],
     64 ];
     65 
     66 function setupManifest(key, value) {
     67  const manifest = {};
     68  manifest[key] = value;
     69  data.jsonText = JSON.stringify(manifest);
     70 }
     71 
     72 function testValidColors(key) {
     73  validThemeColors.forEach(item => {
     74    const [manifest_color, parsed_color] = item;
     75    setupManifest(key, manifest_color);
     76    const result = processor.process(data);
     77 
     78    is(
     79      result[key],
     80      parsed_color,
     81      `Expect ${key} to be returned for ${manifest_color}`
     82    );
     83  });
     84 
     85  // Trim tests
     86  validThemeColors.forEach(item => {
     87    const [manifest_color, parsed_color] = item;
     88    const expandedThemeColor = `${seperators}${lineTerminators}${manifest_color}${lineTerminators}${seperators}`;
     89    setupManifest(key, expandedThemeColor);
     90    const result = processor.process(data);
     91 
     92    is(
     93      result[key],
     94      parsed_color,
     95      `Expect trimmed ${key} to be returned for ${manifest_color}`
     96    );
     97  });
     98 }
     99 
    100 const invalidThemeColors = [
    101  "marooon",
    102  "f000000",
    103  "#ff00000",
    104  "rgb(100, 0%, 0%)",
    105  "rgb(255,0)",
    106  "rbg(255,-10,0)",
    107  "rgb(110, 0%, 0%)",
    108  "(255,0,0) }",
    109  "rgba(255)",
    110  " rgb(100%,0%,0%) }",
    111  "hsl(120, 100%, 50)",
    112  "hsl(120, 100%, 50.0)",
    113  "hsl 120, 100%, 50%",
    114  "hsla{120, 100%, 50%, 1}",
    115 ];
    116 
    117 function testInvalidColors(key) {
    118  typeTests.forEach(type => {
    119    setupManifest(key, type);
    120    const result = processor.process(data);
    121 
    122    is(
    123      result[key],
    124      undefined,
    125      `Expect non-string ${key} to be undefined: ${typeof type}.`
    126    );
    127  });
    128 
    129  invalidThemeColors.forEach(manifest_color => {
    130    setupManifest(key, manifest_color);
    131    const result = processor.process(data);
    132 
    133    is(
    134      result[key],
    135      undefined,
    136      `Expect ${key} to be undefined: ${manifest_color}.`
    137    );
    138  });
    139 }