| <!DOCTYPE HTML> |
| <html> |
| |
| <head> |
| <meta http-equiv="Content-Security-Policy" content="base-uri {{location[scheme]}}://{{domains[]}}:{{ports[http][0]}}/base/"> |
| |
| <title>base-uri works correctly inside a sandboxed iframe.</title> |
| <script src='/resources/testharness.js'></script> |
| <script src='/resources/testharnessreport.js'></script> |
| </head> |
| |
| <body> |
| <h1>base-uri works correctly inside a sandboxed iframe.</h1> |
| <div id='log'></div> |
| |
| <script> |
| window.addEventListener('securitypolicyviolation', function(e) { |
| assert_unreached('No CSP violation report should have been fired.'); |
| }); |
| |
| async_test(function(t) { |
| var i = document.createElement('iframe'); |
| i.sandbox = 'allow-scripts'; |
| i.style.display = 'none'; |
| i.srcdoc = ` |
| <script> |
| window.addEventListener('securitypolicyviolation', function() { |
| top.postMessage('FAIL', '*'); |
| }); |
| </sc` + `ript> |
| <base href="{{location[scheme]}}://{{domains[]}}:{{ports[http][0]}}/base/"> |
| <script> |
| top.postMessage(document.baseURI, '*'); |
| </sc` + `ript>`; |
| |
| window.addEventListener('message', t.step_func(function(e) { |
| if (e.source === i.contentWindow) { |
| assert_equals(e.data, location.origin + '/base/'); |
| t.done(); |
| } |
| })); |
| |
| document.body.appendChild(i); |
| }, 'base-uri \'self\' works with same-origin sandboxed iframes.'); |
| |
| async_test(function(t) { |
| var i = document.createElement('iframe'); |
| i.sandbox = 'allow-scripts'; |
| i.style.display = 'none'; |
| i.srcdoc = ` |
| <script> |
| window.addEventListener('securitypolicyviolation', |
| function(violation) { |
| if (violation.blockedURI !== '{{location[scheme]}}://{{domains[www2]}}:{{ports[http][0]}}/base/' || violation.effectiveDirective !== 'base-uri') { |
| top.postMessage('FAIL'); |
| return; |
| } |
| top.postMessage(document.baseURI, '*'); |
| }); |
| </sc` + `ript> |
| <base href="{{location[scheme]}}://{{domains[www2]}}:{{ports[http][0]}}/base/"> |
| <script> |
| top.postMessage(document.baseURI, '*'); |
| </sc` + `ript>`; |
| |
| window.addEventListener('message', t.step_func(function(e) { |
| if (e.source === i.contentWindow) { |
| assert_equals(e.data, location.href); |
| t.done(); |
| } |
| })); |
| |
| document.body.appendChild(i); |
| }, 'base-uri \'self\' blocks foreign-origin sandboxed iframes.'); |
| </script> |
| |
| </body> |
| |
| </html> |