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 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <title>Test data Paramter for Alarm API</title>
6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
7 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
8 </head>
9 <body>
10 <p id="display"></p>
11 <div id="content" style="display: none"></div>
12 <pre id="test">
13 <script type="application/javascript">
15 "use strict";
17 // Verify passing {} for the data paramter
18 function testEmptyObject() {
19 var tomorrow = new Date();
20 tomorrow.setDate(tomorrow.getDate() + 1);
22 var data = {};
24 var domRequest;
25 try {
26 domRequest = navigator.mozAlarms.add(tomorrow, "honorTimezone", data);
27 } catch (e) {
28 ok(false,
29 "Unexpected exception trying to add alarm for tomorrow for empty object test.");
31 return testEmptyList();
32 }
33 domRequest.onsuccess = function(e) {
34 var alarmId = e.target.result;
36 // Confirm the alarm added has the data we requested
37 var allReq;
38 try {
39 allReq = navigator.mozAlarms.getAll();
40 } catch (e) {
41 ok(false,
42 "Unexpected exception trying to get all alarms for empty object test.");
44 return testEmptyList();
45 }
46 allReq.onsuccess = function(ev) {
47 navigator.mozAlarms.remove(alarmId);
49 var found = false;
50 ev.target.result.forEach(function(alarm, i, arr) {
51 if (alarm.id == alarmId) {
52 // Found the one we added
53 ok(Object.keys(alarm.data).length === 0,
54 "Empty object passed for data parameter for new alarm.");
56 found = true;
57 }
58 });
60 if (!found) {
61 ok(false, "Couldn't find alarm that was added for empty object test.");
62 }
64 testEmptyList();
65 }
66 allReq.onerror = function(e) {
67 ok(false, "Unable to get all alarms for empty object test.");
69 testEmptyList();
70 }
71 };
72 domRequest.onerror = function(e) {
73 ok(false, "Unable to add alarm for tomorrow for empty object test.");
75 testEmptyList();
76 };
78 }
80 // Verify passing [] for the data paramter
81 function testEmptyList() {
82 var tomorrow = new Date();
83 tomorrow.setDate(tomorrow.getDate() + 1);
85 var data = [];
87 var domRequest;
88 try {
89 domRequest = navigator.mozAlarms.add(tomorrow, "honorTimezone", data);
90 } catch (e) {
91 ok(false,
92 "Unexpected exception trying to add alarm for tomorrow for empty list test.");
94 return testNull();
95 }
96 domRequest.onsuccess = function(e) {
97 var alarmId = e.target.result;
99 // Confirm the alarm added has the data we requested
100 var allReq;
101 try {
102 allReq = navigator.mozAlarms.getAll();
103 } catch (e) {
104 ok(false,
105 "Unexpected exception trying to get all alarms for empty list test.");
107 return testNull();
108 }
109 allReq.onsuccess = function(ev) {
110 navigator.mozAlarms.remove(alarmId);
112 var found = false;
113 ev.target.result.forEach(function(alarm, i, arr) {
114 if (alarm.id == alarmId) {
115 // Found the one we added
116 ok(alarm.data.length === 0,
117 "Empty list passed for data parameter for new alarm.");
119 found = true;
120 }
121 });
123 if (!found) {
124 ok(false, "Couldn't find alarm that was added for empty list test.");
125 }
127 testNull();
128 }
129 allReq.onerror = function(e) {
130 ok(false, "Unable to get all alarms for empty list test.");
132 testNull();
133 }
134 };
135 domRequest.onerror = function(e) {
136 ok(false, "Unable to add alarm for tomorrow for empty list test.");
138 testNull();
139 };
141 }
143 // Verify passing null for the data paramter
144 function testNull() {
145 var tomorrow = new Date();
146 tomorrow.setDate(tomorrow.getDate() + 1);
148 var data = null;
150 var domRequest;
151 try {
152 domRequest = navigator.mozAlarms.add(tomorrow, "honorTimezone", data);
153 } catch (e) {
154 ok(false,
155 "Unexpected exception trying to add alarm for tomorrow for null test.");
156 return SimpleTest.finish();
157 }
158 domRequest.onsuccess = function(e) {
159 var alarmId = e.target.result;
161 // Confirm the alarm added has the data we requested
162 var allReq;
163 try {
164 allReq = navigator.mozAlarms.getAll();
165 } catch (e) {
166 ok(false,
167 "Unexpected exception trying to get all alarms for null test.");
168 return SimpleTest.finish();
169 }
170 allReq.onsuccess = function(ev) {
171 navigator.mozAlarms.remove(alarmId);
173 var found = false;
174 ev.target.result.forEach(function(alarm, i, arr) {
175 if (alarm.id == alarmId) {
176 // Found the one we added
177 ok(alarm.data === null,
178 "Null passed for data parameter for new alarm.");
180 found = true;
181 }
182 });
184 if (!found) {
185 ok(false, "Couldn't find alarm that was added for null test.");
186 }
187 SimpleTest.finish();
188 }
189 allReq.onerror = function(e) {
190 ok(false, "Unable to get all alarms for null test.");
191 SimpleTest.finish();
192 }
193 };
194 domRequest.onerror = function(e) {
195 ok(false, "Unable to add alarm for tomorrow for null test.");
196 SimpleTest.finish();
197 };
199 }
201 function startTests() {
203 SpecialPowers.pushPrefEnv({"set": [["dom.mozAlarms.enabled", true]]}, function() {
205 // Currently applicable only on FxOS
206 if (navigator.userAgent.indexOf("Mobile") != -1 &&
207 navigator.appVersion.indexOf("Android") == -1) {
209 testEmptyObject();
211 } else {
212 ok(true, "mozAlarms on Firefox OS only.");
213 SimpleTest.finish();
214 }
216 });
218 }
220 SimpleTest.expectAssertions(0, 9);
221 SimpleTest.waitForExplicitFinish();
222 if (SpecialPowers.hasPermission("alarms", document)) {
223 startTests();
224 } else {
225 // Add the permission and reload the page so it propogates
226 SpecialPowers.addPermission("alarms", true, document);
227 window.location.reload();
228 }
230 </script>
231 </pre>
232 </body>
233 </html>