Wed, 31 Dec 2014 06:55:50 +0100
Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 let outOfProcess = __marionetteParams[0]
6 let mochitestUrl = __marionetteParams[1]
7 let onDevice = __marionetteParams[2]
8 let wifiSettings = __marionetteParams[3]
9 let prefs = Components.classes["@mozilla.org/preferences-service;1"].
10 getService(Components.interfaces.nsIPrefBranch)
11 let settings = window.navigator.mozSettings;
13 if (wifiSettings)
14 wifiSettings = JSON.parse(wifiSettings);
16 const CHILD_SCRIPT = "chrome://specialpowers/content/specialpowers.js";
17 const CHILD_SCRIPT_API = "chrome://specialpowers/content/specialpowersAPI.js";
18 const CHILD_LOGGER_SCRIPT = "chrome://specialpowers/content/MozillaLogger.js";
20 let homescreen = document.getElementById('systemapp');
21 let container = homescreen.contentWindow.document.getElementById('test-container');
23 function openWindow(aEvent) {
24 var popupIframe = aEvent.detail.frameElement;
25 popupIframe.setAttribute('style', 'position: absolute; left: 0; top: 0px; background: white;');
27 // This is to size the iframe to what is requested in the window.open call,
28 // e.g. window.open("", "", "width=600,height=600");
29 if (aEvent.detail.features.indexOf('width') != -1) {
30 let width = aEvent.detail.features.substr(aEvent.detail.features.indexOf('width')+6);
31 width = width.substr(0,width.indexOf(',') == -1 ? width.length : width.indexOf(','));
32 popupIframe.style.width = width + 'px';
33 }
34 if (aEvent.detail.features.indexOf('height') != -1) {
35 let height = aEvent.detail.features.substr(aEvent.detail.features.indexOf('height')+7);
36 height = height.substr(0, height.indexOf(',') == -1 ? height.length : height.indexOf(','));
37 popupIframe.style.height = height + 'px';
38 }
40 popupIframe.addEventListener('mozbrowserclose', function(e) {
41 container.parentNode.removeChild(popupIframe);
42 container.focus();
43 });
45 // yes, the popup can call window.open too!
46 popupIframe.addEventListener('mozbrowseropenwindow', openWindow);
48 popupIframe.addEventListener('mozbrowserloadstart', function(e) {
49 popupIframe.focus();
50 let mm = popupIframe.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager;
51 mm.loadFrameScript(CHILD_LOGGER_SCRIPT, true);
52 mm.loadFrameScript(CHILD_SCRIPT_API, true);
53 mm.loadFrameScript(CHILD_SCRIPT, true);
54 mm.loadFrameScript('data:,attachSpecialPowersToWindow%28content%29%3B', true);
55 });
57 container.parentNode.appendChild(popupIframe);
58 }
59 container.addEventListener('mozbrowseropenwindow', openWindow);
61 if (outOfProcess) {
62 let specialpowers = {};
63 let loader = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader);
64 loader.loadSubScript("chrome://specialpowers/content/SpecialPowersObserver.js", specialpowers);
65 let specialPowersObserver = new specialpowers.SpecialPowersObserver();
67 let mm = container.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager;
68 specialPowersObserver.init(mm);
70 mm.addMessageListener("SPPrefService", specialPowersObserver);
71 mm.addMessageListener("SPProcessCrashService", specialPowersObserver);
72 mm.addMessageListener("SPPingService", specialPowersObserver);
73 mm.addMessageListener("SpecialPowers.Quit", specialPowersObserver);
74 mm.addMessageListener("SpecialPowers.Focus", specialPowersObserver);
75 mm.addMessageListener("SPPermissionManager", specialPowersObserver);
76 mm.addMessageListener("SPLoadChromeScript", specialPowersObserver);
77 mm.addMessageListener("SPChromeScriptMessage", specialPowersObserver);
79 mm.loadFrameScript(CHILD_LOGGER_SCRIPT, true);
80 mm.loadFrameScript(CHILD_SCRIPT_API, true);
81 mm.loadFrameScript(CHILD_SCRIPT, true);
82 //Workaround for bug 848411, once that bug is fixed, the following line can be removed
83 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);
85 specialPowersObserver._isFrameScriptLoaded = true;
86 }
89 if (onDevice) {
90 var cpuLock = Cc["@mozilla.org/power/powermanagerservice;1"]
91 .getService(Ci.nsIPowerManagerService)
92 .newWakeLock("cpu");
94 let manager = navigator.mozWifiManager;
95 let con = manager.connection;
96 manager.setPowerSavingMode(false);
98 manager.onenabled = function () {
99 if(wifiSettings) {
100 var req = manager.getKnownNetworks();
101 req.onsuccess = function () {
102 var networks = req.result;
103 for (var i = 0; i < networks.length; ++i){
104 var network = networks[i];
105 if(network.ssid == wifiSettings.ssid) {
106 manager.forget(network);
107 }
108 }
109 manager.associate(wifiSettings);
110 };
111 }
112 };
114 manager.onstatuschange = function (event) {
115 prefs.setIntPref("network.proxy.type", 2);
116 if (event.status == 'connected') {
117 container.src = mochitestUrl;
118 }
119 };
121 if(wifiSettings) {
122 var req = settings.createLock().set({
123 'wifi.enabled': false,
124 'wifi.suspended': false
125 });
127 req.onsuccess = function () {
128 dump("----------------------enabling wifi------------------\n");
129 var req1 = settings.createLock().set({
130 'wifi.enabled': true,
131 'wifi.suspended': false});
132 };
133 }
134 } else {
135 container.src = mochitestUrl;
136 }