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: 19 June 2003
9 * SUMMARY: Testing regexp submatches with quantifiers
10 *
11 * See http://bugzilla.mozilla.org/show_bug.cgi?id=209919
12 *
13 */
14 //-----------------------------------------------------------------------------
15 var i = 0;
16 var BUGNUMBER = 209919;
17 var summary = 'Testing regexp submatches with quantifiers';
18 var status = '';
19 var statusmessages = new Array();
20 var pattern = '';
21 var patterns = new Array();
22 var string = '';
23 var strings = new Array();
24 var actualmatch = '';
25 var actualmatches = new Array();
26 var expectedmatch = '';
27 var expectedmatches = new Array();
30 /*
31 * Waldemar: "ECMA-262 15.10.2.5, third algorithm, step 2.1 states that
32 * once the minimum repeat count (which is 0 for *, 1 for +, etc.) has
33 * been satisfied, an atom being repeated must not match the empty string."
34 *
35 * In this example, the minimum repeat count is 0, so the last thing the
36 * capturing parens is permitted to contain is the 'a'. It may NOT go on
37 * to capture the '' at the $ position of 'a', even though '' satifies
38 * the condition b*
39 *
40 */
41 status = inSection(1);
42 string = 'a';
43 pattern = /(a|b*)*/;
44 actualmatch = string.match(pattern);
45 expectedmatch = Array(string, 'a');
46 addThis();
49 /*
50 * In this example, the minimum repeat count is 5, so the capturing parens
51 * captures the 'a', then goes on to capture the '' at the $ position of 'a'
52 * 4 times before it has to stop. Therefore the last thing it contains is ''.
53 */
54 status = inSection(2);
55 string = 'a';
56 pattern = /(a|b*){5,}/;
57 actualmatch = string.match(pattern);
58 expectedmatch = Array(string, '');
59 addThis();
62 /*
63 * Reduction of the above examples to contain only the condition b*
64 * inside the capturing parens. This can be even harder to grasp!
65 *
66 * The global match is the '' at the ^ position of 'a', but the parens
67 * is NOT permitted to capture it since the minimum repeat count is 0!
68 */
69 status = inSection(3);
70 string = 'a';
71 pattern = /(b*)*/;
72 actualmatch = string.match(pattern);
73 expectedmatch = Array('', undefined);
74 addThis();
77 /*
78 * Here we have used the + quantifier (repeat count 1) outside the parens.
79 * Therefore the parens must capture at least once before stopping, so it
80 * does capture the '' this time -
81 */
82 status = inSection(4);
83 string = 'a';
84 pattern = /(b*)+/;
85 actualmatch = string.match(pattern);
86 expectedmatch = Array('', '');
87 addThis();
90 /*
91 * More complex examples -
92 */
93 pattern = /^\-?(\d{1,}|\.{0,})*(\,\d{1,})?$/;
95 status = inSection(5);
96 string = '100.00';
97 actualmatch = string.match(pattern);
98 expectedmatch = Array(string, '00', undefined);
99 addThis();
101 status = inSection(6);
102 string = '100,00';
103 actualmatch = string.match(pattern);
104 expectedmatch = Array(string, '100', ',00');
105 addThis();
107 status = inSection(7);
108 string = '1.000,00';
109 actualmatch = string.match(pattern);
110 expectedmatch = Array(string, '000', ',00');
111 addThis();
116 //-----------------------------------------------------------------------------
117 test();
118 //-----------------------------------------------------------------------------
122 function addThis()
123 {
124 statusmessages[i] = status;
125 patterns[i] = pattern;
126 strings[i] = string;
127 actualmatches[i] = actualmatch;
128 expectedmatches[i] = expectedmatch;
129 i++;
130 }
133 function test()
134 {
135 enterFunc ('test');
136 printBugNumber(BUGNUMBER);
137 printStatus (summary);
138 testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
139 exitFunc ('test');
140 }