| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <html> |
| <body></body> |
| <script> |
| async_test(async test => { |
| // 1. Load an iframe (not blocked). |
| let iframe = document.createElement("iframe"); |
| { |
| iframe.name = "theiframe"; |
| iframe.src = |
| "http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/frame-src/support/frame.html?0"; |
| let iframeLoaded = new Promise(resolve => { iframe.onload = resolve }); |
| document.body.appendChild(iframe); |
| await iframeLoaded; |
| } |
| |
| // 2. Start blocking iframes using CSP frame-src 'none'. |
| { |
| let meta = document.createElement('meta'); |
| meta.httpEquiv = "Content-Security-Policy"; |
| meta.content = "frame-src 'none'"; |
| document.getElementsByTagName('head')[0].appendChild(meta); |
| } |
| |
| // 3. Blocked same-document navigation using iframe.src. |
| { |
| let violation = new Promise(resolve => { |
| window.addEventListener('securitypolicyviolation', () => resolve()); |
| }); |
| iframe.src = |
| "http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/frame-src/support/frame.html?1"; |
| await violation; |
| } |
| |
| // 4. Blocked same-document navigation using window.open. |
| { |
| let violation = new Promise(resolve => { |
| window.addEventListener('securitypolicyviolation', resolve); |
| }); |
| window.open( |
| "http://www1.{{host}}:{{ports[http][0]}}/content-security-policy/frame-src/support/frame.html?2", |
| "theiframe"); |
| await violation; |
| } |
| |
| // 5. Regression test for https://crbug.com/1018385. The browser should |
| // not crash while displaying the error page. |
| await new Promise(resolve => window.setTimeout(resolve, 1000)); |
| |
| test.done(); |
| }, "Same-document navigations in an iframe blocked by CSP frame-src dynamically using the <meta> tag"); |
| </script> |
| </html> |