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 <head>
4 <title>Test for OOP Blobs in MessageManager</title>
5 <script type="application/javascript"
6 src="/tests/SimpleTest/SimpleTest.js">
7 </script>
8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
9 </head>
10 <body>
12 <script type="application/javascript;version=1.7">
13 "use strict";
15 SimpleTest.waitForExplicitFinish();
17 const childFrameURL =
18 "data:text/html,<!DOCTYPE HTML><html><body></body></html>";
20 function childFrameScript() {
21 "use strict";
23 addMessageListener("test:ipcClonedMessage", function(message) {
24 if (!(message.json instanceof Components.interfaces.nsIDOMBlob)) {
25 sendAsyncMessage(message.name, message.json);
26 return;
27 }
29 let reader =
30 Components.classes["@mozilla.org/files/filereader;1"]
31 .createInstance(Components.interfaces.nsIDOMFileReader);
32 reader.addEventListener("load", function() {
33 let response = reader.result == "this is a great success!" ?
34 message.json :
35 "error";
36 sendAsyncMessage(message.name, response);
37 });
38 reader.readAsText(message.json);
39 });
40 }
42 function runTests() {
43 ok("Browser prefs set.");
45 let iframe = document.createElement("iframe");
46 SpecialPowers.wrap(iframe).mozbrowser = true;
47 iframe.id = "iframe";
48 iframe.src = childFrameURL;
50 iframe.addEventListener("mozbrowserloadend", function() {
51 ok(true, "Got iframe load event.");
53 const messages = [
54 "hi!",
55 "",
56 2,
57 -.04,
58 3432987324987239872948732982,
59 true,
60 false,
61 null,
62 0,
63 new Blob(["this ", "is ", "a ", "great ", "success!"],
64 {"type" : "text\/plain"}),
65 ];
66 let receivedMessageIndex = 0;
68 let mm = SpecialPowers.getBrowserFrameMessageManager(iframe);
69 mm.addMessageListener("test:ipcClonedMessage", function(message) {
70 // We need to wrap to access message.json, and unwrap to do the
71 // identity check.
72 is(SpecialPowers.unwrap(SpecialPowers.wrap(message).json),
73 messages[receivedMessageIndex++],
74 "Got correct round-tripped response");
75 if (receivedMessageIndex == messages.length) {
76 SpecialPowers.removePermission("browser", document);
77 SimpleTest.finish();
78 }
79 });
80 mm.loadFrameScript("data:,(" + childFrameScript.toString() + ")();",
81 false);
83 for each (let message in messages) {
84 mm.sendAsyncMessage("test:ipcClonedMessage", message);
85 }
86 });
88 document.body.appendChild(iframe);
89 }
91 addEventListener("load", function() {
92 info("Got load event.");
94 SpecialPowers.addPermission("browser", true, document);
95 SpecialPowers.pushPrefEnv({
96 "set": [
97 ["dom.ipc.browser_frames.oop_by_default", true],
98 ["dom.mozBrowserFramesEnabled", true],
99 ["browser.pagethumbnails.capturing_disabled", true]
100 ]
101 }, runTests);
102 });
103 </script>
104 </body>
105 </html>