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 * Date: 22 June 2001
8 *
9 * SUMMARY: Regression test for Bugzilla bug 87231:
10 * "Regular expression /(A)?(A.*)/ picks 'A' twice"
11 *
12 * See http://bugzilla.mozilla.org/show_bug.cgi?id=87231
13 * Key case:
14 *
15 * pattern = /^(A)?(A.*)$/;
16 * string = 'A';
17 * expectedmatch = Array('A', '', 'A');
18 *
19 *
20 * We expect the 1st subexpression (A)? NOT to consume the single 'A'.
21 * Recall that "?" means "match 0 or 1 times". Here, it should NOT do
22 * greedy matching: it should match 0 times instead of 1. This allows
23 * the 2nd subexpression to make the only match it can: the single 'A'.
24 * Such "altruism" is the only way there can be a successful global match...
25 */
26 //-----------------------------------------------------------------------------
27 var i = 0;
28 var BUGNUMBER = 87231;
29 var cnEmptyString = '';
30 var summary = 'Testing regular expression /(A)?(A.*)/';
31 var status = '';
32 var statusmessages = new Array();
33 var pattern = '';
34 var patterns = new Array();
35 var string = '';
36 var strings = new Array();
37 var actualmatch = '';
38 var actualmatches = new Array();
39 var expectedmatch = '';
40 var expectedmatches = new Array();
43 pattern = /^(A)?(A.*)$/;
44 status = inSection(1);
45 string = 'AAA';
46 actualmatch = string.match(pattern);
47 expectedmatch = Array('AAA', 'A', 'AA');
48 addThis();
50 status = inSection(2);
51 string = 'AA';
52 actualmatch = string.match(pattern);
53 expectedmatch = Array('AA', 'A', 'A');
54 addThis();
56 status = inSection(3);
57 string = 'A';
58 actualmatch = string.match(pattern);
59 expectedmatch = Array('A', undefined, 'A'); // 'altruistic' case: see above
60 addThis();
63 pattern = /(A)?(A.*)/;
64 var strL = 'zxcasd;fl\\\ ^';
65 var strR = 'aaAAaaaf;lrlrzs';
67 status = inSection(4);
68 string = strL + 'AAA' + strR;
69 actualmatch = string.match(pattern);
70 expectedmatch = Array('AAA' + strR, 'A', 'AA' + strR);
71 addThis();
73 status = inSection(5);
74 string = strL + 'AA' + strR;
75 actualmatch = string.match(pattern);
76 expectedmatch = Array('AA' + strR, 'A', 'A' + strR);
77 addThis();
79 status = inSection(6);
80 string = strL + 'A' + strR;
81 actualmatch = string.match(pattern);
82 expectedmatch = Array('A' + strR, undefined, 'A' + strR); // 'altruistic' case: see above
83 addThis();
87 //-------------------------------------------------------------------------------------------------
88 test();
89 //-------------------------------------------------------------------------------------------------
93 function addThis()
94 {
95 statusmessages[i] = status;
96 patterns[i] = pattern;
97 strings[i] = string;
98 actualmatches[i] = actualmatch;
99 expectedmatches[i] = expectedmatch;
100 i++;
101 }
104 function test()
105 {
106 enterFunc ('test');
107 printBugNumber(BUGNUMBER);
108 printStatus (summary);
109 testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches);
110 exitFunc ('test');
111 }