<!DOCTYPE html>
<html>
  <head>
    <title>Stylesheets not removed from StyleSheetList when disabled</title>
    <script src="../resources/testharness.js"></script>
    <script src="../resources/testharnessreport.js"></script>
    <link id="s1" rel="stylesheet" title="set" href="data:text/css,#e1{color:red}">
    <link id="s2" rel="alternate stylesheet" type="text/css" title="set" href="data:text/css,#e2{color:red}">
    <link id="s3" rel="stylesheet" type="text/css" href="data:text/css,#e3{color:red}">
    <style id="s4">#e4{color:red}</style>
    <style id="s5" title="set">#e5{color:red}</style>
    <script>
      var initialTest = async_test("Check that all stylesheets are initially present in document.styleSheets");
      var colorTest = async_test("Check that no stylesheets are applied when disabled");
      var testObj = new Object;
      for (var i=0; i<5; i++) {
        testObj[i] = async_test(`#s${i+1}${(i<3) ? ' NOT' : ''} accessible through document.styleSheets after disabling`);
      }

      onload = function(){

        var count = document.styleSheets.length;

        initialTest.step(function(){
          assert_equals(count, 5);
        });
        initialTest.done();

        var i;

        for (i=0; i<5; i++)
          document.getElementById("s"+(i+1)).disabled = true;

        colorTest.step(function(){
          for (i=0; i<5; i++)
            assert_equals(getComputedStyle(document.getElementById("e"+(i+1))).color, "rgb(0, 128, 0)");
        });
        colorTest.done();

        count = document.styleSheets.length;
        assert_equals(count, 2); // Just the <style> nodes
        for (i=0; i<count; i++)
          testObj[document.styleSheets[i].ownerNode.id] = true;

        for (i=0; i<5; i++) {
          testObj[i].step(function(){
            if (i<3) {
              assert_true(!testObj["s"+(i+1)]);
            } else {
              assert_true(testObj["s"+(i+1)]);
            }
          }, "Check if #s"+(i+1)+" is present in document.styleSheets for <style> but not <link> after it is disabled");
          testObj[i].done();
        }
      };
    </script>
  </head>
  <body>
    <div id="log"></div>
    <div style="color: green">
      <span id="e1">This</span>
      <span id="e2">text</span>
      <span id="e3">should</span>
      <span id="e4">be</span>
      <span id="e5">green</span>
    </div>
  </body>
</html>
