<!DOCTYPE HTML> <html> <head> <title>Test for Principal in MessageManager</title> <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?> </head> <body> <script type="application/javascript;version=1.7"> "use strict"; const Ci = Components.interfaces; const Cc = Components.classes; const Cu = Components.utils; var permManager = Cc["@mozilla.org/permissionmanager;1"] .getService(Ci.nsIPermissionManager); SimpleTest.waitForExplicitFinish(); const childFrameURL = "data:text/html,<!DOCTYPE HTML><html><body></body></html>"; function childFrameScript() { "use strict"; addMessageListener("test:ipcMessage", function(message) { sendAsyncMessage(message.name, "principal: " + (message.principal ? "OK" : "KO")); sendAsyncMessage(message.name, "principal.appId: " + ("appId" in message.principal ? "OK" : "KO")); sendAsyncMessage(message.name, "principal.origin: " + ("origin" in message.principal ? "OK" : "KO")); sendAsyncMessage(message.name, "principal.isInIsolatedMozBrowserElement: " + ("isInIsolatedMozBrowserElement" in message.principal ? "OK" : "KO")); sendAsyncMessage(message.name, "DONE"); }); } function runTests() { ok("Browser prefs set."); let iframe = document.createElement("iframe"); SpecialPowers.wrap(iframe).mozbrowser = true; iframe.id = "iframe"; iframe.src = childFrameURL; iframe.addEventListener("mozbrowserloadend", function() { ok(true, "Got iframe load event."); let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); mm.addMessageListener("test:ipcMessage", function(message) { // We need to wrap to access message.json, and unwrap to do the // identity check. var msg = SpecialPowers.unwrap(SpecialPowers.wrap(message).json); if (/OK$/.exec(msg)) { ok(true, msg); } else if(/KO$/.exec(msg)) { ok(true, false); } else if (/DONE/.exec(msg)) { permManager.removeFromPrincipal(window.document.nodePrincipal, "browser", Ci.nsIPermissionManager.ALLOW_ACTION); SimpleTest.finish(); } }); mm.loadFrameScript("data:,(" + childFrameScript.toString() + ")();", false); mm.sendAsyncMessage("test:ipcMessage", 42, null, window.document.nodePrincipal); }); document.body.appendChild(iframe); } addEventListener("load", function() { info("Got load event."); permManager.addFromPrincipal(window.document.nodePrincipal, "browser", Ci.nsIPermissionManager.ALLOW_ACTION); SpecialPowers.pushPrefEnv({ "set": [ ["dom.mozBrowserFramesEnabled", true], ["network.disable.ipc.security", true], ["browser.pagethumbnails.capturing_disabled", true] ] }, runTests); }); </script> </body> </html>