tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

cookieListItem_attributes.https.any.js (5797B)


      1 // META: title=Cookie Store API: cookieListItem attributes
      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.
      8 
      9 'use strict';
     10 
     11 const currentHostname = (new URL(self.location.href)).hostname;
     12 
     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;
     18 
     19 function assert_cookie_keys(cookie) {
     20  const cookieKeys = Object.keys(cookie);
     21  assert_array_equals(cookieKeys, ['name', 'value']);
     22 }
     23 
     24 promise_test(async testCase => {
     25  await cookieStore.delete('cookie-name');
     26 
     27  await cookieStore.set('cookie-name', 'cookie-value');
     28  testCase.add_cleanup(async () => {
     29    await cookieStore.delete('cookie-name');
     30  });
     31 
     32  const cookie = await cookieStore.get('cookie-name');
     33  assert_equals(cookie.name, 'cookie-name');
     34  assert_equals(cookie.value, 'cookie-value');
     35  assert_cookie_keys(cookie);
     36 }, 'CookieListItem - cookieStore.set defaults with positional name and value');
     37 
     38 promise_test(async testCase => {
     39  await cookieStore.delete('cookie-name');
     40 
     41  await cookieStore.set({ name: 'cookie-name', value: 'cookie-value' });
     42  testCase.add_cleanup(async () => {
     43    await cookieStore.delete('cookie-name');
     44  });
     45  const cookie = await cookieStore.get('cookie-name');
     46  assert_equals(cookie.name, 'cookie-name');
     47  assert_equals(cookie.value, 'cookie-value');
     48  assert_cookie_keys(cookie);
     49 }, 'CookieListItem - cookieStore.set defaults with name and value in options');
     50 
     51 promise_test(async testCase => {
     52  await cookieStore.delete('cookie-name');
     53 
     54  await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
     55                          expires: tenYearsFromNowInSeconds * 1000 });
     56  testCase.add_cleanup(async () => {
     57    await cookieStore.delete('cookie-name');
     58  });
     59  const cookie = await cookieStore.get('cookie-name');
     60  assert_equals(cookie.name, 'cookie-name');
     61  assert_equals(cookie.value, 'cookie-value');
     62  assert_cookie_keys(cookie);
     63 }, 'CookieListItem - cookieStore.set with expires set to a timestamp 10 ' +
     64   'years in the future');
     65 
     66 promise_test(async testCase => {
     67  await cookieStore.delete('cookie-name');
     68 
     69  await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
     70                          expires: new Date(tenYearsFromNowInSeconds) * 1000 });
     71  testCase.add_cleanup(async () => {
     72    await cookieStore.delete('cookie-name');
     73  });
     74  const cookie = await cookieStore.get('cookie-name');
     75  assert_equals(cookie.name, 'cookie-name');
     76  assert_equals(cookie.value, 'cookie-value');
     77  assert_cookie_keys(cookie);
     78 }, 'CookieListItem - cookieStore.set with expires set to a Date 10 ' +
     79   'years in the future');
     80 
     81 promise_test(async testCase => {
     82  await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
     83 
     84  await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
     85                          domain: currentHostname });
     86  testCase.add_cleanup(async () => {
     87    await cookieStore.delete({ name: 'cookie-name', domain: currentHostname });
     88  });
     89  const cookie = await cookieStore.get('cookie-name');
     90  assert_equals(cookie.name, 'cookie-name');
     91  assert_equals(cookie.value, 'cookie-value');
     92  assert_cookie_keys(cookie);
     93 }, 'CookieListItem - cookieStore.set with domain set to the current hostname');
     94 
     95 promise_test(async testCase => {
     96  const currentUrl = new URL(self.location.href);
     97  const currentPath = currentUrl.pathname;
     98  const currentDirectory =
     99      currentPath.substr(0, currentPath.lastIndexOf('/') + 1);
    100  await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
    101 
    102  await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
    103                          path: currentDirectory });
    104  testCase.add_cleanup(async () => {
    105    await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
    106  });
    107  const cookie = await cookieStore.get('cookie-name');
    108  assert_equals(cookie.name, 'cookie-name');
    109  assert_equals(cookie.value, 'cookie-value');
    110  assert_cookie_keys(cookie);
    111 }, 'CookieListItem - cookieStore.set with path set to the current directory');
    112 
    113 promise_test(async testCase => {
    114  const currentUrl = new URL(self.location.href);
    115  const currentPath = currentUrl.pathname;
    116  const currentDirectory = currentPath.substr(0, currentPath.lastIndexOf('/'));
    117  await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
    118 
    119  await cookieStore.set({ name: 'cookie-name', value: 'cookie-value',
    120                          path: currentDirectory });
    121  testCase.add_cleanup(async () => {
    122    await cookieStore.delete({ name: 'cookie-name', path: currentDirectory });
    123  });
    124  const cookie = await cookieStore.get('cookie-name');
    125  assert_equals(cookie.name, 'cookie-name');
    126  assert_equals(cookie.value, 'cookie-value');
    127  assert_cookie_keys(cookie);
    128 }, 'CookieListItem - cookieStore.set does not add / to path if it does not end with /');
    129 
    130 ['strict', 'lax', 'none'].forEach(sameSiteValue => {
    131  promise_test(async testCase => {
    132    await cookieStore.delete('cookie-name');
    133 
    134    await cookieStore.set({
    135        name: 'cookie-name', value: 'cookie-value', sameSite: sameSiteValue });
    136    testCase.add_cleanup(async () => {
    137      await cookieStore.delete('cookie-name');
    138    });
    139    const cookie = await cookieStore.get('cookie-name');
    140    assert_equals(cookie.name, 'cookie-name');
    141    assert_equals(cookie.value, 'cookie-value');
    142    assert_cookie_keys(cookie);
    143  }, `CookieListItem - cookieStore.set with sameSite set to ${sameSiteValue}`);
    144 
    145 });