content/base/test/test_ipc_messagemanager_blob.html

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:8ababf07311f
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>
11
12 <script type="application/javascript;version=1.7">
13 "use strict";
14
15 SimpleTest.waitForExplicitFinish();
16
17 const childFrameURL =
18 "data:text/html,<!DOCTYPE HTML><html><body></body></html>";
19
20 function childFrameScript() {
21 "use strict";
22
23 addMessageListener("test:ipcClonedMessage", function(message) {
24 if (!(message.json instanceof Components.interfaces.nsIDOMBlob)) {
25 sendAsyncMessage(message.name, message.json);
26 return;
27 }
28
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 }
41
42 function runTests() {
43 ok("Browser prefs set.");
44
45 let iframe = document.createElement("iframe");
46 SpecialPowers.wrap(iframe).mozbrowser = true;
47 iframe.id = "iframe";
48 iframe.src = childFrameURL;
49
50 iframe.addEventListener("mozbrowserloadend", function() {
51 ok(true, "Got iframe load event.");
52
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;
67
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);
82
83 for each (let message in messages) {
84 mm.sendAsyncMessage("test:ipcClonedMessage", message);
85 }
86 });
87
88 document.body.appendChild(iframe);
89 }
90
91 addEventListener("load", function() {
92 info("Got load event.");
93
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>

mercurial