<!DOCTYPE html>
<meta charset="utf-8">
<title>Receiving a message through PresentationConnection</title>
<link rel="author" title="Tomoyuki Shimizu" href="https://github.com/tomoyukilabs/">
<link rel="help" href="http://w3c.github.io/presentation-api/#receiving-a-message-through-presentationconnection">
<script src="common.js"></script>
<script src="support/stash.js"></script>

<p>Click the button below and select the available presentation display, to start the manual test.</p>
<button id="presentBtn">Start Presentation Test</button>

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

  let connection;
  const presentBtn = document.getElementById('presentBtn');
  presentBtn.onclick = () => {
    presentBtn.disabled = true;
    const stash = new Stash(stashIds.toController, stashIds.toReceiver);
    const request = new PresentationRequest('support/PresentationConnection_onmessage_receiving-ua.html');

    request.start().then(c => {
      c.onconnect = () => {
        connection = c;
        connection.send(message1);              // string
        connection.send(message2);              // string
        connection.send(new Blob([message3]));  // Blob
        connection.send(message4.buffer);       // ArrayBuffer
        connection.send(message5);              // ArrayBufferView
        return stash.receive().then(data => {
          const result = JSON.parse(data);
          if (result.type === 'blob') {
            connection.send(message5);
            return stash.receive();
          }
          else
            return data;
        }).then(result => {
          const json = JSON.parse(result);

          // notify receiver's results of a parent window (e.g. test runner)
          if (window.opener && 'completion_callback' in window.opener) {
            window.opener.completion_callback(json.tests, json.status);
          }
          // display receiver's results as HTML
          const log = document.createElement('div');
          log.id = 'log';
          log.innerHTML = json.log;
          document.body.appendChild(log);

          connection.onconnect = () => { connection.terminate(); };
          if (connection.state === 'closed')
            request.reconnect(connection.id);
          else
            connection.terminate();
        });
      };
    });
  };
</script>
