| <!doctype html> |
| <meta charset="utf-8"> |
| <title>Async Cookies: cookieStore.delete() arguments and options</title> |
| <link rel="help" href="https://github.com/WICG/async-cookies-api"> |
| <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'; |
| |
| // Workaround because add_cleanup doesn't support async functions yet. |
| // See https://github.com/w3c/web-platform-tests/issues/6075 |
| async function async_cleanup(cleanup_function) { |
| try { |
| await cleanup_function(); |
| } catch (e) { |
| // Errors in cleanup functions shouldn't result in test failures. |
| } |
| } |
| |
| promise_test(async testCase => { |
| await cookieStore.set('cookie-name', 'cookie-value'); |
| |
| await cookieStore.delete('cookie-name'); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie, null); |
| }, 'cookieStore.delete with positional name'); |
| |
| promise_test(async testCase => { |
| await cookieStore.set('cookie-name', 'cookie-value'); |
| |
| await cookieStore.delete({ name: 'cookie-name' }); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie, null); |
| |
| await async_cleanup(() => cookieStore.delete('cookie-name')); |
| }, 'cookieStore.delete with name in options'); |
| |
| promise_test(async testCase => { |
| await cookieStore.set('cookie-name', 'cookie-value'); |
| |
| await promise_rejects(testCase, new TypeError(), cookieStore.delete( |
| 'cookie-name', { name: 'cookie-name' })); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie.name, 'cookie-name'); |
| assert_equals(cookie.value, 'cookie-value'); |
| |
| await async_cleanup(() => cookieStore.delete('cookie-name')); |
| }, 'cookieStore.delete with name in both positional arguments and options'); |
| |
| promise_test(async testCase => { |
| await cookieStore.set('cookie-name', 'cookie-value'); |
| |
| await promise_rejects(testCase, new TypeError(), cookieStore.delete( |
| 'cookie-name', { value: 'cookie-value' })); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie.name, 'cookie-name'); |
| assert_equals(cookie.value, 'cookie-value'); |
| |
| await async_cleanup(() => cookieStore.delete('cookie-name')); |
| }, 'cookieStore.delete with value in options'); |
| |
| promise_test(async testCase => { |
| await cookieStore.set('cookie-name', 'cookie-value'); |
| |
| const tenYears = 10 * 365 * 24 * 60 * 60 * 1000; |
| const tenYearsAgo = Date.now() - tenYears; |
| |
| await promise_rejects(testCase, new TypeError(), cookieStore.delete( |
| 'cookie-name', { expires: tenYearsAgo })); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie.name, 'cookie-name'); |
| assert_equals(cookie.value, 'cookie-value'); |
| |
| await async_cleanup(() => cookieStore.delete('cookie-name')); |
| }, 'cookieStore.delete with expires in options'); |
| |
| promise_test(async testCase => { |
| const currentUrl = new URL(window.location.href); |
| const currentDomain = currentUrl.hostname; |
| await cookieStore.set( |
| 'cookie-name', 'cookie-value', { domain: currentDomain }); |
| |
| await cookieStore.delete('cookie-name', { domain: currentDomain }); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie, null); |
| |
| await async_cleanup(async () => { |
| await cookieStore.delete('cookie-name', { domain: currentDomain }) |
| }); |
| }, 'cookieStore.delete with domain set to the current hostname'); |
| |
| promise_test(async testCase => { |
| const currentUrl = new URL(window.location.href); |
| const currentDomain = currentUrl.hostname; |
| const subDomain = `sub.${currentDomain}`; |
| await cookieStore.set( |
| 'cookie-name', 'cookie-value', { domain: currentDomain }); |
| |
| await cookieStore.delete('cookie-name', { domain: subDomain }); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie.name, 'cookie-name'); |
| assert_equals(cookie.value, 'cookie-value'); |
| |
| await async_cleanup(async () => { |
| await cookieStore.delete('cookie-name', { domain: currentDomain }) |
| }); |
| }, 'cookieStore.delete with domain set to a subdomain of the current hostname'); |
| |
| promise_test(async testCase => { |
| const currentUrl = new URL(window.location.href); |
| const currentDomain = currentUrl.hostname; |
| await cookieStore.set( |
| 'cookie-name', 'cookie-value', { domain: currentDomain }); |
| |
| await cookieStore.delete({ name: 'cookie-name', domain: currentDomain }); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie, null); |
| |
| await async_cleanup(async () => { |
| await cookieStore.delete('cookie-name', { domain: currentDomain }) |
| }); |
| }, 'cookieStore.delete with name in options and domain set to the current ' + |
| 'hostname'); |
| |
| promise_test(async testCase => { |
| const currentUrl = new URL(window.location.href); |
| const currentDomain = currentUrl.hostname; |
| const subDomain = `sub.${currentDomain}`; |
| await cookieStore.set( |
| 'cookie-name', 'cookie-value', { domain: currentDomain }); |
| |
| await cookieStore.delete({ name: 'cookie-name', domain: subDomain }); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie.name, 'cookie-name'); |
| assert_equals(cookie.value, 'cookie-value'); |
| |
| await async_cleanup(async () => { |
| await cookieStore.delete('cookie-name', { domain: currentDomain }) |
| }); |
| }, 'cookieStore.delete with name in options and domain set to a subdomain of ' + |
| 'the current hostname'); |
| |
| |
| promise_test(async testCase => { |
| const currentUrl = new URL(window.location.href); |
| const currentPath = currentUrl.pathname; |
| const currentDirectory = |
| currentPath.substr(0, currentPath.lastIndexOf('/') + 1); |
| await cookieStore.set( |
| 'cookie-name', 'cookie-value', { path: currentDirectory }); |
| |
| await cookieStore.delete('cookie-name', { path: currentDirectory }); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie, null); |
| |
| async_cleanup(async () => { |
| await cookieStore.delete('cookie-name', { path: currentDirectory }) |
| }); |
| }, 'cookieStore.delete with path set to the current directory'); |
| |
| promise_test(async testCase => { |
| const currentUrl = new URL(window.location.href); |
| const currentPath = currentUrl.pathname; |
| const currentDirectory = |
| currentPath.substr(0, currentPath.lastIndexOf('/') + 1); |
| const subDirectory = currentDirectory + "subdir/"; |
| await cookieStore.set( |
| 'cookie-name', 'cookie-value', { path: currentDirectory }); |
| |
| await cookieStore.delete('cookie-name', { path: subDirectory }); |
| const cookie = await cookieStore.get('cookie-name'); |
| assert_equals(cookie.name, 'cookie-name'); |
| assert_equals(cookie.value, 'cookie-value'); |
| |
| await async_cleanup(async () => { |
| await cookieStore.delete('cookie-name', { path: currentDirectory }) |
| }); |
| }, 'cookieStore.delete with path set to subdirectory of the current directory'); |
| |
| </script> |