<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <script src="../../resources/testharness.js"></script>
    <script src="../../resources/testharnessreport.js"></script>
    <script>
    
    promise_test(async (test) => {
        
        const originalLabel = "WebKit's AirPods";
        const anonymizedLabel = "AirPods";

        if (window.testRunner) {
            testRunner.setUserMediaPermission(true);
            testRunner.addMockMicrophoneDevice("id-1", originalLabel);
        }

        let devices = await navigator.mediaDevices.enumerateDevices();
        for (const device of devices)
            assert_false(!!device.label.length, "navigator.mediaDevices revealed device name before getUserMedia()");

        let stream = await navigator.mediaDevices.getUserMedia({ audio:true, video:true })

        for (const track of stream.getAudioTracks()) {
            assert_false(track.label == originalLabel, "navigator.mediaDevices did not anonymize audio track label at all");
            if (track.label.indexOf("AirPods") != -1)
                assert_true(track.label == anonymizedLabel, "navigator.mediaDevices did not anonymize audio track label correctly");
        }

        devices = await navigator.mediaDevices.enumerateDevices();
        const microphones = devices.filter(({kind}) => kind == "audioinput");
        for (const microphone of microphones) {
            const { kind, label, deviceId } = microphone;
            if (kind != "audioinput")
                continue;

            assert_false(label == originalLabel, "navigator.mediaDevices did not anonymize microphone label at all");
            if (label.indexOf("AirPods") != -1)
                assert_true(label == anonymizedLabel, "navigator.mediaDevices did not anonymize microphone label correctly");
        }

    }, "enumerateDevices() anonymizes microphone and track labels correctly");

    </script>
</head>
<body>
</body>
</html>
