/* 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 . */ // 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"); });