<!doctype html>
<html>
<head>
<title>enumerateDevices depends only on capture state, not permission state</title>
<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 src=permission-helper.js></script>
</head>
<body>

<script>
  promise_test(async t => {
    await setMediaPermission();
    const stream = await navigator.mediaDevices.getUserMedia({audio : true, video: true});
    stream.getTracks().forEach(t => t.stop());
    // the page loaded below hasn't had capture enabled
    // so enumerateDevices should not list detailed info yet
    const iframe = document.createElement("iframe");
    iframe.setAttribute("allow", "camera 'src';microphone 'src'");
    iframe.src = "/mediacapture-streams/iframe-enumerate.html";
    document.body.appendChild(iframe);
    const loadWatcher = new EventWatcher(t, iframe, ['load']);
    await loadWatcher.wait_for('load');
    const msgWatcher = new EventWatcher(t, window, ['message']);
    frames[0].postMessage('run', '*')
    const e = await msgWatcher.wait_for('message');
    const iframeDevices = e.data.devices;
    const kinds = iframeDevices.map(({kind}) => kind);
    assert_equals(kinds.length == new Set(kinds).size, "At most one of a kind prior to capture");
    for (const device of iframeDevices) {
      assert_equals(device.deviceId, "", "deviceId pre-capture is empty");
      assert_equals(device.label, "", "label pre-capture is empty");
      assert_equals(device.groupId, "", "groupId pre-capture is empty");
    }
  });
</script>
