| <!doctype html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>CSSOM - CSSStylesheet should support origins</title> |
| <link rel="help" href="https://drafts.csswg.org/cssom/#the-cssstylesheet-interface"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| |
| <link id="crossorigin" href="http://www1.{{host}}:{{ports[http][1]}}/css/cssom/stylesheet-same-origin.css" rel="stylesheet"> |
| <link id="sameorigin" href="stylesheet-same-origin.css" rel="stylesheet"> |
| <link id="sameorigindata" href="data:text/css,.green-text{color:rgb(0, 255, 0)}" rel="stylesheet"> |
| <link id="redirect-sameorigin-to-crossorigin" |
| href="/common/redirect.py?location=http://www1.{{host}}:{{ports[http][1]}}/css/cssom/stylesheet-same-origin.css" |
| rel="stylesheet"> |
| <link id="redirect-crossorigin-to-sameorigin" |
| href="http://www1.{{host}}:{{ports[http][1]}}/common/redirect.py?location=http://{{host}}:{{ports[http][0]}}/css/cssom/stylesheet-same-origin.css" |
| rel="stylesheet"> |
| <link id="loaderror" href="support/malformed-http-response.asis" rel="stylesheet"> |
| |
| <script> |
| var crossorigin = document.getElementById("crossorigin").sheet; |
| var redirectSameOriginToCrossOrigin = document.getElementById("redirect-sameorigin-to-crossorigin").sheet; |
| var redirectCrossOriginToSameOrigin = document.getElementById("redirect-crossorigin-to-sameorigin").sheet; |
| var loadError = document.getElementById("loaderror").sheet; |
| var sameorigin = document.getElementById("sameorigin").sheet; |
| var sameorigindata = document.getElementById("sameorigindata").sheet; |
| |
| function doOriginCleanCheck(sheet, name) { |
| assert_equals(sheet.cssRules.length, 1, name + " stylesheet.cssRules should be accessible."); |
| sheet.insertRule("#test { margin: 10px; }", 1); |
| assert_equals(sheet.cssRules.length, 2, name + " stylesheet.insertRule should be accessible."); |
| sheet.deleteRule(0); |
| assert_equals(sheet.cssRules.length, 1, name + " stylesheet.deleteRule should be accessible."); |
| } |
| |
| function doOriginDirtyCheck(sheet) { |
| assert_throws_dom("SecurityError", |
| function () { |
| sheet.cssRules; |
| }, |
| 'stylesheet.cssRules should throw SecurityError.'); |
| assert_throws_dom("SecurityError", |
| function () { |
| sheet.insertRule("#test { margin: 10px; }", 1); |
| }, |
| 'stylesheet.insertRule should throw SecurityError.'); |
| |
| assert_throws_dom("SecurityError", |
| function () { |
| sheet.deleteRule(0); |
| }, |
| 'stylesheet.deleteRule should throw SecurityError.'); |
| } |
| |
| test(function() { |
| doOriginDirtyCheck(crossorigin); |
| }, "Origin-clean check in cross-origin CSSOM Stylesheets"); |
| |
| test(function() { |
| doOriginDirtyCheck(redirectSameOriginToCrossOrigin); |
| }, "Origin-clean check in cross-origin CSSOM Stylesheets (redirect from same-origin to cross-origin)"); |
| |
| test(function() { |
| doOriginDirtyCheck(redirectCrossOriginToSameOrigin); |
| }, "Origin-clean check in cross-origin CSSOM Stylesheets (redirect from cross-origin to same-origin)"); |
| |
| test(function() { |
| doOriginDirtyCheck(loadError); |
| }, "Origin-clean check in loading error CSSOM Stylesheets"); |
| |
| test(function() { |
| doOriginCleanCheck(sameorigin, "Same-origin"); |
| }, "Origin-clean check in same-origin CSSOM Stylesheets"); |
| |
| test(function() { |
| doOriginCleanCheck(sameorigindata, "data:css"); |
| }, "Origin-clean check in data:css CSSOM Stylesheets"); |
| |
| </script> |
| </head> |
| <body> |
| </html> |