1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/media/tests/ipc/test_ipc.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,176 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<head> 1.7 + <title>Test for OOP PeerConncection</title> 1.8 + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.9 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.10 +</head> 1.11 + <body> 1.12 + 1.13 + <script type="application/javascript;version=1.7"> 1.14 + "use strict"; 1.15 + 1.16 + SimpleTest.waitForExplicitFinish(); 1.17 + 1.18 + // This isn't a single test. It runs the entirety of the PeerConnection 1.19 + // tests. Each of those has a normal timeout handler, so there's no point in 1.20 + // having a timeout here. I'm setting this really high just to avoid getting 1.21 + // killed. 1.22 + SimpleTest.requestLongerTimeout(100); 1.23 + 1.24 + // Disable crash observers as it breaks later tests. 1.25 + function iframeScriptFirst() { 1.26 + SpecialPowers.prototype.registerProcessCrashObservers = function() { }; 1.27 + SpecialPowers.prototype.unregisterProcessCrashObservers = function() { }; 1.28 + 1.29 + content.wrappedJSObject.RunSet.reloadAndRunAll({ 1.30 + preventDefault: function() { }, 1.31 + __exposedProps__: { preventDefault: 'r' } 1.32 + }); 1.33 + } 1.34 + 1.35 + function iframeScriptSecond() { 1.36 + let TestRunner = content.wrappedJSObject.TestRunner; 1.37 + let oldComplete = TestRunner.onComplete; 1.38 + 1.39 + TestRunner.onComplete = function() { 1.40 + TestRunner.onComplete = oldComplete; 1.41 + 1.42 + sendAsyncMessage("test:PeerConnection:ipcTestComplete", { 1.43 + result: JSON.stringify(TestRunner._failedTests) 1.44 + }); 1.45 + 1.46 + if (oldComplete) { 1.47 + oldComplete(); 1.48 + } 1.49 + }; 1.50 + let oldLog = TestRunner.log; 1.51 + TestRunner.log = function(msg) { 1.52 + sendAsyncMessage("test:PeerConnection:ipcTestMessage", { msg: msg }); 1.53 + }; 1.54 + TestRunner.error = function(msg) { 1.55 + sendAsyncMessage("test:PeerConnection:ipcTestMessage", { msg: msg }); 1.56 + }; 1.57 + } 1.58 + 1.59 + let regex = /^(TEST-PASS|TEST-UNEXPECTED-PASS|TEST-KNOWN-FAIL|TEST-UNEXPECTED-FAIL|TEST-DEBUG-INFO) \| ([^\|]+) \|(.*)/; 1.60 + 1.61 + function onTestMessage(data) { 1.62 + let message = SpecialPowers.wrap(data).json.msg; 1.63 + let match = regex.exec(message); 1.64 + if (match) { 1.65 + let state = match[1]; 1.66 + let details = match[2] + " | " + match[3]; 1.67 + 1.68 + switch (state) { 1.69 + case "TEST-PASS": 1.70 + case "TEST-KNOWN-FAIL": 1.71 + ok(true, details); 1.72 + break; 1.73 + 1.74 + case "TEST-UNEXPECTED-FAIL": 1.75 + case "TEST-UNEXPECTED-PASS": 1.76 + ok(false, details); 1.77 + break; 1.78 + 1.79 + case "TEST-DEBUG-INFO": 1.80 + default: 1.81 + info(details); 1.82 + } 1.83 + } 1.84 + } 1.85 + 1.86 + function onTestComplete() { 1.87 + let comp = SpecialPowers.wrap(SpecialPowers.Components); 1.88 + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); 1.89 + let spObserver = comp.classes["@mozilla.org/special-powers-observer;1"] 1.90 + .getService(comp.interfaces.nsIMessageListener); 1.91 + 1.92 + mm.removeMessageListener("SPPrefService", spObserver); 1.93 + mm.removeMessageListener("SPProcessCrashService", spObserver); 1.94 + mm.removeMessageListener("SPPingService", spObserver); 1.95 + mm.removeMessageListener("SpecialPowers.Quit", spObserver); 1.96 + mm.removeMessageListener("SPPermissionManager", spObserver); 1.97 + 1.98 + mm.removeMessageListener("test:PeerConnection:ipcTestMessage", onTestMessage); 1.99 + mm.removeMessageListener("test:PeerConnection:ipcTestComplete", onTestComplete); 1.100 + 1.101 + SimpleTest.executeSoon(function () { SimpleTest.finish(); }); 1.102 + } 1.103 + 1.104 + function runTests() { 1.105 + let iframe = document.createElement("iframe"); 1.106 + SpecialPowers.wrap(iframe).mozbrowser = true; 1.107 + iframe.id = "iframe"; 1.108 + iframe.style.width = "100%"; 1.109 + iframe.style.height = "1000px"; 1.110 + 1.111 + function iframeLoadSecond() { 1.112 + ok(true, "Got second iframe load event."); 1.113 + iframe.removeEventListener("mozbrowserloadend", iframeLoadSecond); 1.114 + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); 1.115 + mm.loadFrameScript("data:,(" + iframeScriptSecond.toString() + ")();", 1.116 + false); 1.117 + } 1.118 + 1.119 + function iframeLoadFirst() { 1.120 + ok(true, "Got first iframe load event."); 1.121 + iframe.removeEventListener("mozbrowserloadend", iframeLoadFirst); 1.122 + iframe.addEventListener("mozbrowserloadend", iframeLoadSecond); 1.123 + 1.124 + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); 1.125 + 1.126 + let comp = SpecialPowers.wrap(SpecialPowers.Components); 1.127 + 1.128 + let spObserver = 1.129 + comp.classes["@mozilla.org/special-powers-observer;1"] 1.130 + .getService(comp.interfaces.nsIMessageListener); 1.131 + 1.132 + mm.addMessageListener("SPPrefService", spObserver); 1.133 + mm.addMessageListener("SPProcessCrashService", spObserver); 1.134 + mm.addMessageListener("SPPingService", spObserver); 1.135 + mm.addMessageListener("SpecialPowers.Quit", spObserver); 1.136 + mm.addMessageListener("SPPermissionManager", spObserver); 1.137 + 1.138 + mm.addMessageListener("test:PeerConnection:ipcTestMessage", onTestMessage); 1.139 + mm.addMessageListener("test:PeerConnection:ipcTestComplete", onTestComplete); 1.140 + 1.141 + let specialPowersBase = "chrome://specialpowers/content/"; 1.142 + mm.loadFrameScript(specialPowersBase + "MozillaLogger.js", false); 1.143 + mm.loadFrameScript(specialPowersBase + "specialpowersAPI.js", false); 1.144 + mm.loadFrameScript(specialPowersBase + "specialpowers.js", false); 1.145 + 1.146 + mm.loadFrameScript("data:,(" + iframeScriptFirst.toString() + ")();", false); 1.147 + } 1.148 + 1.149 + iframe.addEventListener("mozbrowserloadend", iframeLoadFirst); 1.150 + 1.151 + // Strip this filename and one directory level and then add "/mochitest". 1.152 + let href = window.location.href; 1.153 + href = href.substring(0, href.lastIndexOf('/')); 1.154 + href = href.substring(0, href.lastIndexOf('/')); 1.155 + let manifest = "tests/dom/media/tests/ipc/ipc.json"; 1.156 + iframe.src = href + "/mochitest?consoleLevel=INFO&testManifest=" + manifest; 1.157 + document.body.appendChild(iframe); 1.158 + } 1.159 + 1.160 + addEventListener("load", function() { 1.161 + 1.162 + SpecialPowers.addPermission("browser", true, document); 1.163 + SpecialPowers.pushPrefEnv({ 1.164 + "set": [ 1.165 + ["media.peerconnection.ipc.enabled", true], 1.166 + 1.167 + // TODO: remove this as part of bug 820712 1.168 + ["network.disable.ipc.security", true], 1.169 + 1.170 + ["dom.ipc.browser_frames.oop_by_default", true], 1.171 + ["dom.mozBrowserFramesEnabled", true], 1.172 + ["browser.pagethumbnails.capturing_disabled", true] 1.173 + ] 1.174 + }, runTests); 1.175 + }); 1.176 + 1.177 + </script> 1.178 +</body> 1.179 +</html>