|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <head> |
|
4 <title>Test for Principal in MessageManager</title> |
|
5 <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> |
|
6 <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?> |
|
7 </head> |
|
8 <body> |
|
9 |
|
10 <script type="application/javascript;version=1.7"> |
|
11 "use strict"; |
|
12 |
|
13 const Ci = Components.interfaces; |
|
14 const Cc = Components.classes; |
|
15 const Cu = Components.utils; |
|
16 |
|
17 var permManager = Cc["@mozilla.org/permissionmanager;1"] |
|
18 .getService(Ci.nsIPermissionManager); |
|
19 |
|
20 SimpleTest.waitForExplicitFinish(); |
|
21 |
|
22 const childFrameURL = |
|
23 "data:text/html,<!DOCTYPE HTML><html><body></body></html>"; |
|
24 |
|
25 function childFrameScript() { |
|
26 "use strict"; |
|
27 |
|
28 addMessageListener("test:ipcMessage", function(message) { |
|
29 sendAsyncMessage(message.name, "principal: " + (message.principal ? "OK" : "KO")); |
|
30 |
|
31 sendAsyncMessage(message.name, "principal.appId: " + |
|
32 ("appId" in message.principal ? "OK" : "KO")); |
|
33 |
|
34 sendAsyncMessage(message.name, "principal.origin: " + |
|
35 ("origin" in message.principal ? "OK" : "KO")); |
|
36 |
|
37 sendAsyncMessage(message.name, "principal.isInBrowserElement: " + |
|
38 ("isInBrowserElement" in message.principal ? "OK" : "KO")); |
|
39 |
|
40 sendAsyncMessage(message.name, "DONE"); |
|
41 }); |
|
42 } |
|
43 |
|
44 function runTests() { |
|
45 ok("Browser prefs set."); |
|
46 |
|
47 let iframe = document.createElement("iframe"); |
|
48 SpecialPowers.wrap(iframe).mozbrowser = true; |
|
49 iframe.id = "iframe"; |
|
50 iframe.src = childFrameURL; |
|
51 |
|
52 iframe.addEventListener("mozbrowserloadend", function() { |
|
53 ok(true, "Got iframe load event."); |
|
54 |
|
55 let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); |
|
56 mm.addMessageListener("test:ipcMessage", function(message) { |
|
57 // We need to wrap to access message.json, and unwrap to do the |
|
58 // identity check. |
|
59 var msg = SpecialPowers.unwrap(SpecialPowers.wrap(message).json); |
|
60 if (/OK$/.exec(msg)) { |
|
61 ok(true, msg); |
|
62 } else if(/KO$/.exec(msg)) { |
|
63 ok(true, false); |
|
64 } else if (/DONE/.exec(msg)) { |
|
65 permManager.removeFromPrincipal(window.document.nodePrincipal, "browser", |
|
66 Ci.nsIPermissionManager.ALLOW_ACTION); |
|
67 SimpleTest.finish(); |
|
68 } |
|
69 }); |
|
70 mm.loadFrameScript("data:,(" + childFrameScript.toString() + ")();", |
|
71 false); |
|
72 |
|
73 mm.sendAsyncMessage("test:ipcMessage", 42, null, window.document.nodePrincipal); |
|
74 }); |
|
75 |
|
76 document.body.appendChild(iframe); |
|
77 } |
|
78 |
|
79 addEventListener("load", function() { |
|
80 info("Got load event."); |
|
81 |
|
82 permManager.addFromPrincipal(window.document.nodePrincipal, "browser", |
|
83 Ci.nsIPermissionManager.ALLOW_ACTION); |
|
84 |
|
85 SpecialPowers.pushPrefEnv({ |
|
86 "set": [ |
|
87 ["dom.mozBrowserFramesEnabled", true], |
|
88 ["browser.pagethumbnails.capturing_disabled", true] |
|
89 ] |
|
90 }, runTests); |
|
91 }); |
|
92 </script> |
|
93 </body> |
|
94 </html> |