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 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 const Ci = Components.interfaces;
6 const Cr = Components.results;
7 const Cc = Components.classes;
8 const CC = Components.Constructor;
10 var MutableArray = CC("@mozilla.org/array;1", "nsIMutableArray");
11 var SupportsString = CC("@mozilla.org/supports-string;1", "nsISupportsString");
13 function create_n_element_array(n)
14 {
15 var arr = new MutableArray();
16 for (let i=0; i<n; i++) {
17 let str = new SupportsString();
18 str.data = "element " + i;
19 arr.appendElement(str, false);
20 }
21 return arr;
22 }
24 function test_appending_null_actually_inserts()
25 {
26 var arr = new MutableArray();
27 do_check_eq(0, arr.length);
28 arr.appendElement(null, false);
29 do_check_eq(1, arr.length);
30 }
32 function test_object_gets_appended()
33 {
34 var arr = new MutableArray();
35 var str = new SupportsString();
36 str.data = "hello";
37 arr.appendElement(str, false);
38 do_check_eq(1, arr.length);
39 var obj = arr.queryElementAt(0, Ci.nsISupportsString);
40 do_check_eq(str, obj);
41 }
43 function test_insert_at_beginning()
44 {
45 var arr = create_n_element_array(5);
46 // just a sanity check
47 do_check_eq(5, arr.length);
48 var str = new SupportsString();
49 str.data = "hello";
50 arr.insertElementAt(str, 0, false);
51 do_check_eq(6, arr.length);
52 var obj = arr.queryElementAt(0, Ci.nsISupportsString);
53 do_check_eq(str, obj);
54 // check the data of all the other objects
55 for (let i=1; i<arr.length; i++) {
56 let obj = arr.queryElementAt(i, Ci.nsISupportsString);
57 do_check_eq("element " + (i-1), obj.data);
58 }
59 }
61 function test_replace_element()
62 {
63 var arr = create_n_element_array(5);
64 // just a sanity check
65 do_check_eq(5, arr.length);
66 var str = new SupportsString();
67 str.data = "hello";
68 // replace first element
69 arr.replaceElementAt(str, 0, false);
70 do_check_eq(5, arr.length);
71 var obj = arr.queryElementAt(0, Ci.nsISupportsString);
72 do_check_eq(str, obj);
73 // replace last element
74 arr.replaceElementAt(str, arr.length - 1, false);
75 do_check_eq(5, arr.length);
76 obj = arr.queryElementAt(arr.length - 1, Ci.nsISupportsString);
77 do_check_eq(str, obj);
78 // replace after last element, should insert empty elements
79 arr.replaceElementAt(str, 9, false);
80 do_check_eq(10, arr.length);
81 obj = arr.queryElementAt(9, Ci.nsISupportsString);
82 do_check_eq(str, obj);
83 // AFAIK there's no way to check the empty elements, since you can't QI them.
84 }
86 function test_clear()
87 {
88 var arr = create_n_element_array(5);
89 // just a sanity check
90 do_check_eq(5, arr.length);
91 arr.clear();
92 do_check_eq(0, arr.length);
93 }
95 function test_enumerate()
96 {
97 var arr = create_n_element_array(5);
98 do_check_eq(5, arr.length);
99 var en = arr.enumerate();
100 var i = 0;
101 while (en.hasMoreElements()) {
102 let str = en.getNext();
103 do_check_true(str instanceof Ci.nsISupportsString);
104 do_check_eq(str.data, "element " + i);
105 i++;
106 }
107 do_check_eq(arr.length, i);
108 }
110 var tests = [
111 test_appending_null_actually_inserts,
112 test_object_gets_appended,
113 test_insert_at_beginning,
114 test_replace_element,
115 test_clear,
116 test_enumerate,
117 ];
119 function run_test() {
120 for (var i = 0; i < tests.length; i++)
121 tests[i]();
122 }