dom/media/tests/ipc/test_ipc.html

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:869a70af7ccd
1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <title>Test for OOP PeerConncection</title>
5 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
7 </head>
8 <body>
9
10 <script type="application/javascript;version=1.7">
11 "use strict";
12
13 SimpleTest.waitForExplicitFinish();
14
15 // This isn't a single test. It runs the entirety of the PeerConnection
16 // tests. Each of those has a normal timeout handler, so there's no point in
17 // having a timeout here. I'm setting this really high just to avoid getting
18 // killed.
19 SimpleTest.requestLongerTimeout(100);
20
21 // Disable crash observers as it breaks later tests.
22 function iframeScriptFirst() {
23 SpecialPowers.prototype.registerProcessCrashObservers = function() { };
24 SpecialPowers.prototype.unregisterProcessCrashObservers = function() { };
25
26 content.wrappedJSObject.RunSet.reloadAndRunAll({
27 preventDefault: function() { },
28 __exposedProps__: { preventDefault: 'r' }
29 });
30 }
31
32 function iframeScriptSecond() {
33 let TestRunner = content.wrappedJSObject.TestRunner;
34 let oldComplete = TestRunner.onComplete;
35
36 TestRunner.onComplete = function() {
37 TestRunner.onComplete = oldComplete;
38
39 sendAsyncMessage("test:PeerConnection:ipcTestComplete", {
40 result: JSON.stringify(TestRunner._failedTests)
41 });
42
43 if (oldComplete) {
44 oldComplete();
45 }
46 };
47 let oldLog = TestRunner.log;
48 TestRunner.log = function(msg) {
49 sendAsyncMessage("test:PeerConnection:ipcTestMessage", { msg: msg });
50 };
51 TestRunner.error = function(msg) {
52 sendAsyncMessage("test:PeerConnection:ipcTestMessage", { msg: msg });
53 };
54 }
55
56 let regex = /^(TEST-PASS|TEST-UNEXPECTED-PASS|TEST-KNOWN-FAIL|TEST-UNEXPECTED-FAIL|TEST-DEBUG-INFO) \| ([^\|]+) \|(.*)/;
57
58 function onTestMessage(data) {
59 let message = SpecialPowers.wrap(data).json.msg;
60 let match = regex.exec(message);
61 if (match) {
62 let state = match[1];
63 let details = match[2] + " | " + match[3];
64
65 switch (state) {
66 case "TEST-PASS":
67 case "TEST-KNOWN-FAIL":
68 ok(true, details);
69 break;
70
71 case "TEST-UNEXPECTED-FAIL":
72 case "TEST-UNEXPECTED-PASS":
73 ok(false, details);
74 break;
75
76 case "TEST-DEBUG-INFO":
77 default:
78 info(details);
79 }
80 }
81 }
82
83 function onTestComplete() {
84 let comp = SpecialPowers.wrap(SpecialPowers.Components);
85 let mm = SpecialPowers.getBrowserFrameMessageManager(iframe);
86 let spObserver = comp.classes["@mozilla.org/special-powers-observer;1"]
87 .getService(comp.interfaces.nsIMessageListener);
88
89 mm.removeMessageListener("SPPrefService", spObserver);
90 mm.removeMessageListener("SPProcessCrashService", spObserver);
91 mm.removeMessageListener("SPPingService", spObserver);
92 mm.removeMessageListener("SpecialPowers.Quit", spObserver);
93 mm.removeMessageListener("SPPermissionManager", spObserver);
94
95 mm.removeMessageListener("test:PeerConnection:ipcTestMessage", onTestMessage);
96 mm.removeMessageListener("test:PeerConnection:ipcTestComplete", onTestComplete);
97
98 SimpleTest.executeSoon(function () { SimpleTest.finish(); });
99 }
100
101 function runTests() {
102 let iframe = document.createElement("iframe");
103 SpecialPowers.wrap(iframe).mozbrowser = true;
104 iframe.id = "iframe";
105 iframe.style.width = "100%";
106 iframe.style.height = "1000px";
107
108 function iframeLoadSecond() {
109 ok(true, "Got second iframe load event.");
110 iframe.removeEventListener("mozbrowserloadend", iframeLoadSecond);
111 let mm = SpecialPowers.getBrowserFrameMessageManager(iframe);
112 mm.loadFrameScript("data:,(" + iframeScriptSecond.toString() + ")();",
113 false);
114 }
115
116 function iframeLoadFirst() {
117 ok(true, "Got first iframe load event.");
118 iframe.removeEventListener("mozbrowserloadend", iframeLoadFirst);
119 iframe.addEventListener("mozbrowserloadend", iframeLoadSecond);
120
121 let mm = SpecialPowers.getBrowserFrameMessageManager(iframe);
122
123 let comp = SpecialPowers.wrap(SpecialPowers.Components);
124
125 let spObserver =
126 comp.classes["@mozilla.org/special-powers-observer;1"]
127 .getService(comp.interfaces.nsIMessageListener);
128
129 mm.addMessageListener("SPPrefService", spObserver);
130 mm.addMessageListener("SPProcessCrashService", spObserver);
131 mm.addMessageListener("SPPingService", spObserver);
132 mm.addMessageListener("SpecialPowers.Quit", spObserver);
133 mm.addMessageListener("SPPermissionManager", spObserver);
134
135 mm.addMessageListener("test:PeerConnection:ipcTestMessage", onTestMessage);
136 mm.addMessageListener("test:PeerConnection:ipcTestComplete", onTestComplete);
137
138 let specialPowersBase = "chrome://specialpowers/content/";
139 mm.loadFrameScript(specialPowersBase + "MozillaLogger.js", false);
140 mm.loadFrameScript(specialPowersBase + "specialpowersAPI.js", false);
141 mm.loadFrameScript(specialPowersBase + "specialpowers.js", false);
142
143 mm.loadFrameScript("data:,(" + iframeScriptFirst.toString() + ")();", false);
144 }
145
146 iframe.addEventListener("mozbrowserloadend", iframeLoadFirst);
147
148 // Strip this filename and one directory level and then add "/mochitest".
149 let href = window.location.href;
150 href = href.substring(0, href.lastIndexOf('/'));
151 href = href.substring(0, href.lastIndexOf('/'));
152 let manifest = "tests/dom/media/tests/ipc/ipc.json";
153 iframe.src = href + "/mochitest?consoleLevel=INFO&testManifest=" + manifest;
154 document.body.appendChild(iframe);
155 }
156
157 addEventListener("load", function() {
158
159 SpecialPowers.addPermission("browser", true, document);
160 SpecialPowers.pushPrefEnv({
161 "set": [
162 ["media.peerconnection.ipc.enabled", true],
163
164 // TODO: remove this as part of bug 820712
165 ["network.disable.ipc.security", true],
166
167 ["dom.ipc.browser_frames.oop_by_default", true],
168 ["dom.mozBrowserFramesEnabled", true],
169 ["browser.pagethumbnails.capturing_disabled", true]
170 ]
171 }, runTests);
172 });
173
174 </script>
175 </body>
176 </html>

mercurial