| Index: third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/parserInserted/innerHTML-srcdoc.html
|
| diff --git a/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/parserInserted/innerHTML-srcdoc.html b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/parserInserted/innerHTML-srcdoc.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f63d9c41d10db08299ac752cd8a2b89ff1cb6751
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/http/tests/security/contentSecurityPolicy/parserInserted/innerHTML-srcdoc.html
|
| @@ -0,0 +1,53 @@
|
| +<!DOCTYPE html>
|
| +<meta http-equiv="Content-Security-Policy" content="script-src 'disallow-all-the-parser-inserted-scripts-ever-except-for-the-ones-we-like' 'self' 'unsafe-inline'">
|
| +<script src="/resources/testharness.js"></script>
|
| +<script src="/resources/testharnessreport.js"></script>
|
| +<body>
|
| +
|
| +<script>
|
| + var payload = `
|
| + <script>
|
| + var current = window;
|
| + while (current.frameElement) {
|
| + current.frameElement.executedScript = true;
|
| + current = current.parent;
|
| + }
|
| + </scr` + `ipt>
|
| + `;
|
| +
|
| + function assert_no_execution(name, html) {
|
| + async_test(t => {
|
| + var container = document.createElement('div');
|
| + document.body.appendChild(container);
|
| +
|
| + var observer = new MutationObserver(mutations => {
|
| + for (var mutation of mutations) {
|
| + for (var node of mutation.addedNodes) {
|
| + if (node.dataset['test'] == name) {
|
| + observer.disconnect();
|
| + node.addEventListener('load', t.step_func(e => {
|
| + // Give nested scripts a frame or so to execute:
|
| + requestAnimationFrame(t.step_func_done(_ => {
|
| + assert_equals(node.executedScript, undefined, "Script should not execute.");
|
| + container.remove();
|
| + }));
|
| + }));
|
| + }
|
| + }
|
| + }
|
| + });
|
| + observer.observe(container, { childList: true });
|
| +
|
| + container.innerHTML = html.replace(/<iframe/, `<iframe data-test="${name}"`);
|
| + }, name);
|
| + }
|
| +</script>
|
| +<script>
|
| + assert_no_execution("script in srcdoc", `<iframe srcdoc="${payload}"></iframe>`);
|
| +</script>
|
| +<script>
|
| + assert_no_execution("script in nested srcdoc", `<iframe srcdoc="<iframe srcdoc='${payload}'></iframe>"></iframe>`);
|
| +</script>
|
| +<script>
|
| + assert_no_execution("script in nested srcdoc in nested srcdoc", `<iframe srcdoc="<iframe srcdoc="<iframe srcdoc='${payload}'></iframe>"></iframe>"></iframe>`);
|
| +</script>
|
|
|