<!DOCTYPE html>
<html>
<head>
<title>Cross-origin CSS: Origin header should be set when fetching stylesheet in cors mode</title>

<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<link id="link-id0" rel="stylesheet" type="text/css" href="/security/resources/get-css-if-origin-header.php?id=id0"></link>
<link id="link-id1" rel="stylesheet" type="text/css" href="http://localhost:8000/security/resources/get-css-if-origin-header.php?id=id1"></link>
<link id="link-id2" rel="stylesheet" type="text/css" href="/security/resources/get-css-if-origin-header.php?id=id2" crossorigin=""></link>
<link id="link-id3" rel="stylesheet" type="text/css" href="http://localhost:8000/security/resources/get-css-if-origin-header.php?id=id3" crossorigin=""></link>
<link id="link-id4" rel="stylesheet" type="text/css" href="http://localhost:8000/security/resources/get-css-if-origin-header.php?id=id4" crossorigin="anonymous"></link>
<link id="link-id5" rel="stylesheet" type="text/css" href="http://localhost:8000/security/resources/get-css-if-origin-header.php?id=id5" crossorigin="credentials"></link>
<script>
function getBackgroundColorForId(id) {
    return window.getComputedStyle(document.getElementById(id), null).getPropertyValue('background-color')
}

function checkCSSLoading(id, expectToIncludeOrigin, expectVisibility)
{
    expectedColor = expectToIncludeOrigin ? "rgb(255, 255, 0)" : "rgb(0, 0, 255)";
    assert_equals(getBackgroundColorForId(id), expectedColor);
    assert_equals(document.getElementById("link-" + id).sheet.cssRules !== null, expectVisibility);
}

var onloadTest = async_test(" Testing that link element to load stylesheets correctly handle crossorigin mode.");

window.onload = function () {
    test(function () {
        checkCSSLoading('id0', false, true);
    }, 'Same-origin URL link without crossorigin attribute should be loaded without an Origin header');
    test(function () {
        checkCSSLoading('id1', false, false);
    }, 'Cross-origin URL link without crossorigin attribute should be loaded without an Origin header');
    test(function () {
        checkCSSLoading('id2', true, true);
    }, 'Same-origin URL link with crossorigin="" attribute should be loaded with an Origin header');
    test(function () {
        checkCSSLoading('id3', true, true);
    }, 'Cross-origin URL link with crossorigin="" should be loaded with an Origin header');
    test(function () {
        checkCSSLoading('id4', true, true);
    }, 'Cross-origin URL link with crossorigin="anonymous" should be loaded with an Origin header');
    test(function () {
        checkCSSLoading('id5', true, true);
    }, 'Cross-origin URL link with crossorigin="credentials" should be loaded with an Origin header');

    onloadTest.done();
};
</script>
</head>
<body>
    <div id="id0" class="id0"></div>
    <div id="id1" class="id1"></div>
    <div id="id2" class="id2"></div>
    <div id="id3" class="id3"></div>
    <div id="id4" class="id4"></div>
    <div id="id5" class="id5"></div>
</body>
</html>
