1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/base/test/test_ipc_messagemanager_blob.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,105 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<head> 1.7 + <title>Test for OOP Blobs in MessageManager</title> 1.8 + <script type="application/javascript" 1.9 + src="/tests/SimpleTest/SimpleTest.js"> 1.10 + </script> 1.11 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.12 +</head> 1.13 +<body> 1.14 + 1.15 + <script type="application/javascript;version=1.7"> 1.16 + "use strict"; 1.17 + 1.18 + SimpleTest.waitForExplicitFinish(); 1.19 + 1.20 + const childFrameURL = 1.21 + "data:text/html,<!DOCTYPE HTML><html><body></body></html>"; 1.22 + 1.23 + function childFrameScript() { 1.24 + "use strict"; 1.25 + 1.26 + addMessageListener("test:ipcClonedMessage", function(message) { 1.27 + if (!(message.json instanceof Components.interfaces.nsIDOMBlob)) { 1.28 + sendAsyncMessage(message.name, message.json); 1.29 + return; 1.30 + } 1.31 + 1.32 + let reader = 1.33 + Components.classes["@mozilla.org/files/filereader;1"] 1.34 + .createInstance(Components.interfaces.nsIDOMFileReader); 1.35 + reader.addEventListener("load", function() { 1.36 + let response = reader.result == "this is a great success!" ? 1.37 + message.json : 1.38 + "error"; 1.39 + sendAsyncMessage(message.name, response); 1.40 + }); 1.41 + reader.readAsText(message.json); 1.42 + }); 1.43 + } 1.44 + 1.45 + function runTests() { 1.46 + ok("Browser prefs set."); 1.47 + 1.48 + let iframe = document.createElement("iframe"); 1.49 + SpecialPowers.wrap(iframe).mozbrowser = true; 1.50 + iframe.id = "iframe"; 1.51 + iframe.src = childFrameURL; 1.52 + 1.53 + iframe.addEventListener("mozbrowserloadend", function() { 1.54 + ok(true, "Got iframe load event."); 1.55 + 1.56 + const messages = [ 1.57 + "hi!", 1.58 + "", 1.59 + 2, 1.60 + -.04, 1.61 + 3432987324987239872948732982, 1.62 + true, 1.63 + false, 1.64 + null, 1.65 + 0, 1.66 + new Blob(["this ", "is ", "a ", "great ", "success!"], 1.67 + {"type" : "text\/plain"}), 1.68 + ]; 1.69 + let receivedMessageIndex = 0; 1.70 + 1.71 + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); 1.72 + mm.addMessageListener("test:ipcClonedMessage", function(message) { 1.73 + // We need to wrap to access message.json, and unwrap to do the 1.74 + // identity check. 1.75 + is(SpecialPowers.unwrap(SpecialPowers.wrap(message).json), 1.76 + messages[receivedMessageIndex++], 1.77 + "Got correct round-tripped response"); 1.78 + if (receivedMessageIndex == messages.length) { 1.79 + SpecialPowers.removePermission("browser", document); 1.80 + SimpleTest.finish(); 1.81 + } 1.82 + }); 1.83 + mm.loadFrameScript("data:,(" + childFrameScript.toString() + ")();", 1.84 + false); 1.85 + 1.86 + for each (let message in messages) { 1.87 + mm.sendAsyncMessage("test:ipcClonedMessage", message); 1.88 + } 1.89 + }); 1.90 + 1.91 + document.body.appendChild(iframe); 1.92 + } 1.93 + 1.94 + addEventListener("load", function() { 1.95 + info("Got load event."); 1.96 + 1.97 + SpecialPowers.addPermission("browser", true, document); 1.98 + SpecialPowers.pushPrefEnv({ 1.99 + "set": [ 1.100 + ["dom.ipc.browser_frames.oop_by_default", true], 1.101 + ["dom.mozBrowserFramesEnabled", true], 1.102 + ["browser.pagethumbnails.capturing_disabled", true] 1.103 + ] 1.104 + }, runTests); 1.105 + }); 1.106 + </script> 1.107 +</body> 1.108 +</html>