Bug 1517703 - Part 1 - Implement ReferrerInfo class r=smaug
The class contains original full referrer and referrer policy will be applied to the referrer. Differential Revision: https://phabricator.services.mozilla.com/D17923
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIWebNavigation.h"
|
||||
#include "nsIChildChannel.h"
|
||||
#include "ReferrerInfo.h"
|
||||
|
||||
#include "mozilla/OriginAttributes.h"
|
||||
#include "mozilla/NullPrincipal.h"
|
||||
@@ -25,8 +26,6 @@ nsDocShellLoadState::nsDocShellLoadState(nsIURI* aURI)
|
||||
mPrincipalIsExplicit(false),
|
||||
mForceAllowDataURI(false),
|
||||
mOriginalFrameSrc(false),
|
||||
mSendReferrer(true),
|
||||
mReferrerPolicy(mozilla::net::RP_Unset),
|
||||
mLoadType(LOAD_NORMAL),
|
||||
mTarget(),
|
||||
mSrcdocData(VoidString()),
|
||||
@@ -47,8 +46,6 @@ nsDocShellLoadState::nsDocShellLoadState(DocShellLoadStateInit& aLoadState) {
|
||||
mPrincipalIsExplicit = aLoadState.PrincipalIsExplicit();
|
||||
mForceAllowDataURI = aLoadState.ForceAllowDataURI();
|
||||
mOriginalFrameSrc = aLoadState.OriginalFrameSrc();
|
||||
mSendReferrer = aLoadState.SendReferrer();
|
||||
mReferrerPolicy = (mozilla::net::ReferrerPolicy)aLoadState.ReferrerPolicy();
|
||||
mLoadType = aLoadState.LoadType();
|
||||
mTarget = aLoadState.Target();
|
||||
mLoadFlags = aLoadState.LoadFlags();
|
||||
@@ -57,7 +54,9 @@ nsDocShellLoadState::nsDocShellLoadState(DocShellLoadStateInit& aLoadState) {
|
||||
mFileName = aLoadState.FileName();
|
||||
mIsFromProcessingFrameAttributes =
|
||||
aLoadState.IsFromProcessingFrameAttributes();
|
||||
mReferrer = aLoadState.Referrer();
|
||||
mReferrerInfo =
|
||||
new ReferrerInfo(aLoadState.Referrer(), aLoadState.ReferrerPolicy(),
|
||||
aLoadState.SendReferrer());
|
||||
mURI = aLoadState.URI();
|
||||
mOriginalURI = aLoadState.OriginalURI();
|
||||
mBaseURI = aLoadState.BaseURI();
|
||||
@@ -105,10 +104,12 @@ nsresult nsDocShellLoadState::CreateFromPendingChannel(
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsIURI* nsDocShellLoadState::Referrer() const { return mReferrer; }
|
||||
nsIReferrerInfo* nsDocShellLoadState::GetReferrerInfo() const {
|
||||
return mReferrerInfo;
|
||||
}
|
||||
|
||||
void nsDocShellLoadState::SetReferrer(nsIURI* aReferrer) {
|
||||
mReferrer = aReferrer;
|
||||
void nsDocShellLoadState::SetReferrerInfo(nsIReferrerInfo* aReferrerInfo) {
|
||||
mReferrerInfo = aReferrerInfo;
|
||||
}
|
||||
|
||||
nsIURI* nsDocShellLoadState::URI() const { return mURI; }
|
||||
@@ -231,21 +232,6 @@ void nsDocShellLoadState::SetHeadersStream(nsIInputStream* aHeadersStream) {
|
||||
mHeadersStream = aHeadersStream;
|
||||
}
|
||||
|
||||
bool nsDocShellLoadState::SendReferrer() const { return mSendReferrer; }
|
||||
|
||||
void nsDocShellLoadState::SetSendReferrer(bool aSendReferrer) {
|
||||
mSendReferrer = aSendReferrer;
|
||||
}
|
||||
|
||||
mozilla::net::ReferrerPolicy nsDocShellLoadState::ReferrerPolicy() const {
|
||||
return mReferrerPolicy;
|
||||
}
|
||||
|
||||
void nsDocShellLoadState::SetReferrerPolicy(
|
||||
mozilla::net::ReferrerPolicy aReferrerPolicy) {
|
||||
mReferrerPolicy = aReferrerPolicy;
|
||||
}
|
||||
|
||||
const nsString& nsDocShellLoadState::SrcdocData() const { return mSrcdocData; }
|
||||
|
||||
void nsDocShellLoadState::SetSrcdocData(const nsAString& aSrcdocData) {
|
||||
@@ -397,9 +383,10 @@ nsresult nsDocShellLoadState::SetupTriggeringPrincipal(
|
||||
// enter code blocks checking if the principalToInherit is null and we will
|
||||
// end up with a wrong inheritPrincipal flag.
|
||||
if (!mTriggeringPrincipal) {
|
||||
if (mReferrer) {
|
||||
if (mReferrerInfo) {
|
||||
nsCOMPtr<nsIURI> referrer = mReferrerInfo->GetOriginalReferrer();
|
||||
mTriggeringPrincipal =
|
||||
BasePrincipal::CreateCodebasePrincipal(mReferrer, aOriginAttributes);
|
||||
BasePrincipal::CreateCodebasePrincipal(referrer, aOriginAttributes);
|
||||
|
||||
if (!mTriggeringPrincipal) {
|
||||
return NS_ERROR_FAILURE;
|
||||
@@ -421,10 +408,9 @@ void nsDocShellLoadState::CalculateLoadURIFlags() {
|
||||
mLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_INHERIT_PRINCIPAL;
|
||||
}
|
||||
|
||||
if (!mSendReferrer) {
|
||||
if (mReferrerInfo && !mReferrerInfo->GetSendReferrer()) {
|
||||
mLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER;
|
||||
}
|
||||
|
||||
if (oldLoadFlags & nsIWebNavigation::LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP) {
|
||||
mLoadFlags |= nsDocShell::INTERNAL_LOAD_FLAGS_ALLOW_THIRD_PARTY_FIXUP;
|
||||
}
|
||||
@@ -463,8 +449,6 @@ DocShellLoadStateInit nsDocShellLoadState::Serialize() {
|
||||
loadState.PrincipalIsExplicit() = mPrincipalIsExplicit;
|
||||
loadState.ForceAllowDataURI() = mForceAllowDataURI;
|
||||
loadState.OriginalFrameSrc() = mOriginalFrameSrc;
|
||||
loadState.SendReferrer() = mSendReferrer;
|
||||
loadState.ReferrerPolicy() = mReferrerPolicy;
|
||||
loadState.LoadType() = mLoadType;
|
||||
loadState.Target() = mTarget;
|
||||
loadState.LoadFlags() = mLoadFlags;
|
||||
@@ -473,11 +457,13 @@ DocShellLoadStateInit nsDocShellLoadState::Serialize() {
|
||||
loadState.FileName() = mFileName;
|
||||
loadState.IsFromProcessingFrameAttributes() =
|
||||
mIsFromProcessingFrameAttributes;
|
||||
loadState.Referrer() = mReferrer;
|
||||
loadState.URI() = mURI;
|
||||
loadState.OriginalURI() = mOriginalURI;
|
||||
loadState.BaseURI() = mBaseURI;
|
||||
loadState.TriggeringPrincipal() = mTriggeringPrincipal;
|
||||
loadState.PrincipalToInherit() = mPrincipalToInherit;
|
||||
loadState.Referrer() = mReferrerInfo->GetOriginalReferrer();
|
||||
loadState.SendReferrer() = mReferrerInfo->GetSendReferrer();
|
||||
loadState.ReferrerPolicy() = mReferrerInfo->GetReferrerPolicy();
|
||||
return loadState;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user