Bug 1824595 [wpt PR 39207] - LoAF: Deflake script tests, a=testonly
[gecko.git] / editor / composer / test / test_bug519928.html
blob4ccb1aaba5b87dfb6465502f4ec9ed03966c1b0c
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=519928
5 -->
6 <head>
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" />
10 </head>
11 <body>
12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=519928">Mozilla Bug 519928</a>
13 <p id="display"></p>
14 <div id="content">
15 <iframe id="load-frame"></iframe>
16 </div>
17 <pre id="test">
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;
30 var self_ = window;
31 testCondition();
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);
39 callback();
40 }, {once: true});
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();
70 });
71 });
72 });
73 });
74 });
75 });
76 });
77 });
78 });
79 });
80 });
81 });
82 });
83 });
84 });
85 });
86 });
87 /* eslint-enable max-nested-callbacks */
89 function testDocumentDisabledJS() {
90 window.ICanRunMyJS = false;
91 var self_ = window;
92 // Ensure design modes are disabled
93 document.designMode = "off";
94 iframe.contentDocument.designMode = "off";
96 // Javascript enabled on the main iframe
97 enableJS();
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);
109 SimpleTest.finish();
110 }, {once: true});
111 // eslint-disable-next-line no-useless-concat
112 var iframeSrc = "<script>parent.parent.ICanRunMyJS = true;</scr" + "ipt>";
113 innerFrame.srcdoc = iframeSrc;
116 </script>
117 </pre>
118 </body>
119 </html>