/* 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 . */ /** * Test reload via an href link, which refers to the same document. * It seems to cause different codepath compared to F5. */ "use strict"; add_task(async function () { const dbg = await initDebugger( "doc-reload-link.html", "doc-reload-link.html" ); info("Add a breakpoint that will be hit on reload"); await addBreakpoint(dbg, "doc-reload-link.html", 3); for (let i = 0; i < 5; i++) { const onReloaded = waitForReload(dbg.commands); info( "Reload via a link, this causes special race condition different from F5" ); await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () { const reloadLink = content.document.querySelector("a"); reloadLink.click(); }); info("Wait for paused\n"); await waitForPaused(dbg); info("Check paused location\n"); const source = findSource(dbg, "doc-reload-link.html"); assertPausedAtSourceAndLine(dbg, source.id, 3); await resume(dbg); info("Wait for completion of the page load"); // This help ensure that the page loaded correctly and prevent pending request at teardown await onReloaded; } }); async function waitForReload(commands) { let resolve; const onReloaded = new Promise(r => (resolve = r)); const { resourceCommand } = commands; const { DOCUMENT_EVENT } = resourceCommand.TYPES; const onAvailable = resources => { if (resources.find(resource => resource.name == "dom-complete")) { resourceCommand.unwatchResources([DOCUMENT_EVENT], { onAvailable }); resolve(); } }; // Wait for watchResources completion before reloading, otherwise we might miss the dom-complete event // if watchResources is still pending while the reload already started and finished loading the document early. await resourceCommand.watchResources([DOCUMENT_EVENT], { onAvailable, ignoreExistingResources: true, }); return onReloaded; }