<!DOCTYPE html>
<html>
<head>
<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
<script src="../debugger/resources/log-active-stack-trace.js"></script>
<script src="resources/dom-debugger-utilities.js"></script>
<script>
function test()
{
    let workerTarget = null;

    let suite = InspectorTest.createAsyncSuite("Worker.DOMDebugger.EventBreakpoint.Timeout");

    suite.addTestCase({
        name: "Worker.DOMDebugger.EventBreakpoint.Timeout.Basic",
        description: "Check that adding/removing timeout event breakpoints work for a Worker target.",
        async test() {
            InspectorTest.assert(workerTarget.DOMDebuggerAgent, "Worker target should have a DOMDebuggerAgent.");
            InspectorTest.assert(workerTarget.DOMDebuggerAgent.setEventBreakpoint, "The Worker's DOMDebuggerAgent should have a setEventBreakpoint command.");
            InspectorTest.assert(workerTarget.DOMDebuggerAgent.removeEventBreakpoint, "The Worker's DOMDebuggerAgent should have a removeEventBreakpoint command.");

            const breakpointType = "timeout";

            await workerTarget.DOMDebuggerAgent.setEventBreakpoint(breakpointType);

            await Promise.all([
                WI.debuggerManager.awaitEvent(WI.DebuggerManager.Event.Paused),
                InspectorTest.evaluateInPage(`worker.postMessage("triggerTimeout")`),
            ]);

            let paused = WI.debuggerManager.paused;

            let targetData = WI.debuggerManager.dataForTarget(WI.debuggerManager.activeCallFrame.target);
            let pauseReason = targetData.pauseReason;

            let stackTrace = getActiveStackTrace();

            await workerTarget.DOMDebuggerAgent.removeEventBreakpoint(breakpointType);

            await WI.debuggerManager.resume();

            InspectorTest.expectThat(paused, "Should have paused.");
            InspectorTest.expectEqual(pauseReason, WI.DebuggerManager.PauseReason.Timeout, "Pause reason should have been Timeout.");
            logStackTrace(stackTrace);
        },
    });

    InspectorTest.Worker.DOMDebugger.createWorkerTarget((target) => {
        workerTarget = target;
        suite.runTestCasesAndFinish();
    });
}
</script>
</head>
<body onload="runTest()">
<p>Tests for timeout event breakpoint functionality (DOMDebugger) in a Worker.</p>
</body>
</html>
