<!DOCTYPE html>
<meta charset=utf-8>
<title>CSS Style Sheet Origin Clean Flag test</title>

<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=support.js?pipe=sub></script>

<h1>CSS Style Sheet Origin Clean Flag test</h1>

<div id=log></div>

<script>
// This test is for Cobalt's Same Origin Policy and corresponding CORS protocol in
// HTML Link Element and CSS Style Sheet. WPT's infrastructure enables us to test
// this network-related feature without relying on real online resources. It is a
// Cobalt owned test.

var origin = location.protocol+"//"+location.host;
var different_origin = "http://" + "www1." + location.hostname+":"+location.port;
var css_location = "old-tests/submission/Opera/script_scheduling/css/background.css"

var linkelement = document.createElement("link");
linkelement.rel = "stylesheet"
linkelement.href = origin+"/"+css_location
document.appendChild(linkelement)

var linkelement2 = document.createElement("link");
linkelement2.rel = "stylesheet"
linkelement2.href = different_origin+"/"+css_location
document.appendChild(linkelement2)

var linkelement3 = document.createElement("link");
linkelement3.rel = "stylesheet"
linkelement3.href = origin+"/cors/resources/cors-makeheader.py?location="+different_origin+"/"+css_location;
document.appendChild(linkelement3)

var linkelement4 = document.createElement("link");
linkelement4.rel = "stylesheet"
linkelement4.href = different_origin+"/"+css_location
linkelement4.crossOrigin = "anonymous"
document.appendChild(linkelement4)

document.onload = function() {
    test(function(){
    // Same-Origin resource, should be accessible
    assert_equals(document.styleSheets[0].cssRules.length, 1)
    document.styleSheets[0].insertRule("#test {position:fixed}", 1)
    assert_equals(document.styleSheets[0].cssRules.length, 2)

    // Cross-Origin resource, should be blocked
    assert_throws("SecurityError",function(){document.styleSheets[1].cssRules})
    assert_throws("SecurityError",function(){document.styleSheets[1].insertRule("#test {position:fixed}", 1)})

    // Cross-Origin CSS Style Sheet fetched after redirects should be caught
    assert_throws("SecurityError",function(){document.styleSheets[2].cssRules})
    assert_throws("SecurityError",function(){document.styleSheets[2].insertRule("#test {position:fixed}", 1)})

    // Specify crossOrigin - "anonymous" demand browser to fetch resource with
    // CORS protocol. If server does not allow that, resource should not load.
    assert_throws(new TypeError(), function(){document.styleSheets[3].cssRules})
    assert_throws(new TypeError(),function(){document.styleSheets[3].insertRule("#test {position:fixed}", 1)})
    })
}

</script>
