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:
Thomas Nguyen
2019-02-12 19:35:32 +00:00
parent 33e6f0e694
commit d13c22ef47
22 changed files with 361 additions and 227 deletions

View File

@@ -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;
}