Commit f60afee8 authored by Joshua Bell's avatar Joshua Bell Committed by Commit Bot

Cookie Store: Consolidate WPT coverage for special prefixed cookies

Merge two sets of tests that cover __Secure- and __Host- prefixed
cookies in the API. Tests cover secure and non-secure contexts,
getting, setting, deleting, and setting already-expired cookies.

Bug: 729800
Change-Id: Ie7e84eeda03ba8192f5062cbf5240ff8ab13816a
Reviewed-on: https://chromium-review.googlesource.com/994174
Commit-Queue: Joshua Bell <jsbell@chromium.org>
Reviewed-by: default avatarVictor Costan <pwnall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548562}
parent 9e79cf0c
<!doctype html>
<meta charset="utf-8">
<title>Async Cookies: cookieStore handles special cookie names correctly</title>
<title>Cookie Store: cookieStore handles special cookie names correctly</title>
<link rel="help" href="https://github.com/WICG/cookie-store">
<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
<script src="/resources/testharness.js"></script>
......@@ -8,28 +8,64 @@
<script>
'use strict';
promise_test(async testCase => {
await promise_rejects(testCase, new TypeError(), cookieStore.set(
'__Secure-cookie-name', 'secure-cookie-value'));
['__Secure-', '__Host-'].forEach(prefix => {
promise_test(async testCase => {
await promise_rejects(
testCase, new TypeError(),
cookieStore.set(`${prefix}cookie-name`, `secure-cookie-value`),
`Setting ${prefix} cookies should fail in non-secure contexts`);
try { await cookieStore.delete('__Secure-cookie-name'); } catch (e) {}
}, 'cookieStore.set with __Secure- name on insecure origin');
try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {}
}, `cookieStore.set with ${prefix} name on non-secure origin`);
promise_test(async testCase => {
await promise_rejects(testCase, new TypeError(), cookieStore.set(
'__Host-cookie-name', 'host-cookie-value'));
promise_test(async testCase => {
await promise_rejects(
testCase, new TypeError(),
cookieStore.set(
`${prefix}cookie-name`, `secure-cookie-value`, {
expires: Date.now()
}),
`Setting expired ${prefix} cookies should fail in non-secure contexts`);
try { await cookieStore.delete('__Host-cookie-name'); } catch (e) {}
}, 'cookieStore.set with __Host- name on insecure origin');
try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {}
}, `cookieStore.set of expired ${prefix} cookie on non-secure origin`);
promise_test(async testCase => {
await promise_rejects(testCase, new TypeError(), cookieStore.delete(
'__Secure-cookie-name', 'secure-cookie-value'));
}, 'cookieStore.delete with __Secure- name on insecure origin');
promise_test(async testCase => {
assert_equals(
await cookieStore.get(`${prefix}cookie-name`),
null,
'get with ${prefix} prefix should not reject');
assert_equals(
await cookieStore.get({name: `${prefix}cookie-name`}),
null,
'get with ${prefix} prefix name option should not reject');
assert_equals(
await cookieStore.get({name: prefix, matchType: 'startsWith'}),
null,
'get with ${prefix} name and startsWith options should not reject');
}, `cookieStore.get with ${prefix} name on non-secure origin`);
promise_test(async testCase => {
await promise_rejects(testCase, new TypeError(), cookieStore.delete(
'__Host-cookie-name', 'host-cookie-value'));
}, 'cookieStore.delete with __Host- name on insecure origin');
promise_test(async testCase => {
assert_array_equals(
await cookieStore.getAll(`${prefix}cookie-name`),
[],
'getAll with ${prefix} prefix should not reject');
assert_array_equals(
await cookieStore.getAll({name: `${prefix}cookie-name`}),
[],
'getAll with ${prefix} prefix name option should not reject');
assert_array_equals(
await cookieStore.getAll({name: prefix, matchType: 'startsWith'}),
[],
'getAll with ${prefix} name and startsWith options should not reject');
}, `cookieStore.getAll with ${prefix} name on non-secure origin`);
promise_test(async testCase => {
await promise_rejects(
testCase, new TypeError(),
cookieStore.delete(`${prefix}cookie-name`, `host-cookie-value`),
`Deleting ${prefix} cookies should fail in non-secure contexts`);
}, `cookieStore.delete with ${prefix} name on non-secure origin`);
});
</script>
<!doctype html>
<meta charset="utf-8">
<title>Cookie Store: cookieStore handles special cookie names correctly (secure context)</title>
<link rel="help" href="https://github.com/WICG/cookie-store">
<link rel="author" href="pwnall@chromium.org" title="Victor Costan">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';
['__Secure-', '__Host-'].forEach(prefix => {
promise_test(async testCase => {
await cookieStore.set(`${prefix}cookie-name`, `secure-cookie-value`);
assert_equals(
(await cookieStore.get(`${prefix}cookie-name`)).value,
'secure-cookie-value',
`Setting ${prefix} cookies should not fail in secure context`);
try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {}
}, `cookieStore.set with ${prefix} name on secure origin`);
promise_test(async testCase => {
await cookieStore.set(
`${prefix}cookie-name`, `secure-cookie-value`, {
expires: Date.now()
});
assert_equals(await cookieStore.get(`${prefix}cookie-name`), null);
try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {}
}, `cookieStore.set of expired ${prefix} cookie name on secure origin`);
promise_test(async testCase => {
assert_equals(
await cookieStore.delete(`${prefix}cookie-name`), undefined,
`Deleting ${prefix} cookies should not fail in secure context`);
}, `cookieStore.delete with ${prefix} name on secure origin`);
});
</script>
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async Cookies: One simple origin cookie</title>
<meta name="help" href="https://github.com/WICG/cookie-store/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/cookie-test-helpers.js"></script>
<script src="resources/one_simple_origin_cookie.js"></script>
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async Cookies: One simple origin cookie (HTTPS)</title>
<meta name="help" href="https://github.com/WICG/cookie-store/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/cookie-test-helpers.js"></script>
<script src="resources/one_simple_origin_cookie.js"></script>
'use strict';
// Helper to verify first-of-name get using async/await.
//
// Returns the first script-visible value of the __Host-COOKIENAME cookie or
// undefined if no matching cookies are script-visible.
async function getOneSimpleOriginCookie() {
let cookie = await cookieStore.get('__Host-COOKIENAME');
if (!cookie) return undefined;
return cookie.value;
}
// Returns the number of script-visible cookies whose names start with
// __Host-COOKIEN
async function countMatchingSimpleOriginCookies() {
let cookieList = await cookieStore.getAll({
name: '__Host-COOKIEN',
matchType: 'startsWith'
});
return cookieList.length;
}
// Set the secure implicit-domain cookie __Host-COOKIENAME with value
// cookie-value on path / and session duration.
async function setOneSimpleOriginSessionCookie() {
await cookieStore.set('__Host-COOKIENAME', 'cookie-value');
};
cookie_test(async testCase => {
await promise_rejects_when_unsecured(
testCase,
new TypeError(),
setOneSimpleOriginSessionCookie(),
'__Host- prefix only writable from secure contexts');
if (!kIsUnsecured) {
assert_equals(
await getOneSimpleOriginCookie(),
'cookie-value',
'__Host-COOKIENAME cookie should be found in a secure context');
} else {
assert_equals(
await getOneSimpleOriginCookie(),
undefined,
'__Host-COOKIENAME cookie should not be found in an unsecured context');
}
if (kIsUnsecured) {
assert_equals(
await countMatchingSimpleOriginCookies(),
0,
'No __Host-COOKIEN* cookies should be found in an unsecured context');
} else {
assert_equals(
await countMatchingSimpleOriginCookies(),
1,
'One __Host-COOKIEN* cookie should be found in a secure context');
}
}, 'One simple origin cookie');
cookie_test(async t => {
const theVeryRecentPast = Date.now();
const expiredCookieSentinelValue = 'EXPIRED';
await promise_rejects_when_unsecured(
t,
new TypeError(),
cookieStore.set('__Secure-COOKIENAME', expiredCookieSentinelValue, {
path: kPath,
expires: theVeryRecentPast,
secure: true,
domain: location.hostname
}),
'Secure cookies only writable from secure contexts');
}, 'Set an already-expired secure cookie');
['__Host-', '__Secure-'].forEach(prefix => {
cookie_test(async t => {
const name = prefix + 'COOKIENAME';
const value = 'cookie-value';
await promise_rejects_when_unsecured(
t,
new TypeError(),
cookieStore.set(name, value),
`Setting ${prefix} cookies should fail in non-secure contexts`);
// Getting does not produce an exception, even in non-secure contexts.
const pair = await cookieStore.get(name);
if (kIsUnsecured) {
assert_equals(pair, null);
} else {
assert_equals(pair.value, value);
}
await promise_rejects_when_unsecured(
t,
new TypeError(),
cookieStore.delete(name),
`Deleting ${prefix} cookies should fail in non-secure contexts`);
assert_equals(await cookieStore.get(name), null);
}, `${prefix} cookies only writable from secure context`);
});
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async Cookies: __Secure- and __Host- cookies</title>
<meta name="help" href="https://github.com/WICG/cookie-store/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/cookie-test-helpers.js"></script>
<script src="resources/secure_cookies.js"></script>
<!DOCTYPE html>
<meta charset="utf-8">
<title>Async Cookies: __Secure- and __Host- cookies (HTTPS)</title>
<meta name="help" href="https://github.com/WICG/cookie-store/">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/cookie-test-helpers.js"></script>
<script src="resources/secure_cookies.js"></script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment