зеркало из https://github.com/mozilla/gecko-dev.git
153 строки
5.9 KiB
JavaScript
153 строки
5.9 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
let outOfProcess = __marionetteParams[0]
|
|
let mochitestUrl = __marionetteParams[1]
|
|
let onDevice = __marionetteParams[2]
|
|
let wifiSettings = __marionetteParams[3]
|
|
let prefs = Components.classes["@mozilla.org/preferences-service;1"].
|
|
getService(Components.interfaces.nsIPrefBranch)
|
|
let settings = window.navigator.mozSettings;
|
|
let cm = Components.classes["@mozilla.org/categorymanager;1"].
|
|
getService(Components.interfaces.nsICategoryManager);
|
|
|
|
if (wifiSettings)
|
|
wifiSettings = JSON.parse(wifiSettings);
|
|
|
|
const CHILD_SCRIPT = "chrome://specialpowers/content/specialpowers.js";
|
|
const CHILD_SCRIPT_API = "chrome://specialpowers/content/specialpowersAPI.js";
|
|
const CHILD_LOGGER_SCRIPT = "chrome://specialpowers/content/MozillaLogger.js";
|
|
|
|
let homescreen = document.getElementById('systemapp');
|
|
let container = homescreen.contentWindow.document.getElementById('test-container');
|
|
|
|
// Disable udpate timers which cause failure in b2g permisson prompt tests.
|
|
if (cm) {
|
|
cm.deleteCategoryEntry("update-timer", "WebappsUpdateTimer", false);
|
|
cm.deleteCategoryEntry("update-timer", "nsUpdateService", false);
|
|
}
|
|
|
|
function openWindow(aEvent) {
|
|
var popupIframe = aEvent.detail.frameElement;
|
|
popupIframe.style = 'position: absolute; left: 0; top: 0px; background: white;';
|
|
|
|
// This is to size the iframe to what is requested in the window.open call,
|
|
// e.g. window.open("", "", "width=600,height=600");
|
|
if (aEvent.detail.features.indexOf('width') != -1) {
|
|
let width = aEvent.detail.features.substr(aEvent.detail.features.indexOf('width')+6);
|
|
width = width.substr(0,width.indexOf(',') == -1 ? width.length : width.indexOf(','));
|
|
popupIframe.style.width = width + 'px';
|
|
}
|
|
if (aEvent.detail.features.indexOf('height') != -1) {
|
|
let height = aEvent.detail.features.substr(aEvent.detail.features.indexOf('height')+7);
|
|
height = height.substr(0, height.indexOf(',') == -1 ? height.length : height.indexOf(','));
|
|
popupIframe.style.height = height + 'px';
|
|
}
|
|
|
|
popupIframe.addEventListener('mozbrowserclose', function(e) {
|
|
container.parentNode.removeChild(popupIframe);
|
|
container.focus();
|
|
});
|
|
|
|
// yes, the popup can call window.open too!
|
|
popupIframe.addEventListener('mozbrowseropenwindow', openWindow);
|
|
|
|
popupIframe.addEventListener('mozbrowserloadstart', function(e) {
|
|
popupIframe.focus();
|
|
let mm = popupIframe.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager;
|
|
mm.loadFrameScript(CHILD_LOGGER_SCRIPT, true);
|
|
mm.loadFrameScript(CHILD_SCRIPT_API, true);
|
|
mm.loadFrameScript(CHILD_SCRIPT, true);
|
|
mm.loadFrameScript('data:,attachSpecialPowersToWindow(content);', true);
|
|
});
|
|
|
|
container.parentNode.appendChild(popupIframe);
|
|
}
|
|
container.addEventListener('mozbrowseropenwindow', openWindow);
|
|
|
|
if (outOfProcess) {
|
|
let specialpowers = {};
|
|
let loader = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader);
|
|
loader.loadSubScript("chrome://specialpowers/content/SpecialPowersObserver.js", specialpowers);
|
|
let specialPowersObserver = new specialpowers.SpecialPowersObserver();
|
|
|
|
let mm = container.QueryInterface(Ci.nsIFrameLoaderOwner).frameLoader.messageManager;
|
|
specialPowersObserver.init(mm);
|
|
|
|
mm.addMessageListener("SPPrefService", specialPowersObserver);
|
|
mm.addMessageListener("SPProcessCrashService", specialPowersObserver);
|
|
mm.addMessageListener("SPPingService", specialPowersObserver);
|
|
mm.addMessageListener("SpecialPowers.Quit", specialPowersObserver);
|
|
mm.addMessageListener("SpecialPowers.Focus", specialPowersObserver);
|
|
mm.addMessageListener("SPPermissionManager", specialPowersObserver);
|
|
mm.addMessageListener("SPLoadChromeScript", specialPowersObserver);
|
|
mm.addMessageListener("SPChromeScriptMessage", specialPowersObserver);
|
|
|
|
mm.loadFrameScript(CHILD_LOGGER_SCRIPT, true);
|
|
mm.loadFrameScript(CHILD_SCRIPT_API, true);
|
|
mm.loadFrameScript(CHILD_SCRIPT, true);
|
|
|
|
//Workaround for bug 848411, once that bug is fixed, the following line can be removed
|
|
function contentScript() {
|
|
addEventListener("DOMWindowCreated", function listener(e) {
|
|
removeEventListener("DOMWindowCreated", listener, false);
|
|
var window = e.target.defaultView;
|
|
window.wrappedJSObject.SpecialPowers.addPermission("allowXULXBL", true, window.document);
|
|
});
|
|
}
|
|
mm.loadFrameScript("data:,(" + encodeURI(contentScript.toSource()) + ")();", true);
|
|
|
|
specialPowersObserver._isFrameScriptLoaded = true;
|
|
}
|
|
|
|
|
|
if (onDevice) {
|
|
var cpuLock = Cc["@mozilla.org/power/powermanagerservice;1"]
|
|
.getService(Ci.nsIPowerManagerService)
|
|
.newWakeLock("cpu");
|
|
|
|
let manager = navigator.mozWifiManager;
|
|
let con = manager.connection;
|
|
manager.setPowerSavingMode(false);
|
|
|
|
manager.onenabled = function () {
|
|
if(wifiSettings) {
|
|
var req = manager.getKnownNetworks();
|
|
req.onsuccess = function () {
|
|
var networks = req.result;
|
|
for (var i = 0; i < networks.length; ++i){
|
|
var network = networks[i];
|
|
if(network.ssid == wifiSettings.ssid) {
|
|
manager.forget(network);
|
|
}
|
|
}
|
|
manager.associate(wifiSettings);
|
|
};
|
|
}
|
|
};
|
|
|
|
manager.onstatuschange = function (event) {
|
|
prefs.setIntPref("network.proxy.type", 2);
|
|
if (event.status == 'connected') {
|
|
container.src = mochitestUrl;
|
|
}
|
|
};
|
|
|
|
if(wifiSettings) {
|
|
var req = settings.createLock().set({
|
|
'wifi.enabled': false,
|
|
'wifi.suspended': false
|
|
});
|
|
|
|
req.onsuccess = function () {
|
|
dump("----------------------enabling wifi------------------\n");
|
|
var req1 = settings.createLock().set({
|
|
'wifi.enabled': true,
|
|
'wifi.suspended': false});
|
|
};
|
|
}
|
|
} else {
|
|
container.src = mochitestUrl;
|
|
}
|