dom/mobileconnection/tests/marionette/test_mobile_set_radio.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 MARIONETTE_TIMEOUT = 60000;
     6 const DATA_KEY  = "ril.data.enabled";
     7 const APN_KEY   = "ril.data.apnSettings";
     9 let Promise = SpecialPowers.Cu.import("resource://gre/modules/Promise.jsm").Promise;
    11 SpecialPowers.setBoolPref("dom.mozSettings.enabled", true);
    12 SpecialPowers.addPermission("mobileconnection", true, document);
    13 SpecialPowers.addPermission("settings-read", true, document);
    14 SpecialPowers.addPermission("settings-write", true, document);
    16 let settings = window.navigator.mozSettings;
    17 let connection = window.navigator.mozMobileConnections[0];
    18 ok(connection instanceof MozMobileConnection,
    19    "connection is instanceof " + connection.constructor);
    21 function setSetting(key, value) {
    22   let deferred = Promise.defer();
    24   let setLock = settings.createLock();
    25   let obj = {};
    26   obj[key] = value;
    28   let setReq = setLock.set(obj);
    29   setReq.addEventListener("success", function onSetSuccess() {
    30     ok(true, "set '" + key + "' to " + obj[key]);
    31     deferred.resolve();
    32   });
    33   setReq.addEventListener("error", function onSetError() {
    34     ok(false, "cannot set '" + key + "'");
    35     deferred.reject();
    36   });
    38   return deferred.promise;
    39 }
    41 function setEmulatorAPN() {
    42   let apn =
    43     [
    44       [
    45         {"carrier":"T-Mobile US",
    46          "apn":"epc.tmobile.com",
    47          "mmsc":"http://mms.msg.eng.t-mobile.com/mms/wapenc",
    48          "types":["default","supl","mms"]}
    49       ]
    50     ];
    51   return setSetting(APN_KEY, apn);
    52 }
    54 function enableData() {
    55   log("Turn data on.");
    57   let deferred = Promise.defer();
    59   connection.addEventListener("datachange", function ondatachange() {
    60     if (connection.data.connected === true) {
    61       connection.removeEventListener("datachange", ondatachange);
    62       log("mobileConnection.data.connected is now '"
    63           + connection.data.connected + "'.");
    64       deferred.resolve();
    65     }
    66   });
    68   setEmulatorAPN()
    69     .then(() => setSetting(DATA_KEY, true));
    71   return deferred.promise;
    72 }
    74 function receivedPending(received, pending, nextAction) {
    75   let index = pending.indexOf(received);
    76   if (index != -1) {
    77     pending.splice(index, 1);
    78   }
    79   if (pending.length === 0) {
    80     nextAction();
    81   }
    82 }
    84 function waitRadioState(state) {
    85   let deferred = Promise.defer();
    87   waitFor(function() {
    88     deferred.resolve();
    89   }, function() {
    90     return connection.radioState == state;
    91   });
    93   return deferred.promise;
    94 }
    96 function setRadioEnabled(enabled, transientState, finalState) {
    97   log("setRadioEnabled to " + enabled);
    99   let deferred = Promise.defer();
   100   let done = function() {
   101     deferred.resolve();
   102   };
   104   let pending = ["onradiostatechange", "onsuccess"];
   106   let receivedTransient = false;
   107   connection.onradiostatechange = function() {
   108     let state = connection.radioState;
   109     log("Received 'radiostatechange' event, radioState: " + state);
   111     if (state == transientState) {
   112       receivedTransient = true;
   113     } else if (state == finalState) {
   114       ok(receivedTransient);
   115       receivedPending("onradiostatechange", pending, done);
   116     }
   117   };
   119   let req = connection.setRadioEnabled(enabled);
   121   req.onsuccess = function() {
   122     log("setRadioEnabled success");
   123     receivedPending("onsuccess", pending, done);
   124   };
   126   req.onerror = function() {
   127     ok(false, "setRadioEnabled should not fail");
   128     deferred.reject();
   129   };
   131   return deferred.promise;
   132 }
   134 function testSwitchRadio() {
   135   log("= testSwitchRadio =");
   136   return waitRadioState("enabled")
   137     .then(setRadioEnabled.bind(null, false, "disabling", "disabled"))
   138     .then(setRadioEnabled.bind(null, true, "enabling", "enabled"));
   139 }
   141 function testDisableRadioWhenDataConnected() {
   142   log("= testDisableRadioWhenDataConnected =");
   143   return waitRadioState("enabled")
   144     .then(enableData)
   145     .then(setRadioEnabled.bind(null, false, "disabling", "disabled"))
   146     .then(() => {
   147       // Data should be disconnected.
   148       is(connection.data.connected, false);
   149     })
   150     .then(setRadioEnabled.bind(null, true, "enabling", "enabled"))
   151     // Disable data
   152     .then(setSetting.bind(null, DATA_KEY, false));
   153 }
   155 function cleanUp() {
   156   SpecialPowers.removePermission("mobileconnection", document);
   157   SpecialPowers.removePermission("settings-write", document);
   158   SpecialPowers.removePermission("settings-read", document);
   159   SpecialPowers.clearUserPref("dom.mozSettings.enabled");
   160   finish();
   161 }
   163 testSwitchRadio()
   164   .then(testDisableRadioWhenDataConnected)
   165   .then(null, () => {
   166     ok(false, "promise reject somewhere");
   167   })
   168   .then(cleanUp);

mercurial