| <!doctype html> | |
| <html> | |
| <head> | |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> | |
| <script src="resources/async-stack-trace-test.js"></script> | |
| <script> | |
| function triggerMicrotask(completion) { | |
| queueMicrotask(function handleMicrotask() { | |
| if (completion) | |
| completion(); | |
| else | |
| debugger; | |
| }); | |
| } | |
| function triggerNestedMicrotask() { | |
| queueMicrotask(function handleMicrotask1() { | |
| queueMicrotask(function handleMicrotask2() { | |
| debugger; | |
| }); | |
| }); | |
| } | |
| function triggerRequestAnimationFrame(completion) { | |
| requestAnimationFrame(function handleAnimationFrame() { | |
| if (completion) | |
| completion(); | |
| else | |
| debugger; | |
| }); | |
| } | |
| function triggerNestedRequestAnimationFrame() { | |
| requestAnimationFrame(function handleAnimationFrame1() { | |
| requestAnimationFrame(function handleAnimationFrame2() { | |
| debugger; | |
| }); | |
| }); | |
| } | |
| function triggerSetTimeout(completion) { | |
| setTimeout(function handleTimeout() { | |
| if (completion) | |
| completion(); | |
| else | |
| debugger; | |
| }); | |
| } | |
| function triggerNestedSetTimeout() { | |
| setTimeout(function handleTimeout1() { | |
| setTimeout(function handleTimeout2() { | |
| debugger; | |
| }); | |
| }); | |
| } | |
| function triggerSetInterval(completion) { | |
| let timer = setInterval(function handleInterval() { | |
| clearInterval(timer); | |
| if (completion) | |
| completion(); | |
| else | |
| debugger; | |
| }); | |
| } | |
| function triggerNestedSetInterval() { | |
| let outerTimer = setInterval(function handleInterval1() { | |
| clearInterval(outerTimer); | |
| let innerTimer = setInterval(function handleInterval2() { | |
| clearInterval(innerTimer); | |
| debugger; | |
| }); | |
| }); | |
| } | |
| function triggerPostMessage(completion) { | |
| let frame = document.createElement("iframe"); | |
| frame.srcdoc = `<script>window.parent.postMessage(42, "*");<\/script>`; | |
| document.body.appendChild(frame); | |
| window.addEventListener("message", function handleMessage() { | |
| window.removeEventListener("message", handleMessage); | |
| if (completion) | |
| completion(); | |
| else | |
| debugger; | |
| }); | |
| } | |
| function triggerCombined() { | |
| triggerMicrotask(() => { | |
| triggerRequestAnimationFrame(() => { | |
| triggerSetTimeout(() => { | |
| triggerSetInterval(() => { | |
| triggerPostMessage(); | |
| }); | |
| }); | |
| }); | |
| }); | |
| } | |
| function test() | |
| { | |
| let suite = InspectorTest.createAsyncSuite("AsyncStackTrace.Basic"); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.Microtask", | |
| expression: `triggerMicrotask()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.NestedMicrotask", | |
| expression: `triggerNestedMicrotask()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.RequestAnimationFrame", | |
| expression: `triggerRequestAnimationFrame()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.NestedRequestAnimationFrame", | |
| expression: `triggerNestedRequestAnimationFrame()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.SetTimeout", | |
| expression: `triggerSetTimeout()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.NestedSetTimeout", | |
| expression: `triggerNestedSetTimeout()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.SetInterval", | |
| expression: `triggerSetInterval()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.NestedSetInterval", | |
| expression: `triggerNestedSetInterval()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.NestedSetInterval", | |
| expression: `triggerNestedSetInterval()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.PostMessage", | |
| expression: `triggerPostMessage()`, | |
| }); | |
| addAsyncStackTraceTestCase(suite, { | |
| name: "AsyncStackTrace.Basic.Combined", | |
| expression: `triggerCombined()`, | |
| }); | |
| suite.runTestCasesAndFinish(); | |
| } | |
| </script> | |
| </head> | |
| <body onload="runTest()"> | |
| <p>Tests for checking that async stack traces exist when pausing in asynchronous callbacks: requestAnimationFrame, setTimeout, setInterval, and postMessage.</p> | |
| </body> | |
| </html> |