<!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();
    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>
