|
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> |