diff --git a/caps/nsScriptSecurityManager.cpp b/caps/nsScriptSecurityManager.cpp index 2b91c73cccfd..078b87df059c 100644 --- a/caps/nsScriptSecurityManager.cpp +++ b/caps/nsScriptSecurityManager.cpp @@ -253,9 +253,9 @@ static void InheritAndSetCSPOnPrincipalIfNeeded(nsIChannel* aChannel, return; } - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo || loadInfo->GetExternalContentPolicyType() != - nsIContentPolicy::TYPE_SUBDOCUMENT) { + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (loadInfo->GetExternalContentPolicyType() != + nsIContentPolicy::TYPE_SUBDOCUMENT) { return; } @@ -302,8 +302,8 @@ nsresult nsScriptSecurityManager::GetChannelResultPrincipal( MOZ_ASSERT(aChannel, "Must have channel!"); // Check whether we have an nsILoadInfo that says what we should do. - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo && loadInfo->GetForceInheritPrincipalOverruleOwner()) { + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (loadInfo->GetForceInheritPrincipalOverruleOwner()) { nsCOMPtr principalToInherit = loadInfo->FindPrincipalToInherit(aChannel); principalToInherit.forget(aPrincipal); @@ -319,53 +319,51 @@ nsresult nsScriptSecurityManager::GetChannelResultPrincipal( } } - if (loadInfo) { - if (!aIgnoreSandboxing && loadInfo->GetLoadingSandboxed()) { - nsCOMPtr sandboxedLoadingPrincipal = - loadInfo->GetSandboxedLoadingPrincipal(); - MOZ_ASSERT(sandboxedLoadingPrincipal); - InheritAndSetCSPOnPrincipalIfNeeded(aChannel, sandboxedLoadingPrincipal); - sandboxedLoadingPrincipal.forget(aPrincipal); - return NS_OK; - } + if (!aIgnoreSandboxing && loadInfo->GetLoadingSandboxed()) { + nsCOMPtr sandboxedLoadingPrincipal = + loadInfo->GetSandboxedLoadingPrincipal(); + MOZ_ASSERT(sandboxedLoadingPrincipal); + InheritAndSetCSPOnPrincipalIfNeeded(aChannel, sandboxedLoadingPrincipal); + sandboxedLoadingPrincipal.forget(aPrincipal); + return NS_OK; + } - bool forceInherit = loadInfo->GetForceInheritPrincipal(); - if (aIgnoreSandboxing && !forceInherit) { - // Check if SEC_FORCE_INHERIT_PRINCIPAL was dropped because of - // sandboxing: - if (loadInfo->GetLoadingSandboxed() && - loadInfo->GetForceInheritPrincipalDropped()) { - forceInherit = true; - } + bool forceInherit = loadInfo->GetForceInheritPrincipal(); + if (aIgnoreSandboxing && !forceInherit) { + // Check if SEC_FORCE_INHERIT_PRINCIPAL was dropped because of + // sandboxing: + if (loadInfo->GetLoadingSandboxed() && + loadInfo->GetForceInheritPrincipalDropped()) { + forceInherit = true; } - if (forceInherit) { - nsCOMPtr principalToInherit = - loadInfo->FindPrincipalToInherit(aChannel); + } + if (forceInherit) { + nsCOMPtr principalToInherit = + loadInfo->FindPrincipalToInherit(aChannel); + principalToInherit.forget(aPrincipal); + return NS_OK; + } + + auto securityMode = loadInfo->GetSecurityMode(); + // The data: inheritance flags should only apply to the initial load, + // not to loads that it might have redirected to. + if (loadInfo->RedirectChain().IsEmpty() && + (securityMode == nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS || + securityMode == nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS || + securityMode == nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS)) { + nsCOMPtr uri; + nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(uri)); + NS_ENSURE_SUCCESS(rv, rv); + + nsCOMPtr principalToInherit = + loadInfo->FindPrincipalToInherit(aChannel); + bool inheritForAboutBlank = loadInfo->GetAboutBlankInherits(); + + if (nsContentUtils::ChannelShouldInheritPrincipal( + principalToInherit, uri, inheritForAboutBlank, false)) { principalToInherit.forget(aPrincipal); return NS_OK; } - - auto securityMode = loadInfo->GetSecurityMode(); - // The data: inheritance flags should only apply to the initial load, - // not to loads that it might have redirected to. - if (loadInfo->RedirectChain().IsEmpty() && - (securityMode == nsILoadInfo::SEC_REQUIRE_SAME_ORIGIN_DATA_INHERITS || - securityMode == nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_INHERITS || - securityMode == nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS)) { - nsCOMPtr uri; - nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(uri)); - NS_ENSURE_SUCCESS(rv, rv); - - nsCOMPtr principalToInherit = - loadInfo->FindPrincipalToInherit(aChannel); - bool inheritForAboutBlank = loadInfo->GetAboutBlankInherits(); - - if (nsContentUtils::ChannelShouldInheritPrincipal( - principalToInherit, uri, inheritForAboutBlank, false)) { - principalToInherit.forget(aPrincipal); - return NS_OK; - } - } } nsresult rv = GetChannelURIPrincipal(aChannel, aPrincipal); NS_ENSURE_SUCCESS(rv, rv); @@ -395,20 +393,14 @@ nsScriptSecurityManager::GetChannelURIPrincipal(nsIChannel* aChannel, nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo; - aChannel->GetLoadInfo(getter_AddRefs(loadInfo)); + nsCOMPtr loadInfo = aChannel->LoadInfo(); // Inherit the origin attributes from loadInfo. // If this is a top-level document load, the origin attributes of the // loadInfo will be set from nsDocShell::DoURILoad. // For subresource loading, the origin attributes of the loadInfo is from // its loadingPrincipal. - OriginAttributes attrs; - - // For addons loadInfo might be null. - if (loadInfo) { - attrs = loadInfo->GetOriginAttributes(); - } + OriginAttributes attrs = loadInfo->GetOriginAttributes(); nsCOMPtr prin = BasePrincipal::CreateCodebasePrincipal(uri, attrs); diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp index 80ca6d6951b5..0399ee6822d1 100644 --- a/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp @@ -4576,10 +4576,8 @@ nsDocShell::Reload(uint32_t aReloadFlags) { httpChan->GetOriginalURI(getter_AddRefs(originalURI)); } - nsCOMPtr loadInfo = chan->GetLoadInfo(); - if (loadInfo) { - loadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); - } + nsCOMPtr loadInfo = chan->LoadInfo(); + loadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); } MOZ_ASSERT(triggeringPrincipal, "Need a valid triggeringPrincipal"); @@ -6850,7 +6848,7 @@ nsresult nsDocShell::EndPageLoad(nsIWebProgress* aProgress, // can increment counts from the search engine MaybeNotifyKeywordSearchLoading(keywordProviderName, keywordAsSent); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); + nsCOMPtr loadInfo = aChannel->LoadInfo(); MOZ_ASSERT(loadInfo, "loadInfo is required on all channels"); nsCOMPtr triggeringPrincipal = loadInfo->TriggeringPrincipal(); @@ -6902,10 +6900,8 @@ nsresult nsDocShell::EndPageLoad(nsIWebProgress* aProgress, } } else if (url && NS_SUCCEEDED(aStatus)) { // If we have a host - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo) { - PredictorLearnRedirect(url, aChannel, loadInfo->GetOriginAttributes()); - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); + PredictorLearnRedirect(url, aChannel, loadInfo->GetOriginAttributes()); } return NS_OK; @@ -9829,8 +9825,7 @@ nsresult nsDocShell::DoURILoad(nsDocShellLoadState* aLoadState, GetIsMozBrowser()); if (isTopLevelDoc && GetDocument() && GetDocument()->GetChannel()) { - nsCOMPtr oldLoadInfo = - GetDocument()->GetChannel()->GetLoadInfo(); + nsCOMPtr oldLoadInfo = GetDocument()->GetChannel()->LoadInfo(); loadInfo->SetOpenerPolicy(oldLoadInfo->GetOpenerPolicy()); } @@ -11293,29 +11288,27 @@ nsresult nsDocShell::AddToSessionHistory(nsIURI* aURI, nsIChannel* aChannel, discardLayoutState = ShouldDiscardLayoutState(httpChannel); } - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo) { - if (!triggeringPrincipal) { - triggeringPrincipal = loadInfo->TriggeringPrincipal(); - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (!triggeringPrincipal) { + triggeringPrincipal = loadInfo->TriggeringPrincipal(); + } - loadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); + loadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); - // For now keep storing just the principal in the SHEntry. - if (!principalToInherit) { - if (loadInfo->GetLoadingSandboxed()) { - if (loadInfo->LoadingPrincipal()) { - principalToInherit = NullPrincipal::CreateWithInheritedAttributes( - loadInfo->LoadingPrincipal()); - } else { - // get the OriginAttributes - OriginAttributes attrs; - loadInfo->GetOriginAttributes(&attrs); - principalToInherit = NullPrincipal::Create(attrs); - } + // For now keep storing just the principal in the SHEntry. + if (!principalToInherit) { + if (loadInfo->GetLoadingSandboxed()) { + if (loadInfo->LoadingPrincipal()) { + principalToInherit = NullPrincipal::CreateWithInheritedAttributes( + loadInfo->LoadingPrincipal()); } else { - principalToInherit = loadInfo->PrincipalToInherit(); + // get the OriginAttributes + OriginAttributes attrs; + loadInfo->GetOriginAttributes(&attrs); + principalToInherit = NullPrincipal::Create(attrs); } + } else { + principalToInherit = loadInfo->PrincipalToInherit(); } } } diff --git a/docshell/base/nsDocShellLoadState.cpp b/docshell/base/nsDocShellLoadState.cpp index 657e3bd12408..e3ec88aff8e6 100644 --- a/docshell/base/nsDocShellLoadState.cpp +++ b/docshell/base/nsDocShellLoadState.cpp @@ -93,10 +93,7 @@ nsresult nsDocShellLoadState::CreateFromPendingChannel( } loadState->SetOriginalURI(originalUri); - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (NS_WARN_IF(!loadInfo)) { - return NS_ERROR_FAILURE; - } + nsCOMPtr loadInfo = channel->LoadInfo(); loadState->SetTriggeringPrincipal(loadInfo->TriggeringPrincipal()); // Return the newly created loadState. diff --git a/dom/base/Document.cpp b/dom/base/Document.cpp index 20b2b35d0197..697abce72215 100644 --- a/dom/base/Document.cpp +++ b/dom/base/Document.cpp @@ -2419,7 +2419,7 @@ static void WarnIfSandboxIneffective(nsIDocShell* aDocShell, } bool Document::IsSynthesized() { - nsCOMPtr loadInfo = mChannel ? mChannel->GetLoadInfo() : nullptr; + nsCOMPtr loadInfo = mChannel ? mChannel->LoadInfo() : nullptr; return loadInfo && loadInfo->GetServiceWorkerTaintingSynthesized(); } @@ -2519,8 +2519,8 @@ nsresult Document::StartDocumentLoad(const char* aCommand, nsIChannel* aChannel, nsCOMPtr docShell = do_QueryInterface(aContainer); // If this is an error page, don't inherit sandbox flags from docshell - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (docShell && !(loadInfo && loadInfo->GetLoadErrorPage())) { + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (docShell && !loadInfo->GetLoadErrorPage()) { nsresult rv = docShell->GetSandboxFlags(&mSandboxFlags); NS_ENSURE_SUCCESS(rv, rv); WarnIfSandboxIneffective(docShell, mSandboxFlags, GetChannel()); @@ -2667,8 +2667,8 @@ nsresult Document::InitCSP(nsIChannel* aChannel) { // Check if this is a signed content to apply default CSP. bool applySignedContentCSP = false; - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo && loadInfo->GetVerifySignedContent()) { + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (loadInfo->GetVerifySignedContent()) { applySignedContentCSP = true; } @@ -7423,13 +7423,10 @@ bool Document::CanSavePresentation(nsIRequest* aNewRequest) { // Favicon loads don't need to block caching. nsCOMPtr channel = do_QueryInterface(request); if (channel) { - nsCOMPtr li; - channel->GetLoadInfo(getter_AddRefs(li)); - if (li) { - if (li->InternalContentPolicyType() == - nsIContentPolicy::TYPE_INTERNAL_IMAGE_FAVICON) { - continue; - } + nsCOMPtr li = channel->LoadInfo(); + if (li->InternalContentPolicyType() == + nsIContentPolicy::TYPE_INTERNAL_IMAGE_FAVICON) { + continue; } } #ifdef DEBUG_PAGE_CACHE @@ -11721,8 +11718,8 @@ void Document::SetUserHasInteracted() { mUserHasInteracted = true; - nsCOMPtr loadInfo = mChannel ? mChannel->GetLoadInfo() : nullptr; - if (loadInfo) { + if (mChannel) { + nsCOMPtr loadInfo = mChannel->LoadInfo(); loadInfo->SetDocumentHasUserInteracted(true); } diff --git a/dom/base/ThirdPartyUtil.cpp b/dom/base/ThirdPartyUtil.cpp index d376672afb5f..2b53e15aaf93 100644 --- a/dom/base/ThirdPartyUtil.cpp +++ b/dom/base/ThirdPartyUtil.cpp @@ -240,7 +240,7 @@ ThirdPartyUtil::IsThirdPartyChannel(nsIChannel* aChannel, nsIURI* aURI, if (NS_FAILED(rv)) return rv; if (!doForce) { - if (nsCOMPtr loadInfo = aChannel->GetLoadInfo()) { + if (nsCOMPtr loadInfo = aChannel->LoadInfo()) { parentIsThird = loadInfo->GetIsInThirdPartyContext(); if (!parentIsThird && loadInfo->GetExternalContentPolicyType() != nsIContentPolicy::TYPE_DOCUMENT) { diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index ce3371bd7c18..0565561e8f66 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -8122,10 +8122,7 @@ bool nsContentUtils::IsNonSubresourceRequest(nsIChannel* aChannel) { return true; } - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return false; - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); nsContentPolicyType type = loadInfo->InternalContentPolicyType(); return IsNonSubresourceInternalPolicyType(type); } @@ -9810,10 +9807,7 @@ nsContentUtils::LookupCustomElementDefinition(Document* aDoc, nsAtom* aNameAtom, rv = aChannel->GetReferrer(getter_AddRefs(referrer)); NS_ENSURE_SUCCESS(rv, false); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return false; - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); nsCOMPtr triggeringPrincipal = loadInfo->TriggeringPrincipal(); // Get the channel's load flags, and use them to generate nsIWebNavigation diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp index 8c59b35f0f2f..2448ffe08e54 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -1718,7 +1718,7 @@ nsresult nsGlobalWindowInner::EnsureClientSource() { } if (!ignoreLoadInfo) { - loadInfo = channel->GetLoadInfo(); + loadInfo = channel->LoadInfo(); } } diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp index 93afdeb5ca0b..983019fb9cb7 100644 --- a/dom/base/nsGlobalWindowOuter.cpp +++ b/dom/base/nsGlobalWindowOuter.cpp @@ -5516,11 +5516,10 @@ void nsGlobalWindowOuter::NotifyContentBlockingEvent(unsigned aEvent, // static bool nsGlobalWindowOuter::SameLoadingURI(Document* aDoc, nsIChannel* aChannel) { nsCOMPtr docURI = aDoc->GetDocumentURI(); - nsCOMPtr channelLoadInfo = aChannel->GetLoadInfo(); - if (!channelLoadInfo || !docURI) { + if (!docURI) { return false; } - + nsCOMPtr channelLoadInfo = aChannel->LoadInfo(); nsCOMPtr channelLoadingPrincipal = channelLoadInfo->LoadingPrincipal(); if (!channelLoadingPrincipal) { diff --git a/dom/base/nsNodeInfoManager.cpp b/dom/base/nsNodeInfoManager.cpp index b355f2bdbee9..0402066da3dc 100644 --- a/dom/base/nsNodeInfoManager.cpp +++ b/dom/base/nsNodeInfoManager.cpp @@ -331,7 +331,7 @@ bool nsNodeInfoManager::InternalSVGEnabled() { nsCOMPtr channel = mDocument->GetChannel(); // We don't have a channel for SVGs constructed inside a SVG script if (channel) { - loadInfo = channel->GetLoadInfo(); + loadInfo = channel->LoadInfo(); } } bool conclusion = diff --git a/dom/base/nsObjectLoadingContent.cpp b/dom/base/nsObjectLoadingContent.cpp index b0f09a8e2705..a523b3f5ffdd 100644 --- a/dom/base/nsObjectLoadingContent.cpp +++ b/dom/base/nsObjectLoadingContent.cpp @@ -2412,8 +2412,7 @@ nsresult nsObjectLoadingContent::OpenChannel() { nsIRequest::LOAD_HTML_OBJECT_DATA); NS_ENSURE_SUCCESS(rv, rv); if (inherit) { - nsCOMPtr loadinfo = chan->GetLoadInfo(); - NS_ENSURE_STATE(loadinfo); + nsCOMPtr loadinfo = chan->LoadInfo(); loadinfo->SetPrincipalToInherit(thisContent->NodePrincipal()); } diff --git a/dom/base/nsSyncLoadService.cpp b/dom/base/nsSyncLoadService.cpp index 4c98cbe1cea0..c2d91db39b16 100644 --- a/dom/base/nsSyncLoadService.cpp +++ b/dom/base/nsSyncLoadService.cpp @@ -135,14 +135,12 @@ nsresult nsSyncLoader::LoadDocument(nsIChannel *aChannel, bool aChannelIsSync, "text/xml,application/xml,application/xhtml+xml,*/*;q=0.1"), false); MOZ_ASSERT(NS_SUCCEEDED(rv)); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo) { - nsCOMPtr loaderUri; - loadInfo->TriggeringPrincipal()->GetURI(getter_AddRefs(loaderUri)); - if (loaderUri) { - rv = http->SetReferrerWithPolicy(loaderUri, aReferrerPolicy); - MOZ_ASSERT(NS_SUCCEEDED(rv)); - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); + nsCOMPtr loaderUri; + loadInfo->TriggeringPrincipal()->GetURI(getter_AddRefs(loaderUri)); + if (loaderUri) { + rv = http->SetReferrerWithPolicy(loaderUri, aReferrerPolicy); + MOZ_ASSERT(NS_SUCCEEDED(rv)); } } diff --git a/dom/clients/manager/ClientChannelHelper.cpp b/dom/clients/manager/ClientChannelHelper.cpp index 7e6e2422142f..8d2b48b91089 100644 --- a/dom/clients/manager/ClientChannelHelper.cpp +++ b/dom/clients/manager/ClientChannelHelper.cpp @@ -55,19 +55,14 @@ class ClientChannelHelper final : public nsIInterfaceRequestor, nsIAsyncVerifyRedirectCallback* aCallback) override { MOZ_ASSERT(NS_IsMainThread()); - nsCOMPtr oldLoadInfo; - nsresult rv = aOldChannel->GetLoadInfo(getter_AddRefs(oldLoadInfo)); - NS_ENSURE_SUCCESS(rv, rv); - - nsCOMPtr newLoadInfo; - rv = aNewChannel->GetLoadInfo(getter_AddRefs(newLoadInfo)); - NS_ENSURE_SUCCESS(rv, rv); - - rv = nsContentUtils::CheckSameOrigin(aOldChannel, aNewChannel); + nsresult rv = nsContentUtils::CheckSameOrigin(aOldChannel, aNewChannel); if (NS_WARN_IF(NS_FAILED(rv) && rv != NS_ERROR_DOM_BAD_URI)) { return rv; } + nsCOMPtr oldLoadInfo = aOldChannel->LoadInfo(); + nsCOMPtr newLoadInfo = aNewChannel->LoadInfo(); + UniquePtr reservedClient = oldLoadInfo->TakeReservedClientSource(); @@ -181,8 +176,7 @@ nsresult AddClientChannelHelper(nsIChannel* aChannel, MOZ_DIAGNOSTIC_ASSERT(reservedClientInfo.isNothing() || initialClientInfo.isNothing()); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - NS_ENSURE_TRUE(loadInfo, NS_ERROR_FAILURE); + nsCOMPtr loadInfo = aChannel->LoadInfo(); nsIScriptSecurityManager* ssm = nsContentUtils::GetSecurityManager(); NS_ENSURE_TRUE(ssm, NS_ERROR_FAILURE); diff --git a/dom/fetch/FetchDriver.cpp b/dom/fetch/FetchDriver.cpp index bd4203298f05..9ddb89d2283e 100644 --- a/dom/fetch/FetchDriver.cpp +++ b/dom/fetch/FetchDriver.cpp @@ -531,11 +531,7 @@ nsresult FetchDriver::HttpFetch( NS_ENSURE_SUCCESS(rv, rv); if (mCSPEventListener) { - nsCOMPtr loadInfo = chan->GetLoadInfo(); - if (NS_WARN_IF(!loadInfo)) { - return NS_ERROR_UNEXPECTED; - } - + nsCOMPtr loadInfo = chan->LoadInfo(); rv = loadInfo->SetCspEventListener(mCSPEventListener); NS_ENSURE_SUCCESS(rv, rv); } @@ -588,7 +584,7 @@ nsresult FetchDriver::HttpFetch( // If request’s referrer policy is the empty string, // then set request’s referrer policy to the user-set default policy. if (mRequest->ReferrerPolicy_() == ReferrerPolicy::_empty) { - nsCOMPtr loadInfo = httpChan->GetLoadInfo(); + nsCOMPtr loadInfo = httpChan->LoadInfo(); bool isPrivate = loadInfo->GetOriginAttributes().mPrivateBrowsingId > 0; net::ReferrerPolicy referrerPolicy = static_cast( NS_GetDefaultReferrerPolicy(isPrivate)); @@ -673,10 +669,8 @@ nsresult FetchDriver::HttpFetch( if (mRequest->Mode() == RequestMode::Cors) { AutoTArray unsafeHeaders; mRequest->Headers()->GetUnsafeHeaders(unsafeHeaders); - nsCOMPtr loadInfo = chan->GetLoadInfo(); - if (loadInfo) { - loadInfo->SetCorsPreflightInfo(unsafeHeaders, false); - } + nsCOMPtr loadInfo = chan->LoadInfo(); + loadInfo->SetCorsPreflightInfo(unsafeHeaders, false); } if (mIsTrackingFetch && nsContentUtils::IsTailingEnabled() && cos) { @@ -981,13 +975,7 @@ FetchDriver::OnStartRequest(nsIRequest* aRequest, nsISupports* aContext) { return rv; } - nsCOMPtr loadInfo; - rv = channel->GetLoadInfo(getter_AddRefs(loadInfo)); - if (NS_WARN_IF(NS_FAILED(rv))) { - FailWithNetworkError(rv); - return rv; - } - + nsCOMPtr loadInfo = channel->LoadInfo(); // Propagate any tainting from the channel back to our response here. This // step is not reflected in the spec because the spec is written such that // FetchEvent.respondWith() just passes the already-tainted Response back to diff --git a/dom/html/HTMLMediaElement.cpp b/dom/html/HTMLMediaElement.cpp index b9cbe84bb1e8..0b4e937d7a25 100644 --- a/dom/html/HTMLMediaElement.cpp +++ b/dom/html/HTMLMediaElement.cpp @@ -1293,12 +1293,10 @@ class HTMLMediaElement::ChannelLoader final { } if (setAttrs) { - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (loadInfo) { - // The function simply returns NS_OK, so we ignore the return value. - Unused << loadInfo->SetOriginAttributes( - triggeringPrincipal->OriginAttributesRef()); - } + nsCOMPtr loadInfo = channel->LoadInfo(); + // The function simply returns NS_OK, so we ignore the return value. + Unused << loadInfo->SetOriginAttributes( + triggeringPrincipal->OriginAttributesRef()); } nsCOMPtr cos(do_QueryInterface(channel)); diff --git a/dom/html/ImageDocument.cpp b/dom/html/ImageDocument.cpp index dbe3967c834c..937c5294993f 100644 --- a/dom/html/ImageDocument.cpp +++ b/dom/html/ImageDocument.cpp @@ -87,7 +87,7 @@ ImageListener::OnStartRequest(nsIRequest* request, nsISupports* ctxt) { nsAutoCString mimeType; channel->GetContentType(mimeType); - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); // query the corresponding arguments for the channel loadinfo and pass // it on to the temporary loadinfo used for content policy checks. nsCOMPtr requestingNode = domWindow->GetFrameElementInternal(); @@ -100,8 +100,8 @@ ImageListener::OnStartRequest(nsIRequest* request, nsISupports* ctxt) { } nsCOMPtr secCheckLoadInfo = new net::LoadInfo( - loadingPrincipal, loadInfo ? loadInfo->TriggeringPrincipal() : nullptr, - requestingNode, nsILoadInfo::SEC_ONLY_FOR_EXPLICIT_CONTENTSEC_CHECK, + loadingPrincipal, loadInfo->TriggeringPrincipal(), requestingNode, + nsILoadInfo::SEC_ONLY_FOR_EXPLICIT_CONTENTSEC_CHECK, nsIContentPolicy::TYPE_INTERNAL_IMAGE); int16_t decision = nsIContentPolicy::ACCEPT; diff --git a/dom/html/nsHTMLDocument.cpp b/dom/html/nsHTMLDocument.cpp index 31a08c14550d..a47368bc3730 100644 --- a/dom/html/nsHTMLDocument.cpp +++ b/dom/html/nsHTMLDocument.cpp @@ -1923,8 +1923,7 @@ nsresult nsHTMLDocument::CreateAndAddWyciwygChannel(void) { nsILoadInfo::SEC_FORCE_INHERIT_PRINCIPAL, nsIContentPolicy::TYPE_OTHER); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo = channel->GetLoadInfo(); - NS_ENSURE_STATE(loadInfo); + nsCOMPtr loadInfo = channel->LoadInfo(); loadInfo->SetPrincipalToInherit(NodePrincipal()); mWyciwygChannel = do_QueryInterface(channel); diff --git a/dom/jsurl/nsJSProtocolHandler.cpp b/dom/jsurl/nsJSProtocolHandler.cpp index 72a00490bf3d..da23eca9d1dc 100644 --- a/dom/jsurl/nsJSProtocolHandler.cpp +++ b/dom/jsurl/nsJSProtocolHandler.cpp @@ -144,9 +144,8 @@ nsresult nsJSThunk::EvaluateScript( aChannel->GetOwner(getter_AddRefs(owner)); nsCOMPtr principal = do_QueryInterface(owner); if (!principal) { - nsCOMPtr loadInfo; - aChannel->GetLoadInfo(getter_AddRefs(loadInfo)); - if (loadInfo && loadInfo->GetForceInheritPrincipal()) { + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (loadInfo->GetForceInheritPrincipal()) { principal = loadInfo->FindPrincipalToInherit(aChannel); } else { // No execution without a principal! @@ -509,7 +508,7 @@ nsJSChannel::AsyncOpen(nsIStreamListener* aListener) { #ifdef DEBUG { - nsCOMPtr loadInfo = nsIChannel::GetLoadInfo(); + nsCOMPtr loadInfo = nsIChannel::LoadInfo(); MOZ_ASSERT(!loadInfo || loadInfo->GetSecurityMode() == 0 || loadInfo->GetInitialSecurityCheckDone(), "security flags in loadInfo but asyncOpen() not called"); diff --git a/dom/media/ChannelMediaResource.cpp b/dom/media/ChannelMediaResource.cpp index 06b26d1a09b4..98422d04954c 100644 --- a/dom/media/ChannelMediaResource.cpp +++ b/dom/media/ChannelMediaResource.cpp @@ -765,12 +765,10 @@ nsresult ChannelMediaResource::RecreateChannel() { NS_ENSURE_SUCCESS(rv, rv); if (setAttrs) { - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - if (loadInfo) { - // The function simply returns NS_OK, so we ignore the return value. - Unused << loadInfo->SetOriginAttributes( - triggeringPrincipal->OriginAttributesRef()); - } + nsCOMPtr loadInfo = mChannel->LoadInfo(); + // The function simply returns NS_OK, so we ignore the return value. + Unused << loadInfo->SetOriginAttributes( + triggeringPrincipal->OriginAttributesRef()); } nsCOMPtr cos(do_QueryInterface(mChannel)); diff --git a/dom/performance/PerformanceTiming.cpp b/dom/performance/PerformanceTiming.cpp index 34f62a9a04f0..288287b97bec 100644 --- a/dom/performance/PerformanceTiming.cpp +++ b/dom/performance/PerformanceTiming.cpp @@ -267,11 +267,7 @@ bool PerformanceTimingData::CheckAllowedOrigin(nsIHttpChannel* aResourceChannel, } // Check that the current document passes the ckeck. - nsCOMPtr loadInfo; - aResourceChannel->GetLoadInfo(getter_AddRefs(loadInfo)); - if (!loadInfo) { - return false; - } + nsCOMPtr loadInfo = aResourceChannel->LoadInfo(); // TYPE_DOCUMENT loads have no loadingPrincipal. if (loadInfo->GetExternalContentPolicyType() == diff --git a/dom/plugins/base/nsPluginStreamListenerPeer.cpp b/dom/plugins/base/nsPluginStreamListenerPeer.cpp index 52e4c4c360d0..701246248c19 100644 --- a/dom/plugins/base/nsPluginStreamListenerPeer.cpp +++ b/dom/plugins/base/nsPluginStreamListenerPeer.cpp @@ -167,7 +167,7 @@ nsPluginStreamListenerPeer::OnStartRequest(nsIRequest* request, if (NS_FAILED(rv)) return rv; // Check ShouldProcess with content policy - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); int16_t shouldLoad = nsIContentPolicy::ACCEPT; rv = NS_CheckContentProcessPolicy(mURL, loadInfo, contentType, &shouldLoad); diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp index 291687786791..70feb3d2398f 100644 --- a/dom/script/ScriptLoader.cpp +++ b/dom/script/ScriptLoader.cpp @@ -1275,7 +1275,7 @@ nsresult ScriptLoader::StartLoad(ScriptLoadRequest* aRequest) { if (element && element->IsHTMLElement()) { nsAutoString cspNonce; element->GetAttribute(NS_LITERAL_STRING("nonce"), cspNonce); - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); loadInfo->SetCspNonce(cspNonce); } } @@ -3208,9 +3208,9 @@ nsresult ScriptLoader::VerifySRI(ScriptLoadRequest* aRequest, rv = NS_ERROR_SRI_CORRUPT; } } else { - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); - if (loadInfo && loadInfo->GetEnforceSRI()) { + if (loadInfo->GetEnforceSRI()) { MOZ_LOG(SRILogHelper::GetSriLog(), mozilla::LogLevel::Debug, ("ScriptLoader::OnStreamComplete, required SRI not found")); nsCOMPtr csp; diff --git a/dom/security/FramingChecker.cpp b/dom/security/FramingChecker.cpp index e68109cc136a..0032a5fa59d0 100644 --- a/dom/security/FramingChecker.cpp +++ b/dom/security/FramingChecker.cpp @@ -184,10 +184,9 @@ static bool ShouldIgnoreFrameOptions(nsIChannel* aChannel, } // log warning to console that xfo is ignored because of CSP - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - uint64_t innerWindowID = loadInfo ? loadInfo->GetInnerWindowID() : 0; - bool privateWindow = - loadInfo ? !!loadInfo->GetOriginAttributes().mPrivateBrowsingId : false; + nsCOMPtr loadInfo = aChannel->LoadInfo(); + uint64_t innerWindowID = loadInfo->GetInnerWindowID(); + bool privateWindow = !!loadInfo->GetOriginAttributes().mPrivateBrowsingId; const char16_t* params[] = {u"x-frame-options", u"frame-ancestors"}; CSP_LogLocalizedStr("IgnoringSrcBecauseOfDirective", params, ArrayLength(params), @@ -252,9 +251,7 @@ static bool ShouldIgnoreFrameOptions(nsIChannel* aChannel, if (aDocShell) { nsCOMPtr webNav(do_QueryObject(aDocShell)); if (webNav) { - nsCOMPtr loadInfo = httpChannel->GetLoadInfo(); - MOZ_ASSERT(loadInfo); - + nsCOMPtr loadInfo = httpChannel->LoadInfo(); RefPtr principal = NullPrincipal::CreateWithInheritedAttributes( loadInfo->TriggeringPrincipal()); diff --git a/dom/security/SRICheck.cpp b/dom/security/SRICheck.cpp index 71c5d4ec969d..4e8330ced279 100644 --- a/dom/security/SRICheck.cpp +++ b/dom/security/SRICheck.cpp @@ -327,8 +327,7 @@ nsresult SRICheckDataVerifier::Verify(const SRIMetadata& aMetadata, nsresult rv = Finish(); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - NS_ENSURE_TRUE(loadInfo, NS_ERROR_FAILURE); + nsCOMPtr loadInfo = aChannel->LoadInfo(); LoadTainting tainting = loadInfo->GetTainting(); if (NS_FAILED(IsEligible(aChannel, tainting, aSourceFileURI, aReporter))) { diff --git a/dom/security/nsCSPService.cpp b/dom/security/nsCSPService.cpp index c40dda86ed15..175641a2752d 100644 --- a/dom/security/nsCSPService.cpp +++ b/dom/security/nsCSPService.cpp @@ -260,13 +260,7 @@ CSPService::AsyncOnChannelRedirect(nsIChannel *oldChannel, nsresult rv = newChannel->GetURI(getter_AddRefs(newUri)); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo = oldChannel->GetLoadInfo(); - - // if no loadInfo on the channel, nothing for us to do - if (!loadInfo) { - return NS_OK; - } - + nsCOMPtr loadInfo = oldChannel->LoadInfo(); nsCOMPtr cspEventListener; rv = loadInfo->GetCspEventListener(getter_AddRefs(cspEventListener)); NS_ENSURE_SUCCESS(rv, rv); diff --git a/dom/security/nsContentSecurityManager.cpp b/dom/security/nsContentSecurityManager.cpp index 24f2d0122be6..a7591b0513b5 100644 --- a/dom/security/nsContentSecurityManager.cpp +++ b/dom/security/nsContentSecurityManager.cpp @@ -45,10 +45,7 @@ static mozilla::LazyLogModule sCSMLog("CSMLog"); if (!mozilla::net::nsIOService::BlockToplevelDataUriNavigations()) { return true; } - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return true; - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); if (loadInfo->GetExternalContentPolicyType() != nsIContentPolicy::TYPE_DOCUMENT) { return true; @@ -115,10 +112,7 @@ static mozilla::LazyLogModule sCSMLog("CSMLog"); /* static */ bool nsContentSecurityManager::AllowInsecureRedirectToDataURI( nsIChannel* aNewChannel) { - nsCOMPtr loadInfo = aNewChannel->GetLoadInfo(); - if (!loadInfo) { - return true; - } + nsCOMPtr loadInfo = aNewChannel->LoadInfo(); if (loadInfo->GetExternalContentPolicyType() != nsIContentPolicy::TYPE_SCRIPT) { return true; @@ -170,11 +164,7 @@ static mozilla::LazyLogModule sCSMLog("CSMLog"); return NS_OK; } - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return NS_OK; - } - + nsCOMPtr loadInfo = aChannel->LoadInfo(); nsContentPolicyType type = loadInfo->GetExternalContentPolicyType(); // Allow top-level FTP documents and save-as download of FTP files on @@ -793,14 +783,7 @@ static void DebugDoContentSecurityCheck(nsIChannel* aChannel, nsresult nsContentSecurityManager::doContentSecurityCheck( nsIChannel* aChannel, nsCOMPtr& aInAndOutListener) { NS_ENSURE_ARG(aChannel); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - - if (!loadInfo) { - MOZ_ASSERT(false, - "channel needs to have loadInfo to perform security checks"); - return NS_ERROR_UNEXPECTED; - } - + nsCOMPtr loadInfo = aChannel->LoadInfo(); if (MOZ_UNLIKELY(MOZ_LOG_TEST(sCSMLog, LogLevel::Debug))) { DebugDoContentSecurityCheck(aChannel, loadInfo); } @@ -844,16 +827,14 @@ NS_IMETHODIMP nsContentSecurityManager::AsyncOnChannelRedirect( nsIChannel* aOldChannel, nsIChannel* aNewChannel, uint32_t aRedirFlags, nsIAsyncVerifyRedirectCallback* aCb) { - nsCOMPtr loadInfo = aOldChannel->GetLoadInfo(); - if (loadInfo) { - nsresult rv = CheckChannel(aNewChannel); - if (NS_SUCCEEDED(rv)) { - rv = CheckFTPSubresourceLoad(aNewChannel); - } - if (NS_FAILED(rv)) { - aOldChannel->Cancel(rv); - return rv; - } + nsCOMPtr loadInfo = aOldChannel->LoadInfo(); + nsresult rv = CheckChannel(aNewChannel); + if (NS_SUCCEEDED(rv)) { + rv = CheckFTPSubresourceLoad(aNewChannel); + } + if (NS_FAILED(rv)) { + aOldChannel->Cancel(rv); + return rv; } // Also verify that the redirecting server is allowed to redirect to the @@ -876,7 +857,7 @@ nsContentSecurityManager::AsyncOnChannelRedirect( const uint32_t flags = nsIScriptSecurityManager::LOAD_IS_AUTOMATIC_DOCUMENT_REPLACEMENT | nsIScriptSecurityManager::DISALLOW_SCRIPT; - nsresult rv = nsContentUtils::GetSecurityManager()->CheckLoadURIWithPrincipal( + rv = nsContentUtils::GetSecurityManager()->CheckLoadURIWithPrincipal( oldPrincipal, newURI, flags); NS_ENSURE_SUCCESS(rv, rv); @@ -896,9 +877,7 @@ static void AddLoadFlags(nsIRequest* aRequest, nsLoadFlags aNewFlags) { * if this requesst should not be permitted. */ nsresult nsContentSecurityManager::CheckChannel(nsIChannel* aChannel) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - MOZ_ASSERT(loadInfo); - + nsCOMPtr loadInfo = aChannel->LoadInfo(); nsCOMPtr uri; nsresult rv = NS_GetFinalChannelURI(aChannel, getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); diff --git a/dom/security/nsMixedContentBlocker.cpp b/dom/security/nsMixedContentBlocker.cpp index 462d8298e56f..89501228a888 100644 --- a/dom/security/nsMixedContentBlocker.cpp +++ b/dom/security/nsMixedContentBlocker.cpp @@ -301,7 +301,7 @@ nsMixedContentBlocker::AsyncOnChannelRedirect( NS_ENSURE_SUCCESS(rv, rv); // Get the loading Info from the old channel - nsCOMPtr loadInfo = aOldChannel->GetLoadInfo(); + nsCOMPtr loadInfo = aOldChannel->LoadInfo(); nsCOMPtr requestingPrincipal = loadInfo->LoadingPrincipal(); // Since we are calling shouldLoad() directly on redirects, we don't go diff --git a/dom/serviceworkers/ServiceWorkerEvents.cpp b/dom/serviceworkers/ServiceWorkerEvents.cpp index cddc055b2c09..be88511734e9 100644 --- a/dom/serviceworkers/ServiceWorkerEvents.cpp +++ b/dom/serviceworkers/ServiceWorkerEvents.cpp @@ -272,9 +272,9 @@ class StartResponse final : public Runnable { nsresult rv = mChannel->GetChannel(getter_AddRefs(underlyingChannel)); NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_TRUE(underlyingChannel, NS_ERROR_UNEXPECTED); - nsCOMPtr loadInfo = underlyingChannel->GetLoadInfo(); + nsCOMPtr loadInfo = underlyingChannel->LoadInfo(); - if (!loadInfo || !CSPPermitsResponse(loadInfo)) { + if (!CSPPermitsResponse(loadInfo)) { mChannel->CancelInterception(NS_ERROR_CONTENT_BLOCKED); return NS_OK; } diff --git a/dom/serviceworkers/ServiceWorkerInterceptController.cpp b/dom/serviceworkers/ServiceWorkerInterceptController.cpp index 6b4726f4cf42..90567fa51792 100644 --- a/dom/serviceworkers/ServiceWorkerInterceptController.cpp +++ b/dom/serviceworkers/ServiceWorkerInterceptController.cpp @@ -22,10 +22,7 @@ ServiceWorkerInterceptController::ShouldPrepareForIntercept( nsIURI* aURI, nsIChannel* aChannel, bool* aShouldIntercept) { *aShouldIntercept = false; - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return NS_OK; - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); // For subresource requests we base our decision solely on the client's // controller value. Any settings that would have blocked service worker diff --git a/dom/serviceworkers/ServiceWorkerManager.cpp b/dom/serviceworkers/ServiceWorkerManager.cpp index 692223b114ac..8fd75092653b 100644 --- a/dom/serviceworkers/ServiceWorkerManager.cpp +++ b/dom/serviceworkers/ServiceWorkerManager.cpp @@ -1873,38 +1873,36 @@ class ContinueDispatchFetchEventRunnable : public Runnable { nsString clientId; nsString resultingClientId; - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (loadInfo) { - char buf[NSID_LENGTH]; - Maybe clientInfo = loadInfo->GetClientInfo(); - if (clientInfo.isSome()) { - clientInfo.ref().Id().ToProvidedString(buf); - NS_ConvertASCIItoUTF16 uuid(buf); + nsCOMPtr loadInfo = channel->LoadInfo(); + char buf[NSID_LENGTH]; + Maybe clientInfo = loadInfo->GetClientInfo(); + if (clientInfo.isSome()) { + clientInfo.ref().Id().ToProvidedString(buf); + NS_ConvertASCIItoUTF16 uuid(buf); - // Remove {} and the null terminator - clientId.Assign(Substring(uuid, 1, NSID_LENGTH - 3)); - } + // Remove {} and the null terminator + clientId.Assign(Substring(uuid, 1, NSID_LENGTH - 3)); + } - // Having an initial or reserved client are mutually exclusive events: - // either an initial client is used upon navigating an about:blank - // iframe, or a new, reserved environment/client is created (e.g. - // upon a top-level navigation). See step 4 of - // https://html.spec.whatwg.org/#process-a-navigate-fetch as well as - // https://github.com/w3c/ServiceWorker/issues/1228#issuecomment-345132444 - Maybe resulting = loadInfo->GetInitialClientInfo(); + // Having an initial or reserved client are mutually exclusive events: + // either an initial client is used upon navigating an about:blank + // iframe, or a new, reserved environment/client is created (e.g. + // upon a top-level navigation). See step 4 of + // https://html.spec.whatwg.org/#process-a-navigate-fetch as well as + // https://github.com/w3c/ServiceWorker/issues/1228#issuecomment-345132444 + Maybe resulting = loadInfo->GetInitialClientInfo(); - if (resulting.isNothing()) { - resulting = loadInfo->GetReservedClientInfo(); - } else { - MOZ_ASSERT(loadInfo->GetReservedClientInfo().isNothing()); - } + if (resulting.isNothing()) { + resulting = loadInfo->GetReservedClientInfo(); + } else { + MOZ_ASSERT(loadInfo->GetReservedClientInfo().isNothing()); + } - if (resulting.isSome()) { - resulting.ref().Id().ToProvidedString(buf); - NS_ConvertASCIItoUTF16 uuid(buf); + if (resulting.isSome()) { + resulting.ref().Id().ToProvidedString(buf); + NS_ConvertASCIItoUTF16 uuid(buf); - resultingClientId.Assign(Substring(uuid, 1, NSID_LENGTH - 3)); - } + resultingClientId.Assign(Substring(uuid, 1, NSID_LENGTH - 3)); } rv = mServiceWorkerPrivate->SendFetchEvent(mChannel, mLoadGroup, clientId, @@ -1936,12 +1934,7 @@ void ServiceWorkerManager::DispatchFetchEvent(nsIInterceptedChannel* aChannel, return; } - nsCOMPtr loadInfo = internalChannel->GetLoadInfo(); - if (NS_WARN_IF(!loadInfo)) { - aRv.Throw(NS_ERROR_UNEXPECTED); - return; - } - + nsCOMPtr loadInfo = internalChannel->LoadInfo(); RefPtr serviceWorker; if (!nsContentUtils::IsNonSubresourceRequest(internalChannel)) { diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp index 544da05fbf86..07307751c05c 100644 --- a/dom/workers/ScriptLoader.cpp +++ b/dom/workers/ScriptLoader.cpp @@ -247,11 +247,7 @@ nsresult ChannelFromScriptURL(nsIPrincipal* principal, Document* parentDoc, NS_ENSURE_SUCCESS(rv, NS_ERROR_DOM_SECURITY_ERR); if (cspEventListener) { - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (NS_WARN_IF(!loadInfo)) { - return NS_ERROR_UNEXPECTED; - } - + nsCOMPtr loadInfo = channel->LoadInfo(); rv = loadInfo->SetCspEventListener(cspEventListener); NS_ENSURE_SUCCESS(rv, rv); } @@ -1156,8 +1152,8 @@ class ScriptLoaderRunnable final : public nsIRunnable, public nsINamed { aLoadInfo.mURL.Assign(NS_ConvertUTF8toUTF16(filename)); } - nsCOMPtr chanLoadInfo = channel->GetLoadInfo(); - if (chanLoadInfo && chanLoadInfo->GetEnforceSRI()) { + nsCOMPtr chanLoadInfo = channel->LoadInfo(); + if (chanLoadInfo->GetEnforceSRI()) { // importScripts() and the Worker constructor do not support integrity // metadata // (or any fetch options). Until then, we can just block. diff --git a/dom/xhr/XMLHttpRequestMainThread.cpp b/dom/xhr/XMLHttpRequestMainThread.cpp index 060e161c92dd..5e130e3b3f89 100644 --- a/dom/xhr/XMLHttpRequestMainThread.cpp +++ b/dom/xhr/XMLHttpRequestMainThread.cpp @@ -747,13 +747,7 @@ bool XMLHttpRequestMainThread::IsCrossSiteCORSRequest() const { return false; } - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - MOZ_ASSERT(loadInfo); - - if (!loadInfo) { - return false; - } - + nsCOMPtr loadInfo = mChannel->LoadInfo(); return loadInfo->GetTainting() == LoadTainting::CORS; } @@ -1478,11 +1472,8 @@ void XMLHttpRequestMainThread::SetOriginAttributes( OriginAttributes attrs(aAttrs); - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - MOZ_ASSERT(loadInfo); - if (loadInfo) { - loadInfo->SetOriginAttributes(attrs); - } + nsCOMPtr loadInfo = mChannel->LoadInfo(); + loadInfo->SetOriginAttributes(attrs); } /* @@ -1989,12 +1980,9 @@ XMLHttpRequestMainThread::OnStartRequest(nsIRequest* request, mResponseXML->ForceEnableXULXBL(); } - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - MOZ_ASSERT(loadInfo); + nsCOMPtr loadInfo = mChannel->LoadInfo(); bool isCrossSite = false; - if (loadInfo) { - isCrossSite = loadInfo->GetTainting() != LoadTainting::Basic; - } + isCrossSite = loadInfo->GetTainting() != LoadTainting::Basic; if (isCrossSite) { nsCOMPtr htmlDoc = do_QueryInterface(mResponseXML); @@ -2365,11 +2353,7 @@ nsresult XMLHttpRequestMainThread::CreateChannel() { NS_ENSURE_SUCCESS(rv, rv); if (mCSPEventListener) { - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - if (NS_WARN_IF(!loadInfo)) { - return NS_ERROR_UNEXPECTED; - } - + nsCOMPtr loadInfo = mChannel->LoadInfo(); rv = loadInfo->SetCspEventListener(mCSPEventListener); NS_ENSURE_SUCCESS(rv, rv); } @@ -2525,10 +2509,8 @@ nsresult XMLHttpRequestMainThread::InitiateFetch( // .withCredentials can be called after open() is called. // Not doing this for privileged system XHRs since those don't use CORS. if (!IsSystemXHR() && !mIsAnon && mFlagACwithCredentials) { - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - if (loadInfo) { - static_cast(loadInfo.get())->SetIncludeCookiesSecFlag(); - } + nsCOMPtr loadInfo = mChannel->LoadInfo(); + static_cast(loadInfo.get())->SetIncludeCookiesSecFlag(); } // We never let XHR be blocked by head CSS/JS loads to avoid potential @@ -2591,11 +2573,9 @@ nsresult XMLHttpRequestMainThread::InitiateFetch( if (!IsSystemXHR()) { nsTArray CORSUnsafeHeaders; mAuthorRequestHeaders.GetCORSUnsafeHeaders(CORSUnsafeHeaders); - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - if (loadInfo) { - loadInfo->SetCorsPreflightInfo(CORSUnsafeHeaders, - mFlagHadUploadListenersOnSend); - } + nsCOMPtr loadInfo = mChannel->LoadInfo(); + loadInfo->SetCorsPreflightInfo(CORSUnsafeHeaders, + mFlagHadUploadListenersOnSend); } // Hook us up to listen to redirects and the like. Only do this very late diff --git a/image/imgLoader.cpp b/image/imgLoader.cpp index fe8dba3f6ba3..095a7d2d74ae 100644 --- a/image/imgLoader.cpp +++ b/image/imgLoader.cpp @@ -825,11 +825,9 @@ static nsresult NewImageChannel( // triggeringPrincipal as the channel's originAttributes. This allows the // favicon loading from XUL will use the correct originAttributes. - nsCOMPtr loadInfo = (*aResult)->GetLoadInfo(); - if (loadInfo) { - rv = loadInfo->SetOriginAttributes( - aTriggeringPrincipal->OriginAttributesRef()); - } + nsCOMPtr loadInfo = (*aResult)->LoadInfo(); + rv = loadInfo->SetOriginAttributes( + aTriggeringPrincipal->OriginAttributesRef()); } } else { // either we are loading something inside a document, in which case @@ -858,10 +856,8 @@ static nsresult NewImageChannel( } attrs.mPrivateBrowsingId = aRespectPrivacy ? 1 : 0; - nsCOMPtr loadInfo = (*aResult)->GetLoadInfo(); - if (loadInfo) { - rv = loadInfo->SetOriginAttributes(attrs); - } + nsCOMPtr loadInfo = (*aResult)->LoadInfo(); + rv = loadInfo->SetOriginAttributes(attrs); } if (NS_FAILED(rv)) { @@ -2374,12 +2370,9 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, nsCOMPtr doc = do_QueryInterface(aCX); NS_ENSURE_TRUE(channel, NS_ERROR_FAILURE); - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); - OriginAttributes attrs; - if (loadInfo) { - attrs = loadInfo->GetOriginAttributes(); - } + OriginAttributes attrs = loadInfo->GetOriginAttributes(); nsresult rv; ImageCacheKey key(uri, attrs, doc, rv); @@ -2420,12 +2413,10 @@ nsresult imgLoader::LoadImageWithChannel(nsIChannel* channel, // Since aCanMakeNewChannel == false, we don't need to pass content policy // type/principal/etc - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); // if there is a loadInfo, use the right contentType, otherwise // default to the internal image type - nsContentPolicyType policyType = - loadInfo ? loadInfo->InternalContentPolicyType() - : nsIContentPolicy::TYPE_INTERNAL_IMAGE; + nsContentPolicyType policyType = loadInfo->InternalContentPolicyType(); if (ValidateEntry(entry, uri, nullptr, nullptr, RP_Unset, nullptr, aObserver, aCX, doc, requestFlags, policyType, false, diff --git a/image/imgRequest.cpp b/image/imgRequest.cpp index 3fb668d64a93..e4fbd029df74 100644 --- a/image/imgRequest.cpp +++ b/image/imgRequest.cpp @@ -1200,7 +1200,7 @@ imgRequest::OnRedirectVerifyCallback(nsresult result) { // to upgrade all requests from http to https before any data is fetched // from the network. Do not pollute mHadInsecureRedirect in case of such an // internal redirect. - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); + nsCOMPtr loadInfo = mChannel->LoadInfo(); bool upgradeInsecureRequests = loadInfo ? loadInfo->GetUpgradeInsecureRequests() || loadInfo->GetBrowserUpgradeInsecureRequests() diff --git a/layout/style/Loader.cpp b/layout/style/Loader.cpp index fbaa98a8d06a..cb5d2065c2aa 100644 --- a/layout/style/Loader.cpp +++ b/layout/style/Loader.cpp @@ -743,8 +743,8 @@ nsresult SheetLoadData::VerifySheetReadyToParse(nsresult aStatus, SRIMetadata sriMetadata; mSheet->GetIntegrity(sriMetadata); if (sriMetadata.IsEmpty()) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo && loadInfo->GetEnforceSRI()) { + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (loadInfo->GetEnforceSRI()) { LOG((" Load was blocked by SRI")); MOZ_LOG(gSriPRLog, mozilla::LogLevel::Debug, ("css::Loader::OnStreamComplete, required SRI not found")); @@ -1326,7 +1326,7 @@ nsresult Loader::LoadSheet(SheetLoadData* aLoadData, if (element && element->IsHTMLElement()) { nsAutoString cspNonce; element->GetAttribute(NS_LITERAL_STRING("nonce"), cspNonce); - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); loadInfo->SetCspNonce(cspNonce); } } @@ -1465,7 +1465,7 @@ nsresult Loader::LoadSheet(SheetLoadData* aLoadData, if (element && element->IsHTMLElement()) { nsAutoString cspNonce; element->GetAttribute(NS_LITERAL_STRING("nonce"), cspNonce); - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); loadInfo->SetCspNonce(cspNonce); } } diff --git a/netwerk/base/LoadInfo.cpp b/netwerk/base/LoadInfo.cpp index 71150f70742f..aeac78962c49 100644 --- a/netwerk/base/LoadInfo.cpp +++ b/netwerk/base/LoadInfo.cpp @@ -269,10 +269,8 @@ LoadInfo::LoadInfo( // if owner doc has content signature, we enforce SRI nsCOMPtr channel = aLoadingContext->OwnerDoc()->GetChannel(); if (channel) { - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (loadInfo) { - mEnforceSRI = loadInfo->GetVerifySignedContent(); - } + nsCOMPtr loadInfo = channel->LoadInfo(); + mEnforceSRI = loadInfo->GetVerifySignedContent(); } } diff --git a/netwerk/base/Predictor.cpp b/netwerk/base/Predictor.cpp index b652e42d470e..4f6ead58f1a7 100644 --- a/netwerk/base/Predictor.cpp +++ b/netwerk/base/Predictor.cpp @@ -1255,10 +1255,8 @@ nsresult Predictor::Prefetch(nsIURI *uri, nsIURI *referrer, return rv; } - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (loadInfo) { - rv = loadInfo->SetOriginAttributes(originAttributes); - } + nsCOMPtr loadInfo = channel->LoadInfo(); + rv = loadInfo->SetOriginAttributes(originAttributes); if (NS_FAILED(rv)) { PREDICTOR_LOG( diff --git a/netwerk/base/nsAsyncRedirectVerifyHelper.cpp b/netwerk/base/nsAsyncRedirectVerifyHelper.cpp index ce2529e3490a..76bbee25dd92 100644 --- a/netwerk/base/nsAsyncRedirectVerifyHelper.cpp +++ b/netwerk/base/nsAsyncRedirectVerifyHelper.cpp @@ -74,8 +74,8 @@ nsresult nsAsyncRedirectVerifyHelper::Init( if (!(flags & (nsIChannelEventSink::REDIRECT_INTERNAL | nsIChannelEventSink::REDIRECT_STS_UPGRADE))) { - nsCOMPtr loadInfo = oldChan->GetLoadInfo(); - if (loadInfo && loadInfo->GetDontFollowRedirects()) { + nsCOMPtr loadInfo = oldChan->LoadInfo(); + if (loadInfo->GetDontFollowRedirects()) { ExplicitCallback(NS_BINDING_ABORTED); return NS_OK; } diff --git a/netwerk/base/nsBaseChannel.cpp b/netwerk/base/nsBaseChannel.cpp index 7ce013b2d3d5..9487a32ce2a1 100644 --- a/netwerk/base/nsBaseChannel.cpp +++ b/netwerk/base/nsBaseChannel.cpp @@ -83,55 +83,48 @@ nsresult nsBaseChannel::Redirect(nsIChannel *newChannel, uint32_t redirectFlags, // make a copy of the loadinfo, append to the redirectchain // and set it on the new channel - if (mLoadInfo) { - nsSecurityFlags secFlags = mLoadInfo->GetSecurityFlags() & - ~nsILoadInfo::SEC_FORCE_INHERIT_PRINCIPAL; - nsCOMPtr newLoadInfo = - static_cast(mLoadInfo.get()) - ->CloneWithNewSecFlags(secFlags); + nsSecurityFlags secFlags = + mLoadInfo->GetSecurityFlags() & ~nsILoadInfo::SEC_FORCE_INHERIT_PRINCIPAL; + nsCOMPtr newLoadInfo = + static_cast(mLoadInfo.get()) + ->CloneWithNewSecFlags(secFlags); - nsCOMPtr uriPrincipal; - nsIScriptSecurityManager *sm = nsContentUtils::GetSecurityManager(); - sm->GetChannelURIPrincipal(this, getter_AddRefs(uriPrincipal)); - bool isInternalRedirect = - (redirectFlags & (nsIChannelEventSink::REDIRECT_INTERNAL | - nsIChannelEventSink::REDIRECT_STS_UPGRADE)); + nsCOMPtr uriPrincipal; + nsIScriptSecurityManager *sm = nsContentUtils::GetSecurityManager(); + sm->GetChannelURIPrincipal(this, getter_AddRefs(uriPrincipal)); + bool isInternalRedirect = + (redirectFlags & (nsIChannelEventSink::REDIRECT_INTERNAL | + nsIChannelEventSink::REDIRECT_STS_UPGRADE)); - // nsBaseChannel hst no thing to do with HttpBaseChannel, we would not care - // about referrer and remote address in this case - nsCOMPtr entry = - new nsRedirectHistoryEntry(uriPrincipal, nullptr, EmptyCString()); + // nsBaseChannel hst no thing to do with HttpBaseChannel, we would not care + // about referrer and remote address in this case + nsCOMPtr entry = + new nsRedirectHistoryEntry(uriPrincipal, nullptr, EmptyCString()); - newLoadInfo->AppendRedirectHistoryEntry(entry, isInternalRedirect); + newLoadInfo->AppendRedirectHistoryEntry(entry, isInternalRedirect); - // Ensure the channel's loadInfo's result principal URI so that it's - // either non-null or updated to the redirect target URI. - // We must do this because in case the loadInfo's result principal URI - // is null, it would be taken from OriginalURI of the channel. But we - // overwrite it with the whole redirect chain first URI before opening - // the target channel, hence the information would be lost. - // If the protocol handler that created the channel wants to use - // the originalURI of the channel as the principal URI, it has left - // the result principal URI on the load info null. - nsCOMPtr resultPrincipalURI; + // Ensure the channel's loadInfo's result principal URI so that it's + // either non-null or updated to the redirect target URI. + // We must do this because in case the loadInfo's result principal URI + // is null, it would be taken from OriginalURI of the channel. But we + // overwrite it with the whole redirect chain first URI before opening + // the target channel, hence the information would be lost. + // If the protocol handler that created the channel wants to use + // the originalURI of the channel as the principal URI, it has left + // the result principal URI on the load info null. + nsCOMPtr resultPrincipalURI; - nsCOMPtr existingLoadInfo = newChannel->GetLoadInfo(); - if (existingLoadInfo) { - existingLoadInfo->GetResultPrincipalURI( - getter_AddRefs(resultPrincipalURI)); - } - if (!resultPrincipalURI) { - newChannel->GetOriginalURI(getter_AddRefs(resultPrincipalURI)); - } - - newLoadInfo->SetResultPrincipalURI(resultPrincipalURI); - - newChannel->SetLoadInfo(newLoadInfo); - } else { - // the newChannel was created with a dummy loadInfo, we should clear - // it in case the original channel does not have a loadInfo - newChannel->SetLoadInfo(nullptr); + nsCOMPtr existingLoadInfo = newChannel->LoadInfo(); + if (existingLoadInfo) { + existingLoadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); } + if (!resultPrincipalURI) { + newChannel->GetOriginalURI(getter_AddRefs(resultPrincipalURI)); + } + + newLoadInfo->SetResultPrincipalURI(resultPrincipalURI); + + newChannel->SetLoadInfo(newLoadInfo); // Preserve the privacy bit if it has been overridden if (mPrivateBrowsingOverriden) { diff --git a/netwerk/base/nsIChannel.idl b/netwerk/base/nsIChannel.idl index 4b0be6031937..260eb97bbde9 100644 --- a/netwerk/base/nsIChannel.idl +++ b/netwerk/base/nsIChannel.idl @@ -356,11 +356,11 @@ interface nsIChannel : nsIRequest return false; } - inline already_AddRefed GetLoadInfo() + inline already_AddRefed LoadInfo() { nsCOMPtr result; mozilla::DebugOnly rv = GetLoadInfo(getter_AddRefs(result)); - MOZ_ASSERT(NS_SUCCEEDED(rv) || !result); + MOZ_ASSERT(NS_SUCCEEDED(rv) && result); return result.forget(); } %} diff --git a/netwerk/base/nsINetworkInterceptController.idl b/netwerk/base/nsINetworkInterceptController.idl index ea4dd16f4893..3a33cd7f9abf 100644 --- a/netwerk/base/nsINetworkInterceptController.idl +++ b/netwerk/base/nsINetworkInterceptController.idl @@ -192,35 +192,33 @@ interface nsIInterceptedChannel : nsISupports GetSubresourceTimeStampKey(nsIChannel* aChannel, nsACString& aKey) { if (!nsContentUtils::IsNonSubresourceRequest(aChannel)) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo) { - switch(loadInfo->InternalContentPolicyType()) { - case nsIContentPolicy::TYPE_SCRIPT: - case nsIContentPolicy::TYPE_INTERNAL_SCRIPT: - case nsIContentPolicy::TYPE_INTERNAL_SCRIPT_PRELOAD: - case nsIContentPolicy::TYPE_INTERNAL_MODULE: - case nsIContentPolicy::TYPE_INTERNAL_MODULE_PRELOAD: - case nsIContentPolicy::TYPE_INTERNAL_WORKER_IMPORT_SCRIPTS: { - aKey = NS_LITERAL_CSTRING("subresource-script"); - break; - } - case nsIContentPolicy::TYPE_IMAGE: - case nsIContentPolicy::TYPE_INTERNAL_IMAGE: - case nsIContentPolicy::TYPE_INTERNAL_IMAGE_PRELOAD: - case nsIContentPolicy::TYPE_INTERNAL_IMAGE_FAVICON: { - aKey = NS_LITERAL_CSTRING("subresource-image"); - break; - } - case nsIContentPolicy::TYPE_STYLESHEET: - case nsIContentPolicy::TYPE_INTERNAL_STYLESHEET: - case nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD: { - aKey = NS_LITERAL_CSTRING("subresource-stylesheet"); - break; - } - default: { - aKey = NS_LITERAL_CSTRING("subresource-other"); - break; - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); + switch(loadInfo->InternalContentPolicyType()) { + case nsIContentPolicy::TYPE_SCRIPT: + case nsIContentPolicy::TYPE_INTERNAL_SCRIPT: + case nsIContentPolicy::TYPE_INTERNAL_SCRIPT_PRELOAD: + case nsIContentPolicy::TYPE_INTERNAL_MODULE: + case nsIContentPolicy::TYPE_INTERNAL_MODULE_PRELOAD: + case nsIContentPolicy::TYPE_INTERNAL_WORKER_IMPORT_SCRIPTS: { + aKey = NS_LITERAL_CSTRING("subresource-script"); + break; + } + case nsIContentPolicy::TYPE_IMAGE: + case nsIContentPolicy::TYPE_INTERNAL_IMAGE: + case nsIContentPolicy::TYPE_INTERNAL_IMAGE_PRELOAD: + case nsIContentPolicy::TYPE_INTERNAL_IMAGE_FAVICON: { + aKey = NS_LITERAL_CSTRING("subresource-image"); + break; + } + case nsIContentPolicy::TYPE_STYLESHEET: + case nsIContentPolicy::TYPE_INTERNAL_STYLESHEET: + case nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD: { + aKey = NS_LITERAL_CSTRING("subresource-stylesheet"); + break; + } + default: { + aKey = NS_LITERAL_CSTRING("subresource-other"); + break; } } } diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp index 9b6010eacafc..417db87b7114 100644 --- a/netwerk/base/nsIOService.cpp +++ b/netwerk/base/nsIOService.cpp @@ -898,7 +898,7 @@ nsresult nsIOService::NewChannelFromURIWithProxyFlagsInternal( aLoadingNode, aSecurityFlags, aContentPolicyType, aLoadingClientInfo, aController); } - NS_ASSERTION(loadInfo, "Please pass security info when creating a channel"); + MOZ_ASSERT(loadInfo, "Please pass security info when creating a channel"); return NewChannelFromURIWithProxyFlagsInternal(aURI, aProxyURI, aProxyFlags, loadInfo, result); } @@ -935,7 +935,7 @@ nsresult nsIOService::NewChannelFromURIWithProxyFlagsInternal( if (aLoadInfo) { // make sure we have the same instance of loadInfo on the newly created // channel - nsCOMPtr loadInfo = channel->GetLoadInfo(); + nsCOMPtr loadInfo = channel->LoadInfo(); if (aLoadInfo != loadInfo) { MOZ_ASSERT(false, "newly created channel must have a loadinfo attached"); return NS_ERROR_UNEXPECTED; @@ -1709,11 +1709,8 @@ IOServiceProxyCallback::OnProxyAvailable(nsICancelable *request, do_QueryInterface(handler); if (!speculativeHandler) return NS_OK; - nsCOMPtr loadInfo = channel->GetLoadInfo(); - nsCOMPtr principal; - if (loadInfo) { - principal = loadInfo->LoadingPrincipal(); - } + nsCOMPtr loadInfo = channel->LoadInfo(); + nsCOMPtr principal = loadInfo->LoadingPrincipal(); nsLoadFlags loadFlags = 0; channel->GetLoadFlags(&loadFlags); diff --git a/netwerk/base/nsNetUtil.cpp b/netwerk/base/nsNetUtil.cpp index c28552886590..f00056aa8dce 100644 --- a/netwerk/base/nsNetUtil.cpp +++ b/netwerk/base/nsNetUtil.cpp @@ -232,10 +232,7 @@ nsresult NS_NewChannelInternal( } if (aPerformanceStorage) { - nsCOMPtr loadInfo; - rv = channel->GetLoadInfo(getter_AddRefs(loadInfo)); - NS_ENSURE_SUCCESS(rv, rv); - + nsCOMPtr loadInfo = channel->LoadInfo(); loadInfo->SetPerformanceStorage(aPerformanceStorage); } @@ -387,10 +384,7 @@ nsresult NS_NewChannelInternal( } if (aPerformanceStorage) { - nsCOMPtr loadInfo; - rv = channel->GetLoadInfo(getter_AddRefs(loadInfo)); - NS_ENSURE_SUCCESS(rv, rv); - + nsCOMPtr loadInfo = channel->LoadInfo(); loadInfo->SetPerformanceStorage(aPerformanceStorage); } @@ -646,6 +640,7 @@ nsresult NS_NewInputStreamChannelInternal( NS_ENSURE_SUCCESS(rv, rv); } + MOZ_ASSERT(aLoadInfo, "need a loadinfo to create a inputstreamchannel"); channel->SetLoadInfo(aLoadInfo); // If we're sandboxed, make sure to clear any owner the channel @@ -1703,12 +1698,8 @@ bool NS_UsePrivateBrowsing(nsIChannel *channel) { bool NS_GetOriginAttributes(nsIChannel *aChannel, mozilla::OriginAttributes &aAttributes) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - // For some channels, they might not have loadInfo, like - // ExternalHelperAppParent.. - if (loadInfo) { - loadInfo->GetOriginAttributes(&aAttributes); - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); + loadInfo->GetOriginAttributes(&aAttributes); bool isPrivate = false; nsCOMPtr pbChannel = do_QueryInterface(aChannel); @@ -1726,15 +1717,7 @@ bool NS_GetOriginAttributes(nsIChannel *aChannel, } bool NS_HasBeenCrossOrigin(nsIChannel *aChannel, bool aReport) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - MOZ_RELEASE_ASSERT( - loadInfo, - "Origin tracking only works for channels created with a loadinfo"); - - if (!loadInfo) { - return false; - } - + nsCOMPtr loadInfo = aChannel->LoadInfo(); // TYPE_DOCUMENT loads have a null LoadingPrincipal and can not be cross // origin. if (!loadInfo->LoadingPrincipal()) { @@ -1795,10 +1778,7 @@ bool NS_IsSafeTopLevelNav(nsIChannel *aChannel) { if (!aChannel) { return false; } - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return false; - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); if (loadInfo->GetExternalContentPolicyType() != nsIContentPolicy::TYPE_DOCUMENT) { return false; @@ -1818,11 +1798,7 @@ bool NS_IsSameSiteForeign(nsIChannel *aChannel, nsIURI *aHostURI) { if (!aChannel) { return false; } - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return false; - } - + nsCOMPtr loadInfo = aChannel->LoadInfo(); // Do not treat loads triggered by web extensions as foreign nsCOMPtr channelURI; NS_GetFinalChannelURI(aChannel, getter_AddRefs(channelURI)); @@ -2024,16 +2000,13 @@ already_AddRefed NS_GetInnermostURI(nsIURI *aURI) { nsresult NS_GetFinalChannelURI(nsIChannel *channel, nsIURI **uri) { *uri = nullptr; - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (loadInfo) { - nsCOMPtr resultPrincipalURI; - loadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); - if (resultPrincipalURI) { - resultPrincipalURI.forget(uri); - return NS_OK; - } + nsCOMPtr loadInfo = channel->LoadInfo(); + nsCOMPtr resultPrincipalURI; + loadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); + if (resultPrincipalURI) { + resultPrincipalURI.forget(uri); + return NS_OK; } - return channel->GetOriginalURI(uri); } @@ -2359,13 +2332,13 @@ nsresult NS_LinkRedirectChannels(uint32_t channelId, nsresult NS_MaybeOpenChannelUsingOpen(nsIChannel *aChannel, nsIInputStream **aStream) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); + nsCOMPtr loadInfo = aChannel->LoadInfo(); return aChannel->Open(aStream); } nsresult NS_MaybeOpenChannelUsingAsyncOpen(nsIChannel *aChannel, nsIStreamListener *aListener) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); + nsCOMPtr loadInfo = aChannel->LoadInfo(); return aChannel->AsyncOpen(aListener); } @@ -2688,12 +2661,11 @@ nsresult NS_GetSecureUpgradedURI(nsIURI *aURI, nsIURI **aUpgradedURI) { } nsresult NS_CompareLoadInfoAndLoadContext(nsIChannel *aChannel) { - nsCOMPtr loadInfo; - aChannel->GetLoadInfo(getter_AddRefs(loadInfo)); + nsCOMPtr loadInfo = aChannel->LoadInfo(); nsCOMPtr loadContext; NS_QueryNotificationCallbacks(aChannel, loadContext); - if (!loadInfo || !loadContext) { + if (!loadContext) { return NS_OK; } diff --git a/netwerk/cookie/CookieServiceChild.cpp b/netwerk/cookie/CookieServiceChild.cpp index 62dbbc02bd39..78b90522348d 100644 --- a/netwerk/cookie/CookieServiceChild.cpp +++ b/netwerk/cookie/CookieServiceChild.cpp @@ -176,11 +176,8 @@ void CookieServiceChild::TrackCookieLoad(nsIChannel *aChannel) { rejectedReason); } } - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - mozilla::OriginAttributes attrs; - if (loadInfo) { - attrs = loadInfo->GetOriginAttributes(); - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); + mozilla::OriginAttributes attrs = loadInfo->GetOriginAttributes(); URIParams uriParams; SerializeURI(uri, uriParams); bool isSafeTopLevelNav = NS_IsSafeTopLevelNav(aChannel); @@ -484,10 +481,8 @@ nsresult CookieServiceChild::GetCookieStringInternal(nsIURI *aHostURI, nsCOMPtr loadInfo; mozilla::OriginAttributes attrs; if (aChannel) { - loadInfo = aChannel->GetLoadInfo(); - if (loadInfo) { - attrs = loadInfo->GetOriginAttributes(); - } + loadInfo = aChannel->LoadInfo(); + attrs = loadInfo->GetOriginAttributes(); } // Asynchronously call the parent. @@ -569,10 +564,8 @@ nsresult CookieServiceChild::SetCookieStringInternal(nsIURI *aHostURI, aChannel->GetURI(getter_AddRefs(channelURI)); SerializeURI(channelURI, channelURIParams); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo) { - attrs = loadInfo->GetOriginAttributes(); - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); + attrs = loadInfo->GetOriginAttributes(); } else { SerializeURI(nullptr, channelURIParams); } diff --git a/netwerk/cookie/CookieServiceParent.cpp b/netwerk/cookie/CookieServiceParent.cpp index dc02e2c2bced..717ac4781d6c 100644 --- a/netwerk/cookie/CookieServiceParent.cpp +++ b/netwerk/cookie/CookieServiceParent.cpp @@ -132,11 +132,8 @@ void CookieServiceParent::TrackCookieLoad(nsIChannel *aChannel) { nsCOMPtr uri; aChannel->GetURI(getter_AddRefs(uri)); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - mozilla::OriginAttributes attrs; - if (loadInfo) { - attrs = loadInfo->GetOriginAttributes(); - } + nsCOMPtr loadInfo = aChannel->LoadInfo(); + mozilla::OriginAttributes attrs = loadInfo->GetOriginAttributes(); bool isSafeTopLevelNav = NS_IsSafeTopLevelNav(aChannel); bool aIsSameSiteForeign = NS_IsSameSiteForeign(aChannel, uri); diff --git a/netwerk/cookie/nsCookieService.cpp b/netwerk/cookie/nsCookieService.cpp index e795441108b8..12e007db3f54 100644 --- a/netwerk/cookie/nsCookieService.cpp +++ b/netwerk/cookie/nsCookieService.cpp @@ -3390,10 +3390,9 @@ bool nsCookieService::CanSetCookie(nsIURI *aHostURI, const nsCookieKey &aKey, if (aChannel) { nsCOMPtr channelURI; NS_GetFinalChannelURI(aChannel, getter_AddRefs(channelURI)); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - addonAllowsLoad = - loadInfo && BasePrincipal::Cast(loadInfo->TriggeringPrincipal()) - ->AddonAllowsLoad(channelURI); + nsCOMPtr loadInfo = aChannel->LoadInfo(); + addonAllowsLoad = BasePrincipal::Cast(loadInfo->TriggeringPrincipal()) + ->AddonAllowsLoad(channelURI); } if (!addonAllowsLoad) { diff --git a/netwerk/ipc/ChannelEventQueue.cpp b/netwerk/ipc/ChannelEventQueue.cpp index 8be2e4b29b13..52ad611b0514 100644 --- a/netwerk/ipc/ChannelEventQueue.cpp +++ b/netwerk/ipc/ChannelEventQueue.cpp @@ -186,11 +186,7 @@ bool ChannelEventQueue::MaybeSuspendIfEventsAreSuppressed() { return false; } - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (!loadInfo) { - return false; - } - + nsCOMPtr loadInfo = channel->LoadInfo(); // Figure out if this is for an XHR, if we haven't done so already. if (!mHasCheckedForXMLHttpRequest) { nsContentPolicyType contentType = loadInfo->InternalContentPolicyType(); diff --git a/netwerk/protocol/about/nsAboutProtocolHandler.cpp b/netwerk/protocol/about/nsAboutProtocolHandler.cpp index cac177e7831d..9fad45075ea7 100644 --- a/netwerk/protocol/about/nsAboutProtocolHandler.cpp +++ b/netwerk/protocol/about/nsAboutProtocolHandler.cpp @@ -204,22 +204,20 @@ nsAboutProtocolHandler::NewChannel(nsIURI *uri, nsILoadInfo *aLoadInfo, // set the LoadInfo on the newly created channel yet, as // an interim solution we set the LoadInfo here if not // available on the channel. Bug 1087720 - nsCOMPtr loadInfo = (*result)->GetLoadInfo(); + nsCOMPtr loadInfo = (*result)->LoadInfo(); if (aLoadInfo != loadInfo) { - if (loadInfo) { - NS_ASSERTION(false, - "nsIAboutModule->newChannel(aURI, aLoadInfo) needs to " - "set LoadInfo"); - const char16_t *params[] = { - u"nsIAboutModule->newChannel(aURI)", - u"nsIAboutModule->newChannel(aURI, aLoadInfo)"}; - nsContentUtils::ReportToConsole( - nsIScriptError::warningFlag, - NS_LITERAL_CSTRING("Security by Default"), - nullptr, // aDocument - nsContentUtils::eNECKO_PROPERTIES, "APIDeprecationWarning", - params, mozilla::ArrayLength(params)); - } + NS_ASSERTION(false, + "nsIAboutModule->newChannel(aURI, aLoadInfo) needs to " + "set LoadInfo"); + const char16_t *params[] = { + u"nsIAboutModule->newChannel(aURI)", + u"nsIAboutModule->newChannel(aURI, aLoadInfo)"}; + nsContentUtils::ReportToConsole( + nsIScriptError::warningFlag, + NS_LITERAL_CSTRING("Security by Default"), + nullptr, // aDocument + nsContentUtils::eNECKO_PROPERTIES, "APIDeprecationWarning", params, + mozilla::ArrayLength(params)); (*result)->SetLoadInfo(aLoadInfo); } diff --git a/netwerk/protocol/http/HttpBaseChannel.cpp b/netwerk/protocol/http/HttpBaseChannel.cpp index 9475df6d07f9..c2368b2bf258 100644 --- a/netwerk/protocol/http/HttpBaseChannel.cpp +++ b/netwerk/protocol/http/HttpBaseChannel.cpp @@ -2581,9 +2581,6 @@ nsresult HttpBaseChannel::AddSecurityMessage( nsCOMPtr loadInfo; GetLoadInfo(getter_AddRefs(loadInfo)); - if (!loadInfo) { - return NS_ERROR_FAILURE; - } auto innerWindowID = loadInfo->GetInnerWindowID(); @@ -3440,16 +3437,13 @@ nsresult HttpBaseChannel::SetupReplacementChannel(nsIURI* newURI, // If the protocol handler that created the channel wants to use // the originalURI of the channel as the principal URI, this fulfills // that request - newURI is the original URI of the channel. - nsCOMPtr newLoadInfo = newChannel->GetLoadInfo(); - if (newLoadInfo) { - nsCOMPtr resultPrincipalURI; - rv = newLoadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); + nsCOMPtr newLoadInfo = newChannel->LoadInfo(); + nsCOMPtr resultPrincipalURI; + rv = newLoadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI)); + NS_ENSURE_SUCCESS(rv, rv); + if (!resultPrincipalURI) { + rv = newLoadInfo->SetResultPrincipalURI(newURI); NS_ENSURE_SUCCESS(rv, rv); - - if (!resultPrincipalURI) { - rv = newLoadInfo->SetResultPrincipalURI(newURI); - NS_ENSURE_SUCCESS(rv, rv); - } } uint32_t newLoadFlags = mLoadFlags | LOAD_REPLACE; diff --git a/netwerk/protocol/http/HttpChannelParent.cpp b/netwerk/protocol/http/HttpChannelParent.cpp index dde1abeee7f1..54dbaa951f76 100644 --- a/netwerk/protocol/http/HttpChannelParent.cpp +++ b/netwerk/protocol/http/HttpChannelParent.cpp @@ -444,10 +444,6 @@ bool HttpChannelParent::DoAsyncOpen( return SendFailedAsyncOpen(rv); } - if (!loadInfo) { - return SendFailedAsyncOpen(NS_ERROR_UNEXPECTED); - } - nsCOMPtr channel; rv = NS_NewChannelInternal(getter_AddRefs(channel), uri, loadInfo, nullptr, nullptr, nullptr, aLoadFlags, ios); diff --git a/netwerk/protocol/http/TrackingDummyChannelChild.cpp b/netwerk/protocol/http/TrackingDummyChannelChild.cpp index f3dc9f90d64c..6395d77664a0 100644 --- a/netwerk/protocol/http/TrackingDummyChannelChild.cpp +++ b/netwerk/protocol/http/TrackingDummyChannelChild.cpp @@ -32,11 +32,7 @@ namespace net { nsresult topWindowURIResult = httpChannelInternal->GetTopWindowURI(getter_AddRefs(topWindowURI)); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return false; - } - + nsCOMPtr loadInfo = aChannel->LoadInfo(); OptionalLoadInfoArgs loadInfoArgs; mozilla::ipc::LoadInfoToLoadInfoArgs(loadInfo, &loadInfoArgs); diff --git a/netwerk/protocol/http/nsCORSListenerProxy.cpp b/netwerk/protocol/http/nsCORSListenerProxy.cpp index 9caf7d21b83f..8538f5c95507 100644 --- a/netwerk/protocol/http/nsCORSListenerProxy.cpp +++ b/netwerk/protocol/http/nsCORSListenerProxy.cpp @@ -532,8 +532,8 @@ nsresult nsCORSListenerProxy::CheckRequestApproved(nsIRequest* aRequest) { return NS_ERROR_DOM_BAD_URI; } - nsCOMPtr loadInfo = http->GetLoadInfo(); - if (loadInfo && loadInfo->GetServiceWorkerTaintingSynthesized()) { + nsCOMPtr loadInfo = http->LoadInfo(); + if (loadInfo->GetServiceWorkerTaintingSynthesized()) { // For synthesized responses, we don't need to perform any checks. // Note: This would be unsafe if we ever changed our behavior to allow // service workers to intercept CORS preflights. @@ -842,14 +842,7 @@ bool CheckUpgradeInsecureRequestsPreventsCORS( return false; } - nsCOMPtr loadInfo; - rv = aChannel->GetLoadInfo(getter_AddRefs(loadInfo)); - NS_ENSURE_SUCCESS(rv, false); - - if (!loadInfo) { - return false; - } - + nsCOMPtr loadInfo = aChannel->LoadInfo(); // lets see if the loadInfo indicates that the request will // be upgraded before fetching any data from the netwerk. return loadInfo->GetUpgradeInsecureRequests() || @@ -865,7 +858,7 @@ nsresult nsCORSListenerProxy::UpdateChannel(nsIChannel* aChannel, rv = aChannel->GetOriginalURI(getter_AddRefs(originalURI)); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); + nsCOMPtr loadInfo = aChannel->LoadInfo(); // exempt data URIs from the same origin check. if (aAllowDataURI == DataURIHandling::Allow && originalURI == uri) { @@ -875,7 +868,7 @@ nsresult nsCORSListenerProxy::UpdateChannel(nsIChannel* aChannel, if (dataScheme) { return NS_OK; } - if (loadInfo && loadInfo->GetAboutBlankInherits() && NS_IsAboutBlank(uri)) { + if (loadInfo->GetAboutBlankInherits() && NS_IsAboutBlank(uri)) { return NS_OK; } } @@ -1001,9 +994,8 @@ nsresult nsCORSListenerProxy::CheckPreflightNeeded(nsIChannel* aChannel, UpdateType aUpdateType) { // If this caller isn't using AsyncOpen, or if this *is* a preflight channel, // then we shouldn't initiate preflight for this channel. - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo || - loadInfo->GetSecurityMode() != + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (loadInfo->GetSecurityMode() != nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS || loadInfo->GetIsPreflight()) { return NS_OK; @@ -1223,7 +1215,7 @@ nsCORSPreflightListener::OnStartRequest(nsIRequest* aRequest, #ifdef DEBUG { nsCOMPtr channel = do_QueryInterface(aRequest); - nsCOMPtr loadInfo = channel ? channel->GetLoadInfo() : nullptr; + nsCOMPtr loadInfo = channel ? channel->LoadInfo() : nullptr; MOZ_ASSERT(!loadInfo || !loadInfo->GetServiceWorkerTaintingSynthesized()); } #endif @@ -1398,13 +1390,7 @@ nsresult nsCORSListenerProxy::StartCORSPreflight( nsresult rv = NS_GetFinalChannelURI(aRequestChannel, getter_AddRefs(uri)); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr originalLoadInfo = aRequestChannel->GetLoadInfo(); - MOZ_ASSERT(originalLoadInfo, - "can not perform CORS preflight without a loadInfo"); - if (!originalLoadInfo) { - return NS_ERROR_FAILURE; - } - + nsCOMPtr originalLoadInfo = aRequestChannel->LoadInfo(); MOZ_ASSERT(originalLoadInfo->GetSecurityMode() == nsILoadInfo::SEC_REQUIRE_CORS_DATA_INHERITS, "how did we end up here?"); diff --git a/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp b/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp index 56ee35a66d00..670b3e74ec9b 100644 --- a/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp +++ b/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp @@ -899,47 +899,44 @@ bool nsHttpChannelAuthProvider::BlockPrompt(bool proxyAuth) { } nsCOMPtr chan = do_QueryInterface(mAuthChannel); - nsCOMPtr loadInfo; - chan->GetLoadInfo(getter_AddRefs(loadInfo)); + nsCOMPtr loadInfo = chan->LoadInfo(); // We will treat loads w/o loadInfo as a top level document. bool topDoc = true; bool xhr = false; bool nonWebContent = false; - if (loadInfo) { - if (loadInfo->GetExternalContentPolicyType() != - nsIContentPolicy::TYPE_DOCUMENT) { - topDoc = false; - } + if (loadInfo->GetExternalContentPolicyType() != + nsIContentPolicy::TYPE_DOCUMENT) { + topDoc = false; + } - if (!topDoc) { - nsCOMPtr triggeringPrinc = loadInfo->TriggeringPrincipal(); - if (nsContentUtils::IsSystemPrincipal(triggeringPrinc)) { - nonWebContent = true; + if (!topDoc) { + nsCOMPtr triggeringPrinc = loadInfo->TriggeringPrincipal(); + if (nsContentUtils::IsSystemPrincipal(triggeringPrinc)) { + nonWebContent = true; + } + } + + if (loadInfo->GetExternalContentPolicyType() == + nsIContentPolicy::TYPE_XMLHTTPREQUEST) { + xhr = true; + } + + if (!topDoc && !xhr) { + nsCOMPtr topURI; + Unused << chanInternal->GetTopWindowURI(getter_AddRefs(topURI)); + + if (!topURI) { + // If we do not have topURI try the loadingPrincipal. + nsCOMPtr loadingPrinc = loadInfo->LoadingPrincipal(); + if (loadingPrinc) { + loadingPrinc->GetURI(getter_AddRefs(topURI)); } } - if (loadInfo->GetExternalContentPolicyType() == - nsIContentPolicy::TYPE_XMLHTTPREQUEST) { - xhr = true; - } - - if (!topDoc && !xhr) { - nsCOMPtr topURI; - Unused << chanInternal->GetTopWindowURI(getter_AddRefs(topURI)); - - if (!topURI) { - // If we do not have topURI try the loadingPrincipal. - nsCOMPtr loadingPrinc = loadInfo->LoadingPrincipal(); - if (loadingPrinc) { - loadingPrinc->GetURI(getter_AddRefs(topURI)); - } - } - - if (!NS_SecurityCompareURIs(topURI, mURI, true)) { - mCrossOrigin = true; - } + if (!NS_SecurityCompareURIs(topURI, mURI, true)) { + mCrossOrigin = true; } } diff --git a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp index ae400b4d9890..26b8bc539a64 100644 --- a/netwerk/protocol/viewsource/nsViewSourceChannel.cpp +++ b/netwerk/protocol/viewsource/nsViewSourceChannel.cpp @@ -136,11 +136,7 @@ nsresult nsViewSourceChannel::UpdateLoadInfoResultPrincipalURI() { MOZ_ASSERT(mChannel); - nsCOMPtr channelLoadInfo = mChannel->GetLoadInfo(); - if (!channelLoadInfo) { - return NS_OK; - } - + nsCOMPtr channelLoadInfo = mChannel->LoadInfo(); nsCOMPtr channelResultPrincipalURI; rv = channelLoadInfo->GetResultPrincipalURI( getter_AddRefs(channelResultPrincipalURI)); @@ -290,21 +286,11 @@ nsViewSourceChannel::GetURI(nsIURI **aURI) { NS_IMETHODIMP nsViewSourceChannel::Open(nsIInputStream **aStream) { NS_ENSURE_TRUE(mChannel, NS_ERROR_FAILURE); - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - if (!loadInfo) { - MOZ_ASSERT(loadInfo, "can not enforce security without loadInfo"); - return NS_ERROR_UNEXPECTED; - } return Open(aStream); } NS_IMETHODIMP nsViewSourceChannel::AsyncOpen(nsIStreamListener *aListener) { - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - if (!loadInfo) { - MOZ_ASSERT(loadInfo, "can not enforce security without loadInfo"); - return NS_ERROR_UNEXPECTED; - } // We can't ensure GetInitialSecurityCheckDone here NS_ENSURE_TRUE(mChannel, NS_ERROR_FAILURE); diff --git a/netwerk/protocol/wyciwyg/WyciwygChannelParent.cpp b/netwerk/protocol/wyciwyg/WyciwygChannelParent.cpp index 205a5281ae61..8f0640474096 100644 --- a/netwerk/protocol/wyciwyg/WyciwygChannelParent.cpp +++ b/netwerk/protocol/wyciwyg/WyciwygChannelParent.cpp @@ -111,10 +111,8 @@ mozilla::ipc::IPCResult WyciwygChannelParent::RecvInit( return IPC_OK(); } - nsCOMPtr loadInfo = chan->GetLoadInfo(); - if (loadInfo) { - rv = loadInfo->SetPrincipalToInherit(principalToInherit); - } + nsCOMPtr loadInfo = chan->LoadInfo(); + rv = loadInfo->SetPrincipalToInherit(principalToInherit); if (NS_FAILED(rv)) { if (!SendCancelEarly(rv)) { return IPC_FAIL_NO_REASON(this); @@ -212,7 +210,7 @@ mozilla::ipc::IPCResult WyciwygChannelParent::RecvAsyncOpen( return IPC_OK(); } - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); + nsCOMPtr loadInfo = mChannel->LoadInfo(); rv = mChannel->AsyncOpen(this); if (NS_FAILED(rv)) { diff --git a/netwerk/url-classifier/UrlClassifierCommon.cpp b/netwerk/url-classifier/UrlClassifierCommon.cpp index fd9a20f1cf2f..3a67e5380dd6 100644 --- a/netwerk/url-classifier/UrlClassifierCommon.cpp +++ b/netwerk/url-classifier/UrlClassifierCommon.cpp @@ -33,11 +33,7 @@ LazyLogModule UrlClassifierCommon::sLog("nsChannelClassifier"); /* static */ bool UrlClassifierCommon::AddonMayLoad(nsIChannel* aChannel, nsIURI* aURI) { - nsCOMPtr channelLoadInfo = aChannel->GetLoadInfo(); - if (!channelLoadInfo) { - return false; - } - + nsCOMPtr channelLoadInfo = aChannel->LoadInfo(); // loadingPrincipal is used here to ensure we are loading into an // addon principal. This allows an addon, with explicit permission, to // call out to API endpoints that may otherwise get blocked. diff --git a/netwerk/url-classifier/UrlClassifierFeatureFlash.cpp b/netwerk/url-classifier/UrlClassifierFeatureFlash.cpp index 80169c1fa1b8..1ae076f7413c 100644 --- a/netwerk/url-classifier/UrlClassifierFeatureFlash.cpp +++ b/netwerk/url-classifier/UrlClassifierFeatureFlash.cpp @@ -98,10 +98,9 @@ UrlClassifierFeatureFlash::UrlClassifierFeatureFlash( } // We use Flash feature just for document loading. - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); + nsCOMPtr loadInfo = aChannel->LoadInfo(); nsContentPolicyType contentPolicyType = - loadInfo ? loadInfo->GetExternalContentPolicyType() - : nsIContentPolicy::TYPE_INVALID; + loadInfo->GetExternalContentPolicyType(); if (contentPolicyType != nsIContentPolicy::TYPE_DOCUMENT && contentPolicyType != nsIContentPolicy::TYPE_SUBDOCUMENT) { diff --git a/security/manager/ssl/nsNSSCallbacks.cpp b/security/manager/ssl/nsNSSCallbacks.cpp index bf431d358efc..549c87d7f59e 100644 --- a/security/manager/ssl/nsNSSCallbacks.cpp +++ b/security/manager/ssl/nsNSSCallbacks.cpp @@ -271,10 +271,7 @@ OCSPRequest::Run() { attrs.mFirstPartyDomain = mOriginAttributes.mFirstPartyDomain; attrs.mPrivateBrowsingId = mOriginAttributes.mPrivateBrowsingId; - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (!loadInfo) { - return NotifyDone(NS_ERROR_FAILURE, lock); - } + nsCOMPtr loadInfo = channel->LoadInfo(); rv = loadInfo->SetOriginAttributes(attrs); if (NS_FAILED(rv)) { return NotifyDone(rv, lock); diff --git a/toolkit/components/antitracking/AntiTrackingCommon.cpp b/toolkit/components/antitracking/AntiTrackingCommon.cpp index 949ca7422a7d..6341ffd1b1d9 100644 --- a/toolkit/components/antitracking/AntiTrackingCommon.cpp +++ b/toolkit/components/antitracking/AntiTrackingCommon.cpp @@ -1272,12 +1272,7 @@ bool AntiTrackingCommon::IsFirstPartyStorageAccessGrantedFor( ("Computing whether channel %p has access to URI %s", aChannel, _spec), channelURI); - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - LOG(("No loadInfo, bail out early")); - return true; - } - + nsCOMPtr loadInfo = aChannel->LoadInfo(); // We need to find the correct principal to check the cookie permission. For // third-party contexts, we want to check if the top-level window has a custom // cookie permission. diff --git a/toolkit/components/extensions/ExtensionPolicyService.cpp b/toolkit/components/extensions/ExtensionPolicyService.cpp index 4219a74bd763..95f7fb33c3d6 100644 --- a/toolkit/components/extensions/ExtensionPolicyService.cpp +++ b/toolkit/components/extensions/ExtensionPolicyService.cpp @@ -396,11 +396,7 @@ nsresult ExtensionPolicyService::InjectContentScripts( // Checks a request for matching content scripts, and begins pre-loading them // if necessary. void ExtensionPolicyService::CheckRequest(nsIChannel* aChannel) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (!loadInfo) { - return; - } - + nsCOMPtr loadInfo = aChannel->LoadInfo(); auto loadType = loadInfo->GetExternalContentPolicyType(); if (loadType != nsIContentPolicy::TYPE_DOCUMENT && loadType != nsIContentPolicy::TYPE_SUBDOCUMENT) { diff --git a/toolkit/components/extensions/WebExtensionPolicy.cpp b/toolkit/components/extensions/WebExtensionPolicy.cpp index d5b6f1fe99fa..1e23b30679b3 100644 --- a/toolkit/components/extensions/WebExtensionPolicy.cpp +++ b/toolkit/components/extensions/WebExtensionPolicy.cpp @@ -745,12 +745,7 @@ bool WindowShouldMatchActiveTab(nsPIDOMWindowOuter* aWin) { return false; } - nsCOMPtr loadInfo = channel->GetLoadInfo(); - - if (!loadInfo) { - return false; - } - + nsCOMPtr loadInfo = channel->LoadInfo(); if (!loadInfo->GetOriginalFrameSrcLoad()) { return false; } diff --git a/toolkit/components/extensions/webrequest/ChannelWrapper.h b/toolkit/components/extensions/webrequest/ChannelWrapper.h index d0c60af31c54..a63f502fe98f 100644 --- a/toolkit/components/extensions/webrequest/ChannelWrapper.h +++ b/toolkit/components/extensions/webrequest/ChannelWrapper.h @@ -180,7 +180,7 @@ class ChannelWrapper final : public DOMEventTargetHelper, already_AddRefed GetLoadInfo() const { nsCOMPtr chan = MaybeChannel(); if (chan) { - return chan->GetLoadInfo(); + return chan->LoadInfo(); } return nullptr; } diff --git a/toolkit/components/places/nsAnnoProtocolHandler.cpp b/toolkit/components/places/nsAnnoProtocolHandler.cpp index f92b99c00aee..4dfa6c068c09 100644 --- a/toolkit/components/places/nsAnnoProtocolHandler.cpp +++ b/toolkit/components/places/nsAnnoProtocolHandler.cpp @@ -51,7 +51,7 @@ static nsresult GetDefaultIcon(nsIChannel *aOriginalChannel, nsresult rv = NS_NewURI(getter_AddRefs(defaultIconURI), NS_LITERAL_CSTRING(FAVICON_DEFAULT_URL)); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo = aOriginalChannel->GetLoadInfo(); + nsCOMPtr loadInfo = aOriginalChannel->LoadInfo(); rv = NS_NewChannelInternal(aChannel, defaultIconURI, loadInfo); NS_ENSURE_SUCCESS(rv, rv); Unused << (*aChannel)->SetContentType( @@ -132,7 +132,7 @@ class faviconAsyncLoader : public AsyncStatementCallback { // Ensure we'll break possible cycles with the listener. auto cleanup = MakeScopeExit([&]() { mListener = nullptr; }); - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); + nsCOMPtr loadInfo = mChannel->LoadInfo(); nsCOMPtr target = nsContentUtils::GetEventTargetByLoadInfo(loadInfo, TaskCategory::Other); if (!mData.IsEmpty()) { diff --git a/toolkit/components/reputationservice/ApplicationReputation.cpp b/toolkit/components/reputationservice/ApplicationReputation.cpp index c70e217af9eb..b47f8491b331 100644 --- a/toolkit/components/reputationservice/ApplicationReputation.cpp +++ b/toolkit/components/reputationservice/ApplicationReputation.cpp @@ -1592,13 +1592,10 @@ nsresult PendingLookup::SendRemoteQueryInternal(Reason& aReason) { nsIContentPolicy::TYPE_OTHER, getter_AddRefs(mChannel)); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); - if (loadInfo) { - mozilla::OriginAttributes attrs; - attrs.mFirstPartyDomain.AssignLiteral( - NECKO_SAFEBROWSING_FIRST_PARTY_DOMAIN); - loadInfo->SetOriginAttributes(attrs); - } + nsCOMPtr loadInfo = mChannel->LoadInfo(); + mozilla::OriginAttributes attrs; + attrs.mFirstPartyDomain.AssignLiteral(NECKO_SAFEBROWSING_FIRST_PARTY_DOMAIN); + loadInfo->SetOriginAttributes(attrs); nsCOMPtr httpChannel(do_QueryInterface(mChannel, &rv)); NS_ENSURE_SUCCESS(rv, rv); diff --git a/toolkit/components/url-classifier/nsUrlClassifierDBService.cpp b/toolkit/components/url-classifier/nsUrlClassifierDBService.cpp index eae9bda96011..e3a6b85e303f 100644 --- a/toolkit/components/url-classifier/nsUrlClassifierDBService.cpp +++ b/toolkit/components/url-classifier/nsUrlClassifierDBService.cpp @@ -2000,12 +2000,10 @@ nsUrlClassifierDBService::SendThreatHitReport(nsIChannel* aChannel, nullptr, loadFlags); NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo = reportChannel->GetLoadInfo(); + nsCOMPtr loadInfo = reportChannel->LoadInfo(); mozilla::OriginAttributes attrs; attrs.mFirstPartyDomain.AssignLiteral(NECKO_SAFEBROWSING_FIRST_PARTY_DOMAIN); - if (loadInfo) { - loadInfo->SetOriginAttributes(attrs); - } + loadInfo->SetOriginAttributes(attrs); nsCOMPtr uploadChannel(do_QueryInterface(reportChannel)); NS_ENSURE_TRUE(uploadChannel, NS_ERROR_FAILURE); diff --git a/toolkit/components/url-classifier/nsUrlClassifierStreamUpdater.cpp b/toolkit/components/url-classifier/nsUrlClassifierStreamUpdater.cpp index db67b66e4f4e..39c6fd3a80b3 100644 --- a/toolkit/components/url-classifier/nsUrlClassifierStreamUpdater.cpp +++ b/toolkit/components/url-classifier/nsUrlClassifierStreamUpdater.cpp @@ -140,12 +140,10 @@ nsresult nsUrlClassifierStreamUpdater::FetchUpdate( NS_ENSURE_SUCCESS(rv, rv); - nsCOMPtr loadInfo = mChannel->GetLoadInfo(); + nsCOMPtr loadInfo = mChannel->LoadInfo(); mozilla::OriginAttributes attrs; attrs.mFirstPartyDomain.AssignLiteral(NECKO_SAFEBROWSING_FIRST_PARTY_DOMAIN); - if (loadInfo) { - loadInfo->SetOriginAttributes(attrs); - } + loadInfo->SetOriginAttributes(attrs); mBeganStream = false; diff --git a/toolkit/components/url-classifier/nsUrlClassifierUtils.cpp b/toolkit/components/url-classifier/nsUrlClassifierUtils.cpp index d23b949ebdd6..85ddb9cba3c4 100644 --- a/toolkit/components/url-classifier/nsUrlClassifierUtils.cpp +++ b/toolkit/components/url-classifier/nsUrlClassifierUtils.cpp @@ -661,8 +661,8 @@ static nsresult AddTabThreatSources(ThreatHit& aHit, nsIChannel* aChannel) { bool isTopUri = false; rv = topUri->Equals(uri, &isTopUri); if (NS_SUCCEEDED(rv) && !isTopUri) { - nsCOMPtr loadInfo = aChannel->GetLoadInfo(); - if (loadInfo && loadInfo->RedirectChain().Length()) { + nsCOMPtr loadInfo = aChannel->LoadInfo(); + if (loadInfo->RedirectChain().Length()) { AddThreatSourceFromRedirectEntry(aHit, loadInfo->RedirectChain()[0], ThreatHit_ThreatSourceType_TAB_RESOURCE); } @@ -674,11 +674,7 @@ static nsresult AddTabThreatSources(ThreatHit& aHit, nsIChannel* aChannel) { Unused << NS_WARN_IF(NS_FAILED(rv)); // Set tab_redirect threat sources if there's any - nsCOMPtr topLoadInfo = topChannel->GetLoadInfo(); - if (!topLoadInfo) { - return NS_OK; - } - + nsCOMPtr topLoadInfo = topChannel->LoadInfo(); nsIRedirectHistoryEntry* redirectEntry; size_t length = topLoadInfo->RedirectChain().Length(); for (size_t i = 0; i < length; i++) { diff --git a/uriloader/exthandler/nsExternalHelperAppService.cpp b/uriloader/exthandler/nsExternalHelperAppService.cpp index ac9803092d91..88493a6df6eb 100644 --- a/uriloader/exthandler/nsExternalHelperAppService.cpp +++ b/uriloader/exthandler/nsExternalHelperAppService.cpp @@ -625,7 +625,7 @@ nsresult nsExternalHelperAppService::DoContentContentProcessHelper( channel->GetContentDisposition(&contentDisposition); channel->GetContentDispositionFilename(fileName); channel->GetContentDispositionHeader(disp); - loadInfo = channel->GetLoadInfo(); + loadInfo = channel->LoadInfo(); nsCOMPtr fileChan(do_QueryInterface(aRequest)); wasFileChannel = fileChan != nullptr; @@ -1978,19 +1978,17 @@ nsExternalAppHandler::OnSaveComplete(nsIBackgroundFileSaver* aSaver, // Save the redirect information. nsCOMPtr channel = do_QueryInterface(mRequest); if (channel) { - nsCOMPtr loadInfo = channel->GetLoadInfo(); - if (loadInfo) { - nsresult rv = NS_OK; - nsCOMPtr redirectChain = - do_CreateInstance(NS_ARRAY_CONTRACTID, &rv); - NS_ENSURE_SUCCESS(rv, rv); - LOG(("nsExternalAppHandler: Got %zu redirects\n", - loadInfo->RedirectChain().Length())); - for (nsIRedirectHistoryEntry* entry : loadInfo->RedirectChain()) { - redirectChain->AppendElement(entry); - } - mRedirects = redirectChain; + nsCOMPtr loadInfo = channel->LoadInfo(); + nsresult rv = NS_OK; + nsCOMPtr redirectChain = + do_CreateInstance(NS_ARRAY_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + LOG(("nsExternalAppHandler: Got %zu redirects\n", + loadInfo->RedirectChain().Length())); + for (nsIRedirectHistoryEntry* entry : loadInfo->RedirectChain()) { + redirectChain->AppendElement(entry); } + mRedirects = redirectChain; } if (NS_FAILED(aStatus)) { diff --git a/uriloader/prefetch/nsPrefetchService.cpp b/uriloader/prefetch/nsPrefetchService.cpp index 90b047d685a2..84fd5dfc3508 100644 --- a/uriloader/prefetch/nsPrefetchService.cpp +++ b/uriloader/prefetch/nsPrefetchService.cpp @@ -188,13 +188,11 @@ nsPrefetchNode::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext) { // if the load is cross origin without CORS, or the CORS access is rejected, // always fire load event to avoid leaking site information. - nsCOMPtr loadInfo = httpChannel->GetLoadInfo(); - if (loadInfo) { - mShouldFireLoadEvent = - loadInfo->GetTainting() == LoadTainting::Opaque || - (loadInfo->GetTainting() == LoadTainting::CORS && - (NS_FAILED(httpChannel->GetStatus(&rv)) || NS_FAILED(rv))); - } + nsCOMPtr loadInfo = httpChannel->LoadInfo(); + mShouldFireLoadEvent = + loadInfo->GetTainting() == LoadTainting::Opaque || + (loadInfo->GetTainting() == LoadTainting::CORS && + (NS_FAILED(httpChannel->GetStatus(&rv)) || NS_FAILED(rv))); // no need to prefetch http error page bool requestSucceeded;