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_HEAD_JS = 'mmdb_head.js';
7 const DBNAME = "test_mmdb_full_storage:" + newUUID();
9 let gIsDiskFull = true;
11 function newSavableMessage() {
12 return {
13 type: "sms",
14 sender: "+0987654321",
15 receiver: "+1234567890",
16 body: "quick fox jump over the lazy dog",
17 deliveryStatusRequested: false,
18 messageClass: "normal",
19 timestamp: Date.now(),
20 iccId: "1029384756"
21 };
22 }
24 function isFileNoDeviceSpaceError(aErrorResult) {
25 is(aErrorResult, Cr.NS_ERROR_FILE_NO_DEVICE_SPACE, "Database error code");
26 }
28 function isCallbackStorageFullError(aErrorCode) {
29 is(aErrorCode, Ci.nsIMobileMessageCallback.STORAGE_FULL_ERROR,
30 "nsIMobileMessageCallback error code");
31 }
33 function testSaveSendingMessage(aMmdb) {
34 log("testSaveSendingMessage()");
36 gIsDiskFull = true;
37 return saveSendingMessage(aMmdb, newSavableMessage())
38 // Resolved/rejected results are both [<Cr.NS_ERROR_FOO>, <DOM message>],
39 // and we need only the error code in both cases.
40 .then((aValue) => aValue[0],
41 (aValue) => aValue[0])
42 .then(isFileNoDeviceSpaceError);
43 }
45 function testSaveReceivedMessage(aMmdb) {
46 log("testSaveReceivedMessage()");
48 gIsDiskFull = true;
49 return saveReceivedMessage(aMmdb, newSavableMessage())
50 // Resolved/rejected results are both [<Cr.NS_ERROR_FOO>, <DOM message>],
51 // and we need only the error code in both cases.
52 .then((aValue) => aValue[0],
53 (aValue) => aValue[0])
54 .then(isFileNoDeviceSpaceError);
55 }
57 function testGetMessageRecordById(aMmdb) {
58 log("testGetMessageRecordById()");
60 gIsDiskFull = false;
61 return saveReceivedMessage(aMmdb, newSavableMessage())
62 // Resolved result is [<Cr.NS_ERROR_FOO>, <DOM message>],
63 .then(function(aValue) {
64 let domMessage = aValue[1];
66 gIsDiskFull = true;
67 return getMessageRecordById(aMmdb, domMessage.id);
68 });
69 }
71 function testMarkMessageRead(aMmdb) {
72 log("testMarkMessageRead()");
74 gIsDiskFull = false;
75 return saveReceivedMessage(aMmdb, newSavableMessage())
76 // Resolved/rejected results are both [<Cr.NS_ERROR_FOO>, <DOM message>].
77 .then(function(aValue) {
78 let domMessage = aValue[1];
80 gIsDiskFull = true;
81 return markMessageRead(aMmdb, domMessage.id, true)
82 .then(null, (aValue) => aValue)
83 .then(isCallbackStorageFullError);
84 });
85 }
87 function testCreateMessageCursor(aMmdb) {
88 log("testCreateMessageCursor()");
90 gIsDiskFull = true;
91 return createMessageCursor(aMmdb, {}, false);
92 }
94 function testCreateThreadCursor(aMmdb) {
95 log("testCreateThreadCursor()");
97 gIsDiskFull = true;
98 return createThreadCursor(aMmdb);
99 }
101 startTestBase(function testCaseMain() {
103 let mmdb = newMobileMessageDB();
104 return initMobileMessageDB(mmdb, DBNAME, 0)
105 .then(function() {
106 mmdb.isDiskFull = function() {
107 return gIsDiskFull;
108 };
109 })
111 .then(() => testSaveSendingMessage(mmdb))
112 .then(() => testSaveReceivedMessage(mmdb))
113 .then(() => testGetMessageRecordById(mmdb))
114 .then(() => testMarkMessageRead(mmdb))
115 .then(() => testCreateMessageCursor(mmdb))
116 .then(() => testCreateThreadCursor(mmdb))
118 .then(() => closeMobileMessageDB(mmdb));
119 });