| <!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> |