|
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> |