mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-09 08:48:07 +00:00
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:
parent
23e61a2595
commit
b0bfbd85aa
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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 request’s 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 request’s referrer is not "no-referrer", set request’s referrer to
|
||||
// the result of invoking determine request’s 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());
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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(
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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");
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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"),
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user