diff --git a/devtools/server/actors/thread.js b/devtools/server/actors/thread.js index bcefa8e253b6..92373850b1a9 100644 --- a/devtools/server/actors/thread.js +++ b/devtools/server/actors/thread.js @@ -834,6 +834,7 @@ const ThreadActor = ActorClassWithSpec(threadSpec, { if (completion.await || completion.yield) { thread.suspendedFrame = this; this.waitingOnStep = true; + thread.dbg.onEnterFrame = undefined; return undefined; } diff --git a/devtools/server/tests/unit/test_stepping-14.js b/devtools/server/tests/unit/test_stepping-14.js new file mode 100644 index 000000000000..2cb0c6f3316e --- /dev/null +++ b/devtools/server/tests/unit/test_stepping-14.js @@ -0,0 +1,55 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/* + * Check that is possible to step into both the inner and outer function + * calls. + */ + +add_task( + threadFrontTest(async ({ threadFront, targetFront, debuggee }) => { + dumpn("Evaluating test code and waiting for first debugger statement"); + + const consoleFront = await targetFront.getFront("console"); + consoleFront.evaluateJSAsync( + `(function () { + async function f() { + const p = Promise.resolve(43); + await p; + return p; + } + + function call_f() { + Promise.resolve(42).then(forty_two => { + return forty_two; + }); + + f().then(v => { + return v; + }); + } + debugger; + call_f(); + })()` + ); + + const packet = await waitForEvent(threadFront, "paused"); + const location = { + sourceId: packet.frame.where.actor, + line: 4, + column: 10, + }; + + await threadFront.setBreakpoint(location, {}); + + const packet2 = await resumeAndWaitForPause(threadFront); + Assert.equal(packet2.frame.where.line, 4, "landed at await"); + + const packet3 = await stepIn(threadFront); + Assert.equal(packet3.frame.where.line, 5, "step to the next line"); + + await threadFront.resume(); + }) +); diff --git a/devtools/server/tests/unit/xpcshell.ini b/devtools/server/tests/unit/xpcshell.ini index 0b43c528e2fc..d76951f1f3f6 100644 --- a/devtools/server/tests/unit/xpcshell.ini +++ b/devtools/server/tests/unit/xpcshell.ini @@ -195,6 +195,7 @@ skip-if = true # breakpoint sliding is not supported bug 1525685 [test_stepping-11.js] [test_stepping-12.js] [test_stepping-13.js] +[test_stepping-14.js] [test_stepping-with-skip-breakpoints.js] [test_framebindings-01.js] [test_framebindings-02.js]