layout/style/test/test_user_sheet_shadow_dom.html
author Cristian Tuns <ctuns@mozilla.com>
Fri, 24 Sep 2021 14:42:22 -0400
changeset 593147 0b4005ebc9776ff43d99d1427c1a1fd2e14d9a44
parent 490856 19e21bdb79cbfdc5b3a9c2323d3fcb6e28f159cc
permissions -rw-r--r--
Backed out changeset dd075a074e45 (bug 1730518) for causing content crashes (bug 1732479). CLOSED TREE

<!DOCTYPE HTML>
<title>Test for bug 1576229 - Nodes in Shadow DOM react properly to dynamic changes in user sheets</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
<div></div>
<span id="host" style="display: block"></span>
<script>
const gIOService = SpecialPowers.Cc["@mozilla.org/network/io-service;1"]
  .getService(SpecialPowers.Ci.nsIIOService)

const gSSService = SpecialPowers.Cc["@mozilla.org/content/style-sheet-service;1"]
  .getService(SpecialPowers.Ci.nsIStyleSheetService);

const windowUtils = SpecialPowers.getDOMWindowUtils(window);

function loadUserSheet(style) {
  const uri = gIOService.newURI("data:text/css," + style);
  windowUtils.loadSheet(uri, windowUtils.USER_SHEET);
}

SimpleTest.waitForExplicitFinish();

onload = function() {
  loadUserSheet(`
    div {
      width: 100px;
      height: 100px;
      background-color: red;
    }
    .foo {
      background-color: green;
    }
  `);
  let host = document.querySelector("#host");
  host.attachShadow({ mode: "open" }).innerHTML = `
    <div></div>
  `;
  let light = document.querySelector('div');
  let shadow = host.shadowRoot.querySelector('div');
  is(getComputedStyle(light).backgroundColor, "rgb(255, 0, 0)", "User sheet works in light DOM");
  is(getComputedStyle(shadow).backgroundColor, "rgb(255, 0, 0)", "User sheet works in shadow DOM");
  light.classList.add("foo");
  shadow.classList.add("foo");
  is(getComputedStyle(light).backgroundColor, "rgb(0, 128, 0)", "Dynamic change for user sheet works in light DOM");
  is(getComputedStyle(shadow).backgroundColor, "rgb(0, 128, 0)", "Dynamic change for user sheet works in shadow DOM");
  SimpleTest.finish();
}
</script>