diff options
Diffstat (limited to '')
-rw-r--r-- | dom/base/test/test_blocking_image.html | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/dom/base/test/test_blocking_image.html b/dom/base/test/test_blocking_image.html new file mode 100644 index 0000000000..64924b0dab --- /dev/null +++ b/dom/base/test/test_blocking_image.html @@ -0,0 +1,94 @@ +<!DOCTYPE HTML> +<html> +<head> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1267075 +--> + <title>Test for Bug 1267075</title> + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> + <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> + <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> +</head> +<body onload="onLoad()"> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1267075">Mozilla Bug 1267075</a> +<pre id="test"> +<script class="testbody" type="text/javascript"> +SimpleTest.waitForExplicitFinish(); + +function onLoad() { + var iframe = document.createElement("iframe"); + iframe.onload = function () { + info("iframe loaded"); + function imgListener(img) { + return new Promise((resolve, reject) => { + img.addEventListener("load", () => reject()); + img.addEventListener("error", () => resolve()); + }); + } + + var doc = iframe.contentDocument; + var img = doc.createElement("img"); + var img2 = doc.createElement("img"); + var img3 = doc.createElement("img"); + + // image from HTTP should be blocked. + img.src = "http://example.com/tests/image/test/mochitest/shaver.png"; + doc.body.appendChild(img); + + imgListener(img).then(() => { + ok(true, "img shouldn't be loaded"); + + // `iframe` is a content iframe, and thus not in the same docgroup with + // us, which are a chrome-privileged test. + // + // Ensure the frame is laid out so that this cross-origin + // getComputedStyle call is guaranteed to work after bug 1440537. + iframe.getBoundingClientRect(); + + ok(img2.matches(":-moz-broken"), "should match ':-moz-broken' selector"); + + img2.src = "https://test.invalid"; + doc.body.appendChild(img2); + return imgListener(img2); + }).then(() => { + ok(true, "img2 shouldn't be loaded"); + ok(img2.matches(":-moz-broken"), "should match ':-moz-broken' selector"); + + // Now prepare for the next test, deny image. + return new Promise(resolve => { + SpecialPowers.pushPrefEnv({"set": [["permissions.default.image", 2]]}, resolve) + }); + }).then(() => { + // Now image is denied, loading image will be rejected with REJECT_TYPE, + // which will be mapped to :-moz-broken too. + img3.src = "https://example.com/tests/image/test/mochitest/shaver.png"; + doc.body.appendChild(img3); + return imgListener(img3); + }).then(() => { + ok(true, "img3 shouldn't be loaded"); + + ok(img3.matches(":-moz-broken"), "should match ':-moz-broken' selector"); + + SimpleTest.finish(); + }).catch((e) => { + // Expected early return + if(e === true) { + SimpleTest.finish(); + return; + } + ok(false, "throwing " + e); + }); + }; + + // file_blocking_image.html contains meta tag for CSP, which will block images from + // http. + iframe.src = "http://mochi.test:8888/chrome/dom/base/test/file_blocking_image.html"; + document.getElementById("content").appendChild(iframe); +} +</script> +</pre> +<p id="display"></p> +<div id="content"> +</div> + +</body> </html> |