<!doctype html><!-- webkit-test-runner [ dumpJSConsoleLogInStdErr=true ] -->
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script>

let video;
function setup() 
{
    // 250ms of silence in 16-bit signed little endian WAV format.
    let data = "UklGRmQfAABXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YUAfAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAAAAAAAAAAAAAQAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAABAP//AAAAAAAAAAABAP//AAAAAAAA/////wAAAQAAAAAAAAAAAAAAAQD//wAAAAD//wAAAQD/////AAAAAAEA/////wAAAAAAAP//AAD//wAAAQAAAP//AAD//wAAAAABAAEAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAP//AAAAAP//AAD//wAAAAAAAAAAAAAAAP//AAABAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAD//wAA//8AAAAAAAAAAAAAAAAAAAEA//8AAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAAAAAP//AQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAABAAAA//8AAAAAAAAAAAAAAAD//wAAAQAAAAAA//8AAAAAAAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAQAAAAEAAAABAAEAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAQAAAP//AAABAAAAAAABAAAAAAAAAAAAAQAAAP//AAAAAAAAAAAAAAAA//8AAAAAAAAAAP//AAAAAAAAAAD//wAAAAABAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAP//AQAAAAAAAAAAAAEAAQAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAQAAAAAAAQD//wAAAAD//wAAAQAAAAAAAAAAAAAAAAD//wEAAQAAAAAAAAD//wAAAAAAAAEAAAAAAAAA//8AAAAA//8AAAAAAAD/////AAAAAAEAAAAAAAAAAAAAAAAAAAD//wAAAAD//wAAAAAAAP//AAAAAAAAAAABAP//AAAAAP//AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8BAAAAAAAAAP//AAAAAAAAAAABAAAAAAABAAAA//8AAAAAAAAAAAAAAQAAAAAAAQABAAEAAAAAAAAAAQAAAAAAAAABAP////8AAAEAAAAAAAAAAAD//wAAAAD//wAAAAD/////AAABAAAAAQAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAABAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA//8AAAAAAQAAAAEAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAABAP//AAAAAAAAAAAAAAAAAAABAAAA//8BAAAA//8AAP//AAAAAAAAAAABAAEAAAAAAAAAAAABAAAAAAAAAAAA//8AAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAAAA//8AAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAAA//8AAAAAAAAAAAAAAAAAAAAAAAD//wAAAAABAAEA//8AAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAQD//wAAAAAAAP//AAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAA//8AAAAAAAAAAAAAAAABAAAAAAAAAP////8AAAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAQD//wAAAAD//wAAAAABAP//AAAAAAAA//8BAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAAAA//8AAAAAAAAAAP//AAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAP//AAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAQAAAAAA//8AAAAAAAAAAAAAAAABAAAA//8BAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAD//wAAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAD//wAAAQAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQD//wAAAAAAAAEAAQAAAAAA//8AAAAAAQD//wAAAAD//wAA//8AAP///////wAAAAD//////////wAAAAAAAAAAAAAAAP//AQABAAAAAAAAAAAAAAABAAAAAQD//wAA/////wEAAQAAAAAAAQABAAEA//8AAAAA//8BAAAAAAAAAAEAAAAAAAAAAAD//wAAAAAAAAAAAAD//wAAAAAAAP//AAAAAAAA//8BAAAAAAAAAP//AAAAAAAAAAD//wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAA//8AAAAAAAABAAAAAAD//wAAAAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAQAAAAAAAAD//wAAAAAAAAAAAQAAAP//AAD//wAAAQAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wEAAQD//wAAAAD//wEAAQAAAAEAAAABAAAAAAABAAAAAQAAAAEAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAAAAD//wAA//8AAP//AAAAAP//AQAAAAEAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAD//wAAAAABAAAAAAAAAAAAAQAAAAEAAAD//wAA//8AAAAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAP//AAABAAAAAAD//wAAAAAAAAEAAAD//wAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAA//8AAAAAAQAAAAAAAQABAP//AAAAAAAAAQABAAEAAAAAAAAAAQABAP//AAAAAAAAAAABAP//AQD/////AAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAP//AQAAAAEA//8BAAAA//8BAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA//8AAAAAAAAAAAAAAAABAAAAAQAAAAEAAAAAAAAAAQAAAP//AAAAAAAA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA//8BAAAAAQAAAAAAAAD//wAAAAAAAAAAAAABAAEAAAAAAAAAAAABAAAAAQABAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAQABAAAAAAAAAP//AQAAAP//AAAAAAEAAAAAAAAAAAAAAAAAAAABAP//AAD//wAAAAAAAAEAAAAAAAAAAAABAP////8BAAAAAQD//wEAAAAAAAEAAAAAAAAA//8AAAEAAAABAAAAAAAAAAEAAAAAAAAA//8AAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAAABAAAAAAAAAAAAAQAAAP//AAAAAAAAAQABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAA//8AAP//AAAAAAAAAAD/////AAAAAP//AAAAAAAAAAAAAAAAAAAAAAEAAAABAP//AAD//wAAAAAAAP//AAAAAAAAAAAAAAAAAQAAAAAAAAABAAAA//8AAAAAAAAAAAAAAAAAAP//AQAAAAAAAAAAAP//AAABAAEAAAAAAAEAAQABAAAA//8AAAAAAAAAAAAAAQAAAAAAAQAAAAAAAQD/////AAAAAAAAAAD//wAA//8AAP//AAAAAAAAAAABAAAAAAABAAAAAAAAAAEAAAAAAP//AAAAAAAAAAAAAAAAAQD//wAAAAAAAAAAAAAAAP//AAABAAEAAAAAAAAAAAD//wAAAAAAAAEAAAAAAAAAAAAAAP//AAD/////AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQD/////AAAAAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAP////8AAAAAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAAABAP//AAD/////AAAAAAAA//8AAAAAAAABAP//AAAAAP//AQAAAAAAAAAAAAAAAAAAAAAAAAABAP//AAAAAAAAAAAAAAAA//8AAAAA//////////8AAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAQABAAAAAAAAAAAAAAD//wAAAAAAAP//AAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAABAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAD//wAAAAABAAAAAAD//wAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAABAAAAAAABAAAA/////wAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAAA/////wAAAAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAEAAAAAAAAAAAD//wAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAD/////AAAAAAAAAQAAAAAAAAD//wAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8BAAEAAAAAAAAA/////wAAAAAAAAAA//8AAAAAAAD//wAAAQAAAAAAAAAAAAEAAAAAAAEAAAAAAP//AAAAAAAA//8AAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAEA//8AAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAP//AAAAAAAAAQAAAAAAAAAAAAAAAQAAAAAAAAD/////AAABAAAAAAAAAAAAAAABAAAAAAD//wAAAQAAAAAAAAABAAAAAAD//wEAAAABAAAAAAABAAEAAAD//wAAAAABAAAA//8AAAAAAAD//wAAAAAAAAAAAAD//wAAAAD//wEAAAAAAAAAAAAAAAAAAQAAAAAAAAD//wAAAAAAAAAA//8AAAAAAAAAAP//AQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAP//AQD/////AQAAAAAAAAABAAAAAAAAAAAAAAD//wAAAAABAP////8AAAEAAAAAAP//AAAAAAAAAAD//wEA//8AAAAAAQAAAAAAAQAAAAAA//8AAAAAAQAAAAAAAQAAAAEAAAAAAAEAAAD//wAA//8AAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAD/////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wEAAAD/////AAAAAAAAAAAAAAAAAAABAAEA//8BAAAAAAD//wAAAAAAAAAAAAD//wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAP//AAAAAAAAAAD//wAAAAAAAAAAAAD//wAAAAD//wEAAAAAAAAA//8AAAAAAAAAAAEAAAD//wAAAAD//wEA//8AAAAAAQAAAAAAAQAAAAAA//8BAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAEA//8AAAAAAAD//wAAAAD//wAAAAABAP//AQAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAA//8BAP//AAAAAAAAAAD//wEAAAABAAAAAAAAAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAP//AAAAAAAAAAAAAP//AAABAAAAAAAAAP//AAAAAAAA//8AAAAAAQAAAAAAAAAAAAAAAAAAAAEAAQAAAAAAAAABAAAAAAD//wAAAQAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAAAP//AQAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAP////8AAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAAAABAAAAAQAAAP//AAABAAAA//8AAAAAAAD//wAAAQAAAAAAAQAAAAAAAAAAAAAAAAABAAEAAAD//wEAAQAAAAAAAAAAAAAAAAAAAP//AAD//wAAAAD//wEAAAAAAAAAAQAAAAAAAAAAAAEA/////wAAAAAAAAAAAAD//wAAAAABAAAAAAABAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAAEAAAAAAAAAAAAAAAEAAAD//wAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAQD//wAAAAAAAAAAAAD//wAAAAAAAAAAAAABAAAA//8AAAEAAAAAAP//AAAAAAEAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAD/////AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAD//wAA//8AAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAD//wAAAQAAAAAAAAABAAAAAAD//wAAAAAAAAAAAAABAP//AAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAP//AAAAAAEAAAABAAAAAAD//wAAAAAAAAAA//8AAAAA////////AAD//wAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAP//AAAAAAAAAAABAAAAAAD//wEAAAABAAAAAAAAAAEAAAAAAAAAAQD//wAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAP//AAABAAAAAQAAAAAAAAAAAAAAAQAAAAAAAQAAAP//AQABAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAEAAQAAAAAAAQAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAA//8AAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAD//wEAAAAAAAAAAAAAAAAAAAD//wEAAAAAAP//AAAAAP//AQAAAAAAAAABAP//AAAAAAAAAAAAAAAAAAAAAAEA//8AAAAAAAAAAAAAAAD//wAAAAABAAAAAAAAAAAAAAAAAAAAAQD//wAAAQAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAP//AAAAAAAAAAAAAAAAAAD/////AAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAABAAEAAAAAAAAAAAD//wAAAAD/////AAAAAP//AAD/////AAD//wEAAAABAAAA//8AAAAAAAAAAAAA//8AAAAA//8AAAAAAQAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAEAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAA/////wAAAAD//wAAAAABAAAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAEAAAAAAAAAAAD//wAA//8AAAAAAAAAAP//AAABAAAAAAAAAP////8AAAAAAAD//wAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAQABAAAA//8AAAAA//8AAAAAAAAAAAAAAAAAAAAA//8AAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAQAAAAAAAAAAAP//AQAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAD//wAAAAD/////AAAAAAAA//8AAAAAAQAAAAAAAAAAAP////8AAAAAAAAAAAAAAAAAAAEA/////wAAAAABAAAAAQD//wAA/////wEAAAAAAAEAAAAAAAAAAAABAAAAAAAAAP//AAAAAAAAAAAAAAAAAAABAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAQAAAP//AAAAAAAAAAD/////AAABAAAAAAAAAAAAAAAAAP//AAAAAAAAAQAAAAAAAAAAAP//AAAAAAAAAAAAAAAA//8AAAAAAQD//wAAAAAAAP//AAAAAAEAAAAAAAAAAAAAAP//AAABAAAAAAABAP//AAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAABAAAAAAD//wAAAAABAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAD//wAAAAABAAAAAAAAAAAAAAAAAAEAAAAAAP//AAAAAAAAAAAAAAEAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAP////8AAAAAAAABAAAAAAAAAAEAAAABAAAAAAAAAAEAAAD/////AAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAQABAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAEA//8AAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAP//AAD//wAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAEA//8AAAAAAAABAAAA//8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAD//wAAAAAAAAAAAAAAAAAA//8AAAAAAQAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAD//wAAAAD//wAAAAABAAAAAAAAAAAAAAAAAAAAAAABAAAAAAABAAAAAAABAAAAAAAAAAEAAAD//wAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAD//wAAAAAAAP//AQAAAAAA/////wAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAEAAAAAAP//AQABAAAAAQABAAAA//8AAAAAAAAAAAEAAQAAAAEAAAAAAAAA//8AAAAAAAAAAAAAAAD//wAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAA//8AAAAAAAD//wEAAAAAAAAAAAAAAP////8AAAAAAAABAAAAAAAAAAAAAAAAAAAAAAABAP//AAAAAAAAAQAAAP////8AAAEAAAAAAAAAAAABAAAAAAABAAAAAAAAAAEAAQD//wEAAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAEAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAQAAAAAA//8BAAAAAAAAAAAAAAAAAA==";
    video = document.getElementsByTagName('video')[0];
    video.src = "data:audio/wav;base64," + data;
    runTest();
}

