| Index: third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute.html
|
| diff --git a/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute.html b/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7c3639e5dd143c926efd79d72f543ea06f3ecd5e
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/http/tests/security/dangling-markup/src-attribute.html
|
| @@ -0,0 +1,76 @@
|
| +<!DOCTYPE html>
|
| +<script src="/resources/testharness.js"></script>
|
| +<script src="/resources/testharnessreport.js"></script>
|
| +<script src="./resources/helper.js"></script>
|
| +<body>
|
| +<script>
|
| + // We're injecting markup via `srcdoc` so, confusingly, we need to
|
| + // entity-escape the "raw" content, and double-escape the "escaped"
|
| + // content.
|
| + var rawBrace = "<";
|
| + var escapedBrace = "&lt;";
|
| + var rawNewline = " ";
|
| + var escapedNewline = "&#10;";
|
| +
|
| + var abeSizedPng = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEwAAABnAQMAAACQMjadAAAAA1BMVEX///+nxBvIAAAAEUlEQVQ4y2MYBaNgFIwCegAABG0AAd5G4RkAAAAASUVORK5CYII=";
|
| + var abeSizedPngWithNewline = abeSizedPng.replace("i", "i\n");
|
| +
|
| + var should_block = [
|
| + `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a${rawNewline}b${rawBrace}c">`,
|
| + `
|
| + <img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a
|
| + b${rawBrace}c
|
| + ">
|
| + `,
|
| + ];
|
| +
|
| + should_block.forEach(markup => {
|
| + async_test(t => {
|
| + var i = createFrame(`${markup}`);
|
| + assert_img_not_loaded(t, i);
|
| + }, markup.replace(/[\n\r]/g, ''));
|
| + });
|
| +
|
| + var should_load = [
|
| +
|
| + // `data:` and `javascript:` URLs don't check the content:
|
| + `<img id="dangling" src="${abeSizedPngWithNewline}">`,
|
| +
|
| + // Just one or the other isn't enough:
|
| + `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?data=a${rawNewline}b">`,
|
| + `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a${rawBrace}b">`,
|
| +
|
| + // Entity-escaped characters don't trigger blocking:
|
| + `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?data=a${escapedNewline}b">`,
|
| + `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a${escapedBrace}b">`,
|
| + `<img id="dangling" src="http://127.0.0.1:8000/security/resources/abe.png?img=a${escapedNewline}b${escapedBrace}c">`,
|
| +
|
| + // Leading and trailing whitespace is stripped:
|
| + `
|
| + <img id="dangling" src="
|
| + http://127.0.0.1:8000/security/resources/abe.png
|
| + ">
|
| + <input type=hidden name=csrf value=sekrit>
|
| + `,
|
| + `
|
| + <img id="dangling" src="
|
| + http://127.0.0.1:8000/security/resources/abe.png?img=${escapedBrace}
|
| + ">
|
| + <input type=hidden name=csrf value=sekrit>
|
| + `,
|
| + `
|
| + <img id="dangling" src="
|
| + http://127.0.0.1:8000/security/resources/abe.png?img=${escapedNewline}
|
| + ">
|
| + <input type=hidden name=csrf value=sekrit>
|
| + `,
|
| + ];
|
| +
|
| + should_load.forEach(markup => {
|
| + async_test(t => {
|
| + var i = createFrame(`${markup} <element attr="" another=''>`);
|
| + assert_img_loaded(t, i);
|
| + }, markup.replace(/[\n\r]/g, ''));
|
| + });
|
| +</script>
|
| +
|
|
|