clientids.https.html (1592B)
1 <!DOCTYPE html> 2 <meta charset=utf-8> 3 <title>Web Locks API: Client IDs in query() vs. Service Worker</title> 4 <link rel=help href="https://w3c.github.io/web-locks/"> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script> 8 <script> 9 10 // Returns a promise resolved by the next message event. 11 function nextMessage() { 12 return new Promise(resolve => { 13 window.addEventListener('message', event => { 14 resolve(event.data); 15 }, {once: true}); 16 }); 17 } 18 19 promise_test(async t => { 20 assert_implements(navigator.locks); 21 const iframe_url = 'resources/sw-controlled-iframe.html'; 22 23 // Register a service worker that will control an iframe. 24 const registration = await service_worker_unregister_and_register( 25 t, 'resources/service-worker.js', iframe_url); 26 await wait_for_state(t, registration.installing, 'activated'); 27 28 const iframe = await with_iframe(iframe_url); 29 30 iframe.contentWindow.postMessage('get_sw_client_id', '*'); 31 const sw_client_id = await nextMessage(); 32 33 iframe.contentWindow.postMessage('get_lock_client_id', '*'); 34 const lock_client_id = await nextMessage(); 35 36 // NOTE: Not assert_equals(), as we don't want log the randomly generated 37 // clientIds, since they would not match any failure expectation files. 38 assert_equals(lock_client_id, sw_client_id, 39 'clientIds should match, but are different'); 40 41 await registration.unregister(); 42 43 }, 'Client IDs match between Locks API and Service Workers'); 44 45 </script>