File: presentation.html

package info (click to toggle)
firefox-esr 78.15.0esr-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 3,301,156 kB
  • sloc: cpp: 5,665,905; javascript: 4,798,386; ansic: 2,878,233; python: 977,004; asm: 270,347; xml: 181,456; java: 111,756; sh: 72,926; makefile: 21,819; perl: 13,380; cs: 4,725; yacc: 4,565; objc: 3,026; pascal: 1,787; lex: 1,720; ada: 1,681; exp: 505; php: 436; lisp: 260; awk: 152; ruby: 103; csh: 80; sed: 53; sql: 45
file content (98 lines) | stat: -rw-r--r-- 3,166 bytes parent folder | download | duplicates (33)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
<!DOCTYPE html>

<meta charset="utf-8">
<link rel="author" title="Intel" href="http://www.intel.com">
<link rel="author" title="He Yue" href="mailto:yue.he@intel.com">
<link rel="author" title="Tomoyuki Shimizu" href="https://github.com/tomoyukilabs/">
<link rel="help" href="http://w3c.github.io/presentation-api/#interface-presentationconnectionlist">
<script src="../common.js"></script>
<script src="stash.js"></script>
<script>
  const message1 = '1st';
  const message2 = '2nd';
  const message3 = new Uint8Array([51, 114, 100]);      // "3rd"
  const message4 = new Uint8Array([52, 116, 104]);      // "4th"
  const message5 = new Uint8Array([108, 97, 115, 116]); // "last"

  const toUint8Array = buf => {
    return buf instanceof ArrayBuffer ? new Uint8Array(buf) : buf;
  }

  // convert ArrayBuffer or Uint8Array into string
  const toText = buf => {
    const arr = toUint8Array(buf);
    return !buf ? null : arr.reduce((result, item) => {
      return result + String.fromCharCode(item);
    }, '');
  }

  // compare two ArrayBuffer or Uint8Array
  const compare = (a, b) => {
    const p = toUint8Array(a);
    const q = toUint8Array(b);
    return !!p && !!q && p.every((item, index) => { return item === q[index]; });
  };

  const stash = new Stash(stashIds.toReceiver, stashIds.toController);

  let connection, count = 0;

  const addConnection = c => {
    let result = [], testCase;
    connection = c;
    count++;

    connection.onmessage = event => {
      // PresentationConnection_send-manual.https.html
      if (testCase === 'send') {
        if (typeof event.data === 'string') {
          result.push({ type: 'text', data: event.data });
        }
        // default value of connection.binaryType is "arraybuffer"
        else if(event.data instanceof ArrayBuffer) {
          result.push({ type: 'binary', data: toText(event.data) });
          if (compare(event.data, message5)) {
            stash.send(JSON.stringify(result));
          }
        }
        else {
          result.push({ type: 'error' });
        }
      }
    };

    stash.receive().then(data => {
      testCase = data;

      // PresentationConnection_send-manual.https.html
      if (testCase === 'send') {
        stash.send('ok');
      }
      // PresentationConnection_onmessage-manual.https.html
      else if (testCase === 'onmessage') {
        connection.send(message1);              // string
        connection.send(message2);              // string
        connection.send(new Blob([message3]));  // Blob
        connection.send(message4.buffer);       // ArrayBuffer
        connection.send(message5);              // ArrayBufferView
        stash.receive().then(data => {
          connection.send(message5);
        });
      }
      // PresentationConnection_onclose-manual.https.html
      else if (testCase === 'close') {
        connection.close();
      }
    });
  };

  navigator.presentation.receiver.connectionList
    .then(list => {
      list.onconnectionavailable = evt => {
        addConnection(evt.connection);
      };
      list.connections.map(connection => {
        addConnection(connection);
      });
    });
</script>