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 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 /*
7 *
8 * Date: 28 Feb 2002
9 * SUMMARY: Testing that Error.stack distinguishes between:
10 *
11 * A) top-level calls: myFunc();
12 * B) no-name function calls: function() { myFunc();} ()
13 *
14 * The stack frame for A) should begin with '@'
15 * The stack frame for B) should begin with '()'
16 *
17 * This behavior was coded by Brendan during his fix for bug 127136.
18 * See http://bugzilla.mozilla.org/show_bug.cgi?id=127136#c13
19 *
20 * Note: our function getStackFrames(err) orders the array of stack frames
21 * so that the 0th element will correspond to the highest frame, i.e. will
22 * correspond to a line in top-level code. The 1st element will correspond
23 * to the function that is called first, and so on...
24 *
25 * NOTE: At present Rhino does not have an Error.stack property. It is an
26 * ECMA extension, see http://bugzilla.mozilla.org/show_bug.cgi?id=123177
27 */
28 //-----------------------------------------------------------------------------
29 var UBound = 0;
30 var BUGNUMBER = '(none)';
31 var summary = 'Testing Error.stack';
32 var status = '';
33 var statusitems = [];
34 var actual = '';
35 var actualvalues = [];
36 var expect= '';
37 var expectedvalues = [];
38 var myErr = '';
39 var stackFrames = '';
42 function A(x,y)
43 {
44 return B(x+1,y+1);
45 }
47 function B(x,z)
48 {
49 return C(x+1,z+1);
50 }
52 function C(x,y)
53 {
54 return D(x+1,y+1);
55 }
57 function D(x,z)
58 {
59 try
60 {
61 throw new Error('meep!');
62 }
63 catch (e)
64 {
65 return e;
66 }
67 }
70 myErr = A(44,13);
71 stackFrames = getStackFrames(myErr);
72 status = inSection(1);
73 actual = stackFrames[0].substring(0,1);
74 expect = '@';
75 addThis();
77 status = inSection(2);
78 actual = stackFrames[1].substring(0,2);
79 expect = 'A@';
80 addThis();
82 status = inSection(3);
83 actual = stackFrames[2].substring(0,2);
84 expect = 'B@';
85 addThis();
87 status = inSection(4);
88 actual = stackFrames[3].substring(0,2);
89 expect = 'C@';
90 addThis();
92 status = inSection(5);
93 actual = stackFrames[4].substring(0,2);
94 expect = 'D@';
95 addThis();
99 myErr = A('44:foo','13:bar');
100 stackFrames = getStackFrames(myErr);
101 status = inSection(6);
102 actual = stackFrames[0].substring(0,1);
103 expect = '@';
104 addThis();
106 status = inSection(7);
107 actual = stackFrames[1].substring(0,2);
108 expect = 'A@';
109 addThis();
111 status = inSection(8);
112 actual = stackFrames[2].substring(0,2);
113 expect = 'B@';
114 addThis();
116 status = inSection(9);
117 actual = stackFrames[3].substring(0,2);
118 expect = 'C@';
119 addThis();
121 status = inSection(10);
122 actual = stackFrames[4].substring(0,2);
123 expect = 'D@';;
124 addThis();
128 /*
129 * Make the first frame occur in a function with an empty name -
130 */
131 myErr = function() { return A(44,13); } ();
132 stackFrames = getStackFrames(myErr);
133 status = inSection(11);
134 actual = stackFrames[0].substring(0,1);
135 expect = '@';
136 addThis();
138 status = inSection(12);
139 actual = stackFrames[1].substring(0,7);
140 expect = 'myErr<@';
141 addThis();
143 status = inSection(13);
144 actual = stackFrames[2].substring(0,2);
145 expect = 'A@';
146 addThis();
148 // etc. for the rest of the frames as above
152 /*
153 * Make the first frame occur in a function with name 'anonymous' -
154 */
155 var f = Function('return A(44,13);');
156 myErr = f();
157 stackFrames = getStackFrames(myErr);
158 status = inSection(14);
159 actual = stackFrames[0].substring(0,1);
160 expect = '@';
161 addThis();
163 status = inSection(15);
164 actual = stackFrames[1].substring(0,10);
165 expect = 'anonymous@';
166 addThis();
168 status = inSection(16);
169 actual = stackFrames[2].substring(0,2);
170 expect = 'A@';
171 addThis();
173 // etc. for the rest of the frames as above
177 /*
178 * Make a user-defined error via the Error() function -
179 */
180 var message = 'Hi there!'; var fileName = 'file name'; var lineNumber = 0;
181 myErr = Error(message, fileName, lineNumber);
182 stackFrames = getStackFrames(myErr);
183 status = inSection(17);
184 actual = stackFrames[0].substring(0,1);
185 expect = '@';
186 addThis();
189 /*
190 * Now use the |new| keyword. Re-use the same params -
191 */
192 myErr = new Error(message, fileName, lineNumber);
193 stackFrames = getStackFrames(myErr);
194 status = inSection(18);
195 actual = stackFrames[0].substring(0,1);
196 expect = '@';
197 addThis();
202 //-----------------------------------------------------------------------------
203 test();
204 //-----------------------------------------------------------------------------
208 /*
209 * Split the string |err.stack| along its '\n' delimiter.
210 * As of 2002-02-28 |err.stack| ends with the delimiter, so
211 * the resulting array has an empty string as its last element.
212 *
213 * Pop that useless element off before doing anything.
214 * Then reverse the array, for convenience of indexing -
215 */
216 function getStackFrames(err)
217 {
218 var arr = err.stack.split('\n');
219 arr.pop();
220 return arr.reverse();
221 }
224 function addThis()
225 {
226 statusitems[UBound] = status;
227 actualvalues[UBound] = actual;
228 expectedvalues[UBound] = expect;
229 UBound++;
230 }
233 function test()
234 {
235 enterFunc('test');
236 printBugNumber(BUGNUMBER);
237 printStatus(summary);
239 for (var i=0; i<UBound; i++)
240 {
241 reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
242 }
244 exitFunc ('test');
245 }