| <!DOCTYPE html> |
| <meta charset=utf-8> |
| <title>Web Locks API: Client IDs in query() vs. Service Worker</title> |
| <link rel=help href="https://wicg.github.io/web-locks/"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> |
| <script> |
| |
| // Returns a promise resolved by the next message event. |
| function nextMessage() { |
| return new Promise(resolve => { |
| window.addEventListener('message', event => { |
| resolve(event.data); |
| }, {once: true}); |
| }); |
| } |
| |
| promise_test(async t => { |
| const iframe_url = 'resources/sw-controlled-iframe.html'; |
| |
| // Register a service worker that will control an iframe. |
| const registration = await service_worker_unregister_and_register( |
| t, 'resources/service-worker.js', iframe_url); |
| await wait_for_state(t, registration.installing, 'activated'); |
| |
| const iframe = await with_iframe(iframe_url); |
| |
| iframe.contentWindow.postMessage('get_sw_client_id', '*'); |
| const sw_client_id = await nextMessage(); |
| |
| iframe.contentWindow.postMessage('get_lock_client_id', '*'); |
| const lock_client_id = await nextMessage(); |
| |
| // NOTE: Not assert_equals(), as we don't want log the randomly generated |
| // clientIds, since they would not match any failure expectation files. |
| assert_true(lock_client_id === sw_client_id, |
| 'clientIds should match, but are different'); |
| |
| await registration.unregister(); |
| |
| }, 'Client IDs match between Locks API and Service Workers'); |
| |
| </script> |