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 // test dense -> slow array transitions during the recording and on trace
2 // for various array functions and property accessors
4 function test_set_elem() {
6 function f() {
7 var bag = [];
8 for (var i = 0; i != 100; ++i) {
9 var a = [0];
10 a[100*100] = i;
11 bag.push(a);
12 }
14 for (var i = 0; i != 100; ++i) {
15 var a = [0];
16 a[200 + i] = i;
17 bag.push(a);
18 }
19 return bag;
20 }
22 var bag = f();
24 for (var i = 0; i != 100; ++i) {
25 var a = bag[i];
26 assertEq(a.length, 100 * 100 + 1);
27 assertEq(a[100*100], i);
28 assertEq(a[0], 0);
29 assertEq(1 + i in a, false);
30 }
32 for (var i = 0; i != 100; ++i) {
33 var a = bag[100 + i];
34 assertEq(a.length, 200 + i + 1);
35 assertEq(a[200 + i], i);
36 assertEq(a[0], 0);
37 assertEq(1 + i in a, false);
38 }
39 }
41 function test_reverse() {
43 function prepare_arays() {
44 var bag = [];
45 var base_index = 245;
46 for (var i = 0; i != 50; ++i) {
47 var a = [1, 2, 3, 4, 5];
48 a.length = i + base_index;
49 bag.push(a);
50 }
51 return bag;
52 }
54 function test(bag) {
55 for (var i = 0; i != bag.length; ++i) {
56 var a = bag[i];
57 a.reverse();
58 a[0] = 1;
59 }
60 }
62 var bag = prepare_arays();
63 test(bag);
64 for (var i = 0; i != bag.length; ++i) {
65 var a = bag[i];
66 assertEq(a[0], 1);
67 for (var j = 1; j <= 5; ++j) {
68 assertEq(a[a.length - j], j);
69 }
70 for (var j = 1; j < a.length - 5; ++j) {
71 assertEq(j in a, false);
72 }
73 }
75 }
77 function test_push() {
79 function prepare_arays() {
80 var bag = [];
81 var base_index = 245;
82 for (var i = 0; i != 50; ++i) {
83 var a = [0];
84 a.length = i + base_index;
85 bag.push(a);
86 }
87 return bag;
88 }
90 function test(bag) {
91 for (var i = 0; i != bag.length; ++i) {
92 var a = bag[i];
93 a.push(2);
94 a[0] = 1;
95 }
96 }
98 var bag = prepare_arays();
99 test(bag);
100 for (var i = 0; i != bag.length; ++i) {
101 var a = bag[i];
102 assertEq(a[0], 1);
103 assertEq(a[a.length - 1], 2);
104 for (var j = 1; j < a.length - 1; ++j) {
105 assertEq(j in a, false);
106 }
107 }
108 }
110 function test_unshift() {
112 function prepare_arays() {
113 var bag = [];
114 var base_index = 245;
115 for (var i = 0; i != 50; ++i) {
116 var a = [0];
117 a.length = i + base_index;
118 bag.push(a);
119 }
120 return bag;
121 }
123 function test(bag) {
124 for (var i = 0; i != bag.length; ++i) {
125 var a = bag[i];
126 a.unshift(1);
127 a[2] = 2;
128 }
129 }
131 var bag = prepare_arays();
132 test(bag);
133 for (var i = 0; i != bag.length; ++i) {
134 var a = bag[i];
135 assertEq(a[0], 1);
136 assertEq(a[1], 0);
137 assertEq(a[2], 2);
138 for (var j = 3; j < a.length; ++j) {
139 assertEq(j in a, false);
140 }
141 }
142 }
144 function test_splice() {
146 function prepare_arays() {
147 var bag = [];
148 var base_index = 245;
149 for (var i = 0; i != 50; ++i) {
150 var a = [1, 2];
151 a.length = i + base_index;
152 bag.push(a);
153 }
154 return bag;
155 }
157 function test(bag) {
158 for (var i = 0; i != bag.length; ++i) {
159 var a = bag[i];
160 a.splice(1, 0, "a", "b", "c");
161 a[2] = 100;
162 }
163 }
165 var bag = prepare_arays();
166 test(bag);
167 for (var i = 0; i != bag.length; ++i) {
168 var a = bag[i];
169 assertEq(a[0], 1);
170 assertEq(a[1], "a");
171 assertEq(a[2], 100);
172 assertEq(a[3], "c");
173 assertEq(a[4], 2);
174 for (var j = 5; j < a.length; ++j) {
175 assertEq(j in a, false);
176 }
177 }
178 }
180 test_set_elem();
181 test_reverse();
182 test_push();
183 test_unshift();
184 test_splice();