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;
16 var ev = eval;
18 var xcode =
19 "var x = 4;" +
20 "function actX(action)" +
21 "{" +
22 " switch (action)" +
23 " {" +
24 " case 'get':" +
25 " return x;" +
26 " case 'set1':" +
27 " x = 9;" +
28 " return;" +
29 " case 'set2':" +
30 " x = 23;" +
31 " return;" +
32 " case 'delete':" +
33 " try { return eval('delete x'); }" +
34 " catch (e) { return e.name; }" +
35 " }" +
36 "}" +
37 "actX;";
39 var local0 = x;
41 var f = ev(xcode);
43 var inner1 = f("get");
44 var local1 = x;
46 x = 7;
47 var inner2 = f("get");
48 var local2 = x;
50 f("set1");
51 var inner3 = f("get");
52 var local3 = x;
54 var del = f("delete");
55 var inner4 = f("get");
56 var local4 = x;
58 f("set2");
59 var inner5 = f("get");
60 var local5 = x;
62 var resultsX =
63 {
64 local0: local0,
65 inner1: inner1, local1: local1,
66 inner2: inner2, local2: local2,
67 inner3: inner3, local3: local3,
68 del: del,
69 inner4: inner4, local4: local4,
70 inner5: inner5, local5: local5,
71 };
73 assertEq(resultsX.local0, 17);
75 assertEq(resultsX.inner1, 4);
76 assertEq(resultsX.local1, 4);
78 assertEq(resultsX.inner2, 7);
79 assertEq(resultsX.local2, 7);
81 assertEq(resultsX.inner3, 9);
82 assertEq(resultsX.local3, 9);
84 assertEq(resultsX.del, false);
86 assertEq(resultsX.inner4, 9);
87 assertEq(resultsX.local4, 9);
89 assertEq(resultsX.inner5, 23);
90 assertEq(resultsX.local5, 23);
93 var ycode =
94 "var y = 5;" +
95 "function actY(action)" +
96 "{" +
97 " switch (action)" +
98 " {" +
99 " case 'get':" +
100 " return y;" +
101 " case 'set1':" +
102 " y = 2;" +
103 " return;" +
104 " case 'set2':" +
105 " y = 71;" +
106 " return;" +
107 " case 'delete':" +
108 " try { return eval('delete y'); }" +
109 " catch (e) { return e.name; }" +
110 " }" +
111 "}" +
112 "actY;";
114 try { var local0 = y; } catch (e) { local0 = e.name; }
116 var f = ev(ycode);
118 var inner1 = f("get");
119 var local1 = y;
121 y = 8;
122 var inner2 = f("get");
123 var local2 = y;
125 f("set1");
126 var inner3 = f("get");
127 var local3 = y;
129 var del = f("delete");
130 try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
131 try { var local4 = y; } catch (e) { local4 = e.name; }
133 f("set2");
134 try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
135 try { var local5 = y; } catch (e) { local5 = e.name; }
137 var resultsY =
138 {
139 local0: local0,
140 inner1: inner1, local1: local1,
141 inner2: inner2, local2: local2,
142 inner3: inner3, local3: local3,
143 del: del,
144 inner4: inner4, local4: local4,
145 inner5: inner5, local5: local5,
146 };
148 assertEq(resultsY.local0, "ReferenceError");
150 assertEq(resultsY.inner1, 5);
151 assertEq(resultsY.local1, 5);
153 assertEq(resultsY.inner2, 8);
154 assertEq(resultsY.local2, 8);
156 assertEq(resultsY.inner3, 2);
157 assertEq(resultsY.local3, 2);
159 assertEq(resultsY.del, true);
161 assertEq(resultsY.inner4, "ReferenceError");
162 assertEq(resultsY.local4, "ReferenceError");
164 assertEq(resultsY.inner5, 71);
165 assertEq(resultsY.local5, 71);
167 /******************************************************************************/
169 if (typeof reportCompare === "function")
170 reportCompare(true, true);
172 print("Tests complete!");