| <!DOCTYPE html> | |
| <meta charset=utf-8> | |
| <title>iframe used in clientId test</title> | |
| <script> | |
| self.onmessage = async event => { | |
| try { | |
| if (event.data === 'get_sw_client_id') { | |
| // Use the controlling service worker to determine | |
| // this client's id according to the Service Worker. | |
| const response = await fetch('/clientId'); | |
| const data = await response.json(); | |
| window.parent.postMessage(data.clientId, '*'); | |
| return; | |
| } | |
| if (event.data === 'get_lock_client_id') { | |
| // Grab a lock, then query the lock manager for state to | |
| // determine this client's id according to the lock manager. | |
| await navigator.locks.request('lock-name', async lock => { | |
| const lock_state = await navigator.locks.query(); | |
| const held_lock = lock_state.held.filter(l => l.name === lock.name)[0]; | |
| window.parent.postMessage(held_lock.clientId, '*'); | |
| }); | |
| return; | |
| } | |
| window.parent.postMessage(`unknown request: ${event.data}`, '*'); | |
| } catch (ex) { | |
| // In case of test failure, don't leave parent window hanging. | |
| window.parent.postMessage(`${ex.name}: ${ex.message}`, '*'); | |
| } | |
| }; | |
| </script> |