File: test_ipc_messagemanager_blob.html

package info (click to toggle)
wine-gecko-2.21 2.21%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 646,272 kB
  • ctags: 630,086
  • sloc: cpp: 2,895,786; ansic: 1,502,970; python: 156,675; asm: 115,373; java: 111,421; sh: 63,309; xml: 62,872; makefile: 58,685; perl: 19,182; objc: 3,461; yacc: 2,051; lex: 979; pascal: 929; exp: 449; php: 244; lisp: 228; awk: 211; sed: 26; csh: 21; ada: 16; ruby: 3
file content (105 lines) | stat: -rw-r--r-- 3,213 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<!DOCTYPE HTML>
<html>
<head>
  <title>Test for OOP Blobs in MessageManager</title>
  <script type="application/javascript"
          src="/tests/SimpleTest/SimpleTest.js">
  </script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>

  <script type="application/javascript;version=1.7">
    "use strict";

    SimpleTest.waitForExplicitFinish();

    const childFrameURL =
      "data:text/html,<!DOCTYPE HTML><html><body></body></html>";

    function childFrameScript() {
      "use strict";

      addMessageListener("test:ipcClonedMessage", function(message) {
        if (!(message.json instanceof Components.interfaces.nsIDOMBlob)) {
          sendAsyncMessage(message.name, message.json);
          return;
        }

        let reader =
          Components.classes["@mozilla.org/files/filereader;1"]
                    .createInstance(Components.interfaces.nsIDOMFileReader);
        reader.addEventListener("load", function() {
          let response = reader.result == "this is a great success!" ?
                         message.json :
                         "error";
          sendAsyncMessage(message.name, response);
        });
        reader.readAsText(message.json);
      });
    }

    function runTests() {
      ok("Browser prefs set.");

      let iframe = document.createElement("iframe");
      iframe.mozbrowser = true;
      iframe.id = "iframe";
      iframe.src = childFrameURL;

      iframe.addEventListener("mozbrowserloadend", function() {
        ok(true, "Got iframe load event.");

        const messages = [
          "hi!",
          "",
          2,
          -.04,
          3432987324987239872948732982,
          true,
          false,
          null,
          0,
          new Blob(["this ", "is ", "a ", "great ", "success!"],
                   {"type" : "text\/plain"}),
        ];
        let receivedMessageIndex = 0;

        let mm = SpecialPowers.getBrowserFrameMessageManager(iframe);
        mm.addMessageListener("test:ipcClonedMessage", function(message) {
          // We need to wrap to access message.json, and unwrap to do the
          // identity check.
          is(SpecialPowers.unwrap(SpecialPowers.wrap(message).json),
             messages[receivedMessageIndex++],
             "Got correct round-tripped response");
          if (receivedMessageIndex == messages.length) {
            SpecialPowers.removePermission("browser", document);
            SimpleTest.finish();
          }
        });
        mm.loadFrameScript("data:,(" + childFrameScript.toString() + ")();",
                           false);

        for each (let message in messages) {
          mm.sendAsyncMessage("test:ipcClonedMessage", message);
        }
      });

      document.body.appendChild(iframe);
    }

    addEventListener("load", function() {
      info("Got load event.");

      SpecialPowers.addPermission("browser", true, document);
      SpecialPowers.pushPrefEnv({
        "set": [
          ["dom.ipc.browser_frames.oop_by_default", true],
          ["dom.mozBrowserFramesEnabled", true],
          ["browser.pageThumbs.enabled", false]
        ]
      }, runTests);
    });
  </script>
</body>
</html>