content/base/test/test_ipc_messagemanager_blob.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

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