tor-browser

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

browser_rules_mark_overridden_layers.js (4990B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 // Tests that the rule view marks overridden rules correctly when using layers
      7 
      8 const HTML = `
      9  <style type='text/css'>
     10    @layer A, B;
     11 
     12    h1 {
     13      background-color: red;
     14      color: tomato !important;
     15    }
     16 
     17    @layer A {
     18      h1 {
     19        background-color: green;
     20        color: darkseagreen !important;
     21        color: lime !important;
     22        color: forestgreen;
     23      }
     24 
     25      h4 {
     26        color: red !important;
     27      }
     28    }
     29    @layer B {
     30      h1 {
     31        background-color: cyan;
     32        color: blue !important;
     33      }
     34    }
     35 
     36    @layer {
     37      h2 {
     38        color: red !important;
     39      }
     40    }
     41    @layer {
     42      h2 {
     43        color: blue !important;
     44      }
     45    }
     46 
     47    @layer {
     48      @layer A {
     49        h3 {
     50          color: red !important;
     51        }
     52      }
     53 
     54      @layer A {
     55        h3 {
     56          color: lime !important;
     57        }
     58      }
     59    }
     60 
     61    @layer {
     62      @layer A {
     63        h3 {
     64          color: blue !important;
     65        }
     66      }
     67    }
     68  </style>
     69  <h1>Hello</h1>
     70  <h2>world</h2>
     71  <h3>!</h3>
     72  <h4 style="color: blue !important">style attr</h4>
     73 `;
     74 
     75 add_task(async function () {
     76  await addTab(
     77    `https://example.com/document-builder.sjs?html=${encodeURIComponent(HTML)}`
     78  );
     79  const { inspector, view } = await openRuleView();
     80  await selectNode("h1", inspector);
     81 
     82  info("Check background-color properties");
     83  is(
     84    await getComputedStyleProperty("h1", null, "background-color"),
     85    "rgb(255, 0, 0)",
     86    "The h1 element has a red background-color, as the value in the layer-less rule wins"
     87  );
     88  ok(
     89    !isPropertyOverridden(view, 1, { "background-color": "red" }),
     90    "background-color value in layer-less rule is not overridden"
     91  );
     92  ok(
     93    isPropertyOverridden(view, 2, { "background-color": "cyan" }),
     94    "background-color value in layer B rule is overridden"
     95  );
     96  ok(
     97    isPropertyOverridden(view, 3, { "background-color": "green" }),
     98    "background-color value in layer A rule is overridden"
     99  );
    100 
    101  info("Check (!important) color properties");
    102  is(
    103    await getComputedStyleProperty("h1", null, "color"),
    104    "rgb(0, 255, 0)",
    105    "The h1 element has a lime color, as the last important value in the first declared layer wins"
    106  );
    107  ok(
    108    isPropertyOverridden(view, 1, { color: "tomato" }),
    109    "important color value in layer-less rule is overridden"
    110  );
    111  ok(
    112    isPropertyOverridden(view, 2, { color: "blue" }),
    113    "important color value in layer B rule is overridden"
    114  );
    115  ok(
    116    isPropertyOverridden(view, 3, { color: "darkseagreen" }),
    117    "first important color value in layer A rule is overridden"
    118  );
    119  ok(
    120    !isPropertyOverridden(view, 3, { color: "lime" }),
    121    "important color value in layer A rule is not overridden"
    122  );
    123  ok(
    124    isPropertyOverridden(view, 3, { color: "forestgreen" }),
    125    "last, non-important color value in layer A rule is overridden"
    126  );
    127 
    128  info("Check (!important) color properties on nameless layers");
    129  await selectNode("h2", inspector);
    130  is(
    131    await getComputedStyleProperty("h2", null, "color"),
    132    "rgb(255, 0, 0)",
    133    "The h2 element has a blue color, as important value in the first nameless layer wins"
    134  );
    135  ok(
    136    isPropertyOverridden(view, 1, { color: "blue" }),
    137    "important color value in second layer-less rule is overridden"
    138  );
    139  ok(
    140    !isPropertyOverridden(view, 2, { color: "red" }),
    141    "important color value in first layer-less rule is not overridden"
    142  );
    143 
    144  info("Check (!important) color properties on nested layer in nameless layer");
    145  await selectNode("h3", inspector);
    146  is(
    147    await getComputedStyleProperty("h3", null, "color"),
    148    "rgb(0, 255, 0)",
    149    "The h3 element has a lime color, as important value in the last rule of the first declared nameless layer wins"
    150  );
    151  ok(
    152    isPropertyOverridden(view, 1, { color: "blue" }),
    153    "important color value in second layer-less rule is overridden"
    154  );
    155  ok(
    156    !isPropertyOverridden(view, 2, { color: "lime" }),
    157    "important color value in second rule of layer-less rule is not overridden"
    158  );
    159  ok(
    160    isPropertyOverridden(view, 3, { color: "red" }),
    161    "important color value in first rule of layer-less rule is overridden"
    162  );
    163 
    164  info("Check (!important) color properties on element style and layer");
    165  await selectNode("h4", inspector);
    166  is(
    167    await getComputedStyleProperty("h4", null, "color"),
    168    "rgb(0, 0, 255)",
    169    "The h4 element has a blue color, as important value in element rule wins"
    170  );
    171  ok(
    172    !isPropertyOverridden(view, 0, { color: "blue" }),
    173    "important color value in element rule is not overridden"
    174  );
    175  ok(
    176    isPropertyOverridden(view, 1, { color: "red" }),
    177    "important color value in layer is overridden"
    178  );
    179 });
    180 
    181 function isPropertyOverridden(view, ruleIndex, property) {
    182  return getTextProperty(
    183    view,
    184    ruleIndex,
    185    property
    186  ).editor.element.classList.contains("ruleview-overridden");
    187 }