Skip to content

Commit b41aac6

Browse files
authored
Reduce CookieListItem to only expose name and value
For whatwg/cookiestore#274.
1 parent 8c2c4f4 commit b41aac6

File tree

2 files changed

+230
-113
lines changed

2 files changed

+230
-113
lines changed
Lines changed: 29 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
// META: title=Cookie Store API: cookieListItem attributes
2-
// META: global=window,serviceworker
2+
// META: global=serviceworker
3+
4+
// This is a copy of cookieListItem_attributes.https.window.js, minus all the bits that only work
5+
// in a window context, which unfortunately includes the testdriver asserts.
6+
//
7+
// Please keep them synchronized.
38

49
'use strict';
510

6-
const kCurrentHostname = (new URL(self.location.href)).hostname;
11+
const currentHostname = (new URL(self.location.href)).hostname;
712

8-
const kOneDay = 24 * 60 * 60 * 1000;
9-
const kFourHundredDays = 400 * kOneDay;
10-
const kTenYears = 10 * 365 * kOneDay;
11-
const kFourHundredDaysFromNow = Date.now() + kFourHundredDays;
12-
const kTenYearsFromNow = Date.now() + kTenYears;
13+
const oneDayInSeconds = 24 * 60 * 60;
14+
const fourHundredDaysInSeconds = 400 * oneDayInSeconds;
15+
const tenYearsInSeconds = 10 * 365 * oneDayInSeconds;
16+
const fourHundredDaysFromNowInSeconds = Date.now() / 1000 + fourHundredDaysInSeconds;
17+
const tenYearsFromNowInSeconds = Date.now() / 1000 + tenYearsInSeconds;
1318

14-
const kCookieListItemKeys =
15-
['domain', 'expires', 'name', 'path', 'sameSite', 'secure', 'value'].sort();
19+
function assert_cookie_keys(cookie) {
20+
const cookieKeys = Object.keys(cookie);
21+
assert_array_equals(cookieKeys, ['name', 'value']);
22+
}
1623

1724
promise_test(async testCase => {
1825
await cookieStore.delete('cookie-name');
@@ -25,15 +32,7 @@ promise_test(async testCase => {
2532
const cookie = await cookieStore.get('cookie-name');
2633
assert_equals(cookie.name, 'cookie-name');
2734
assert_equals(cookie.value, 'cookie-value');
28-
assert_equals(cookie.domain, null);
29-
assert_equals(cookie.path, '/');
30-
assert_equals(cookie.expires, null);
31-
assert_equals(cookie.secure, true);
32-
assert_equals(cookie.sameSite, 'strict');
33-
const itemKeys = Object.keys(cookie);
34-
for (const key of kCookieListItemKeys) {
35-
assert_in_array(key, itemKeys);
36-
}
35+
assert_cookie_keys(cookie);
3736
}, 'CookieListItem - cookieStore.set defaults with positional name and value');
3837

3938
promise_test(async testCase => {
@@ -46,78 +45,51 @@ promise_test(async testCase => {
4645
const cookie = await cookieStore.get('cookie-name');
4746
assert_equals(cookie.name, 'cookie-name');
4847
assert_equals(cookie.value, 'cookie-value');
49-
assert_equals(cookie.domain, null);
50-
assert_equals(cookie.path, '/');
51-
assert_equals(cookie.expires, null);
52-
assert_equals(cookie.secure, true);
53-
assert_equals(cookie.sameSite, 'strict');
54-
const itemKeys = Object.keys(cookie);
55-
for (const key of kCookieListItemKeys) {
56-
assert_in_array(key, itemKeys);
57-
}
48+
assert_cookie_keys(cookie);
5849
}, 'CookieListItem - cookieStore.set defaults with name and value in options');
5950

6051
promise_test(async testCase => {
6152
await cookieStore.delete('cookie-name');
6253

6354
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
64-
expires: kTenYearsFromNow });
55+
expires: tenYearsFromNowInSeconds * 1000 });
6556
testCase.add_cleanup(async () => {
6657
await cookieStore.delete('cookie-name');
6758
});
6859
const cookie = await cookieStore.get('cookie-name');
6960
assert_equals(cookie.name, 'cookie-name');
7061
assert_equals(cookie.value, 'cookie-value');
71-
assert_equals(cookie.domain, null);
72-
assert_equals(cookie.path, '/');
73-
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
74-
assert_equals(cookie.secure, true);
75-
assert_equals(cookie.sameSite, 'strict');
76-
const itemKeys = Object.keys(cookie);
77-
for (const key of kCookieListItemKeys) {
78-
assert_in_array(key, itemKeys);
79-
}
62+
assert_cookie_keys(cookie);
8063
}, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' +
8164
'years in the future');
8265

8366
promise_test(async testCase => {
8467
await cookieStore.delete('cookie-name');
8568

8669
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
87-
expires: new Date(kTenYearsFromNow) });
70+
expires: new Date(tenYearsFromNowInSeconds) * 1000 });
8871
testCase.add_cleanup(async () => {
8972
await cookieStore.delete('cookie-name');
9073
});
9174
const cookie = await cookieStore.get('cookie-name');
9275
assert_equals(cookie.name, 'cookie-name');
9376
assert_equals(cookie.value, 'cookie-value');
94-
assert_equals(cookie.domain, null);
95-
assert_equals(cookie.path, '/');
96-
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
97-
assert_equals(cookie.secure, true);
77+
assert_cookie_keys(cookie);
9878
}, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' +
9979
'years in the future');
10080

