| self.addEventListener('message', ev => ev.waitUntil(onMessage(ev))); |
| |
| async function onMessage(event) { |
| if (!event.data) |
| return; |
| switch (event.data.type) { |
| case 'test_message': |
| return onTestMessage(event); |
| case 'echo_cookies_http': |
| return onEchoCookiesHttp(event); |
| case 'echo_cookies_js': |
| return onEchoCookiesJs(event); |
| default: |
| return; |
| } |
| } |
| |
| // test_message just verifies that the message passing is working. |
| async function onTestMessage(event) { |
| event.source.postMessage({ok: true}); |
| } |
| |
| async function onEchoCookiesHttp(event) { |
| try { |
| const resp = await fetch( |
| `${self.origin}/cookies/resources/list.py`, {credentials: 'include'}); |
| const cookies = await resp.json(); |
| event.source.postMessage({ok: true, cookies: Object.keys(cookies)}); |
| } catch (err) { |
| event.source.postMessage({ok: false}); |
| } |
| } |
| |
| // echo_cookies returns the names of all of the cookies available to the worker. |
| async function onEchoCookiesJs(event) { |
| try { |
| const cookie_objects = await self.cookieStore.getAll(); |
| const cookies = cookie_objects.map(c => c.name); |
| event.source.postMessage({ok: true, cookies}); |
| } catch (err) { |
| event.source.postMessage({ok: false}); |
| } |
| } |