| // META: title=Cookie Store API: cookiechange event in ServiceWorker with multiple subscriptions |
| // META: global=serviceworker |
| |
| 'use strict'; |
| |
| const kScope = '/cookie-store/does/not/exist'; |
| |
| // Resolves when the service worker receives the 'activate' event. |
| const kServiceWorkerActivatedPromise = new Promise((resolve) => { |
| self.addEventListener('activate', event => { resolve(); }); |
| }); |
| |
| // Accumulates cookiechange events dispatched to the service worker. |
| let g_cookie_changes = []; |
| |
| // Resolved when a cookiechange event is received. Rearmed by |
| // RearmCookieChangeReceivedPromise(). |
| let g_cookie_change_received_promise = null; |
| let g_cookie_change_received_promise_resolver = null; |
| self.addEventListener('cookiechange', (event) => { |
| g_cookie_changes.push(event); |
| if (g_cookie_change_received_promise_resolver) { |
| g_cookie_change_received_promise_resolver(); |
| } |
| }); |
| function RearmCookieChangeReceivedPromise() { |
| g_cookie_change_received_promise = new Promise((resolve) => { |
| g_cookie_change_received_promise_resolver = resolve; |
| }); |
| } |
| RearmCookieChangeReceivedPromise(); |
| |
| promise_test(async testCase => { |
| await kServiceWorkerActivatedPromise; |
| |
| { |
| const subscriptions = [{ name: 'cookie-name1', url: `${kScope}/path1` }]; |
| await registration.cookies.subscribe(subscriptions); |
| testCase.add_cleanup(() => registration.cookies.unsubscribe(subscriptions)); |
| } |
| { |
| const subscriptions = [ |
| { }, // Test the default values for subscription properties. |
| { name: 'cookie-name2' }, |
| ]; |
| await registration.cookies.subscribe(subscriptions); |
| testCase.add_cleanup(() => registration.cookies.unsubscribe(subscriptions)); |
| } |
| |
| await cookieStore.set('cookie-name', 'cookie-value'); |
| testCase.add_cleanup(async () => { |
| await cookieStore.delete('cookie-name'); |
| }); |
| testCase.add_cleanup(() => { g_cookie_changes = []; }); |
| |
| await g_cookie_change_received_promise; |
| testCase.add_cleanup(() => RearmCookieChangeReceivedPromise()); |
| |
| assert_equals(g_cookie_changes.length, 1); |
| const event = g_cookie_changes[0]; |
| assert_equals(event.type, 'cookiechange'); |
| assert_equals(event.changed.length, 1); |
| assert_equals(event.changed[0].name, 'cookie-name'); |
| assert_equals(event.changed[0].value, 'cookie-value'); |
| assert_equals(event.deleted.length, 0); |
| assert_true(event instanceof ExtendableCookieChangeEvent); |
| assert_true(event instanceof ExtendableEvent); |
| }, 'cookiechange dispatched with cookie change that matches subscription'); |