diff options
Diffstat (limited to 'dom/base/test/test_simplecontentpolicy.html')
-rw-r--r-- | dom/base/test/test_simplecontentpolicy.html | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/dom/base/test/test_simplecontentpolicy.html b/dom/base/test/test_simplecontentpolicy.html new file mode 100644 index 000000000..9fa5dd3fd --- /dev/null +++ b/dom/base/test/test_simplecontentpolicy.html @@ -0,0 +1,149 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for nsISimpleContentPolicy</title> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1128798">Mozilla Bug 1128798</a> +<p id="display"></p> +<div id="content" style="display: none"> + +</div> +<pre id="test"> +<script class="testbody" type="text/javascript"> + +var lastContentType = -1; +const testURL = window.location.href + "/this/is/the/test/url"; +const Cc = SpecialPowers.Cc; +const Ci = SpecialPowers.Ci; + +var beaconUrl = "http://mochi.test:8888/tests/dom/tests/mochitest/beacon/beacon-handler.sjs"; + +var chromeURL = SimpleTest.getTestFileURL("file_simplecontentpolicy.js"); +var script = SpecialPowers.loadChromeScript(chromeURL); + +// Try creating different request types. Most of these are not +// top-level because they run in the test iframe. +var tests = [["SCRIPT", false], + ["IMAGE", false], + ["STYLESHEET", false], + ["OBJECT", false], + ["DOCUMENT", true], + ["SUBDOCUMENT", false], + ["XBL", false], + ["XMLHTTPREQUEST", false], + ["BEACON", false]]; +var curTest = -1; + +var div; + +SimpleTest.waitForExplicitFinish(); + +script.addMessageListener("ready", function(msg) { + SpecialPowers.pushPrefEnv({'set': [["beacon.enabled", true]]}, runNextTest); +}); + +script.addMessageListener("shouldLoad", function(msg) { + var isTopLevel = tests[curTest][1]; + var type = "TYPE_" + tests[curTest][0]; + is(msg.contentType, Ci.nsIContentPolicy[type], "Content policies triggered for " + type); + is(msg.isTopLevel, isTopLevel, "isTopLevel is set correctly"); + + if (tests[curTest] == "XBL") { + //XXX Removing binding to work-around a memory leak (bugs 478528, 499735). + div.style.MozBinding = ""; + } + + runNextTest(); +}); + +function runNextTest() { + curTest++; + if (curTest < tests.length) { + var method = "request_" + tests[curTest][0].toLowerCase(); + try { + window[method](); + } catch(e) {} + } + else { + script.sendAsyncMessage("finished"); + + SimpleTest.finish(); + } +} + +// Request creating functions + +function request_script() { + var content = $("content"); + +Math.sin(1); + var script = document.createElement("script"); + script.setAttribute("type", "text/javascript") + script.setAttribute("src", testURL) + content.appendChild(script); +} + +function request_image() { + var content = $("content"); + + var image = new Image(); + image.src = testURL; +} + +function request_stylesheet() { + var content = $("content"); + + var stylesheet = document.createElement("link"); + stylesheet.setAttribute("rel", "stylesheet"); + stylesheet.setAttribute("type", "text/css"); + stylesheet.setAttribute("href", testURL); + content.appendChild(stylesheet); +} + +function request_object() { + var content = $("content"); + + var object = document.createElement("embed"); + object.setAttribute("src", testURL); + content.appendChild(object); +} + +function request_document() { + top.location.href = testURL; +} + +function request_subdocument() { + var content = $("content"); + + var frame = document.createElement("iframe"); + frame.setAttribute("src", testURL); + content.appendChild(frame); +} + +function request_xbl() { + var content = $("content"); + + div = document.createElement("div"); + div.style.MozBinding = "url(" + testURL + ")"; + $('test').appendChild(div); + div.offsetLeft; // Flush styles. +} + +function request_xmlhttprequest() { + var request = new XMLHttpRequest(); + request.open("GET", testURL, false); + request.send(null); +} + +function request_beacon() { + navigator.sendBeacon(testURL, "bacon would have been a better name than beacon"); +} + +</script> +</pre> +</body> +</html> + |