Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=613662
5 -->
6 <head>
7 <title>Test for Bug 613662</title>
8 <script type="application/javascript" 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=613662">Mozilla Bug 613662</a>
13 <p id="display"></p><div id="content" style="display: none"></div><div id="content2" style="display: none"></div><pre id="test">
14 <script type="application/javascript">
16 /** Test for Bug 613662 **/
18 function testPositions(node) {
19 node.insertAdjacentHTML("beforeBegin", "\u003Cscript>ok(false, 'script should not have run');\u003C/script><i></i>");
20 is(node.previousSibling.localName, "i", "Should have had <i> as previous sibling");
21 node.insertAdjacentHTML("Afterbegin", "<b></b>\u003Cscript>ok(false, 'script should not have run');\u003C/script>");
22 is(node.firstChild.localName, "b", "Should have had <b> as first child");
23 node.insertAdjacentHTML("BeforeEnd", "\u003Cscript>ok(false, 'script should not have run');\u003C/script><u></u>");
24 is(node.lastChild.localName, "u", "Should have had <u> as last child");
25 node.insertAdjacentHTML("afterend", "<a></a>\u003Cscript>ok(false, 'script should not have run');\u003C/script>");
26 is(node.nextSibling.localName, "a", "Should have had <a> as next sibling");
27 }
29 var content = document.getElementById("content");
30 testPositions(content); // without next sibling
31 testPositions(content); // test again when there's next sibling
33 try {
34 content.insertAdjacentHTML("bar", "foo");
35 ok(false, "insertAdjacentHTML should have thrown");
36 } catch (e) {
37 is(e.name, "SyntaxError", "insertAdjacentHTML should throw SyntaxError");
38 is(e.code, 12, "insertAdjacentHTML should throw SYNTAX_ERR");
39 }
41 var parent = document.createElement("div");
42 var child = document.createElement("div");
44 try {
45 child.insertAdjacentHTML("Beforebegin", "foo");
46 ok(false, "insertAdjacentHTML should have thrown");
47 } catch (e) {
48 is(e.name, "NoModificationAllowedError", "insertAdjacentHTML should throw NoModificationAllowedError");
49 is(e.code, 7, "insertAdjacentHTML should throw NO_MODIFICATION_ALLOWED_ERR");
50 }
52 try {
53 child.insertAdjacentHTML("AfterEnd", "foo");
54 ok(false, "insertAdjacentHTML should have thrown");
55 } catch (e) {
56 is(e.name, "NoModificationAllowedError", "insertAdjacentHTML should throw NoModificationAllowedError");
57 is(e.code, 7, "insertAdjacentHTML should throw NO_MODIFICATION_ALLOWED_ERR");
58 }
60 child.insertAdjacentHTML("afterBegin", "foo"); // mustn't throw
61 child.insertAdjacentHTML("beforeend", "foo"); // mustn't throw
63 parent.appendChild(child);
64 testPositions(child); // node not in tree but has parent
66 content.appendChild(parent); // must not run scripts
68 try {
69 document.documentElement.insertAdjacentHTML("afterend", "<div></div>");
70 ok(false, "insertAdjacentHTML should have thrown");
71 } catch (e) {
72 is(e.name, "NoModificationAllowedError", "insertAdjacentHTML should throw NoModificationAllowedError");
73 is(e.code, 7, "insertAdjacentHTML should throw NO_MODIFICATION_ALLOWED_ERR");
74 }
76 var content2 = document.getElementById("content2");
78 var events = [
79 [ "DOMNodeInserted", document.body ],
80 [ "DOMNodeInserted", document.body ],
81 [ "DOMSubtreeModified", null ],
82 [ "DOMNodeInserted", content2 ],
83 [ "DOMNodeInserted", content2 ],
84 [ "DOMSubtreeModified", null ],
85 [ "DOMNodeInserted", content2 ],
86 [ "DOMNodeInserted", content2 ],
87 [ "DOMSubtreeModified", null ],
88 [ "DOMNodeInserted", document.body ],
89 [ "DOMNodeInserted", document.body ],
90 [ "DOMSubtreeModified", null ],
91 [ "DOMNodeInserted", document.body ],
92 [ "DOMNodeInserted", document.body ],
93 [ "DOMSubtreeModified", null ],
94 [ "DOMNodeInserted", content2 ],
95 [ "DOMNodeInserted", content2 ],
96 [ "DOMSubtreeModified", null ],
97 [ "DOMNodeInserted", content2 ],
98 [ "DOMNodeInserted", content2 ],
99 [ "DOMSubtreeModified", null ],
100 [ "DOMNodeInserted", document.body ],
101 [ "DOMNodeInserted", document.body ],
102 [ "DOMSubtreeModified", null ]
103 ];
105 function mutationEventListener(evt) {
106 var expected = events.shift();
107 is(evt.type, expected[0], "Unexpected mutation type");
108 is(evt.relatedNode, expected[1], "Unexpected related node");
109 }
110 /*
111 document.addEventListener("DOMSubtreeModified", mutationEventListener, false);
112 document.addEventListener("DOMNodeInserted", mutationEventListener, false);
113 document.addEventListener("DOMNodeRemoved", mutationEventListener, false);
114 document.addEventListener("DOMNodeRemovedFromDocument", mutationEventListener, false);
115 document.addEventListener("DOMNodeInsertedIntoDocument", mutationEventListener, false);
116 document.addEventListener("DOMAttrModified", mutationEventListener, false);
117 document.addEventListener("DOMCharacterDataModified", mutationEventListener, false);
119 testPositions(content2); // without next sibling
120 testPositions(content2); // test again when there's next sibling
122 is(events.length, 0, "Not all expected events fired.");
123 */
124 // HTML only
125 document.body.insertAdjacentHTML("afterend", "<p>");
126 document.head.insertAdjacentHTML("beforebegin", "<p>");
127 is(document.getElementsByTagName("head").length, 1, "Should still have one head");
128 is(document.getElementsByTagName("body").length, 1, "Should still have one body");
130 </script>
131 </pre>
132 </body></html>