Files
sousa-gecko/browser/base/content/test/about/browser_aboutNetError_emptyResponse.js
T
Jack Brown 677aa45084 Bug 2027209 - Show error code on customNetError pages - r=rking
Affected errors:

NS_ERROR_OFFLINE
NS_ERROR_DOM_COOP_FAILED (blockedByCOOP)
NS_ERROR_DOM_COEP_FAILED (blockedByCOEP)
NS_ERROR_NET_EMPTY_RESPONSE (netReset)

Differential Revision: https://phabricator.services.mozilla.com/D294024
2026-04-27 23:06:40 +00:00

93 lines
2.9 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
set: [["test.wait300msAfterTabSwitch", true]],
});
});
function startDropServer() {
const server = Cc["@mozilla.org/network/server-socket;1"].createInstance(
Ci.nsIServerSocket
);
info("Using a random port.");
server.init(-1, true, -1);
server.asyncListen({
onSocketAccepted(socket, transport) {
// Close immediately, no response sent.
transport.close(Cr.NS_OK);
},
onStopListening() {},
});
registerCleanupFunction(() => server.close());
return server.port;
}
add_task(async function test_net_empty_response_copy() {
await setSecurityCertErrorsFeltPrivacyToTrue();
const port = startDropServer();
const url = `http://127.0.0.1:${port}/`;
let browser, tab;
let pageLoaded;
await BrowserTestUtils.openNewForegroundTab(
gBrowser,
() => {
gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, url);
browser = gBrowser.selectedBrowser;
tab = gBrowser.selectedTab;
pageLoaded = BrowserTestUtils.waitForErrorPage(browser);
},
false
);
info("Loading and waiting for the net error.");
await pageLoaded;
Assert.ok("Loaded empty server response.");
await SpecialPowers.spawn(browser, [], async () => {
await ContentTaskUtils.waitForCondition(
() => content?.document?.querySelector("net-error-card"),
"Wait for empty-response copy to render"
);
const doc = content.document;
const netErrorCard = doc.querySelector("net-error-card").wrappedJSObject;
Assert.ok(netErrorCard, "NetErrorCard supports empty server responses.");
Assert.ok(netErrorCard.errorTitle, "NetErrorCard has errorTitle.");
Assert.ok(netErrorCard.errorIntro, "NetErrorCard has errorIntro.");
Assert.ok(netErrorCard.tryAgainButton, "NetErrorCard has tryAgainButton.");
Assert.equal(
netErrorCard.errorTitle.dataset.l10nId,
"problem-with-this-site-title",
"Using the 'problem with this site' title"
);
Assert.equal(
netErrorCard.errorIntro.dataset.l10nId,
"neterror-http-empty-response-description",
"Using the 'empty response' intro."
);
const list = netErrorCard.renderRoot.querySelector(".what-can-you-do-list");
Assert.ok(list, "NetErrorCard has what-can-you-do list.");
Assert.ok(
list.querySelector('[data-l10n-id="neterror-load-error-try-again"]'),
"List includes try-again item"
);
Assert.ok(
list.querySelector('[data-l10n-id="neterror-load-error-connection"]'),
"List includes connection item"
);
Assert.ok(
list.querySelector('[data-l10n-id="neterror-load-error-firewall"]'),
"List includes firewall item"
);
Assert.ok(
ContentTaskUtils.isVisible(netErrorCard.tryAgainButton),
"The 'Try Again' button is shown."
);
});
BrowserTestUtils.removeTab(tab);
});