blob: bc5c9bdb838257cb68e2adb0400975fa68bdf30f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<!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>
|