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/licenses/publicdomain/
4 //-----------------------------------------------------------------------------
5 var BUGNUMBER = 514568;
6 var summary = "eval in all its myriad flavors";
8 print(BUGNUMBER + ": " + summary);
10 /**************
11 * BEGIN TEST *
12 **************/
14 var x = 17;
15 function globalX() { return x; }
16 var y = 42;
17 function globalY() { return y; }
19 var ev = eval;
21 function testX()
22 {
23 var x = 2;
24 var xcode =
25 "var x = 4;" +
26 "function actX(action)" +
27 "{" +
28 " switch (action)" +
29 " {" +
30 " case 'get':" +
31 " return x;" +
32 " case 'set1':" +
33 " x = 9;" +
34 " return;" +
35 " case 'set2':" +
36 " x = 23;" +
37 " return;" +
38 " case 'delete':" +
39 " try { return eval('delete x'); }" +
40 " catch (e) { return e.name; }" +
41 " }" +
42 "}" +
43 "actX;";
45 var local0 = x;
46 var global0 = globalX();
48 var f = eval(xcode);
50 var inner1 = f("get");
51 var local1 = x;
52 var global1 = globalX();
54 x = 7;
55 var inner2 = f("get");
56 var local2 = x;
57 var global2 = globalX();
59 f("set1");
60 var inner3 = f("get");
61 var local3 = x;
62 var global3 = globalX();
64 var del = f("delete");
65 var inner4 = f("get");
66 var local4 = x;
67 var global4 = globalX();
69 f("set2");
70 var inner5 = f("get");
71 var local5 = x;
72 var global5 = globalX();
74 return {
75 local0: local0, global0: global0,
76 inner1: inner1, local1: local1, global1: global1,
77 inner2: inner2, local2: local2, global2: global2,
78 inner3: inner3, local3: local3, global3: global3,
79 del: del,
80 inner4: inner4, local4: local4, global4: global4,
81 inner5: inner5, local5: local5, global5: global5,
82 };
83 }
85 var resultsX = testX();
87 assertEq(resultsX.local0, 2);
88 assertEq(resultsX.global0, 17);
90 assertEq(resultsX.inner1, 4);
91 assertEq(resultsX.local1, 4);
92 assertEq(resultsX.global1, 17);
94 assertEq(resultsX.inner2, 7);
95 assertEq(resultsX.local2, 7);
96 assertEq(resultsX.global2, 17);
98 assertEq(resultsX.inner3, 9);
99 assertEq(resultsX.local3, 9);
100 assertEq(resultsX.global3, 17);
102 assertEq(resultsX.del, false);
104 assertEq(resultsX.inner4, 9);
105 assertEq(resultsX.local4, 9);
106 assertEq(resultsX.global4, 17);
108 assertEq(resultsX.inner5, 23);
109 assertEq(resultsX.local5, 23);
110 assertEq(resultsX.global5, 17);
113 function testY()
114 {
115 var ycode =
116 "var y = 5;" +
117 "function actY(action)" +
118 "{" +
119 " switch (action)" +
120 " {" +
121 " case 'get':" +
122 " return y;" +
123 " case 'set1':" +
124 " y = 2;" +
125 " return;" +
126 " case 'set2':" +
127 " y = 71;" +
128 " return;" +
129 " case 'delete':" +
130 " try { return eval('delete y'); }" +
131 " catch (e) { return e.name; }" +
132 " }" +
133 "}" +
134 "actY;";
136 var local0 = y;
137 var global0 = globalY();
139 var f = eval(ycode);
141 var inner1 = f("get");
142 var local1 = y;
143 var global1 = globalY();
145 y = 8;
146 var inner2 = f("get");
147 var local2 = y;
148 var global2 = globalY();
150 f("set1");
151 var inner3 = f("get");
152 var local3 = y;
153 var global3 = globalY();
155 var del = f("delete");
156 var inner4 = f("get");
157 var local4 = y;
158 var global4 = globalY();
160 f("set2");
161 var inner5 = f("get");
162 var local5 = y;
163 var global5 = globalY();
165 return {
166 local0: local0, global0: global0,
167 inner1: inner1, local1: local1, global1: global1,
168 inner2: inner2, local2: local2, global2: global2,
169 inner3: inner3, local3: local3, global3: global3,
170 del: del,
171 inner4: inner4, local4: local4, global4: global4,
172 inner5: inner5, local5: local5, global5: global5,
173 };
174 }
176 var resultsY = testY();
178 assertEq(resultsY.local0, 42);
179 assertEq(resultsY.global0, 42);
181 assertEq(resultsY.inner1, 5);
182 assertEq(resultsY.local1, 5);
183 assertEq(resultsY.global1, 42);
185 assertEq(resultsY.inner2, 8);
186 assertEq(resultsY.local2, 8);
187 assertEq(resultsY.global2, 42);
189 assertEq(resultsY.inner3, 2);
190 assertEq(resultsY.local3, 2);
191 assertEq(resultsY.global3, 42);
193 assertEq(resultsY.del, true);
195 assertEq(resultsY.inner4, 42);
196 assertEq(resultsY.local4, 42);
197 assertEq(resultsY.global4, 42);
199 assertEq(resultsY.inner5, 71);
200 assertEq(resultsY.local5, 71);
201 assertEq(resultsY.global5, 71);
203 /******************************************************************************/
205 if (typeof reportCompare === "function")
206 reportCompare(true, true);
208 print("Tests complete!");