Bug 1890028 - Display Server Error message when server returns HTTP 500 and unusual content-type r=kershaw,fluent-reviewers,necko-reviewers,flod
Differential Revision: https://phabricator.services.mozilla.com/D216978
This commit is contained in:
@@ -53,6 +53,11 @@ support-files = [
|
|||||||
["browser_aboutNetError_native_fallback.js"]
|
["browser_aboutNetError_native_fallback.js"]
|
||||||
skip-if = ["socketprocess_networking"]
|
skip-if = ["socketprocess_networking"]
|
||||||
|
|
||||||
|
["browser_aboutNetError_server_error.js"]
|
||||||
|
support-files = [
|
||||||
|
"server_error.sjs",
|
||||||
|
]
|
||||||
|
|
||||||
["browser_aboutNetError_trr.js"]
|
["browser_aboutNetError_trr.js"]
|
||||||
skip-if = ["socketprocess_networking"]
|
skip-if = ["socketprocess_networking"]
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
const SERVER_ERROR_PAGE =
|
||||||
|
"https://example.com/browser/browser/base/content/test/about/server_error.sjs";
|
||||||
|
|
||||||
|
add_task(async function test_serverError() {
|
||||||
|
let browser;
|
||||||
|
let pageLoaded;
|
||||||
|
await BrowserTestUtils.openNewForegroundTab(
|
||||||
|
gBrowser,
|
||||||
|
() => {
|
||||||
|
gBrowser.selectedTab = BrowserTestUtils.addTab(
|
||||||
|
gBrowser,
|
||||||
|
SERVER_ERROR_PAGE
|
||||||
|
);
|
||||||
|
browser = gBrowser.selectedBrowser;
|
||||||
|
pageLoaded = BrowserTestUtils.waitForErrorPage(browser);
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
|
info("Loading and waiting for the net error");
|
||||||
|
await pageLoaded;
|
||||||
|
|
||||||
|
await SpecialPowers.spawn(browser, [], function () {
|
||||||
|
const doc = content.document;
|
||||||
|
ok(
|
||||||
|
doc.documentURI.startsWith("about:neterror"),
|
||||||
|
"Should be showing error page"
|
||||||
|
);
|
||||||
|
|
||||||
|
const titleEl = doc.querySelector(".title-text");
|
||||||
|
const actualDataL10nID = titleEl.getAttribute("data-l10n-id");
|
||||||
|
is(
|
||||||
|
actualDataL10nID,
|
||||||
|
"serverError-title",
|
||||||
|
"Correct error page title is set"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||||
|
});
|
||||||
7
browser/base/content/test/about/server_error.sjs
Normal file
7
browser/base/content/test/about/server_error.sjs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
function handleRequest(request, response) {
|
||||||
|
response.setStatusLine(request.httpVersion, 500, "Internal Server Error");
|
||||||
|
response.setHeader("Content-Type", "application/octet-stream", false);
|
||||||
|
}
|
||||||
@@ -5,6 +5,8 @@
|
|||||||
malformedURI2=Please check that the URL is correct and try again.
|
malformedURI2=Please check that the URL is correct and try again.
|
||||||
fileNotFound=Firefox can’t find the file at %S.
|
fileNotFound=Firefox can’t find the file at %S.
|
||||||
fileAccessDenied=The file at %S is not readable.
|
fileAccessDenied=The file at %S is not readable.
|
||||||
|
# %S is replaced by the uri host
|
||||||
|
serverError=%S might have a temporary problem or it could have moved.
|
||||||
dnsNotFound2=We can’t connect to the server at %S.
|
dnsNotFound2=We can’t connect to the server at %S.
|
||||||
unknownProtocolFound=Firefox doesn’t know how to open this address, because one of the following protocols (%S) isn’t associated with any program or is not allowed in this context.
|
unknownProtocolFound=Firefox doesn’t know how to open this address, because one of the following protocols (%S) isn’t associated with any program or is not allowed in this context.
|
||||||
connectionFailure=Firefox can’t establish a connection to the server at %S.
|
connectionFailure=Firefox can’t establish a connection to the server at %S.
|
||||||
|
|||||||
@@ -3360,6 +3360,9 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
|
|||||||
nestedURI = do_QueryInterface(tempURI);
|
nestedURI = do_QueryInterface(tempURI);
|
||||||
}
|
}
|
||||||
error = "unknownProtocolFound";
|
error = "unknownProtocolFound";
|
||||||
|
} else if (NS_ERROR_NET_ERROR_RESPONSE == aError) {
|
||||||
|
NS_ENSURE_ARG_POINTER(aURI);
|
||||||
|
error = "serverError";
|
||||||
} else if (NS_ERROR_FILE_NOT_FOUND == aError) {
|
} else if (NS_ERROR_FILE_NOT_FOUND == aError) {
|
||||||
NS_ENSURE_ARG_POINTER(aURI);
|
NS_ENSURE_ARG_POINTER(aURI);
|
||||||
error = "fileNotFound";
|
error = "fileNotFound";
|
||||||
@@ -6146,6 +6149,7 @@ nsresult nsDocShell::FilterStatusForErrorPage(
|
|||||||
|
|
||||||
if (aStatus == NS_ERROR_NET_TIMEOUT ||
|
if (aStatus == NS_ERROR_NET_TIMEOUT ||
|
||||||
aStatus == NS_ERROR_NET_TIMEOUT_EXTERNAL ||
|
aStatus == NS_ERROR_NET_TIMEOUT_EXTERNAL ||
|
||||||
|
aStatus == NS_ERROR_NET_ERROR_RESPONSE ||
|
||||||
aStatus == NS_ERROR_PROXY_GATEWAY_TIMEOUT ||
|
aStatus == NS_ERROR_PROXY_GATEWAY_TIMEOUT ||
|
||||||
aStatus == NS_ERROR_REDIRECT_LOOP ||
|
aStatus == NS_ERROR_REDIRECT_LOOP ||
|
||||||
aStatus == NS_ERROR_UNKNOWN_SOCKET_TYPE ||
|
aStatus == NS_ERROR_UNKNOWN_SOCKET_TYPE ||
|
||||||
|
|||||||
@@ -157,6 +157,7 @@ XPC_MSG_DEF(NS_ERROR_NET_TIMEOUT_EXTERNAL , "The request has been canc
|
|||||||
XPC_MSG_DEF(NS_ERROR_OFFLINE , "The requested action could not be completed in the offline state")
|
XPC_MSG_DEF(NS_ERROR_OFFLINE , "The requested action could not be completed in the offline state")
|
||||||
XPC_MSG_DEF(NS_ERROR_PORT_ACCESS_NOT_ALLOWED , "Establishing a connection to an unsafe or otherwise banned port was prohibited")
|
XPC_MSG_DEF(NS_ERROR_PORT_ACCESS_NOT_ALLOWED , "Establishing a connection to an unsafe or otherwise banned port was prohibited")
|
||||||
XPC_MSG_DEF(NS_ERROR_NET_RESET , "The connection was established, but no data was ever received")
|
XPC_MSG_DEF(NS_ERROR_NET_RESET , "The connection was established, but no data was ever received")
|
||||||
|
XPC_MSG_DEF(NS_ERROR_NET_ERROR_RESPONSE , "The connection was established, but the browser received an error response from the server")
|
||||||
XPC_MSG_DEF(NS_ERROR_NET_INTERRUPT , "The connection was established, but the data transfer was interrupted")
|
XPC_MSG_DEF(NS_ERROR_NET_INTERRUPT , "The connection was established, but the data transfer was interrupted")
|
||||||
XPC_MSG_DEF(NS_ERROR_NET_PARTIAL_TRANSFER , "A transfer was only partially done when it completed")
|
XPC_MSG_DEF(NS_ERROR_NET_PARTIAL_TRANSFER , "A transfer was only partially done when it completed")
|
||||||
XPC_MSG_DEF(NS_ERROR_NET_HTTP3_PROTOCOL_ERROR , "There has been a http3 protocol error")
|
XPC_MSG_DEF(NS_ERROR_NET_HTTP3_PROTOCOL_ERROR , "There has been a http3 protocol error")
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ const KNOWN_ERROR_TITLE_IDS = new Set([
|
|||||||
"unsafeContentType-title",
|
"unsafeContentType-title",
|
||||||
"netReset-title",
|
"netReset-title",
|
||||||
"netTimeout-title",
|
"netTimeout-title",
|
||||||
|
"serverError-title",
|
||||||
"unknownProtocolFound-title",
|
"unknownProtocolFound-title",
|
||||||
"proxyConnectFailure-title",
|
"proxyConnectFailure-title",
|
||||||
"proxyResolveFailure-title",
|
"proxyResolveFailure-title",
|
||||||
@@ -745,6 +746,7 @@ function getNetErrorDescParts() {
|
|||||||
case "netInterrupt":
|
case "netInterrupt":
|
||||||
case "netReset":
|
case "netReset":
|
||||||
case "netTimeout":
|
case "netTimeout":
|
||||||
|
case "serverError":
|
||||||
return [
|
return [
|
||||||
["li", "neterror-load-error-try-again"],
|
["li", "neterror-load-error-try-again"],
|
||||||
["li", "neterror-load-error-connection"],
|
["li", "neterror-load-error-connection"],
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ contentEncodingError-title = Content Encoding Error
|
|||||||
unsafeContentType-title = Unsafe File Type
|
unsafeContentType-title = Unsafe File Type
|
||||||
netReset-title = The connection was reset
|
netReset-title = The connection was reset
|
||||||
netTimeout-title = The connection has timed out
|
netTimeout-title = The connection has timed out
|
||||||
|
serverError-title = Looks like there’s a problem with this site
|
||||||
unknownProtocolFound-title = The address wasn’t understood
|
unknownProtocolFound-title = The address wasn’t understood
|
||||||
proxyConnectFailure-title = The proxy server is refusing connections
|
proxyConnectFailure-title = The proxy server is refusing connections
|
||||||
proxyResolveFailure-title = Unable to find the proxy server
|
proxyResolveFailure-title = Unable to find the proxy server
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ ID01:
|
|||||||
- unsafeContentType-title
|
- unsafeContentType-title
|
||||||
- netReset-title
|
- netReset-title
|
||||||
- netTimeout-title
|
- netTimeout-title
|
||||||
|
- serverError-title
|
||||||
- unknownProtocolFound-title
|
- unknownProtocolFound-title
|
||||||
- proxyConnectFailure-title
|
- proxyConnectFailure-title
|
||||||
- proxyResolveFailure-title
|
- proxyResolveFailure-title
|
||||||
|
|||||||
@@ -444,9 +444,9 @@ nsresult nsDocumentOpenInfo::DispatchContent(nsIRequest* request) {
|
|||||||
rv = httpChannel->GetRequestSucceeded(&requestSucceeded);
|
rv = httpChannel->GetRequestSucceeded(&requestSucceeded);
|
||||||
if (NS_FAILED(rv) || !requestSucceeded) {
|
if (NS_FAILED(rv) || !requestSucceeded) {
|
||||||
LOG(
|
LOG(
|
||||||
(" Returning NS_ERROR_FILE_NOT_FOUND from "
|
(" Returning NS_ERROR_NET_ERROR_RESPONSE from "
|
||||||
"nsDocumentOpenInfo::DispatchContent due to failed HTTP response"));
|
"nsDocumentOpenInfo::DispatchContent due to failed HTTP response"));
|
||||||
return NS_ERROR_FILE_NOT_FOUND;
|
return NS_ERROR_NET_ERROR_RESPONSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -325,6 +325,8 @@ with modules["NETWORK"]:
|
|||||||
errors["NS_ERROR_PORT_ACCESS_NOT_ALLOWED"] = FAILURE(19)
|
errors["NS_ERROR_PORT_ACCESS_NOT_ALLOWED"] = FAILURE(19)
|
||||||
# The connection was established, but no data was ever received.
|
# The connection was established, but no data was ever received.
|
||||||
errors["NS_ERROR_NET_RESET"] = FAILURE(20)
|
errors["NS_ERROR_NET_RESET"] = FAILURE(20)
|
||||||
|
# The connection was established, but browser received an error response from the server
|
||||||
|
errors["NS_ERROR_NET_ERROR_RESPONSE"] = FAILURE(35)
|
||||||
# The connection was established, but the data transfer was interrupted.
|
# The connection was established, but the data transfer was interrupted.
|
||||||
errors["NS_ERROR_NET_INTERRUPT"] = FAILURE(71)
|
errors["NS_ERROR_NET_INTERRUPT"] = FAILURE(71)
|
||||||
# The connection attempt to a proxy failed.
|
# The connection attempt to a proxy failed.
|
||||||
|
|||||||
Reference in New Issue
Block a user