Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

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