<!DOCTYPE html>
<html>
  <title>
    Test that the remote playback state changes when selecting a device
  </title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/common/media.js"></script>
  <script>
    setup({ explicit_timeout: true });
  </script>
  <body>
    <div id="prep">
      <p>Please make sure a device for remote playback is <b>available.</b></p>
      <button id="prompt-button-prep">Show devices</button>
      <button id="start-button">Start test</button>
    </div>
    <div id="pick-device" style="display: none">
      <p>
        Click the button below to prompt for a remote playback device and select
        one!
      </p>
      <button id="prompt-button">Pick device</button>
    </div>
  </body>
  <script src="./prepare-device.js"></script>
  <script>
    let v = document.createElement("video");
    v.src = getVideoURI("/media/movie_5");

    async_test(t => {
      assert_equals(v.remote.state, "disconnected");

      function callback(available) {
        promise_test(() => {
          return v.remote.prompt().then(
            t.step_func(() => {
              assert_equals(v.remote.state, "connecting");
            })
          );
        }, "Prompt call resolves");
      }

      let button = document.getElementById("prompt-button");
      button.onclick = () => {
        v.remote.watchAvailability(t.step_func_done(callback)).then(
          t.step_func(() => {}),
          t.unreached_func()
        );
      };
    }, "Test that the remote playback state changes when selecting a device.");
  </script>
</html>