function play()
{
    video.currentTime = 0;
    video.play().catch((err) => { });
    TestPage.dispatchEventToFrontend('PlayEvent', {count: 1});
}

function pause()
{
    video.pause();
    TestPage.dispatchEventToFrontend('PauseEvent', {count: 1});
}

function setupTrackTest()
{
    let track = document.createElement('track');
    track.src = 'data:text/vtt,'+encodeURIComponent('WEBVTT\n\n00:00:00.000 --> 00:00:00.001\nCue 1\n\n'+
                                                '00:00:00.000 --> 00:00:00.001 line:0\nCue 2\n\n'+
                                                '00:00:00.000 --> 00:00:00.001 line:0%\nCue 3');
    track.track.mode = 'showing';
    video.appendChild(track);
}

function test()
{
    let suite = InspectorTest.createAsyncSuite("Console.Logging");

    suite.addTestCase({
        name: "Console.Logging.BasicProperties",
        description: "Check initial properties.",
        test(resolve, reject) {
            ConsoleAgent.getLoggingChannels((error, channels) => {
                if (error) {
                    InspectorTest.fail(`ConsoleAgent.getLoggingChannels() failed with error ${error}`);
                    reject();
                }

                InspectorTest.expectThat(WI.ConsoleManager.supportsLogChannels(), "Log channels should be supported.");
                InspectorTest.expectThat(WI.consoleManager.customLoggingChannels, "Has WI.consoleManager.customLoggingChannels.");
                InspectorTest.expectThat(WI.consoleManager.customLoggingChannels.length, "WI.consoleManager.customLoggingChannels is not empty.");

                let sources = Object.values(WI.ConsoleMessage.MessageSource);
                WI.consoleManager.customLoggingChannels.forEach((channel) => {
                    InspectorTest.expectThat(sources.includes(channel.source), "Log channel has known source.");
                    InspectorTest.expectEqual(channel.level, WI.LoggingChannel.Level.Off, "Log channel disabled by default.");
                });

                resolve();
            });
        }
    });

    suite.addTestCase({
        name: "Console.Logging.InvalidLevel",
        description: "setLoggingChannelLevel should reject invalid log channel level.",
        test(resolve, reject) {
            ConsoleAgent.setLoggingChannelLevel(WI.ConsoleMessage.MessageSource.Media, "DOES_NOT_EXIST", (error) => {
                if (!error) {
                    InspectorTest.fail("Should have an error with invalid level.");
                    reject();
                    return;
                }
                InspectorTest.pass(error);
                resolve();
            });
        }
    });

    suite.addTestCase({
        name: "Console.Logging.NoLogging",
        description: "No <video> logging when disabled.",
        test(resolve, reject) {
            let channel = WI.consoleManager.customLoggingChannels.find(channel => channel.source === WI.ConsoleMessage.MessageSource.Media);
            InspectorTest.expectThat(channel.level === WI.LoggingChannel.Level.Off, "Media logging disabled.");

            let logListener = WI.consoleManager.addEventListener(WI.ConsoleManager.Event.MessageAdded, (event) => {
                InspectorTest.fail("Nothing should be logged to the console.");
                reject();
            });

            InspectorTest.awaitEvent("PlayEvent").then((event) => {
                InspectorTest.log("Started Playing");
            });

            InspectorTest.awaitEvent("PauseEvent").then((event) => {
                InspectorTest.log("Stopped Playing");
                WI.consoleManager.removeEventListener(WI.ConsoleManager.Event.MessageAdded, logListener, null);
            }).then(resolve, reject);

            InspectorTest.evaluateInPage(`play()`);
            InspectorTest.evaluateInPage(`pause()`);
        }
    });


    suite.addTestCase({
        name: "Console.Logging.MediaLogging",
        description: "<video> logging when enabled.",
        test(resolve, reject) {
            ConsoleAgent.clearMessages();

            let channel = WI.consoleManager.customLoggingChannels.find(channel => channel.source === WI.ConsoleMessage.MessageSource.Media);
            InspectorTest.expectThat(channel.level === WI.LoggingChannel.Level.Off, "Media logging disabled.");

            ConsoleAgent.setLoggingChannelLevel(channel.source, WI.LoggingChannel.Level.Basic)
            ConsoleAgent.getLoggingChannels((error, channels) => {
                if (error) {
                    InspectorTest.fail(`ConsoleAgent.getLoggingChannels() failed with error ${error}`);
                    reject();
                }
            
                let mediaChannel = channels.find(channel => channel.source === WI.ConsoleMessage.MessageSource.Media);
                InspectorTest.expectThat(mediaChannel.level === WI.LoggingChannel.Level.Basic, "Media logging has been enabled.");

                let logListener = WI.consoleManager.addEventListener(WI.ConsoleManager.Event.MessageAdded, (event) => {
                    let message = event.data.message;
                    InspectorTest.assert(message instanceof WI.ConsoleMessage);
                    InspectorTest.expectThat(message.source === WI.ConsoleMessage.MessageSource.Media, "Media log message should have source 'media'.");
                    WI.consoleManager.removeEventListener(WI.ConsoleManager.Event.MessageAdded, logListener, null);
                    ConsoleAgent.setLoggingChannelLevel(mediaChannel.source, WI.LoggingChannel.Level.Off)
                    resolve();
                });

                InspectorTest.evaluateInPage(`play()`);
                InspectorTest.evaluateInPage(`pause()`);
            })
        }
    });

    suite.addTestCase({
        name: "Console.Logging.LogAsJSONWithoutRepeat",
        description: "JSON messages logged correctly.",
        test(resolve, reject) {
            ConsoleAgent.clearMessages();

            let channel = WI.consoleManager.customLoggingChannels.find(channel => channel.source === WI.ConsoleMessage.MessageSource.Media);
            InspectorTest.expectThat(channel.level === WI.LoggingChannel.Level.Off, "Media logging disabled.");

            ConsoleAgent.setLoggingChannelLevel(channel.source, WI.LoggingChannel.Level.Verbose)
            ConsoleAgent.getLoggingChannels((error, channels) => {
                if (error) {
                    InspectorTest.fail(`ConsoleAgent.getLoggingChannels() failed with error ${error}`);
                    reject();
                }

                let mediaChannel = channels.find(channel => channel.source === WI.ConsoleMessage.MessageSource.Media);
                InspectorTest.expectThat(mediaChannel.level === WI.LoggingChannel.Level.Verbose, "Verbose media logging has been enabled.");

                let messageCount = 0;
                let logListener = WI.consoleManager.addEventListener(WI.ConsoleManager.Event.MessageAdded, (event) => {
                    let message = event.data.message;
                    InspectorTest.assert(message instanceof WI.ConsoleMessage);
                    InspectorTest.assert(message.source === WI.ConsoleMessage.MessageSource.Media);

                    if (message.messageText.includes("LoadableTextTrack::newCuesAvailable")) {
                        InspectorTest.expectThat(message.parameters.length > 1, "Message logged as JSON.");
                        InspectorTest.expectThat(message.repeatCount === 1, "ConsoleMessage repeatCount is 1.");
                        if (++messageCount === 3) {
                            InspectorTest.log("Received three JSON messages.");
                            WI.consoleManager.removeEventListener(WI.ConsoleManager.Event.MessageAdded, logListener, null);
                            ConsoleAgent.setLoggingChannelLevel(mediaChannel.source, WI.LoggingChannel.Level.Off)
                            resolve();
                        }
                    }
                });

                InspectorTest.evaluateInPage(`setupTrackTest()`);
            })
        }
    });

    suite.runTestCasesAndFinish();
}

</script>
</head>
<body onload="setup()">
<p>Test WebKit logging configuration and console display.</p>
<video width=320 height=240 controls></video>
</body>
</html>
