testing/mochitest/b2g_start_script.js

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

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 }

mercurial