1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/testing/mochitest/b2g_start_script.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,136 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +let outOfProcess = __marionetteParams[0] 1.9 +let mochitestUrl = __marionetteParams[1] 1.10 +let onDevice = __marionetteParams[2] 1.11 +let wifiSettings = __marionetteParams[3] 1.12 +let prefs = Components.classes["@mozilla.org/preferences-service;1"]. 1.13 + getService(Components.interfaces.nsIPrefBranch) 1.14 +let settings = window.navigator.mozSettings; 1.15 + 1.16 +if (wifiSettings) 1.17 + wifiSettings = JSON.parse(wifiSettings); 1.18 + 1.19 +const CHILD_SCRIPT = "chrome://specialpowers/content/specialpowers.js"; 1.20 +const CHILD_SCRIPT_API = "chrome://specialpowers/content/specialpowersAPI.js"; 1.21 +const CHILD_LOGGER_SCRIPT = "chrome://specialpowers/content/MozillaLogger.js"; 1.22 + 1.23 +let homescreen = document.getElementById('systemapp'); 1.24 +let container = homescreen.contentWindow.document.getElementById('test-container'); 1.25 + 1.26 +function openWindow(aEvent) { 1.27 + var popupIframe = aEvent.detail.frameElement; 1.28 + popupIframe.setAttribute('style', 'position: absolute; left: 0; top: 0px; background: white;'); 1.29 + 1.30 + // This is to size the iframe to what is requested in the window.open call, 1.31 + // e.g. window.open("", "", "width=600,height=600"); 1.32 + if (aEvent.detail.features.indexOf('width') != -1) { 1.33 + let width = aEvent.detail.features.substr(aEvent.detail.features.indexOf('width')+6); 1.34 + width = width.substr(0,width.indexOf(',') == -1 ? width.length : width.indexOf(',')); 1.35 + popupIframe.style.width = width + 'px'; 1.36 + } 1.37 + if (aEvent.detail.features.indexOf('height') != -1) { 1.38 + let height = aEvent.detail.features.substr(aEvent.detail.features.indexOf('height')+7); 1.39 + height = height.substr(0, height.indexOf(',') == -1 ? height.length : height.indexOf(',')); 1.40 + popupIframe.style.height = height + 'px'; 1.41 + } 1.42 + 1.43 + popupIframe.addEventListener('mozbrowserclose', function(e) { 1.44 + container.parentNode.removeChild(popupIframe); 1.45 + container.focus(); 1.46 + }); 1.47 + 1.48 + // yes, the popup can call window.open too! 1.49 + popupIframe.addEventListener('mozbrowseropenwindow', openWindow); 1.50 + 1.51 + popupIframe.addEventListener('mozbrowserloadstart', function(e) { 1.52 + popupIframe.focus(); 1.53 + let mm = popupIframe.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager; 1.54 + mm.loadFrameScript(CHILD_LOGGER_SCRIPT, true); 1.55 + mm.loadFrameScript(CHILD_SCRIPT_API, true); 1.56 + mm.loadFrameScript(CHILD_SCRIPT, true); 1.57 + mm.loadFrameScript('data:,attachSpecialPowersToWindow%28content%29%3B', true); 1.58 + }); 1.59 + 1.60 + container.parentNode.appendChild(popupIframe); 1.61 +} 1.62 +container.addEventListener('mozbrowseropenwindow', openWindow); 1.63 + 1.64 +if (outOfProcess) { 1.65 + let specialpowers = {}; 1.66 + let loader = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader); 1.67 + loader.loadSubScript("chrome://specialpowers/content/SpecialPowersObserver.js", specialpowers); 1.68 + let specialPowersObserver = new specialpowers.SpecialPowersObserver(); 1.69 + 1.70 + let mm = container.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager; 1.71 + specialPowersObserver.init(mm); 1.72 + 1.73 + mm.addMessageListener("SPPrefService", specialPowersObserver); 1.74 + mm.addMessageListener("SPProcessCrashService", specialPowersObserver); 1.75 + mm.addMessageListener("SPPingService", specialPowersObserver); 1.76 + mm.addMessageListener("SpecialPowers.Quit", specialPowersObserver); 1.77 + mm.addMessageListener("SpecialPowers.Focus", specialPowersObserver); 1.78 + mm.addMessageListener("SPPermissionManager", specialPowersObserver); 1.79 + mm.addMessageListener("SPLoadChromeScript", specialPowersObserver); 1.80 + mm.addMessageListener("SPChromeScriptMessage", specialPowersObserver); 1.81 + 1.82 + mm.loadFrameScript(CHILD_LOGGER_SCRIPT, true); 1.83 + mm.loadFrameScript(CHILD_SCRIPT_API, true); 1.84 + mm.loadFrameScript(CHILD_SCRIPT, true); 1.85 + //Workaround for bug 848411, once that bug is fixed, the following line can be removed 1.86 + mm.loadFrameScript('data:,addEventListener%28%22DOMWindowCreated%22%2C%20function%28e%29%20%7B%0A%20%20removeEventListener%28%22DOMWindowCreated%22%2C%20arguments.callee%2C%20false%29%3B%0A%20%20var%20window%20%3D%20e.target.defaultView%3B%0A%20%20window.wrappedJSObject.SpecialPowers.addPermission%28%22allowXULXBL%22%2C%20true%2C%20window.document%29%3B%0A%7D%0A%29%3B', true); 1.87 + 1.88 + specialPowersObserver._isFrameScriptLoaded = true; 1.89 +} 1.90 + 1.91 + 1.92 +if (onDevice) { 1.93 + var cpuLock = Cc["@mozilla.org/power/powermanagerservice;1"] 1.94 + .getService(Ci.nsIPowerManagerService) 1.95 + .newWakeLock("cpu"); 1.96 + 1.97 + let manager = navigator.mozWifiManager; 1.98 + let con = manager.connection; 1.99 + manager.setPowerSavingMode(false); 1.100 + 1.101 + manager.onenabled = function () { 1.102 + if(wifiSettings) { 1.103 + var req = manager.getKnownNetworks(); 1.104 + req.onsuccess = function () { 1.105 + var networks = req.result; 1.106 + for (var i = 0; i < networks.length; ++i){ 1.107 + var network = networks[i]; 1.108 + if(network.ssid == wifiSettings.ssid) { 1.109 + manager.forget(network); 1.110 + } 1.111 + } 1.112 + manager.associate(wifiSettings); 1.113 + }; 1.114 + } 1.115 + }; 1.116 + 1.117 + manager.onstatuschange = function (event) { 1.118 + prefs.setIntPref("network.proxy.type", 2); 1.119 + if (event.status == 'connected') { 1.120 + container.src = mochitestUrl; 1.121 + } 1.122 + }; 1.123 + 1.124 + if(wifiSettings) { 1.125 + var req = settings.createLock().set({ 1.126 + 'wifi.enabled': false, 1.127 + 'wifi.suspended': false 1.128 + }); 1.129 + 1.130 + req.onsuccess = function () { 1.131 + dump("----------------------enabling wifi------------------\n"); 1.132 + var req1 = settings.createLock().set({ 1.133 + 'wifi.enabled': true, 1.134 + 'wifi.suspended': false}); 1.135 + }; 1.136 + } 1.137 +} else { 1.138 + container.src = mochitestUrl; 1.139 +}