Sat, 03 Jan 2015 20:18:00 +0100
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;
5 MARIONETTE_CONTEXT = "chrome";
7 Cu.import("resource://gre/modules/Promise.jsm");
9 const MMS_SERVICE_CONTRACTID = "@mozilla.org/mms/mmsservice;1";
10 const SMS_SERVICE_CONTRACTID = "@mozilla.org/sms/smsservice;1";
12 const PREF_RIL_NUM_RADIO_INTERFACES = "ril.numRadioInterfaces";
13 const PREF_MMS_DEFAULT_SERVICE_ID = "dom.mms.defaultServiceId";
14 const PREF_SMS_DEFAULT_SERVICE_ID = "dom.sms.defaultServiceId";
16 function setPrefAndVerify(prefKey, setVal, service, attrName, expectedVal, deferred) {
17 log(" Set '" + prefKey + "' to " + setVal);
18 Services.prefs.setIntPref(prefKey, setVal);
19 let prefVal = Services.prefs.getIntPref(prefKey);
20 is(prefVal, setVal, "'" + prefKey + "' set to " + setVal);
22 window.setTimeout(function() {
23 let defaultVal = service[attrName];
24 is(defaultVal, expectedVal, attrName);
26 deferred.resolve(service);
27 }, 0);
28 }
30 function getNumRadioInterfaces() {
31 let deferred = Promise.defer();
33 window.setTimeout(function() {
34 let numRil = Services.prefs.getIntPref(PREF_RIL_NUM_RADIO_INTERFACES);
35 log("numRil = " + numRil);
37 deferred.resolve(numRil);
38 }, 0);
40 return deferred.promise;
41 }
43 function getService(contractId, ifaceName) {
44 let deferred = Promise.defer();
46 window.setTimeout(function() {
47 log("Getting service for " + ifaceName);
48 let service = Cc[contractId].getService(Ci[ifaceName]);
49 ok(service, "service.constructor is " + service.constructor);
51 deferred.resolve(service);
52 }, 0);
54 return deferred.promise;
55 }
57 function checkInitialEquality(attrName, prefKey, service) {
58 let deferred = Promise.defer();
60 log(" Checking initial value for '" + prefKey + "'");
61 let origPrefVal = Services.prefs.getIntPref(prefKey);
62 ok(isFinite(origPrefVal), "default '" + prefKey + "' value");
64 window.setTimeout(function() {
65 let defaultVal = service[attrName];
66 is(defaultVal, origPrefVal, attrName);
68 deferred.resolve(service);
69 }, 0);
71 return deferred.promise;
72 }
74 function checkSetToNegtiveValue(attrName, prefKey, service) {
75 let deferred = Promise.defer();
77 // Set to -1 and verify defaultVal == 0.
78 setPrefAndVerify(prefKey, -1, service, attrName, 0, deferred);
80 return deferred.promise;
81 }
83 function checkSetToOverflowedValue(attrName, prefKey, numRil, service) {
84 let deferred = Promise.defer();
86 // Set to larger-equal than numRil and verify defaultVal == 0.
87 setPrefAndVerify(prefKey, numRil, service, attrName, 0, deferred);
89 return deferred.promise;
90 }
92 function checkValueChange(attrName, prefKey, numRil, service) {
93 let deferred = Promise.defer();
95 if (numRil > 1) {
96 // Set to (numRil - 1) and verify defaultVal equals.
97 setPrefAndVerify(prefKey, numRil - 1, service, attrName, numRil - 1, deferred);
98 } else {
99 window.setTimeout(function() {
100 deferred.resolve(service);
101 }, 0);
102 }
104 return deferred.promise;
105 }
107 function verify(contractId, ifaceName, attrName, prefKey, numRil) {
108 let deferred = Promise.defer();
110 getService(contractId, ifaceName)
111 .then(checkInitialEquality.bind(null, attrName, prefKey))
112 .then(checkSetToNegtiveValue.bind(null, attrName, prefKey))
113 .then(checkSetToOverflowedValue.bind(null, attrName, prefKey, numRil))
114 .then(checkValueChange.bind(null, attrName, prefKey, numRil))
115 .then(function() {
116 // Reset.
117 Services.prefs.clearUserPref(prefKey);
119 deferred.resolve(numRil);
120 });
122 return deferred.promise;
123 }
125 getNumRadioInterfaces()
126 .then(verify.bind(null, MMS_SERVICE_CONTRACTID, "nsIMmsService",
127 "mmsDefaultServiceId", PREF_MMS_DEFAULT_SERVICE_ID))
128 .then(verify.bind(null, SMS_SERVICE_CONTRACTID, "nsISmsService",
129 "smsDefaultServiceId", PREF_SMS_DEFAULT_SERVICE_ID))
130 .then(finish);