dom/media/tests/ipc/test_ipc.html

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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>
    10   <script type="application/javascript;version=1.7">
    11     "use strict";
    13     SimpleTest.waitForExplicitFinish();
    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);
    21     // Disable crash observers as it breaks later tests.
    22     function iframeScriptFirst() {
    23       SpecialPowers.prototype.registerProcessCrashObservers = function() { };
    24       SpecialPowers.prototype.unregisterProcessCrashObservers = function() { };
    26       content.wrappedJSObject.RunSet.reloadAndRunAll({
    27           preventDefault: function() { },
    28           __exposedProps__: { preventDefault: 'r' }
    29       });
    30     }
    32     function iframeScriptSecond() {
    33       let TestRunner = content.wrappedJSObject.TestRunner;
    34       let oldComplete = TestRunner.onComplete;
    36       TestRunner.onComplete = function() {
    37         TestRunner.onComplete = oldComplete;
    39         sendAsyncMessage("test:PeerConnection:ipcTestComplete", {
    40           result: JSON.stringify(TestRunner._failedTests)
    41         });
    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     }
    56     let regex = /^(TEST-PASS|TEST-UNEXPECTED-PASS|TEST-KNOWN-FAIL|TEST-UNEXPECTED-FAIL|TEST-DEBUG-INFO) \| ([^\|]+) \|(.*)/;
    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];
    65         switch (state) {
    66           case "TEST-PASS":
    67           case "TEST-KNOWN-FAIL":
    68             ok(true, details);
    69             break;
    71           case "TEST-UNEXPECTED-FAIL":
    72           case "TEST-UNEXPECTED-PASS":
    73             ok(false, details);
    74             break;
    76           case "TEST-DEBUG-INFO":
    77           default:
    78             info(details);
    79         }
    80       }
    81     }
    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);
    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);
    95       mm.removeMessageListener("test:PeerConnection:ipcTestMessage", onTestMessage);
    96       mm.removeMessageListener("test:PeerConnection:ipcTestComplete", onTestComplete);
    98       SimpleTest.executeSoon(function () { SimpleTest.finish(); });
    99     }
   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";
   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       }
   116       function iframeLoadFirst() {
   117         ok(true, "Got first iframe load event.");
   118         iframe.removeEventListener("mozbrowserloadend", iframeLoadFirst);
   119         iframe.addEventListener("mozbrowserloadend", iframeLoadSecond);
   121         let mm = SpecialPowers.getBrowserFrameMessageManager(iframe);
   123         let comp = SpecialPowers.wrap(SpecialPowers.Components);
   125         let spObserver =
   126           comp.classes["@mozilla.org/special-powers-observer;1"]
   127               .getService(comp.interfaces.nsIMessageListener);
   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);
   135         mm.addMessageListener("test:PeerConnection:ipcTestMessage", onTestMessage);
   136         mm.addMessageListener("test:PeerConnection:ipcTestComplete", onTestComplete);
   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);
   143         mm.loadFrameScript("data:,(" + iframeScriptFirst.toString() + ")();", false);
   144       }
   146       iframe.addEventListener("mozbrowserloadend", iframeLoadFirst);
   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     }
   157     addEventListener("load", function() {
   159       SpecialPowers.addPermission("browser", true, document);
   160       SpecialPowers.pushPrefEnv({
   161         "set": [
   162           ["media.peerconnection.ipc.enabled", true],
   164           // TODO: remove this as part of bug 820712
   165           ["network.disable.ipc.security", true],
   167           ["dom.ipc.browser_frames.oop_by_default", true],
   168           ["dom.mozBrowserFramesEnabled", true],
   169           ["browser.pagethumbnails.capturing_disabled", true]
   170         ]
   171       }, runTests);
   172     });
   174   </script>
   175 </body>
   176 </html>

mercurial