10181
promise_test(async testCase => {
102-
await cookieStore.delete({ name: 'cookie-name', domain: kCurrentHostname });
82+
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
10383

10484
await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
105-
domain: kCurrentHostname });
85+
domain: currentHostname });
10686
testCase.add_cleanup(async () => {
107-
await cookieStore.delete({ name: 'cookie-name', domain: kCurrentHostname });
87+
await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
10888
});
10989
const cookie = await cookieStore.get('cookie-name');
11090
assert_equals(cookie.name, 'cookie-name');
11191
assert_equals(cookie.value, 'cookie-value');
112-
assert_equals(cookie.domain, kCurrentHostname);
113-
assert_equals(cookie.path, '/');
114-
assert_equals(cookie.expires, null);
115-
assert_equals(cookie.secure, true);
116-
assert_equals(cookie.sameSite, 'strict');
117-
const itemKeys = Object.keys(cookie);
118-
for (const key of kCookieListItemKeys) {
119-
assert_in_array(key, itemKeys);
120-
}
92+
assert_cookie_keys(cookie);
12193
}, 'CookieListItem - cookieStore.set with domain set to the current hostname');
12294

12395
promise_test(async testCase => {
@@ -135,15 +107,7 @@ promise_test(async testCase => {
135107
const cookie = await cookieStore.get('cookie-name');
136108
assert_equals(cookie.name, 'cookie-name');
137109
assert_equals(cookie.value, 'cookie-value');
138-
assert_equals(cookie.domain, null);
139-
assert_equals(cookie.path, currentDirectory);
140-
assert_equals(cookie.expires, null);
141-
assert_equals(cookie.secure, true);
142-
assert_equals(cookie.sameSite, 'strict');
143-
const itemKeys = Object.keys(cookie);
144-
for (const key of kCookieListItemKeys) {
145-
assert_in_array(key, itemKeys);
146-
}
110+
assert_cookie_keys(cookie);
147111
}, 'CookieListItem - cookieStore.set with path set to the current directory');
148112

149113
promise_test(async testCase => {
@@ -160,15 +124,7 @@ promise_test(async testCase => {
160124
const cookie = await cookieStore.get('cookie-name');
161125
assert_equals(cookie.name, 'cookie-name');
162126
assert_equals(cookie.value, 'cookie-value');
163-
assert_equals(cookie.domain, null);
164-
assert_equals(cookie.path, currentDirectory);
165-
assert_equals(cookie.expires, null);
166-
assert_equals(cookie.secure, true);
167-
assert_equals(cookie.sameSite, 'strict');
168-
const itemKeys = Object.keys(cookie);
169-
for (const key of kCookieListItemKeys) {
170-
assert_in_array(key, itemKeys);
171-
}
127+
assert_cookie_keys(cookie);
172128
}, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /');
173129

174130
['strict', 'lax', 'none'].forEach(sameSiteValue => {
@@ -183,47 +139,7 @@ promise_test(async testCase => {
183139
const cookie = await cookieStore.get('cookie-name');
184140
assert_equals(cookie.name, 'cookie-name');
185141
assert_equals(cookie.value, 'cookie-value');
186-
assert_equals(cookie.domain, null);
187-
assert_equals(cookie.path, '/');
188-
assert_equals(cookie.expires, null);
189-
assert_equals(cookie.secure, true);
190-
assert_equals(cookie.sameSite, sameSiteValue);
191-
const itemKeys = Object.keys(cookie);
192-
for (const key of kCookieListItemKeys) {
193-
assert_in_array(key, itemKeys);
194-
}
142+
assert_cookie_keys(cookie);
195143
}, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`);
196144

197145
});
198-
199-
promise_test(async testCase => {
200-
await cookieStore.delete('cookie-name');
201-
202-
await cookieStore.set('cookie-name', 'cookie-value');
203-
testCase.add_cleanup(async () => {
204-
await cookieStore.delete('cookie-name');
205-
});
206-
207-
const cookie = await cookieStore.get('cookie-name');
208-
assert_equals(cookie.secure, true);
209-
}, 'CookieListItem - secure defaults to true');
210-
211-
212-
if (self.GLOBAL.isWindow()) {
213-
promise_test(async testCase => {
214-
await cookieStore.delete('cookie-name');
215-
testCase.add_cleanup(async () => {
216-
await cookieStore.delete('cookie-name');
217-
});
218-
219-
let encodedCookie = encodeURIComponent(JSON.stringify("cookie-name=1; max-age=99999999999999999999999999999; path=/"));
220-
await fetch(`/cookies/resources/cookie.py?set=${encodedCookie}`);
221-
222-
assert_equals(document.cookie, "cookie-name=1", 'The cookie was set as expected.');
223-
224-
const cookie = await cookieStore.get('cookie-name');
225-
assert_equals(cookie.name, 'cookie-name');
226-
assert_equals(cookie.value, '1');
227-
assert_approx_equals(cookie.expires, kFourHundredDaysFromNow, kOneDay);
228-
}, "Test max-age attribute over the 400 days");
229-
}

0 commit comments

Comments
 (0)