|
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/. */ |
|
4 |
|
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; |
|
12 |
|
13 if (wifiSettings) |
|
14 wifiSettings = JSON.parse(wifiSettings); |
|
15 |
|
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"; |
|
19 |
|
20 let homescreen = document.getElementById('systemapp'); |
|
21 let container = homescreen.contentWindow.document.getElementById('test-container'); |
|
22 |
|
23 function openWindow(aEvent) { |
|
24 var popupIframe = aEvent.detail.frameElement; |
|
25 popupIframe.setAttribute('style', 'position: absolute; left: 0; top: 0px; background: white;'); |
|
26 |
|
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 } |
|
39 |
|
40 popupIframe.addEventListener('mozbrowserclose', function(e) { |
|
41 container.parentNode.removeChild(popupIframe); |
|
42 container.focus(); |
|
43 }); |
|
44 |
|
45 // yes, the popup can call window.open too! |
|
46 popupIframe.addEventListener('mozbrowseropenwindow', openWindow); |
|
47 |
|
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 }); |
|
56 |
|
57 container.parentNode.appendChild(popupIframe); |
|
58 } |
|
59 container.addEventListener('mozbrowseropenwindow', openWindow); |
|
60 |
|
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(); |
|
66 |
|
67 let mm = container.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager; |
|
68 specialPowersObserver.init(mm); |
|
69 |
|
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); |
|
78 |
|
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); |
|
84 |
|
85 specialPowersObserver._isFrameScriptLoaded = true; |
|
86 } |
|
87 |
|
88 |
|
89 if (onDevice) { |
|
90 var cpuLock = Cc["@mozilla.org/power/powermanagerservice;1"] |
|
91 .getService(Ci.nsIPowerManagerService) |
|
92 .newWakeLock("cpu"); |
|
93 |
|
94 let manager = navigator.mozWifiManager; |
|
95 let con = manager.connection; |
|
96 manager.setPowerSavingMode(false); |
|
97 |
|
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 }; |
|
113 |
|
114 manager.onstatuschange = function (event) { |
|
115 prefs.setIntPref("network.proxy.type", 2); |
|
116 if (event.status == 'connected') { |
|
117 container.src = mochitestUrl; |
|
118 } |
|
119 }; |
|
120 |
|
121 if(wifiSettings) { |
|
122 var req = settings.createLock().set({ |
|
123 'wifi.enabled': false, |
|
124 'wifi.suspended': false |
|
125 }); |
|
126 |
|
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 } |