summaryrefslogtreecommitdiffstats
path: root/docshell/test/chrome/test_principalInherit.xul
diff options
context:
space:
mode:
Diffstat (limited to 'docshell/test/chrome/test_principalInherit.xul')
-rw-r--r--docshell/test/chrome/test_principalInherit.xul108
1 files changed, 108 insertions, 0 deletions
diff --git a/docshell/test/chrome/test_principalInherit.xul b/docshell/test/chrome/test_principalInherit.xul
new file mode 100644
index 000000000..87056c63d
--- /dev/null
+++ b/docshell/test/chrome/test_principalInherit.xul
@@ -0,0 +1,108 @@
+<?xml version="1.0"?>
+<!-- Any copyright is dedicated to the Public Domain.
+ - http://creativecommons.org/publicdomain/zero/1.0/ -->
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet
+ href="chrome://mochikit/content/tests/SimpleTest/test.css"
+ type="text/css"?>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=719994
+-->
+<window title="Test principal inheriting"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <script type="application/javascript"
+ src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+<body xmlns="http://www.w3.org/1999/xhtml">
+<p id="display"></p>
+<div id="content" style="display: none">
+</div>
+<pre id="test">
+</pre>
+</body>
+
+<script class="testbody" type="application/javascript">
+<![CDATA[
+
+/** Test for Bug 719994 **/
+
+SimpleTest.waitForExplicitFinish();
+
+var gFrame;
+
+// This test file is loaded in a type=content docshell whose principal is
+// the system principal.
+
+// Using data: URIs here instead of javascript: URIs, since javascript: URIs
+// fail to load when there's no principal to load them against. This only
+// matters when these tests fail (produces better error messages).
+var tests = [
+ function testInheritFromParent(cb) {
+ gFrame = document.createElement("iframe");
+ loadListener(gFrame, function () {
+ is(window.inheritedFromParent, true, "load in type=content iframe inherited principal of same type parent");
+ cb();
+ });
+ gFrame.setAttribute("type", "content");
+ gFrame.setAttribute("src", "data:text/html,<script>parent.inheritedFromParent = true;</script>");
+ document.documentElement.appendChild(gFrame);
+ },
+ function testInheritFromCurrent_system(cb) {
+ loadListener(gFrame, function () {
+ is(window.inheritedSystem, undefined, "load in type=content iframe shouldn't inherit system principal from current document");
+ cb();
+ }, true);
+ gFrame.setAttribute("src", "data:text/html,<script>parent.inheritedSystem = true;</script>");
+ },
+ function testInheritFromCreated(cb) {
+ // Open a new chrome window with a type="content" iframe, so that it has no
+ // same-type parent.
+ // Load a javascript: URI in it to ensure that GetInheritedPrincipal will
+ // force creation of a content viewer.
+ let xulWinURL = 'data:application/vnd.mozilla.xul+xml,<?xml version="1.0"?>' +
+ '<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>';
+ let newWin = window.openDialog(xulWinURL, "chrome_window", "chrome");
+ loadListener(newWin, function () {
+ let frame = newWin.document.createElement("iframe");
+ frame.setAttribute("type", "content");
+ frame.setAttribute("src", "javascript:'1';");
+ loadListener(frame, function () {
+ is(frame.contentWindow.document.body.textContent, "1", "content viewer was created");
+ SimpleTest.executeSoon(function () {
+ newWin.close();
+ cb();
+ })
+ });
+ newWin.document.documentElement.appendChild(frame);
+ });
+ }
+];
+
+addLoadEvent(function onLoad() {
+ ok(Components.stack, "this test must be run with the system principal");
+ SimpleTest.executeSoon(nextTest);
+});
+
+function loadListener(target, func) {
+ target.addEventListener("load", function lis() {
+ target.removeEventListener("load", lis, true);
+ func();
+ }, true);
+}
+
+function nextTest() {
+ if (tests.length) {
+ let test = tests.shift();
+ SimpleTest.executeSoon(function () {
+ info("running " + test.name);
+ test(nextTest);
+ });
+ } else
+ SimpleTest.executeSoon(SimpleTest.finish);
+}
+
+]]>
+</script>
+
+</window>