<!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.");
                InspectorTest.expectThat(WI.consoleManager.logChannelSources, "Has WI.consoleManager.logChannelSources.");
                InspectorTest.expectThat(WI.consoleManager.logChannelSources.length, "WI.consoleManager.logChannelSources 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>
