<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>VP9 in WebRTC</title>
        <script src="../resources/testharness.js"></script>
        <script src="../resources/testharnessreport.js"></script>
    </head>
    <body>
        <video id="video" autoplay playsInline width="320" height="240"></video>
        <canvas id="canvas1" width="320" height="240"></canvas>
        <canvas id="canvas2" width="320" height="240"></canvas>
        <canvas id="canvas3" width="320" height="240"></canvas>
        <script src ="routines.js"></script>
        <script>
if (window.internals)
    internals.disableWebRTCHardwareVP9();
        </script>
        <script src="vp9-tests.js"></script>
        <script>
promise_test(async t => {
    const localStream = await navigator.mediaDevices.getUserMedia({video: {width: 320, height: 240, facingMode: "environment"}});
    t.add_cleanup(() => localStream.getTracks().forEach(track => track.stop()));
    const track = localStream.getVideoTracks()[0];
    let receivingConnection;
    const remoteStream =  await new Promise((resolve, reject) => {
        createConnections((firstConnection) => {
            firstConnection.addTrack(track, localStream);
        }, (secondConnection) => {
            receivingConnection = secondConnection;
            secondConnection.ontrack = (trackEvent) => {
                remoteTrack = trackEvent.track;
                resolve(trackEvent.streams[0]);
            };
        }, { observeOffer : (offer) => {
            offer.sdp = setCodec(offer.sdp, "VP9");
            return offer;
        }
        });
        setTimeout(() => reject("Test timed out"), 5000);
    });
    video.srcObject = remoteStream;
    await video.play();

    if (window.internals)
        assert_false(await internals.isVP9HardwareDecoderUsed(receivingConnection));
}, "Check decoder is libvpx");
        </script>
    </body>
</html>
