Verified Commit 4bc33f16 authored by Nika Layzell's avatar Nika Layzell Committed by ma1
Browse files

Bug 1881037 - Part 1: Stop showing unknown protocol error pages for...

Bug 1881037 - Part 1: Stop showing unknown protocol error pages for web-triggered loads, r=smaug,necko-reviewers,kershaw, a=dsmith

Differential Revision: https://phabricator.services.mozilla.com/D217495
parent ecec6c6d
Loading
Loading
Loading
Loading
+4 −15
Original line number Diff line number Diff line
@@ -6254,7 +6254,7 @@ already_AddRefed<nsIURI> nsDocShell::AttemptURIFixup(

nsresult nsDocShell::FilterStatusForErrorPage(
    nsresult aStatus, nsIChannel* aChannel, uint32_t aLoadType,
    bool aIsTopFrame, bool aUseErrorPages, bool aIsInitialDocument,
    bool aIsTopFrame, bool aUseErrorPages,
    bool* aSkippedUnknownProtocolNavigation) {
  // Errors to be shown only on top-level frames
  if ((aStatus == NS_ERROR_UNKNOWN_HOST ||
@@ -6298,18 +6298,10 @@ nsresult nsDocShell::FilterStatusForErrorPage(

  if (aStatus == NS_ERROR_UNKNOWN_PROTOCOL) {
    // For unknown protocols we only display an error if the load is triggered
    // by the browser itself, or we're replacing the initial document (and
    // nothing else). Showing the error for page-triggered navigations causes
    // annoying behavior for users, see bug 1528305.
    //
    // We could, maybe, try to detect if this is in response to some user
    // interaction (like clicking a link, or something else) and maybe show
    // the error page in that case. But this allows for ctrl+clicking and such
    // to see the error page.
    // by the browser itself. Showing the error for page-triggered navigations
    // causes annoying behavior for users, see bug 1528305.
    nsCOMPtr<nsILoadInfo> info = aChannel->LoadInfo();
    if (!info->TriggeringPrincipal()->IsSystemPrincipal() &&
        StaticPrefs::dom_no_unknown_protocol_error_enabled() &&
        !aIsInitialDocument) {
    if (!info->TriggeringPrincipal()->IsSystemPrincipal()) {
      if (aSkippedUnknownProtocolNavigation) {
        *aSkippedUnknownProtocolNavigation = true;
      }
@@ -6459,12 +6451,9 @@ nsresult nsDocShell::EndPageLoad(nsIWebProgress* aProgress,
                                aStatus == NS_ERROR_CONTENT_BLOCKED);
    UnblockEmbedderLoadEventForFailure(fireFrameErrorEvent);

    bool isInitialDocument =
        !GetExtantDocument() || GetExtantDocument()->IsInitialDocument();
    bool skippedUnknownProtocolNavigation = false;
    aStatus = FilterStatusForErrorPage(aStatus, aChannel, mLoadType, isTopFrame,
                                       mBrowsingContext->GetUseErrorPages(),
                                       isInitialDocument,
                                       &skippedUnknownProtocolNavigation);
    hadErrorStatus = true;
    if (NS_FAILED(aStatus)) {
+1 −1
Original line number Diff line number Diff line
@@ -464,7 +464,7 @@ class nsDocShell final : public nsDocLoader,
  // navigation.
  static nsresult FilterStatusForErrorPage(
      nsresult aStatus, nsIChannel* aChannel, uint32_t aLoadType,
      bool aIsTopFrame, bool aUseErrorPages, bool aIsInitialDocument,
      bool aIsTopFrame, bool aUseErrorPages,
      bool* aSkippedUnknownProtocolNavigation = nullptr);

  // Notify consumers of a search being loaded through the observer service:
+1 −7
Original line number Diff line number Diff line
@@ -2325,15 +2325,9 @@ bool DocumentLoadListener::DocShellWillDisplayContent(nsresult aStatus) {

  auto* loadingContext = GetLoadingBrowsingContext();

  bool isInitialDocument = true;
  if (WindowGlobalParent* currentWindow =
          loadingContext->GetCurrentWindowGlobal()) {
    isInitialDocument = currentWindow->IsInitialDocument();
  }

  nsresult rv = nsDocShell::FilterStatusForErrorPage(
      aStatus, mChannel, mLoadStateLoadType, loadingContext->IsTop(),
      loadingContext->GetUseErrorPages(), isInitialDocument, nullptr);
      loadingContext->GetUseErrorPages(), nullptr);

  if (NS_SUCCEEDED(rv)) {
    MOZ_LOG(gProcessIsolationLog, LogLevel::Verbose,