File: sw-controlled-iframe.html

package info (click to toggle)
firefox 147.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,320 kB
  • sloc: cpp: 7,607,359; javascript: 6,533,295; ansic: 3,775,223; python: 1,415,500; xml: 634,561; asm: 438,949; java: 186,241; sh: 62,752; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (35 lines) | stat: -rw-r--r-- 1,167 bytes parent folder | download | duplicates (28)
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>