Bug 1532318 - Part 2 : update changes of nsIHttpChannel in codebase r=smaug

Differential Revision: https://phabricator.services.mozilla.com/D22786

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Thomas Nguyen 2019-05-02 12:33:55 +00:00
parent 23e61a2595
commit b0bfbd85aa
24 changed files with 158 additions and 119 deletions

View File

@ -10083,11 +10083,9 @@ nsresult nsDocShell::DoURILoad(nsDocShellLoadState* aLoadState,
nsCOMPtr<nsIHttpChannelInternal> httpChannelInternal(
do_QueryInterface(channel));
nsCOMPtr<nsIURI> referrer;
uint32_t referrerPolicy = RP_Unset;
nsIReferrerInfo* referrerInfo = aLoadState->GetReferrerInfo();
if (referrerInfo) {
referrerInfo->GetOriginalReferrer(getter_AddRefs(referrer));
referrerInfo->GetReferrerPolicy(&referrerPolicy);
}
if (httpChannelInternal) {
if (aLoadState->HasLoadFlags(INTERNAL_LOAD_FLAGS_FORCE_ALLOW_COOKIES)) {
@ -10185,10 +10183,9 @@ nsresult nsDocShell::DoURILoad(nsDocShellLoadState* aLoadState,
rv = AddHeadersToChannel(aLoadState->HeadersStream(), httpChannel);
}
// Set the referrer explicitly
if (referrer &&
!(aLoadState->HasLoadFlags(INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER))) {
// Referrer is currenly only set for link clicks here.
rv = httpChannel->SetReferrerWithPolicy(referrer, referrerPolicy);
// Referrer is currenly only set for link clicks here.
if (referrerInfo) {
rv = httpChannel->SetReferrerInfo(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
}
}
@ -10579,15 +10576,8 @@ nsresult nsDocShell::ScrollToAnchor(bool aCurHasRef, bool aNewHasRef,
void nsDocShell::SetupReferrerInfoFromChannel(nsIChannel* aChannel) {
nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(aChannel));
if (httpChannel) {
nsCOMPtr<nsIURI> referrer;
nsresult rv = httpChannel->GetReferrer(getter_AddRefs(referrer));
if (NS_SUCCEEDED(rv)) {
uint32_t referrerPolicy;
rv = httpChannel->GetReferrerPolicy(&referrerPolicy);
if (NS_SUCCEEDED(rv)) {
SetReferrerInfo(new ReferrerInfo(referrer, referrerPolicy));
}
}
nsCOMPtr<nsIReferrerInfo> referrerInfo = httpChannel->GetReferrerInfo();
SetReferrerInfo(referrerInfo);
}
}
@ -11355,8 +11345,7 @@ nsresult nsDocShell::AddToSessionHistory(nsIURI* aURI, nsIChannel* aChannel,
nsCOMPtr<nsIURI> originalURI;
nsCOMPtr<nsIURI> resultPrincipalURI;
bool loadReplace = false;
nsCOMPtr<nsIURI> referrerURI;
uint32_t referrerPolicy = RP_Unset;
nsCOMPtr<nsIReferrerInfo> referrerInfo;
uint32_t cacheKey = 0;
nsCOMPtr<nsIPrincipal> triggeringPrincipal = aTriggeringPrincipal;
nsCOMPtr<nsIPrincipal> principalToInherit = aPrincipalToInherit;
@ -11388,9 +11377,7 @@ nsresult nsDocShell::AddToSessionHistory(nsIURI* aURI, nsIChannel* aChannel,
uint32_t loadFlags;
aChannel->GetLoadFlags(&loadFlags);
loadReplace = loadFlags & nsIChannel::LOAD_REPLACE;
rv = httpChannel->GetReferrer(getter_AddRefs(referrerURI));
MOZ_ASSERT(NS_SUCCEEDED(rv));
rv = httpChannel->GetReferrerPolicy(&referrerPolicy);
rv = httpChannel->GetReferrerInfo(getter_AddRefs(referrerInfo));
MOZ_ASSERT(NS_SUCCEEDED(rv));
discardLayoutState = ShouldDiscardLayoutState(httpChannel);
@ -11442,7 +11429,7 @@ nsresult nsDocShell::AddToSessionHistory(nsIURI* aURI, nsIChannel* aChannel,
entry->SetOriginalURI(originalURI);
entry->SetResultPrincipalURI(resultPrincipalURI);
entry->SetLoadReplace(loadReplace);
entry->SetReferrerInfo(new ReferrerInfo(referrerURI, referrerPolicy));
entry->SetReferrerInfo(referrerInfo);
nsCOMPtr<nsIInputStreamChannel> inStrmChan = do_QueryInterface(aChannel);
if (inStrmChan) {
bool isSrcdocChannel;
@ -12620,10 +12607,11 @@ nsDocShell::OnLinkClickSync(
uint32_t flags = INTERNAL_LOAD_FLAGS_NONE;
if (IsElementAnchorOrArea(aContent)) {
MOZ_ASSERT(aContent->IsHTMLElement());
nsAutoString referrer;
aContent->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::rel, referrer);
nsAutoString relString;
aContent->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::rel,
relString);
nsWhitespaceTokenizerTemplate<nsContentUtils::IsHTMLWhitespace> tok(
referrer);
relString);
bool targetBlank = aTargetSpec.LowerCaseEqualsLiteral("_blank");
bool explicitOpenerSet = false;
@ -12669,22 +12657,22 @@ nsDocShell::OnLinkClickSync(
// link was in. From that document, we'll get the URI to use as the
// referrer, since the current URI in this docshell may be a
// new document that we're in the process of loading.
RefPtr<Document> refererDoc = aContent->OwnerDoc();
NS_ENSURE_TRUE(refererDoc, NS_ERROR_UNEXPECTED);
RefPtr<Document> referrerDoc = aContent->OwnerDoc();
NS_ENSURE_TRUE(referrerDoc, NS_ERROR_UNEXPECTED);
// Now check that the refererDoc's inner window is the current inner
// Now check that the referrerDoc's inner window is the current inner
// window for mScriptGlobal. If it's not, then we don't want to
// follow this link.
nsPIDOMWindowInner* refererInner = refererDoc->GetInnerWindow();
NS_ENSURE_TRUE(refererInner, NS_ERROR_UNEXPECTED);
nsPIDOMWindowInner* referrerInner = referrerDoc->GetInnerWindow();
NS_ENSURE_TRUE(referrerInner, NS_ERROR_UNEXPECTED);
if (!mScriptGlobal ||
mScriptGlobal->GetCurrentInnerWindow() != refererInner) {
mScriptGlobal->GetCurrentInnerWindow() != referrerInner) {
// We're no longer the current inner window
return NS_OK;
}
nsCOMPtr<nsIURI> referrer = refererDoc->GetDocumentURI();
uint32_t refererPolicy = refererDoc->GetReferrerPolicy();
nsCOMPtr<nsIURI> referrer = referrerDoc->GetDocumentURI();
uint32_t referrerPolicy = referrerDoc->GetReferrerPolicy();
// get referrer attribute from clicked link and parse it
// if per element referrer is enabled, the element referrer overrules
@ -12693,7 +12681,7 @@ nsDocShell::OnLinkClickSync(
net::ReferrerPolicy refPolEnum =
aContent->AsElement()->GetReferrerPolicyAsEnum();
if (refPolEnum != RP_Unset) {
refererPolicy = refPolEnum;
referrerPolicy = refPolEnum;
}
}
@ -12723,7 +12711,7 @@ nsDocShell::OnLinkClickSync(
bool sendReferrer = !(flags & INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(referrer, refererPolicy, sendReferrer);
new ReferrerInfo(referrer, referrerPolicy, sendReferrer);
RefPtr<nsDocShellLoadState> loadState = new nsDocShellLoadState(aURI);
loadState->SetReferrerInfo(referrerInfo);
loadState->SetTriggeringPrincipal(triggeringPrincipal);
@ -12741,8 +12729,7 @@ nsDocShell::OnLinkClickSync(
nsresult rv = InternalLoad(loadState, aDocShell, aRequest);
if (NS_SUCCEEDED(rv)) {
nsPingListener::DispatchPings(this, aContent, aURI, referrer,
refererPolicy);
nsPingListener::DispatchPings(this, aContent, aURI, referrerInfo);
}
return rv;
}

View File

@ -79,9 +79,8 @@ struct MOZ_STACK_CLASS SendPingInfo {
int32_t maxPings;
bool requireSameHost;
nsIURI* target;
nsIURI* referrer;
nsIReferrerInfo* referrerInfo;
nsIDocShell* docShell;
uint32_t referrerPolicy;
};
static void SendPing(void* aClosure, nsIContent* aContent, nsIURI* aURI,
@ -151,10 +150,13 @@ static void SendPing(void* aClosure, nsIContent* aContent, nsIURI* aURI,
nsCOMPtr<nsIScriptSecurityManager> sm =
do_GetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID);
if (sm && info->referrer) {
bool referrerIsSecure;
if (sm && info->referrerInfo) {
nsCOMPtr<nsIURI> referrer = info->referrerInfo->GetOriginalReferrer();
bool referrerIsSecure = false;
uint32_t flags = nsIProtocolHandler::URI_IS_POTENTIALLY_TRUSTWORTHY;
rv = NS_URIChainHasFlags(info->referrer, flags, &referrerIsSecure);
if (referrer) {
rv = NS_URIChainHasFlags(referrer, flags, &referrerIsSecure);
}
// Default to sending less data if NS_URIChainHasFlags() fails.
referrerIsSecure = NS_FAILED(rv) || referrerIsSecure;
@ -166,7 +168,7 @@ static void SendPing(void* aClosure, nsIContent* aContent, nsIURI* aURI,
}
bool sameOrigin = NS_SUCCEEDED(
sm->CheckSameOriginURI(info->referrer, aURI, false, isPrivateWin));
sm->CheckSameOriginURI(referrer, aURI, false, isPrivateWin));
// If both the address of the document containing the hyperlink being
// audited and "ping URL" have the same origin or the document containing
@ -174,7 +176,7 @@ static void SendPing(void* aClosure, nsIContent* aContent, nsIURI* aURI,
// connection, send a Ping-From header.
if (sameOrigin || !referrerIsSecure) {
nsAutoCString pingFrom;
if (NS_SUCCEEDED(info->referrer->GetSpec(pingFrom))) {
if (NS_SUCCEEDED(referrer->GetSpec(pingFrom))) {
rv = httpChan->SetRequestHeader(NS_LITERAL_CSTRING("Ping-From"),
pingFrom, false);
MOZ_ASSERT(NS_SUCCEEDED(rv));
@ -184,9 +186,8 @@ static void SendPing(void* aClosure, nsIContent* aContent, nsIURI* aURI,
// If the document containing the hyperlink being audited was not retrieved
// over an encrypted connection and its address does not have the same
// origin as "ping URL", send a referrer.
if (!sameOrigin && !referrerIsSecure) {
rv =
httpChan->SetReferrerWithPolicy(info->referrer, info->referrerPolicy);
if (!sameOrigin && !referrerIsSecure && info->referrerInfo) {
rv = httpChan->SetReferrerInfo(info->referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
}
}
@ -287,10 +288,10 @@ static void ForEachPing(nsIContent* aContent, ForEachPingCallback aCallback,
}
// Spec: http://whatwg.org/specs/web-apps/current-work/#ping
/*static*/
void nsPingListener::DispatchPings(nsIDocShell* aDocShell, nsIContent* aContent,
nsIURI* aTarget, nsIURI* aReferrer,
uint32_t aReferrerPolicy) {
/*static*/ void nsPingListener::DispatchPings(nsIDocShell* aDocShell,
nsIContent* aContent,
nsIURI* aTarget,
nsIReferrerInfo* aReferrerInfo) {
SendPingInfo info;
if (!PingsEnabled(&info.maxPings, &info.requireSameHost)) {
@ -302,8 +303,7 @@ void nsPingListener::DispatchPings(nsIDocShell* aDocShell, nsIContent* aContent,
info.numPings = 0;
info.target = aTarget;
info.referrer = aReferrer;
info.referrerPolicy = aReferrerPolicy;
info.referrerInfo = aReferrerInfo;
info.docShell = aDocShell;
ForEachPing(aContent, SendPing, &info);

View File

@ -8,7 +8,7 @@
#define nsPingListener_h__
#include "nsIStreamListener.h"
#include "nsIReferrerInfo.h"
#include "nsCOMPtr.h"
namespace mozilla {
@ -36,8 +36,7 @@ class nsPingListener final : public nsIStreamListener {
nsresult StartTimeout(mozilla::dom::DocGroup* aDocGroup);
static void DispatchPings(nsIDocShell* aDocShell, nsIContent* aContent,
nsIURI* aTarget, nsIURI* aReferrer,
uint32_t aReferrerPolicy);
nsIURI* aTarget, nsIReferrerInfo* aReferrerInfo);
private:
~nsPingListener();

View File

@ -216,6 +216,7 @@
#include "nsXULAppAPI.h"
#include "mozilla/dom/Touch.h"
#include "mozilla/dom/TouchEvent.h"
#include "ReferrerInfo.h"
#include "mozilla/Preferences.h"
@ -995,7 +996,9 @@ nsresult ExternalResourceMap::PendingLoad::StartLoad(nsIURI* aURI,
nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(channel));
if (httpChannel) {
rv = httpChannel->SetReferrerWithPolicy(aReferrer, aReferrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(aReferrer, aReferrerPolicy);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
Unused << NS_WARN_IF(NS_FAILED(rv));
}

View File

@ -47,6 +47,7 @@
#include "mozilla/Attributes.h"
#include "nsError.h"
#include "mozilla/Encoding.h"
#include "ReferrerInfo.h"
namespace mozilla {
namespace dom {
@ -94,7 +95,7 @@ class EventSourceImpl final : public nsIObserver,
nsresult GetBaseURI(nsIURI** aBaseURI);
void SetupHttpChannel();
nsresult SetupReferrerPolicy();
nsresult SetupReferrerInfo();
nsresult InitChannelAndRequestEventSource();
nsresult ResetConnection();
void ResetDecoder();
@ -809,8 +810,8 @@ EventSourceImpl::AsyncOnChannelRedirect(
NS_ENSURE_STATE(mHttpChannel);
SetupHttpChannel();
// The HTTP impl already copies over the referrer and referrer policy on
// redirects, so we don't need to SetupReferrerPolicy().
// The HTTP impl already copies over the referrer info on
// redirects, so we don't need to SetupReferrerInfo().
if ((aFlags & nsIChannelEventSink::REDIRECT_PERMANENT) != 0) {
rv = NS_GetFinalChannelURI(mHttpChannel, getter_AddRefs(mSrc));
@ -929,13 +930,14 @@ void EventSourceImpl::SetupHttpChannel() {
Unused << rv;
}
nsresult EventSourceImpl::SetupReferrerPolicy() {
nsresult EventSourceImpl::SetupReferrerInfo() {
AssertIsOnMainThread();
MOZ_ASSERT(!IsShutDown());
nsCOMPtr<Document> doc = mEventSource->GetDocumentIfCurrent();
if (doc) {
nsresult rv = mHttpChannel->SetReferrerWithPolicy(doc->GetDocumentURI(),
doc->GetReferrerPolicy());
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(doc->GetDocumentURI(), doc->GetReferrerPolicy());
nsresult rv = mHttpChannel->SetReferrerInfoWithoutClone(referrerInfo);
NS_ENSURE_SUCCESS(rv, rv);
}
@ -1001,7 +1003,7 @@ nsresult EventSourceImpl::InitChannelAndRequestEventSource() {
NS_ENSURE_TRUE(mHttpChannel, NS_ERROR_NO_INTERFACE);
SetupHttpChannel();
rv = SetupReferrerPolicy();
rv = SetupReferrerInfo();
NS_ENSURE_SUCCESS(rv, rv);
#ifdef DEBUG

View File

@ -73,6 +73,7 @@
#include "WidgetUtils.h"
#include "nsIPresentationService.h"
#include "nsIScriptError.h"
#include "ReferrerInfo.h"
#include "nsIExternalProtocolHandler.h"
#include "BrowserChild.h"
@ -1151,8 +1152,10 @@ bool Navigator::SendBeaconInternal(const nsAString& aUrl,
aRv.Throw(NS_ERROR_DOM_BAD_URI);
return false;
}
mozilla::net::ReferrerPolicy referrerPolicy = doc->GetReferrerPolicy();
rv = httpChannel->SetReferrerWithPolicy(documentURI, referrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(doc->GetDocumentURI(), doc->GetReferrerPolicy());
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
nsCOMPtr<nsIInputStream> in;

View File

@ -249,6 +249,7 @@
#include "mozilla/RecordReplay.h"
#include "nsThreadManager.h"
#include "nsIBidiKeyboard.h"
#include "ReferrerInfo.h"
#if defined(XP_WIN)
// Undefine LoadImage to prevent naming conflict with Windows.
@ -7980,8 +7981,10 @@ nsresult nsContentUtils::SetFetchReferrerURIWithPolicy(
aPrincipal->GetURI(getter_AddRefs(principalURI));
nsCOMPtr<nsIReferrerInfo> referrerInfo;
if (!aDoc) {
return aChannel->SetReferrerWithPolicy(principalURI, aReferrerPolicy);
referrerInfo = new ReferrerInfo(principalURI, aReferrerPolicy);
return aChannel->SetReferrerInfoWithoutClone(referrerInfo);
}
// If it weren't for history.push/replaceState, we could just use the
@ -8010,7 +8013,8 @@ nsresult nsContentUtils::SetFetchReferrerURIWithPolicy(
referrerURI = principalURI;
}
return aChannel->SetReferrerWithPolicy(referrerURI, aReferrerPolicy);
referrerInfo = new ReferrerInfo(referrerURI, aReferrerPolicy);
return aChannel->SetReferrerInfoWithoutClone(referrerInfo);
}
// static
@ -9782,8 +9786,12 @@ bool nsContentUtils::AttemptLargeAllocationLoad(nsIHttpChannel* aChannel) {
NS_ENSURE_TRUE(uri, false);
nsCOMPtr<nsIURI> referrer;
rv = aChannel->GetReferrer(getter_AddRefs(referrer));
nsCOMPtr<nsIReferrerInfo> referrerInfo;
rv = aChannel->GetReferrerInfo(getter_AddRefs(referrerInfo));
NS_ENSURE_SUCCESS(rv, false);
if (referrerInfo) {
referrer = referrerInfo->GetComputedReferrer();
}
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->LoadInfo();
nsCOMPtr<nsIPrincipal> triggeringPrincipal = loadInfo->TriggeringPrincipal();

View File

@ -94,6 +94,7 @@
#include "mozilla/PresShell.h"
#include "nsChannelClassifier.h"
#include "nsFocusManager.h"
#include "ReferrerInfo.h"
#ifdef XP_WIN
// Thanks so much, Microsoft! :(
@ -2328,8 +2329,9 @@ nsresult nsObjectLoadingContent::OpenChannel() {
// Referrer
nsCOMPtr<nsIHttpChannel> httpChan(do_QueryInterface(chan));
if (httpChan) {
rv = httpChan->SetReferrerWithPolicy(doc->GetDocumentURI(),
doc->GetReferrerPolicy());
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(doc->GetDocumentURI(), doc->GetReferrerPolicy());
rv = httpChan->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
// Set the initiator type

View File

@ -24,6 +24,7 @@
#include "nsThreadUtils.h"
#include "nsNetUtil.h"
#include "nsStreamUtils.h"
#include "ReferrerInfo.h"
#include <algorithm>
using namespace mozilla;
@ -137,7 +138,9 @@ nsresult nsSyncLoader::LoadDocument(nsIChannel* aChannel, bool aChannelIsSync,
nsCOMPtr<nsIURI> loaderUri;
loadInfo->TriggeringPrincipal()->GetURI(getter_AddRefs(loaderUri));
if (loaderUri) {
rv = http->SetReferrerWithPolicy(loaderUri, aReferrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(loaderUri, aReferrerPolicy);
rv = http->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
}
}

View File

@ -606,7 +606,7 @@ nsresult FetchDriver::HttpFetch(
nsCOMPtr<nsILoadInfo> loadInfo = httpChan->LoadInfo();
bool isPrivate = loadInfo->GetOriginAttributes().mPrivateBrowsingId > 0;
net::ReferrerPolicy referrerPolicy = static_cast<net::ReferrerPolicy>(
NS_GetDefaultReferrerPolicy(httpChan, uri, isPrivate));
ReferrerInfo::GetDefaultReferrerPolicy(httpChan, uri, isPrivate));
mRequest->SetReferrerPolicy(referrerPolicy);
}

View File

@ -114,14 +114,16 @@ nsresult FetchUtil::SetRequestReferrer(nsIPrincipal* aPrincipal, Document* aDoc,
InternalRequest* aRequest) {
MOZ_ASSERT(NS_IsMainThread());
nsresult rv = NS_OK;
nsAutoString referrer;
aRequest->GetReferrer(referrer);
net::ReferrerPolicy policy = aRequest->GetReferrerPolicy();
nsresult rv = NS_OK;
net::ReferrerPolicy policy = aRequest->GetReferrerPolicy();
nsCOMPtr<nsIReferrerInfo> referrerInfo;
if (referrer.IsEmpty()) {
// This is the case requests referrer is "no-referrer"
rv = aChannel->SetReferrerWithPolicy(nullptr, net::RP_No_Referrer);
referrerInfo = new ReferrerInfo(nullptr, net::RP_No_Referrer);
rv = aChannel->SetReferrerInfoWithoutClone(referrerInfo);
NS_ENSURE_SUCCESS(rv, rv);
} else if (referrer.EqualsLiteral(kFETCH_CLIENT_REFERRER_STR)) {
rv = nsContentUtils::SetFetchReferrerURIWithPolicy(aPrincipal, aDoc,
@ -134,22 +136,24 @@ nsresult FetchUtil::SetRequestReferrer(nsIPrincipal* aPrincipal, Document* aDoc,
nsCOMPtr<nsIURI> referrerURI;
rv = NS_NewURI(getter_AddRefs(referrerURI), referrer, nullptr, nullptr);
NS_ENSURE_SUCCESS(rv, rv);
rv = aChannel->SetReferrerWithPolicy(referrerURI, policy);
referrerInfo = new ReferrerInfo(referrerURI, policy);
rv = aChannel->SetReferrerInfoWithoutClone(referrerInfo);
NS_ENSURE_SUCCESS(rv, rv);
}
nsCOMPtr<nsIURI> referrerURI;
Unused << aChannel->GetReferrer(getter_AddRefs(referrerURI));
nsCOMPtr<nsIURI> computedReferrer;
referrerInfo = aChannel->GetReferrerInfo();
if (referrerInfo) {
computedReferrer = referrerInfo->GetComputedReferrer();
}
// Step 8 https://fetch.spec.whatwg.org/#main-fetch
// If requests referrer is not "no-referrer", set requests referrer to
// the result of invoking determine requests referrer.
if (referrerURI) {
if (computedReferrer) {
nsAutoCString spec;
rv = referrerURI->GetSpec(spec);
rv = computedReferrer->GetSpec(spec);
NS_ENSURE_SUCCESS(rv, rv);
aRequest->SetReferrer(NS_ConvertUTF8toUTF16(spec));
} else {
aRequest->SetReferrer(EmptyString());

View File

@ -122,6 +122,7 @@
#include "nsThreadUtils.h"
#include "nsURIHashKey.h"
#include "nsVideoFrame.h"
#include "ReferrerInfo.h"
#include "xpcpublic.h"
#include <algorithm>
#include <cmath>
@ -6211,8 +6212,9 @@ void HTMLMediaElement::SetRequestHeaders(nsIHttpChannel* aChannel) {
MOZ_ASSERT(NS_SUCCEEDED(rv));
// Set the Referer header
rv = aChannel->SetReferrerWithPolicy(OwnerDoc()->GetDocumentURI(),
OwnerDoc()->GetReferrerPolicy());
nsCOMPtr<nsIReferrerInfo> referrerInfo = new ReferrerInfo(
OwnerDoc()->GetDocumentURI(), OwnerDoc()->GetReferrerPolicy());
rv = aChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
}

View File

@ -95,6 +95,7 @@
#include "nsIImageLoadingContent.h"
#include "mozilla/Preferences.h"
#include "nsVersionComparator.h"
#include "ReferrerInfo.h"
#include "mozilla/dom/Promise.h"
@ -3135,8 +3136,9 @@ nsresult nsPluginHost::NewPluginURLStream(
referer = doc->GetDocumentURI();
referrerPolicy = doc->GetReferrerPolicy();
}
rv = httpChannel->SetReferrerWithPolicy(referer, referrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new mozilla::dom::ReferrerInfo(referer, referrerPolicy);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
NS_ENSURE_SUCCESS(rv, rv);
}

View File

@ -64,6 +64,7 @@
#include "nsMimeTypes.h"
#include "mozilla/ConsoleReportCollector.h"
#include "mozilla/LoadInfo.h"
#include "ReferrerInfo.h"
#include "mozilla/AsyncEventDispatcher.h"
#include "mozilla/Attributes.h"
@ -1354,8 +1355,9 @@ nsresult ScriptLoader::StartLoad(ScriptLoadRequest* aRequest) {
acceptTypes, false);
MOZ_ASSERT(NS_SUCCEEDED(rv));
rv = httpChannel->SetReferrerWithPolicy(aRequest->mReferrer,
aRequest->ReferrerPolicy());
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(aRequest->mReferrer, aRequest->ReferrerPolicy());
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
nsCOMPtr<nsIHttpChannelInternal> internalChannel(

View File

@ -44,6 +44,7 @@
#include "mozilla/net/NeckoChannelParams.h"
#include "mozilla/StaticPrefs.h"
#include "mozilla/Unused.h"
#include "nsIReferrerInfo.h"
using namespace mozilla;
using namespace mozilla::dom;
@ -1254,21 +1255,17 @@ class FetchEventRunnable : public ExtendableFunctionalEventWorkerRunnable,
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(channel);
MOZ_ASSERT(httpChannel, "How come we don't have an HTTP channel?");
nsAutoCString referrer;
// Ignore the return value since the Referer header may not exist.
Unused << httpChannel->GetRequestHeader(NS_LITERAL_CSTRING("Referer"),
referrer);
if (!referrer.IsEmpty()) {
mReferrer = referrer;
} else {
// If there's no referrer Header, means the header was omitted for
// security/privacy reason.
mReferrer = EmptyCString();
}
mReferrer = EmptyCString();
uint32_t referrerPolicy = 0;
rv = httpChannel->GetReferrerPolicy(&referrerPolicy);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIReferrerInfo> referrerInfo = httpChannel->GetReferrerInfo();
if (referrerInfo) {
referrerPolicy = referrerInfo->GetReferrerPolicy();
nsCOMPtr<nsIURI> computedReferrer = referrerInfo->GetComputedReferrer();
if (computedReferrer) {
rv = computedReferrer->GetSpec(mReferrer);
NS_ENSURE_SUCCESS(rv, rv);
}
}
switch (referrerPolicy) {
case nsIHttpChannel::REFERRER_POLICY_UNSET:
mReferrerPolicy = ReferrerPolicy::_empty;

View File

@ -64,6 +64,7 @@
#include "mozilla/dom/HTMLSharedElement.h"
#include "mozilla/net/CookieSettings.h"
#include "mozilla/Printf.h"
#include "ReferrerInfo.h"
using namespace mozilla;
using namespace mozilla::dom;
@ -1273,7 +1274,9 @@ nsresult nsWebBrowserPersist::SaveURIInternal(
if (httpChannel) {
// Referrer
if (aReferrer) {
rv = httpChannel->SetReferrerWithPolicy(aReferrer, aReferrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(aReferrer, aReferrerPolicy);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
}

View File

@ -38,6 +38,7 @@
#include "mozilla/dom/Text.h"
#include "mozilla/Encoding.h"
#include "mozilla/UniquePtr.h"
#include "ReferrerInfo.h"
using namespace mozilla;
using mozilla::net::ReferrerPolicy;
@ -415,7 +416,9 @@ nsresult txCompileObserver::startLoad(nsIURI* aUri,
aReferrerPrincipal->GetURI(getter_AddRefs(referrerURI));
if (referrerURI) {
DebugOnly<nsresult> rv;
rv = httpChannel->SetReferrerWithPolicy(referrerURI, aReferrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new dom::ReferrerInfo(referrerURI, aReferrerPolicy);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
}
}

View File

@ -57,6 +57,7 @@
#include "Image.h"
#include "gfxPrefs.h"
#include "prtime.h"
#include "ReferrerInfo.h"
// we want to explore making the document own the load group
// so we can associate the document URI with the load group.
@ -884,7 +885,9 @@ static nsresult NewImageChannel(
NS_ENSURE_TRUE(httpChannelInternal, NS_ERROR_UNEXPECTED);
rv = httpChannelInternal->SetDocumentURI(aInitialDocumentURI);
MOZ_ASSERT(NS_SUCCEEDED(rv));
rv = newHttpChannel->SetReferrerWithPolicy(aReferringURI, aReferrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(aReferringURI, aReferrerPolicy);
rv = newHttpChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
}

View File

@ -55,6 +55,7 @@
#include "nsPrintfCString.h"
#include "nsUTF8Utils.h"
#include "nsDOMNavigationTiming.h"
#include "ReferrerInfo.h"
using namespace mozilla;
using namespace mozilla::css;
@ -618,8 +619,9 @@ nsresult FontFaceSet::StartLoad(gfxUserFontEntry* aUserFontEntry,
nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(channel));
if (httpChannel) {
rv = httpChannel->SetReferrerWithPolicy(aFontFaceSrc->mReferrer,
aFontFaceSrc->mReferrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo = new mozilla::dom::ReferrerInfo(
aFontFaceSrc->mReferrer, aFontFaceSrc->mReferrerPolicy);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
Unused << NS_WARN_IF(NS_FAILED(rv));
nsAutoCString accept("application/font-woff;q=0.9,*/*;q=0.8");

View File

@ -54,6 +54,7 @@
#include "mozilla/ConsoleReportCollector.h"
#include "mozilla/ServoUtils.h"
#include "mozilla/css/StreamLoader.h"
#include "ReferrerInfo.h"
#ifdef MOZ_XUL
# include "nsXULPrototypeCache.h"
@ -1454,8 +1455,9 @@ nsresult Loader::LoadSheet(SheetLoadData* aLoadData,
if (httpChannel) {
nsCOMPtr<nsIURI> referrerURI = aLoadData->GetReferrerURI();
if (referrerURI) {
rv = httpChannel->SetReferrerWithPolicy(
nsCOMPtr<nsIReferrerInfo> referrerInfo = new mozilla::dom::ReferrerInfo(
referrerURI, aLoadData->mSheet->GetReferrerPolicy());
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
Unused << NS_WARN_IF(NS_FAILED(rv));
}

View File

@ -560,13 +560,15 @@ static nsresult AddThreatSourceFromChannel(ThreatHit& aHit,
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
if (httpChannel) {
nsCOMPtr<nsIURI> referrer;
rv = httpChannel->GetReferrer(getter_AddRefs(referrer));
if (NS_SUCCEEDED(rv) && referrer) {
nsCString referrerSpec;
rv = GetSpecWithoutSensitiveData(referrer, referrerSpec);
NS_ENSURE_SUCCESS(rv, rv);
matchingSource->set_referrer(referrerSpec.get());
nsCOMPtr<nsIReferrerInfo> referrerInfo = httpChannel->GetReferrerInfo();
if (referrerInfo) {
nsAutoCString referrerSpec;
nsCOMPtr<nsIURI> referrer = referrerInfo->GetComputedReferrer();
if (referrer) {
rv = GetSpecWithoutSensitiveData(referrer, referrerSpec);
NS_ENSURE_SUCCESS(rv, rv);
matchingSource->set_referrer(referrerSpec.get());
}
}
}

View File

@ -38,6 +38,7 @@
#include "nsContentUtils.h"
#include "nsIPrincipal.h"
#include "nsDiskCacheDeviceSQL.h"
#include "ReferrerInfo.h"
#include "nsXULAppAPI.h"
@ -177,7 +178,9 @@ nsresult nsManifestCheck::Begin() {
// configure HTTP specific stuff
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(mChannel);
if (httpChannel) {
rv = httpChannel->SetReferrer(mReferrerURI);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new mozilla::dom::ReferrerInfo(mReferrerURI);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
rv = httpChannel->SetRequestHeader(NS_LITERAL_CSTRING("X-Moz"),
NS_LITERAL_CSTRING("offline-resource"),
@ -357,7 +360,9 @@ nsresult nsOfflineCacheUpdateItem::OpenChannel(nsOfflineCacheUpdate* aUpdate) {
// configure HTTP specific stuff
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(mChannel);
if (httpChannel) {
rv = httpChannel->SetReferrer(mReferrerURI);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new mozilla::dom::ReferrerInfo(mReferrerURI);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
rv = httpChannel->SetRequestHeader(NS_LITERAL_CSTRING("X-Moz"),
NS_LITERAL_CSTRING("offline-resource"),

View File

@ -13,6 +13,7 @@
#include "mozilla/dom/HTMLLinkElement.h"
#include "mozilla/dom/ServiceWorkerDescriptor.h"
#include "mozilla/Preferences.h"
#include "ReferrerInfo.h"
#include "nsICacheEntry.h"
#include "nsIServiceManager.h"
@ -138,7 +139,9 @@ nsresult nsPrefetchNode::OpenChannel() {
// configure HTTP specific stuff
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(mChannel);
if (httpChannel) {
rv = httpChannel->SetReferrerWithPolicy(mReferrerURI, referrerPolicy);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new mozilla::dom::ReferrerInfo(mReferrerURI, referrerPolicy);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
MOZ_ASSERT(NS_SUCCEEDED(rv));
rv = httpChannel->SetRequestHeader(NS_LITERAL_CSTRING("X-Moz"),
NS_LITERAL_CSTRING("prefetch"), false);

View File

@ -27,6 +27,7 @@
#include "nsNetUtil.h" // for NS_NewURI, NS_NewChannel, NS_NewStreamLoader
#include "InetAddress.h" // for java::sdk::InetAddress and java::sdk::UnknownHostException
#include "ReferrerInfo.h"
namespace mozilla {
using namespace net;
@ -493,7 +494,8 @@ nsresult WebExecutorSupport::CreateStreamLoader(
NS_ENSURE_SUCCESS(rv, NS_ERROR_MALFORMED_URI);
}
rv = httpChannel->SetReferrer(referrerUri);
nsCOMPtr<nsIReferrerInfo> referrerInfo = new dom::ReferrerInfo(referrerUri);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
NS_ENSURE_SUCCESS(rv, rv);
// Cache mode