<!doctype html>
<head>
<title>Test setSinkId() before and after selectAudioOutput()</title>
<link rel="help" href="https://www.w3.org/TR/audio-output/#dom-htmlmediaelement-setsinkid">
</head>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script>
"use strict";

let deviceId;
promise_test(async t => {
  await test_driver.bless('transient activation for selectAudioOutput()');
  ({deviceId} = await navigator.mediaDevices.selectAudioOutput());

  const audio = new Audio();
  const p1 = audio.setSinkId(deviceId);
  assert_equals(audio.sinkId, "", "before it resolves, setSinkId is unchanged");
  let r = await p1;
  assert_equals(r, undefined, "setSinkId resolves with undefined");
  assert_equals(audio.sinkId, deviceId, "when it resolves, setSinkId updates sinkId to the requested deviceId");

  r = await audio.setSinkId(deviceId);
  assert_equals(r, undefined, "resetting sinkid on same current value should always work");

  r = await audio.setSinkId("");
  assert_equals(r, undefined, "resetting sinkid on default audio output should always work");
}, "setSinkId() after selectAudioOutput()");

// Use the same sinkId in another same-origin top-level browsing context.
// "the identifier MUST be the same in documents of the same origin in
// top-level browsing contexts."
// https://w3c.github.io/mediacapture-main/#dom-mediadeviceinfo-deviceid
promise_test(async t => {
  assert_not_equals(deviceId, undefined, "selectAudioOutput() resolved");
  const proxy = window.open('/common/blank.html');
  t.add_cleanup(() => proxy.close());
  await new Promise(r => proxy.onload = r);
  const pAudio = new proxy.Audio();
  await promise_rejects_dom(t, "NotFoundError", proxy.DOMException,
                            pAudio.setSinkId(deviceId),
                            "before selectAudioOutput()");
  await test_driver.bless('transient activation for selectAudioOutput()',
                          null, proxy);
  const { deviceId: pDeviceId } =
        await proxy.navigator.mediaDevices.selectAudioOutput({deviceId});
  assert_equals(pDeviceId, deviceId,
                "deviceIds should be same in each browsing context");
  await pAudio.setSinkId(deviceId);
  assert_equals(pAudio.sinkId, deviceId, "sinkId after setSinkId()");
}, "setSinkId() with deviceID from another window");
</script>
