blob: cdf0efc785ba1f2db5aa41bd00f449c69aba40d2 [file] [log] [blame] [edit]
<!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>