<!doctype html>
<title>&lt;link disabled&gt;'s "explicitly enabled" state doesn't persist for clones</title>
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://html.spec.whatwg.org/#attr-link-disabled">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link title="alt" rel="alternate stylesheet" disabled href="data:text/css,html { background: green }">
<script>
function assert_applies(applies) {
  (applies ? assert_equals : assert_not_equals)(getComputedStyle(document.documentElement).backgroundColor, "rgb(0, 128, 0)");
}

const link = document.querySelector("link[disabled]");

async_test(function(t) {
  link.remove();
  link.disabled = false; // `link` is explicitly enabled.

  let clonesLoaded = 0;

  for (let shallow of [true, false]) {
    const clone = link.cloneNode(shallow);
    clone.onload = t.step_func(function() {
      assert_false(link.disabled);
      // Even though it's not disabled, it still doesn't apply, since it's an alternate.
      assert_applies(false);
      if (++clonesLoaded == 2) {
        link.onload = t.step_func_done(function() {
          assert_false(link.disabled);
          assert_applies(true); // `link` is still explicitly enabled.
        });
        document.head.appendChild(link);
      }
    });
    document.head.appendChild(clone);
  }
}, "HTMLLinkElement.disabled's explicitly enabled state doesn't persist on clones");
</script>
