cookieStore_special_names.https.any.js (3995B)
1 // META: title=Cookie Store API: cookieStore.set()/get()/delete() for cookies with special names 2 // META: global=window,serviceworker 3 4 'use strict'; 5 6 ['__Secure-', '__secure-', '__Host-', '__host-'].forEach(prefix => { 7 promise_test(async testCase => { 8 await cookieStore.set(`${prefix}cookie-name`, `secure-cookie-value`); 9 assert_equals( 10 (await cookieStore.get(`${prefix}cookie-name`)).value, 11 'secure-cookie-value', 12 `Setting ${prefix} cookies should not fail in secure context`); 13 14 try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {} 15 }, `cookieStore.set with ${prefix} name on secure origin`); 16 17 promise_test(async testCase => { 18 // This test is for symmetry with the non-secure case. In non-secure 19 // contexts, the set() should fail even if the expiration date makes 20 // the operation a no-op. 21 await cookieStore.set( 22 { name: `${prefix}cookie-name`, value: `secure-cookie-value`, 23 expires: Date.now() - (24 * 60 * 60 * 1000)}); 24 assert_equals(await cookieStore.get(`${prefix}cookie-name`), null); 25 try { await cookieStore.delete(`${prefix}cookie-name`); } catch (e) {} 26 }, `cookieStore.set of expired ${prefix} cookie name on secure origin`); 27 28 promise_test(async testCase => { 29 assert_equals( 30 await cookieStore.delete(`${prefix}cookie-name`), undefined, 31 `Deleting ${prefix} cookies should not fail in secure context`); 32 }, `cookieStore.delete with ${prefix} name on secure origin`); 33 }); 34 35 ['__Host-', '__host-'].forEach(prefix => { 36 promise_test(async testCase => { 37 const currentUrl = new URL(self.location.href); 38 const currentDomain = currentUrl.hostname; 39 await promise_rejects_js(testCase, TypeError, 40 cookieStore.set({ name: `${prefix}cookie-name`, value: 'cookie-value', 41 domain: currentDomain })); 42 }, `cookieStore.set with ${prefix} prefix and a domain option`); 43 44 promise_test(async testCase => { 45 await cookieStore.set({ name: `${prefix}cookie-name`, value: 'cookie-value', 46 path: "/" }); 47 48 assert_equals( 49 (await cookieStore.get(`${prefix}cookie-name`)).value, "cookie-value"); 50 51 await promise_rejects_js(testCase, TypeError, 52 cookieStore.set( { name: `${prefix}cookie-name`, value: 'cookie-value', 53 path: "/path" })); 54 55 await cookieStore.delete({ name: `${prefix}cookie-name`}); 56 }, `cookieStore.set with ${prefix} prefix a path option`); 57 }); 58 59 ['__Host-Http-', '__host-http-', '__Http-', '__http-', ' __Http-', '\t__Http-', 60 ' __Host-Http-', '\t__Host-Http-'].forEach(prefix => { 61 promise_test(async testCase => { 62 await promise_rejects_js(testCase, TypeError, 63 cookieStore.set({ name: `${prefix}cookie-name`, value: 'cookie-value'})); 64 }, `cookieStore.set with ${prefix} prefix rejects`); 65 }); 66 67 promise_test(async testCase => { 68 let exceptionThrown = false; 69 try { 70 await cookieStore.set(unescape('cookie-name%0D1'), 'cookie-value'); 71 } catch (e) { 72 assert_equals (e.name, "TypeError", "cookieStore thrown an incorrect exception -"); 73 exceptionThrown = true; 74 } 75 assert_true(exceptionThrown, "No exception thrown."); 76 }, 'cookieStore.set with malformed name.'); 77 78 ['__Host-', '__Secure-', '__Http-', '__Host-Http-', ' __Host-', '\t__Host-', ' __Secure-', 79 '\t__Secure-', ' __Http-', '\t__Http-', ' __Host-Http-', '\t__Host-Http-'].forEach(prefix => { 80 promise_test(async testCase => { 81 // Nameless cookies cannot have special prefixes 82 await cookieStore.delete(''); 83 84 const currentUrl = new URL(self.location.href); 85 const currentDomain = currentUrl.hostname; 86 87 await promise_rejects_js(testCase, TypeError, cookieStore.set( 88 { name: '', 89 value: `${prefix}nameless-cookie`, 90 domain: `.${currentDomain}` })); 91 const cookie = await cookieStore.get(''); 92 assert_equals(cookie, null); 93 }, `cookieStore.set a nameless cookie cannot have ${prefix} prefix`); 94 });