1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/devicestorage/ipc/test_ipc.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,168 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<head> 1.7 + <title>Test for OOP DeviceStorage</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 + function iframeScriptFirst() { 1.19 + content.wrappedJSObject.RunSet.reloadAndRunAll({ 1.20 + preventDefault: function() { }, 1.21 + __exposedProps__: { preventDefault: 'r' } 1.22 + }); 1.23 + } 1.24 + 1.25 + function iframeScriptSecond() { 1.26 + let TestRunner = content.wrappedJSObject.TestRunner; 1.27 + 1.28 + let oldComplete = TestRunner.onComplete; 1.29 + 1.30 + TestRunner.onComplete = function() { 1.31 + TestRunner.onComplete = oldComplete; 1.32 + 1.33 + sendAsyncMessage("test:DeviceStorage:ipcTestComplete", { 1.34 + result: JSON.stringify(TestRunner._failedTests) 1.35 + }); 1.36 + 1.37 + if (oldComplete) { 1.38 + oldComplete(); 1.39 + } 1.40 + }; 1.41 + 1.42 + let oldLog = TestRunner.log; 1.43 + TestRunner.log = function(msg) { 1.44 + sendAsyncMessage("test:DeviceStorage:ipcTestMessage", { msg: msg }); 1.45 + } 1.46 + } 1.47 + 1.48 + let regex = /^(TEST-PASS|TEST-UNEXPECTED-PASS|TEST-KNOWN-FAIL|TEST-UNEXPECTED-FAIL|TEST-DEBUG-INFO) \| ([^\|]+) \|(.*)/; 1.49 + 1.50 + function onTestMessage(data) { 1.51 + let message = SpecialPowers.wrap(data).json.msg; 1.52 + let match = regex.exec(message); 1.53 + if (match) { 1.54 + let state = match[1]; 1.55 + let details = match[2] + " | " + match[3]; 1.56 + 1.57 + switch (state) { 1.58 + case "TEST-PASS": 1.59 + case "TEST-KNOWN-FAIL": 1.60 + ok(true, details); 1.61 + break; 1.62 + 1.63 + case "TEST-UNEXPECTED-FAIL": 1.64 + case "TEST-UNEXPECTED-PASS": 1.65 + ok(false, details); 1.66 + break; 1.67 + 1.68 + case "TEST-DEBUG-INFO": 1.69 + default: 1.70 + info(details); 1.71 + } 1.72 + } 1.73 + } 1.74 + 1.75 + function onTestComplete() { 1.76 + let comp = SpecialPowers.wrap(SpecialPowers.Components); 1.77 + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); 1.78 + let spObserver = comp.classes["@mozilla.org/special-powers-observer;1"] 1.79 + .getService(comp.interfaces.nsIMessageListener); 1.80 + 1.81 + mm.removeMessageListener("SPPrefService", spObserver); 1.82 + mm.removeMessageListener("SPProcessCrashService", spObserver); 1.83 + mm.removeMessageListener("SPPingService", spObserver); 1.84 + mm.removeMessageListener("SpecialPowers.Quit", spObserver); 1.85 + mm.removeMessageListener("SPPermissionManager", spObserver); 1.86 + 1.87 + mm.removeMessageListener("test:DeviceStorage:ipcTestMessage", onTestMessage); 1.88 + mm.removeMessageListener("test:DeviceStorage:ipcTestComplete", onTestComplete); 1.89 + 1.90 + SimpleTest.executeSoon(function () { SimpleTest.finish(); }); 1.91 + } 1.92 + 1.93 + function runTests() { 1.94 + let iframe = document.createElement("iframe"); 1.95 + SpecialPowers.wrap(iframe).mozbrowser = true; 1.96 + iframe.id = "iframe"; 1.97 + iframe.style.width = "100%"; 1.98 + iframe.style.height = "1000px"; 1.99 + 1.100 + function iframeLoadSecond() { 1.101 + ok(true, "Got second iframe load event."); 1.102 + iframe.removeEventListener("mozbrowserloadend", iframeLoadSecond); 1.103 + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); 1.104 + mm.loadFrameScript("data:,(" + iframeScriptSecond.toString() + ")();", 1.105 + false); 1.106 + } 1.107 + 1.108 + function iframeLoadFirst() { 1.109 + ok(true, "Got first iframe load event."); 1.110 + iframe.removeEventListener("mozbrowserloadend", iframeLoadFirst); 1.111 + iframe.addEventListener("mozbrowserloadend", iframeLoadSecond); 1.112 + 1.113 + let mm = SpecialPowers.getBrowserFrameMessageManager(iframe); 1.114 + 1.115 + let comp = SpecialPowers.wrap(SpecialPowers.Components); 1.116 + 1.117 + let spObserver = 1.118 + comp.classes["@mozilla.org/special-powers-observer;1"] 1.119 + .getService(comp.interfaces.nsIMessageListener); 1.120 + 1.121 + mm.addMessageListener("SPPrefService", spObserver); 1.122 + mm.addMessageListener("SPProcessCrashService", spObserver); 1.123 + mm.addMessageListener("SPPingService", spObserver); 1.124 + mm.addMessageListener("SpecialPowers.Quit", spObserver); 1.125 + mm.addMessageListener("SPPermissionManager", spObserver); 1.126 + 1.127 + mm.addMessageListener("test:DeviceStorage:ipcTestMessage", onTestMessage); 1.128 + mm.addMessageListener("test:DeviceStorage:ipcTestComplete", onTestComplete); 1.129 + 1.130 + let specialPowersBase = "chrome://specialpowers/content/"; 1.131 + mm.loadFrameScript(specialPowersBase + "MozillaLogger.js", false); 1.132 + mm.loadFrameScript(specialPowersBase + "specialpowersAPI.js", false); 1.133 + mm.loadFrameScript(specialPowersBase + "specialpowers.js", false); 1.134 + 1.135 + mm.loadFrameScript("data:,(" + iframeScriptFirst.toString() + ")();", false); 1.136 + } 1.137 + 1.138 + iframe.addEventListener("mozbrowserloadend", iframeLoadFirst); 1.139 + 1.140 + // Strip this filename and one directory level and then add "/test". 1.141 + let href = window.location.href; 1.142 + href = href.substring(0, href.lastIndexOf('/')); 1.143 + href = href.substring(0, href.lastIndexOf('/')); 1.144 + iframe.src = href + "/test?consoleLevel=INFO"; 1.145 + 1.146 + document.body.appendChild(iframe); 1.147 + } 1.148 + 1.149 + addEventListener("load", function() { 1.150 + 1.151 + SpecialPowers.addPermission("browser", true, document); 1.152 + SpecialPowers.pushPrefEnv({ 1.153 + "set": [ 1.154 + 1.155 + ["device.storage.enabled", true], 1.156 + ["device.storage.testing", true], 1.157 + ["device.storage.prompt.testing", true], 1.158 + 1.159 + // TODO: remove this as part of bug 820712 1.160 + ["network.disable.ipc.security", true], 1.161 + 1.162 + ["dom.ipc.browser_frames.oop_by_default", true], 1.163 + ["dom.mozBrowserFramesEnabled", true], 1.164 + ["browser.pagethumbnails.capturing_disabled", true] 1.165 + ] 1.166 + }, runTests); 1.167 + }); 1.168 + 1.169 + </script> 1.170 +</body> 1.171 +</html>