4 https://bugzilla.mozilla.org/show_bug.cgi?id=519928
7 <title>Test for Bug
519928</title>
8 <script src=
"/tests/SimpleTest/SimpleTest.js"></script>
9 <link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css" />
12 <a target=
"_blank" href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=519928">Mozilla Bug
519928</a>
15 <iframe id=
"load-frame"></iframe>
18 <script class=
"testbody" type=
"text/javascript">
20 var iframe = document.getElementById(
"load-frame");
22 function enableJS() { allowJS(true, iframe); }
23 function disableJS() { allowJS(false, iframe); }
24 function allowJS(allow, frame) {
25 SpecialPowers.wrap(frame.contentWindow).windowGlobalChild.windowContext.allowJavascript = allow;
28 function expectJSAllowed(allowed, testCondition, callback) {
29 window.ICanRunMyJS = false;
33 var doc = iframe.contentDocument;
34 doc.body.innerHTML =
"<iframe></iframe>";
35 var innerFrame = doc.querySelector(
"iframe");
36 innerFrame.addEventListener(
"load", function() {
37 var msg =
"The inner iframe should" + (allowed ?
"" :
" not") +
" be able to run Javascript";
38 is(self_.ICanRunMyJS, allowed, msg);
41 // eslint-disable-next-line no-useless-concat
42 var iframeSrc =
"<script>parent.parent.ICanRunMyJS = true;</scr" + "ipt>";
43 innerFrame
.srcdoc
= iframeSrc
;
46 SimpleTest
.waitForExplicitFinish();
47 /* eslint-disable max-nested-callbacks */
48 addLoadEvent(function() {
49 var enterDesignMode = function() { document
.designMode
= "on"; };
50 var leaveDesignMode = function() { document
.designMode
= "off"; };
51 expectJSAllowed(false, disableJS
, function() {
52 expectJSAllowed(true, enableJS
, function() {
53 expectJSAllowed(true, enterDesignMode
, function() {
54 expectJSAllowed(true, leaveDesignMode
, function() {
55 expectJSAllowed(false, disableJS
, function() {
56 expectJSAllowed(false, enterDesignMode
, function() {
57 expectJSAllowed(false, leaveDesignMode
, function() {
58 expectJSAllowed(true, enableJS
, function() {
59 enterDesignMode = function() { iframe
.contentDocument
.designMode
= "on"; };
60 leaveDesignMode = function() { iframe
.contentDocument
.designMode
= "off"; };
61 expectJSAllowed(false, disableJS
, function() {
62 expectJSAllowed(true, enableJS
, function() {
63 expectJSAllowed(true, enterDesignMode
, function() {
64 expectJSAllowed(true, leaveDesignMode
, function() {
65 expectJSAllowed(false, disableJS
, function() {
66 expectJSAllowed(false, enterDesignMode
, function() {
67 expectJSAllowed(false, leaveDesignMode
, function() {
68 expectJSAllowed(true, enableJS
, function() {
69 testDocumentDisabledJS();
87 /* eslint-enable max-nested-callbacks */
89 function testDocumentDisabledJS() {
90 window
.ICanRunMyJS
= false;
92 // Ensure design modes are disabled
93 document
.designMode
= "off";
94 iframe
.contentDocument
.designMode
= "off";
96 // Javascript enabled on the main iframe
99 var doc
= iframe
.contentDocument
;
100 doc
.body
.innerHTML
= "<iframe></iframe>";
101 var innerFrame
= doc
.querySelector("iframe");
103 // Javascript disabled on the innerFrame.
104 allowJS(false, innerFrame
);
106 innerFrame
.addEventListener("load", function() {
107 var msg
= "The inner iframe should not be able to run Javascript";
108 is(self_
.ICanRunMyJS
, false, msg
);
111 // eslint-disable-next-line no-useless-concat
112 var iframeSrc
= "<script>parent.parent.ICanRunMyJS = true;</scr" + "ipt>";
113 innerFrame
.srcdoc
= iframeSrc
;