| <!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> |