35 lines
1.1 KiB
HTML
35 lines
1.1 KiB
HTML
<!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>
|