<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<link id="sheet" rel="stylesheet" href="data:tex/css,#test-element{text-decoration:line-through}">
<link id="notsheet" rel="author" href="mailto:nosuch@webkit.org">
<link id="alt" rel="alternate stylesheet" title="altset" href="resources/green.css">
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>

<span id="test-element"></span>

<script>

description("Series of tests to validate behavior of getting/setting link.disabled and link.sheet.disabled.<br>" +
            'Test for bug <a href="https://bugs.webkit.org/show_bug.cgi?id=61400">61400</a>: REGRESSION(84329): Stylesheets on some pages do not load');

window.jsTestIsAsync = true;

function onSheetLoaded(f, elem, maxtime) {
    if (elem.sheet || maxtime <= 0)
        f(elem);
    else
        setTimeout(function () { onSheetLoaded(f, elem, maxtime - 25);}, 25);
}



// With a non-stylesheet <link>, 'disabled' is always false.

var testElement = document.getElementById("test-element");
var originalBG = getComputedStyle(testElement).backgroundColor;
var link;

debug("notsheet");

link = document.getElementById("notsheet");
shouldBeNull("link.sheet");
link.disabled = true;
shouldBeFalse("link.disabled");


// With a stylesheet <link>, 'disabled' and 'link.style.disabled' should both
// work, and be consistent with each other.

debug("sheet");

link = document.getElementById("sheet");
shouldBeNonNull("link.sheet");

link.sheet.disabled = true;
shouldBeTrue("link.disabled");
shouldBeTrue("link.sheet.disabled");
shouldBeEqualToString("getComputedStyle(testElement).textDecoration", "none");

link.disabled = false;
shouldBeFalse("link.disabled");
shouldBeFalse("link.sheet.disabled");
shouldBeEqualToString("getComputedStyle(testElement).textDecoration", "line-through");

link.sheet.disabled = false;


// An alternate stylesheet defaults to disabled when its title does not
// match the preferred set.

debug("altsheet");
link = document.getElementById("alt");
shouldBeTrue("link.disabled");

// Toggling link.disabled activates the stylesheet.

function altSheetLoaded(e) {
    link = e;
    shouldBeNonNull("link.sheet");
    shouldBe("getComputedStyle(testElement).backgroundColor", "'rgb(0, 128, 0)'");

    // Enabling a stylsheet set modifies disabled status of style sheets.

    document.selectedStyleSheetSet = "nosuchset";
    shouldBeTrue("link.disabled");
    shouldBe("getComputedStyle(testElement).backgroundColor", "originalBG");

    document.selectedStyleSheetSet = "altset";
    shouldBeFalse("link.disabled");
    shouldBe("getComputedStyle(testElement).backgroundColor", "'rgb(0, 128, 0)'");

    // Disabling a stylesheet *after* its stylesheet set has been selected
    // de-activates it.

    link.disabled = true;
    shouldBe("getComputedStyle(testElement).backgroundColor", "originalBG");

    finishJSTest();
}

link.disabled = false;
onSheetLoaded(altSheetLoaded, link, 500);

</script>
<script src="../../resources/js-test-post.js"></script>
</body></html>
