// META: title=Cookie Store API: Observing 'change' events in document when cookies set via document.cookie // META: script=resources/cookie-test-helpers.js 'use strict'; cookie_test(async t => { let eventPromise = observeNextCookieChangeEvent(); await setCookieStringDocument('DOCUMENT-cookie=value; path=/'); assert_equals( await getCookieString(), 'DOCUMENT-cookie=value', 'Cookie we wrote using document.cookie in cookie jar'); assert_equals( await getCookieStringHttp(), 'DOCUMENT-cookie=value', 'Cookie we wrote using document.cookie in HTTP cookie jar'); assert_equals( await getCookieStringDocument(), 'DOCUMENT-cookie=value', 'Cookie we wrote using document.cookie in document.cookie'); await verifyCookieChangeEvent( eventPromise, {changed: [{name: 'DOCUMENT-cookie', value: 'value'}]}, 'Cookie we wrote using document.cookie is observed'); eventPromise = observeNextCookieChangeEvent(); await setCookieStringDocument('DOCUMENT-cookie=new-value; path=/'); assert_equals( await getCookieString(), 'DOCUMENT-cookie=new-value', 'Cookie we overwrote using document.cookie in cookie jar'); assert_equals( await getCookieStringHttp(), 'DOCUMENT-cookie=new-value', 'Cookie we overwrote using document.cookie in HTTP cookie jar'); assert_equals( await getCookieStringDocument(), 'DOCUMENT-cookie=new-value', 'Cookie we overwrote using document.cookie in document.cookie'); await verifyCookieChangeEvent( eventPromise, {changed: [{name: 'DOCUMENT-cookie', value: 'new-value'}]}, 'Cookie we overwrote using document.cookie is observed'); eventPromise = observeNextCookieChangeEvent(); await setCookieStringDocument('DOCUMENT-cookie=DELETED; path=/; max-age=0'); assert_equals( await getCookieString(), undefined, 'Empty cookie jar after document.cookie' + ' cookie-clearing using max-age=0'); assert_equals( await getCookieStringHttp(), undefined, 'Empty HTTP cookie jar after document.cookie' + ' cookie-clearing using max-age=0'); assert_equals( await getCookieStringDocument(), undefined, 'Empty document.cookie cookie jar after document.cookie' + ' cookie-clearing using max-age=0'); await verifyCookieChangeEvent( eventPromise, {deleted: [{name: 'DOCUMENT-cookie'}]}, 'Deletion observed after document.cookie cookie-clearing' + ' using max-age=0'); }, 'document.cookie set/overwrite/delete observed by CookieStore'); cookie_test(async t => { let eventPromise = observeNextCookieChangeEvent(); await cookieStore.set('DOCUMENT-cookie', 'value'); assert_equals( await getCookieString(), 'DOCUMENT-cookie=value', 'Cookie we wrote using CookieStore in cookie jar'); assert_equals( await getCookieStringHttp(), 'DOCUMENT-cookie=value', 'Cookie we wrote using CookieStore in HTTP cookie jar'); assert_equals( await getCookieStringDocument(), 'DOCUMENT-cookie=value', 'Cookie we wrote using CookieStore in document.cookie'); await verifyCookieChangeEvent( eventPromise, {changed: [{name: 'DOCUMENT-cookie', value: 'value'}]}, 'Cookie we wrote using CookieStore is observed'); eventPromise = observeNextCookieChangeEvent(); await cookieStore.set('DOCUMENT-cookie', 'new-value'); assert_equals( await getCookieString(), 'DOCUMENT-cookie=new-value', 'Cookie we overwrote using CookieStore in cookie jar'); assert_equals( await getCookieStringHttp(), 'DOCUMENT-cookie=new-value', 'Cookie we overwrote using CookieStore in HTTP cookie jar'); assert_equals( await getCookieStringDocument(), 'DOCUMENT-cookie=new-value', 'Cookie we overwrote using CookieStore in document.cookie'); await verifyCookieChangeEvent( eventPromise, {changed: [{name: 'DOCUMENT-cookie', value: 'new-value'}]}, 'Cookie we overwrote using CookieStore is observed'); eventPromise = observeNextCookieChangeEvent(); await cookieStore.delete('DOCUMENT-cookie'); assert_equals( await getCookieString(), undefined, 'Empty cookie jar after CookieStore delete'); assert_equals( await getCookieStringHttp(), undefined, 'Empty HTTP cookie jar after CookieStore delete'); assert_equals( await getCookieStringDocument(), undefined, 'Empty document.cookie cookie jar after CookieStore delete'); await verifyCookieChangeEvent( eventPromise, {deleted: [{name: 'DOCUMENT-cookie'}]}, 'Deletion observed after CookieStore delete'); }, 'CookieStore set/overwrite/delete observed by document.cookie'); cookie_test(async t => { let eventPromise = observeNextCookieChangeEvent(); await setCookieStringDocument('DOCUMENT-🍪=🔵; path=/'); assert_equals( await getCookieString(), 'DOCUMENT-🍪=🔵', 'Cookie we wrote using document.cookie in cookie jar'); await verifyCookieChangeEvent( eventPromise, {changed: [{name: 'DOCUMENT-🍪', value: '🔵'}]}, 'Cookie we wrote using document.cookie is observed'); eventPromise = observeNextCookieChangeEvent(); await setCookieStringDocument('DOCUMENT-🍪=DELETED; path=/; max-age=0'); assert_equals( await getCookieString(), undefined, 'Empty cookie jar after document.cookie' + ' cookie-clearing using max-age=0'); await verifyCookieChangeEvent( eventPromise, {deleted: [{name: 'DOCUMENT-🍪'}]}, 'Deletion observed after document.cookie cookie-clearing' + ' using max-age=0'); }, 'CookieStore agrees with document.cookie on encoding non-ASCII cookies'); cookie_test(async t => { await cookieStore.set('DOCUMENT-🍪', '🔵'); assert_equals( await getCookieStringDocument(), 'DOCUMENT-🍪=🔵', 'Cookie we wrote using CookieStore in document.cookie'); await cookieStore.delete('DOCUMENT-🍪'); assert_equals( await getCookieStringDocument(), undefined, 'Empty cookie jar after CookieStore delete'); }, 'document.cookie agrees with CookieStore on encoding non-ASCII cookies');