diff options
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-paused-overlay-iframe.js')
-rw-r--r-- | devtools/client/debugger/test/mochitest/browser_dbg-paused-overlay-iframe.js | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-paused-overlay-iframe.js b/devtools/client/debugger/test/mochitest/browser_dbg-paused-overlay-iframe.js new file mode 100644 index 0000000000..5f8bcd972c --- /dev/null +++ b/devtools/client/debugger/test/mochitest/browser_dbg-paused-overlay-iframe.js @@ -0,0 +1,76 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */ + +// Tests the paused overlay in a remote frame + +"use strict"; + +const TEST_COM_URI = `${URL_ROOT_COM_SSL}examples/doc_dbg-fission-frame-sources.html`; + +add_task(async function () { + info("Load a test page with a remote frame"); + // simple1.js is imported by the main page. simple2.js comes from the remote frame. + const dbg = await initDebuggerWithAbsoluteURL( + TEST_COM_URI, + "simple1.js", + "simple2.js" + ); + const { + selectors: { getSelectedSource }, + commands, + } = dbg; + + info("Add breakpoint within the iframe, in `foo` function"); + await selectSource(dbg, "simple2.js"); + await addBreakpoint(dbg, "simple2.js", 5); + + info("Call `foo` in the iframe"); + SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => { + const iframe = content.document.querySelector("iframe"); + SpecialPowers.spawn(iframe, [], () => { + return content.wrappedJSObject.foo(); + }); + }); + await waitForPaused(dbg); + ok(true, "debugger is paused"); + + let highlighterTestFront; + if (isFissionEnabled() || isEveryFrameTargetEnabled()) { + // We need to retrieve the highlighterTestFront for the frame target. + const iframeTarget = commands.targetCommand + .getAllTargets([commands.targetCommand.TYPES.FRAME]) + .find(target => target.url.includes("example.org")); + highlighterTestFront = await iframeTarget.getFront("highlighterTest"); + } else { + // When fission is disabled, we don't have a dedicated target for the remote frame. + // In this case, the overlay is displayed by the top-level target anyway, so we can + // get the corresponding highlighter test front. + highlighterTestFront = await getHighlighterTestFront(dbg.toolbox); + } + + info("Check that the paused overlay is displayed"); + await waitFor(() => highlighterTestFront.isPausedDebuggerOverlayVisible()); + ok(true, "Paused debugger overlay is visible"); + + ok( + getSelectedSource().url.includes("simple2.js"), + "Selected source is simple2.js" + ); + assertPausedAtSourceAndLine(dbg, findSource(dbg, "simple2.js").id, 5); + + info("Test clicking the resume button"); + await highlighterTestFront.clickPausedDebuggerOverlayButton( + "paused-dbg-resume-button" + ); + + await waitForResumed(dbg); + ok("The debugger isn't paused after clicking on the resume button"); + + await waitFor(async () => { + const visible = await highlighterTestFront.isPausedDebuggerOverlayVisible(); + return !visible; + }); + + ok(true, "The overlay is now hidden"); +}); |