testing/mochitest/b2g_start_script.js

changeset 0
6474c204b198
     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 +}

mercurial