Bug 1528697 - Expose ReferrerPolicy.webidl and use referrerpolicy enum r=smaug

ReferrerPolicy gets tossed back and forth as a uint32_t and
ReferrerPolicy enum in header file. Expose ReferrerPolicyValues from
webidl file and use consistently in native code.

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Thomas Nguyen 2019-08-21 13:24:45 +00:00
parent 572396447e
commit 32ab8293ff
78 changed files with 255 additions and 409 deletions

View File

@ -70,7 +70,6 @@
#include "mozilla/dom/nsCSPContext.h"
#include "mozilla/dom/LoadURIOptionsBinding.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/net/UrlClassifierFeatureFactory.h"
#include "ReferrerInfo.h"
@ -5793,7 +5792,7 @@ nsDocShell::ForceRefreshURI(nsIURI* aURI, nsIPrincipal* aPrincipal,
* For most refreshes the current URI is an appropriate
* internal referrer.
*/
referrerInfo = new ReferrerInfo(mCurrentURI, mozilla::net::RP_Unset, false);
referrerInfo = new ReferrerInfo(mCurrentURI, ReferrerPolicy::_empty, false);
}
loadState->SetReferrerInfo(referrerInfo);

View File

@ -11,7 +11,6 @@
#include "nsCOMPtr.h"
#include "nsString.h"
#include "nsDocShellLoadTypes.h"
#include "mozilla/net/ReferrerPolicy.h"
class nsIContentSecurityPolicy;
class nsIInputStream;

View File

@ -20,7 +20,6 @@
#include "nsSHEntryShared.h"
#include "nsSHistory.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/Logging.h"
#include "nsIReferrerInfo.h"

View File

@ -3337,7 +3337,7 @@ nsresult Document::InitReferrerInfo(nsIChannel* aChannel) {
}
// Override policy if we get one from Referrerr-Policy header
mozilla::net::ReferrerPolicy policy =
mozilla::dom::ReferrerPolicy policy =
nsContentUtils::GetReferrerPolicyFromChannel(aChannel);
mReferrerInfo = static_cast<dom::ReferrerInfo*>(mReferrerInfo.get())
->CloneWithNewPolicy(policy);
@ -5570,13 +5570,9 @@ already_AddRefed<nsIChannel> Document::CreateDummyChannelForCookies(
return channel.forget();
}
mozilla::net::ReferrerPolicy Document::GetReferrerPolicy() const {
if (!mReferrerInfo) {
return mozilla::net::RP_Unset;
}
return static_cast<mozilla::net::ReferrerPolicy>(
mReferrerInfo->GetReferrerPolicy());
ReferrerPolicy Document::GetReferrerPolicy() const {
return mReferrerInfo ? mReferrerInfo->ReferrerPolicy()
: ReferrerPolicy::_empty;
}
void Document::GetAlinkColor(nsAString& aAlinkColor) {
@ -11306,9 +11302,9 @@ already_AddRefed<nsIURI> Document::ResolvePreloadImage(
return uri.forget();
}
void Document::MaybePreLoadImage(
nsIURI* uri, const nsAString& aCrossOriginAttr,
enum mozilla::net::ReferrerPolicy aReferrerPolicy, bool aIsImgSet) {
void Document::MaybePreLoadImage(nsIURI* uri, const nsAString& aCrossOriginAttr,
enum ReferrerPolicy aReferrerPolicy,
bool aIsImgSet) {
// Early exit if the img is already present in the img-cache
// which indicates that the "real" load has already started and
// that we shouldn't preload it.
@ -11444,10 +11440,10 @@ NS_IMPL_ISUPPORTS(StubCSSLoaderObserver, nsICSSLoaderObserver)
} // namespace
void Document::PreloadStyle(
nsIURI* uri, const Encoding* aEncoding, const nsAString& aCrossOriginAttr,
const enum mozilla::net::ReferrerPolicy aReferrerPolicy,
const nsAString& aIntegrity) {
void Document::PreloadStyle(nsIURI* uri, const Encoding* aEncoding,
const nsAString& aCrossOriginAttr,
const enum ReferrerPolicy aReferrerPolicy,
const nsAString& aIntegrity) {
// The CSSLoader will retain this object after we return.
nsCOMPtr<nsICSSLoaderObserver> obs = new StubCSSLoaderObserver();

View File

@ -42,7 +42,6 @@
#include "nsStubMutationObserver.h"
#include "nsTHashtable.h" // for member
#include "nsURIHashKey.h"
#include "mozilla/net/ReferrerPolicy.h" // for member
#include "mozilla/UseCounter.h"
#include "mozilla/WeakPtr.h"
#include "mozilla/StaticPresData.h"
@ -478,7 +477,7 @@ class Document : public nsINode,
public:
typedef dom::ExternalResourceMap::ExternalResourceLoad ExternalResourceLoad;
typedef net::ReferrerPolicy ReferrerPolicyEnum;
typedef dom::ReferrerPolicy ReferrerPolicyEnum;
/**
* Called when XPCOM shutdown.
@ -775,7 +774,7 @@ class Document : public nsINode,
/**
* GetReferrerPolicy() for Document.webidl.
*/
uint32_t ReferrerPolicy() const { return GetReferrerPolicy(); }
ReferrerPolicyEnum ReferrerPolicy() const { return GetReferrerPolicy(); }
/**
* If true, this flag indicates that all mixed content subresource
@ -814,11 +813,11 @@ class Document : public nsINode,
*/
void UpdateReferrerInfoFromMeta(const nsAString& aMetaReferrer,
bool aPreload) {
net::ReferrerPolicy policy =
ReferrerPolicyEnum policy =
mozilla::net::ReferrerPolicyFromString(aMetaReferrer);
// The empty string "" corresponds to no referrer policy, causing a fallback
// to a referrer policy defined elsewhere.
if (policy == mozilla::net::RP_Unset) {
if (policy == ReferrerPolicy::_empty) {
return;
}

View File

@ -3828,19 +3828,19 @@ float Element::FontSizeInflation() {
return 1.0;
}
net::ReferrerPolicy Element::GetReferrerPolicyAsEnum() {
ReferrerPolicy Element::GetReferrerPolicyAsEnum() {
if (IsHTMLElement()) {
const nsAttrValue* referrerValue = GetParsedAttr(nsGkAtoms::referrerpolicy);
return ReferrerPolicyFromAttr(referrerValue);
}
return net::RP_Unset;
return ReferrerPolicy::_empty;
}
net::ReferrerPolicy Element::ReferrerPolicyFromAttr(const nsAttrValue* aValue) {
ReferrerPolicy Element::ReferrerPolicyFromAttr(const nsAttrValue* aValue) {
if (aValue && aValue->Type() == nsAttrValue::eEnum) {
return net::ReferrerPolicy(aValue->GetEnumValue());
return ReferrerPolicy(aValue->GetEnumValue());
}
return net::RP_Unset;
return ReferrerPolicy::_empty;
}
already_AddRefed<nsDOMStringMap> Element::Dataset() {

View File

@ -1588,8 +1588,8 @@ class Element : public FragmentOrElement {
*/
float FontSizeInflation();
net::ReferrerPolicy GetReferrerPolicyAsEnum();
net::ReferrerPolicy ReferrerPolicyFromAttr(const nsAttrValue* aValue);
ReferrerPolicy GetReferrerPolicyAsEnum();
ReferrerPolicy ReferrerPolicyFromAttr(const nsAttrValue* aValue);
/*
* Helpers for .dataset. This is implemented on Element, though only some

View File

@ -16,7 +16,6 @@
#include "mozilla/MemoryReporting.h"
#include "mozilla/Move.h"
#include "mozilla/dom/TreeOrderedArray.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "nsCOMPtr.h"
#include "nsAtom.h"
@ -49,7 +48,6 @@ class Element;
class IdentifierMapEntry : public PLDHashEntryHdr {
typedef dom::Document Document;
typedef dom::Element Element;
typedef net::ReferrerPolicy ReferrerPolicy;
/**
* @see Document::IDTargetObserver, this is just here to avoid include hell.

View File

@ -69,7 +69,7 @@ already_AddRefed<nsDocShellLoadState> Location::CheckURL(
nsCOMPtr<nsIPrincipal> triggeringPrincipal;
nsCOMPtr<nsIURI> sourceURI;
net::ReferrerPolicy referrerPolicy = net::RP_Unset;
ReferrerPolicy referrerPolicy = ReferrerPolicy::_empty;
// Get security manager.
nsIScriptSecurityManager* ssm = nsContentUtils::GetSecurityManager();

View File

@ -7882,20 +7882,20 @@ bool nsContentUtils::IsUpgradableDisplayType(nsContentPolicyType aType) {
}
// static
net::ReferrerPolicy nsContentUtils::GetReferrerPolicyFromHeader(
ReferrerPolicy nsContentUtils::GetReferrerPolicyFromHeader(
const nsAString& aHeader) {
// Multiple headers could be concatenated into one comma-separated
// list of policies. Need to tokenize the multiple headers.
nsCharSeparatedTokenizer tokenizer(aHeader, ',');
nsAutoString token;
net::ReferrerPolicy referrerPolicy = mozilla::net::RP_Unset;
ReferrerPolicy referrerPolicy = ReferrerPolicy::_empty;
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
if (token.IsEmpty()) {
continue;
}
net::ReferrerPolicy policy = net::ReferrerPolicyFromString(token);
if (policy != net::RP_Unset) {
ReferrerPolicy policy = net::ReferrerPolicyFromString(token);
if (policy != ReferrerPolicy::_empty) {
referrerPolicy = policy;
}
}
@ -7903,11 +7903,11 @@ net::ReferrerPolicy nsContentUtils::GetReferrerPolicyFromHeader(
}
// static
net::ReferrerPolicy nsContentUtils::GetReferrerPolicyFromChannel(
ReferrerPolicy nsContentUtils::GetReferrerPolicyFromChannel(
nsIChannel* aChannel) {
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(aChannel);
if (!httpChannel) {
return net::RP_Unset;
return ReferrerPolicy::_empty;
}
nsresult rv;
@ -7915,7 +7915,7 @@ net::ReferrerPolicy nsContentUtils::GetReferrerPolicyFromChannel(
rv = httpChannel->GetResponseHeader(NS_LITERAL_CSTRING("referrer-policy"),
headerValue);
if (NS_FAILED(rv) || headerValue.IsEmpty()) {
return net::RP_Unset;
return ReferrerPolicy::_empty;
}
return GetReferrerPolicyFromHeader(NS_ConvertUTF8toUTF16(headerValue));

View File

@ -38,7 +38,6 @@
#include "mozilla/FloatingPoint.h"
#include "mozilla/intl/LineBreaker.h"
#include "mozilla/intl/WordBreaker.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/Logging.h"
#include "mozilla/NotNull.h"
#include "mozilla/Maybe.h"
@ -2839,7 +2838,7 @@ class nsContentUtils {
* @param the channel from which to get the Referrer-Policy header
* @return referrer policy from the response header in aChannel
*/
static mozilla::net::ReferrerPolicy GetReferrerPolicyFromChannel(
static mozilla::dom::ReferrerPolicy GetReferrerPolicyFromChannel(
nsIChannel* aChannel);
/*
@ -2849,7 +2848,7 @@ class nsContentUtils {
* @param aHeader the response's Referrer-Policy header to parse
* @return referrer policy from the response header.
*/
static mozilla::net::ReferrerPolicy GetReferrerPolicyFromHeader(
static mozilla::dom::ReferrerPolicy GetReferrerPolicyFromHeader(
const nsAString& aHeader);
static bool IsNonSubresourceRequest(nsIChannel* aChannel);

View File

@ -1171,7 +1171,7 @@ nsresult nsImageLoadingContent::LoadImage(nsIURI* aNewURI, bool aForce,
do_QueryInterface(static_cast<nsIImageLoadingContent*>(this));
nsCOMPtr<nsIReferrerInfo> referrerInfo = new ReferrerInfo();
referrerInfo->InitWithNode(thisNode);
nsCOMPtr<nsIURI> referrer = referrerInfo->GetOriginalReferrer();
nsresult rv = nsContentUtils::LoadImage(
aNewURI, thisNode, aDocument, triggeringPrincipal, 0, referrerInfo, this,
loadFlags, content->LocalName(), getter_AddRefs(req), policyType,
@ -1794,8 +1794,8 @@ bool nsImageLoadingContent::ScriptedImageObserver::CancelRequests() {
// Only HTMLInputElement.h overrides this for <img> tags
// all other subclasses use this one, i.e. ignore referrer attributes
mozilla::net::ReferrerPolicy nsImageLoadingContent::GetImageReferrerPolicy() {
return mozilla::net::RP_Unset;
mozilla::dom::ReferrerPolicy nsImageLoadingContent::GetImageReferrerPolicy() {
return mozilla::dom::ReferrerPolicy::_empty;
}
Element* nsImageLoadingContent::FindImageMap() {

View File

@ -24,7 +24,6 @@
#include "nsIContentPolicy.h"
#include "mozilla/dom/BindingDeclarations.h"
#include "mozilla/dom/Promise.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "nsAttrValue.h"
class nsIURI;
@ -214,7 +213,7 @@ class nsImageLoadingContent : public nsIImageLoadingContent {
*/
virtual mozilla::CORSMode GetCORSMode();
virtual mozilla::net::ReferrerPolicy GetImageReferrerPolicy();
virtual mozilla::dom::ReferrerPolicy GetImageReferrerPolicy();
// Subclasses are *required* to call BindToTree/UnbindFromTree.
void BindToTree(mozilla::dom::BindContext&, nsINode& aParent);

View File

@ -8,7 +8,6 @@
#include "mozilla/BasePrincipal.h"
#include "mozilla/dom/Element.h"
#include "mozilla/dom/ToJSValue.h"
#include "mozilla/net/ReferrerPolicy.h"
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsOpenURIInFrameParams)
NS_INTERFACE_MAP_ENTRY(nsIOpenURIInFrameParams)

View File

@ -30,7 +30,7 @@
using namespace mozilla;
using namespace mozilla::dom;
using mozilla::net::ReferrerPolicy;
using mozilla::dom::ReferrerPolicy;
/**
* This class manages loading a single XML document

View File

@ -13,7 +13,6 @@
#define nsSyncLoadService_h__
#include "nscore.h"
#include "mozilla/net/ReferrerPolicy.h"
class nsICookieSettings;
class nsIInputStream;
@ -49,7 +48,7 @@ class nsSyncLoadService {
nsIURI* aURI, nsContentPolicyType aContentPolicyType,
nsIPrincipal* aLoaderPrincipal, nsSecurityFlags aSecurityFlags,
nsILoadGroup* aLoadGroup, nsICookieSettings* aCookieSettings,
bool aForceToXML, mozilla::net::ReferrerPolicy aReferrerPolicy,
bool aForceToXML, mozilla::dom::ReferrerPolicy aReferrerPolicy,
mozilla::dom::Document** aResult);
/**

View File

@ -579,10 +579,9 @@ nsresult FetchDriver::HttpFetch(
// associated referrer policy.
// Basically, "client" is not in our implementation, we use
// EnvironmentReferrerPolicy of the worker or document context
net::ReferrerPolicy net_referrerPolicy =
mRequest->GetEnvironmentReferrerPolicy();
ReferrerPolicy referrerPolicy = mRequest->GetEnvironmentReferrerPolicy();
if (mRequest->ReferrerPolicy_() == ReferrerPolicy::_empty) {
mRequest->SetReferrerPolicy(net_referrerPolicy);
mRequest->SetReferrerPolicy(referrerPolicy);
}
// Step 6 of https://fetch.spec.whatwg.org/#main-fetch
// If requests referrer policy is the empty string,
@ -590,8 +589,8 @@ nsresult FetchDriver::HttpFetch(
if (mRequest->ReferrerPolicy_() == ReferrerPolicy::_empty) {
nsCOMPtr<nsILoadInfo> loadInfo = httpChan->LoadInfo();
bool isPrivate = loadInfo->GetOriginAttributes().mPrivateBrowsingId > 0;
net::ReferrerPolicy referrerPolicy = static_cast<net::ReferrerPolicy>(
ReferrerInfo::GetDefaultReferrerPolicy(httpChan, uri, isPrivate));
referrerPolicy =
ReferrerInfo::GetDefaultReferrerPolicy(httpChan, uri, isPrivate);
mRequest->SetReferrerPolicy(referrerPolicy);
}
@ -1351,8 +1350,7 @@ FetchDriver::AsyncOnChannelRedirect(nsIChannel* aOldChannel,
nsAutoString computedReferrerSpec;
nsCOMPtr<nsIReferrerInfo> referrerInfo = httpChannel->GetReferrerInfo();
if (referrerInfo) {
mRequest->SetReferrerPolicy(
static_cast<net::ReferrerPolicy>(referrerInfo->GetReferrerPolicy()));
mRequest->SetReferrerPolicy(referrerInfo->ReferrerPolicy());
Unused << referrerInfo->GetComputedReferrerSpec(computedReferrerSpec);
}

View File

@ -19,7 +19,6 @@
#include "mozilla/RefPtr.h"
#include "mozilla/DebugOnly.h"
#include "mozilla/net/ReferrerPolicy.h"
class nsIConsoleReportCollector;
class nsICookieSettings;

View File

@ -118,11 +118,11 @@ nsresult FetchUtil::SetRequestReferrer(nsIPrincipal* aPrincipal, Document* aDoc,
nsAutoString referrer;
aRequest->GetReferrer(referrer);
net::ReferrerPolicy policy = aRequest->GetReferrerPolicy();
ReferrerPolicy policy = aRequest->ReferrerPolicy_();
nsCOMPtr<nsIReferrerInfo> referrerInfo;
if (referrer.IsEmpty()) {
// This is the case requests referrer is "no-referrer"
referrerInfo = new ReferrerInfo(nullptr, net::RP_No_Referrer);
referrerInfo = new ReferrerInfo(nullptr, ReferrerPolicy::No_referrer);
} else if (referrer.EqualsLiteral(kFETCH_CLIENT_REFERRER_STR)) {
referrerInfo = ReferrerInfo::CreateForFetch(aPrincipal, aDoc);
// In the first step, we should use referrer info from requetInit

View File

@ -89,7 +89,7 @@ InternalRequest::InternalRequest(const nsACString& aURL,
mContentPolicyType(nsIContentPolicy::TYPE_FETCH),
mReferrer(NS_LITERAL_STRING(kFETCH_CLIENT_REFERRER_STR)),
mReferrerPolicy(ReferrerPolicy::_empty),
mEnvironmentReferrerPolicy(net::RP_Unset),
mEnvironmentReferrerPolicy(ReferrerPolicy::_empty),
mMode(RequestMode::No_cors),
mCredentialsMode(RequestCredentials::Omit),
mResponseTainting(LoadTainting::Basic),
@ -124,7 +124,7 @@ InternalRequest::InternalRequest(
mContentPolicyType(aContentPolicyType),
mReferrer(aReferrer),
mReferrerPolicy(aReferrerPolicy),
mEnvironmentReferrerPolicy(net::RP_Unset),
mEnvironmentReferrerPolicy(ReferrerPolicy::_empty),
mMode(aMode),
mCredentialsMode(aRequestCredentials),
mResponseTainting(LoadTainting::Basic),

View File

@ -11,7 +11,6 @@
#include "mozilla/dom/InternalHeaders.h"
#include "mozilla/dom/RequestBinding.h"
#include "mozilla/LoadTainting.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/UniquePtr.h"
#include "nsIContentPolicy.h"
@ -199,73 +198,11 @@ class InternalRequest final {
mReferrerPolicy = aReferrerPolicy;
}
void SetReferrerPolicy(net::ReferrerPolicy aReferrerPolicy) {
switch (aReferrerPolicy) {
case net::RP_Unset:
mReferrerPolicy = ReferrerPolicy::_empty;
break;
case net::RP_No_Referrer:
mReferrerPolicy = ReferrerPolicy::No_referrer;
break;
case net::RP_No_Referrer_When_Downgrade:
mReferrerPolicy = ReferrerPolicy::No_referrer_when_downgrade;
break;
case net::RP_Origin:
mReferrerPolicy = ReferrerPolicy::Origin;
break;
case net::RP_Origin_When_Crossorigin:
mReferrerPolicy = ReferrerPolicy::Origin_when_cross_origin;
break;
case net::RP_Unsafe_URL:
mReferrerPolicy = ReferrerPolicy::Unsafe_url;
break;
case net::RP_Same_Origin:
mReferrerPolicy = ReferrerPolicy::Same_origin;
break;
case net::RP_Strict_Origin:
mReferrerPolicy = ReferrerPolicy::Strict_origin;
break;
case net::RP_Strict_Origin_When_Cross_Origin:
mReferrerPolicy = ReferrerPolicy::Strict_origin_when_cross_origin;
break;
default:
MOZ_ASSERT_UNREACHABLE("Invalid ReferrerPolicy value");
break;
}
}
net::ReferrerPolicy GetReferrerPolicy() {
switch (mReferrerPolicy) {
case ReferrerPolicy::_empty:
return net::RP_Unset;
case ReferrerPolicy::No_referrer:
return net::RP_No_Referrer;
case ReferrerPolicy::No_referrer_when_downgrade:
return net::RP_No_Referrer_When_Downgrade;
case ReferrerPolicy::Origin:
return net::RP_Origin;
case ReferrerPolicy::Origin_when_cross_origin:
return net::RP_Origin_When_Crossorigin;
case ReferrerPolicy::Unsafe_url:
return net::RP_Unsafe_URL;
case ReferrerPolicy::Strict_origin:
return net::RP_Strict_Origin;
case ReferrerPolicy::Same_origin:
return net::RP_Same_Origin;
case ReferrerPolicy::Strict_origin_when_cross_origin:
return net::RP_Strict_Origin_When_Cross_Origin;
default:
MOZ_ASSERT_UNREACHABLE("Invalid ReferrerPolicy enum value?");
break;
}
return net::RP_Unset;
}
net::ReferrerPolicy GetEnvironmentReferrerPolicy() const {
ReferrerPolicy GetEnvironmentReferrerPolicy() const {
return mEnvironmentReferrerPolicy;
}
void SetEnvironmentReferrerPolicy(net::ReferrerPolicy aReferrerPolicy) {
void SetEnvironmentReferrerPolicy(ReferrerPolicy aReferrerPolicy) {
mEnvironmentReferrerPolicy = aReferrerPolicy;
}
@ -462,9 +399,7 @@ class InternalRequest final {
// This will be used for request created from Window or Worker contexts
// In case there's no Referrer Policy in Request, this will be passed to
// channel.
// The Environment Referrer Policy should be net::ReferrerPolicy so that it
// could be associated with nsIHttpChannel.
net::ReferrerPolicy mEnvironmentReferrerPolicy;
ReferrerPolicy mEnvironmentReferrerPolicy;
RequestMode mMode;
RequestCredentials mCredentialsMode;
MOZ_INIT_OUTSIDE_CTOR LoadTainting mResponseTainting;

View File

@ -428,8 +428,7 @@ already_AddRefed<Request> Request::Constructor(const GlobalObject& aGlobal,
WorkerPrivate* worker = GetCurrentThreadWorkerPrivate();
if (worker) {
worker->AssertIsOnWorkerThread();
request->SetEnvironmentReferrerPolicy(
static_cast<net::ReferrerPolicy>(worker->GetReferrerPolicy()));
request->SetEnvironmentReferrerPolicy(worker->GetReferrerPolicy());
principalInfo =
MakeUnique<mozilla::ipc::PrincipalInfo>(worker->GetPrincipalInfo());
}

View File

@ -46,7 +46,6 @@
#include "mozilla/EventDispatcher.h"
#include "mozilla/EventStates.h"
#include "mozilla/MappedDeclarations.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "nsLayoutUtils.h"
@ -423,7 +422,7 @@ void HTMLImageElement::AfterMaybeChangeAttr(
} else if (aName == nsGkAtoms::referrerpolicy &&
aNamespaceID == kNameSpaceID_None && aNotify) {
ReferrerPolicy referrerPolicy = GetImageReferrerPolicy();
if (!InResponsiveMode() && referrerPolicy != RP_Unset &&
if (!InResponsiveMode() && referrerPolicy != ReferrerPolicy::_empty &&
aValueMaybeChanged &&
referrerPolicy != ReferrerPolicyFromAttr(aOldValue)) {
// XXX: Bug 1076583 - We still use the older synchronous algorithm

View File

@ -185,7 +185,7 @@ class HTMLImageElement final : public nsGenericHTMLElement,
already_AddRefed<Promise> Decode(ErrorResult& aRv);
net::ReferrerPolicy GetImageReferrerPolicy() override {
ReferrerPolicy GetImageReferrerPolicy() override {
return GetReferrerPolicyAsEnum();
}

View File

@ -224,7 +224,7 @@ CORSMode HTMLScriptElement::GetCORSMode() const {
return AttrValueToCORSMode(GetParsedAttr(nsGkAtoms::crossorigin));
}
mozilla::net::ReferrerPolicy HTMLScriptElement::GetReferrerPolicy() {
mozilla::dom::ReferrerPolicy HTMLScriptElement::GetReferrerPolicy() {
return GetReferrerPolicyAsEnum();
}

View File

@ -36,7 +36,7 @@ class HTMLScriptElement final : public nsGenericHTMLElement,
virtual void GetScriptCharset(nsAString& charset) override;
virtual void FreezeExecutionAttrs(Document* aOwnerDoc) override;
virtual CORSMode GetCORSMode() const override;
virtual mozilla::net::ReferrerPolicy GetReferrerPolicy() override;
virtual mozilla::dom::ReferrerPolicy GetReferrerPolicy() override;
// nsIContent
virtual nsresult BindToTree(BindContext&, nsINode& aParent) override;

View File

@ -35,7 +35,7 @@ class WindowProxyHolder;
class nsHTMLDocument : public mozilla::dom::Document {
protected:
typedef mozilla::net::ReferrerPolicy ReferrerPolicy;
typedef mozilla::dom::ReferrerPolicy ReferrerPolicy;
typedef mozilla::dom::Document Document;
typedef mozilla::Encoding Encoding;
template <typename T>

View File

@ -5,29 +5,40 @@
#include "nsISupports.idl"
#include "nsISerializable.idl"
%{C++
#include "mozilla/dom/ReferrerPolicyBinding.h"
%}
interface nsIURI;
webidl Document;
webidl Node;
native ReferrerPolicy(mozilla::dom::ReferrerPolicy);
native URIRef(already_AddRefed<nsIURI>);
[scriptable, builtinclass, uuid(081cdc36-f2e2-4f94-87bf-78578f06f1eb)]
interface nsIReferrerInfo : nsISerializable
{
/**
* The original referrer URI which indicates the full referrer before applying
* referrer policy
*/
* The original referrer URI which indicates the full referrer before applying
* referrer policy
*/
[infallible] readonly attribute nsIURI originalReferrer;
/**
* Referrer policy which is applied to the referrer
*/
[infallible] readonly attribute unsigned long referrerPolicy;
* Referrer policy which is applied to the referrer
*/
readonly attribute ReferrerPolicy referrerPolicy;
/**
* Indicates if the referrer should not be sent or not even when it's available.
*/
* C++ friendly version of referrerPolicy getter
*/
[noscript, notxpcom, nostdcall, binaryname(ReferrerPolicy)]
ReferrerPolicy binaryReferrerPolicy();
/**
* Indicates if the referrer should not be sent or not even when it's available.
*/
[infallible] readonly attribute boolean sendReferrer;
/**

View File

@ -800,8 +800,7 @@ static nsresult GetCreateWindowParams(mozIDOMWindowProxy* aParent,
nsCOMPtr<nsIReferrerInfo> referrerInfo;
if (aForceNoReferrer) {
referrerInfo = new ReferrerInfo(
nullptr, mozilla::net::ReferrerPolicy::RP_Unset, false);
referrerInfo = new ReferrerInfo(nullptr, ReferrerPolicy::_empty, false);
}
if (aLoadState && !referrerInfo) {
referrerInfo = aLoadState->GetReferrerInfo();
@ -812,8 +811,7 @@ static nsresult GetCreateWindowParams(mozIDOMWindowProxy* aParent,
nsCOMPtr<nsIPrincipal> nullPrincipal =
NullPrincipal::CreateWithoutOriginAttributes();
if (!referrerInfo) {
referrerInfo =
new ReferrerInfo(nullptr, mozilla::net::ReferrerPolicy::RP_Unset);
referrerInfo = new ReferrerInfo(nullptr, ReferrerPolicy::_empty);
}
referrerInfo.swap(*aReferrerInfo);

View File

@ -3114,7 +3114,7 @@ nsresult nsPluginHost::NewPluginURLStream(
// errors about malformed requests if we include it in POSTs. See
// bug 724465.
nsCOMPtr<nsIURI> referer;
net::ReferrerPolicy referrerPolicy = net::RP_Unset;
dom::ReferrerPolicy referrerPolicy = dom::ReferrerPolicy::_empty;
nsCOMPtr<nsIObjectLoadingContent> olc = do_QueryInterface(element);
if (olc) olc->GetSrcURI(getter_AddRefs(referer));
@ -3127,7 +3127,7 @@ nsresult nsPluginHost::NewPluginURLStream(
referrerPolicy = doc->GetReferrerPolicy();
}
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new mozilla::dom::ReferrerInfo(referer, referrerPolicy);
new dom::ReferrerInfo(referer, referrerPolicy);
rv = httpChannel->SetReferrerInfoWithoutClone(referrerInfo);
NS_ENSURE_SUCCESS(rv, rv);
}

View File

@ -28,9 +28,10 @@ NS_IMPL_CYCLE_COLLECTION(ScriptFetchOptions, mElement, mTriggeringPrincipal)
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(ScriptFetchOptions, AddRef)
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(ScriptFetchOptions, Release)
ScriptFetchOptions::ScriptFetchOptions(
mozilla::CORSMode aCORSMode, mozilla::net::ReferrerPolicy aReferrerPolicy,
nsIScriptElement* aElement, nsIPrincipal* aTriggeringPrincipal)
ScriptFetchOptions::ScriptFetchOptions(mozilla::CORSMode aCORSMode,
ReferrerPolicy aReferrerPolicy,
nsIScriptElement* aElement,
nsIPrincipal* aTriggeringPrincipal)
: mCORSMode(aCORSMode),
mReferrerPolicy(aReferrerPolicy),
mIsPreload(false),

View File

@ -12,7 +12,6 @@
#include "mozilla/dom/SRIMetadata.h"
#include "mozilla/LinkedList.h"
#include "mozilla/Maybe.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/Utf8.h" // mozilla::Utf8Unit
#include "mozilla/Variant.h"
#include "mozilla/Vector.h"
@ -46,12 +45,12 @@ class ScriptFetchOptions {
NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(ScriptFetchOptions)
ScriptFetchOptions(mozilla::CORSMode aCORSMode,
mozilla::net::ReferrerPolicy aReferrerPolicy,
enum ReferrerPolicy aReferrerPolicy,
nsIScriptElement* aElement,
nsIPrincipal* aTriggeringPrincipal);
const mozilla::CORSMode mCORSMode;
const mozilla::net::ReferrerPolicy mReferrerPolicy;
const enum ReferrerPolicy mReferrerPolicy;
bool mIsPreload;
nsCOMPtr<nsIScriptElement> mElement;
nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
@ -226,7 +225,7 @@ class ScriptLoadRequest
}
mozilla::CORSMode CORSMode() const { return mFetchOptions->mCORSMode; }
mozilla::net::ReferrerPolicy ReferrerPolicy() const {
enum ReferrerPolicy ReferrerPolicy() const {
return mFetchOptions->mReferrerPolicy;
}
nsIScriptElement* Element() const { return mFetchOptions->mElement; }

View File

@ -1509,8 +1509,7 @@ static bool CSPAllowsInlineScript(nsIScriptElement* aElement,
ScriptLoadRequest* ScriptLoader::CreateLoadRequest(
ScriptKind aKind, nsIURI* aURI, nsIScriptElement* aElement,
nsIPrincipal* aTriggeringPrincipal, CORSMode aCORSMode,
const SRIMetadata& aIntegrity,
mozilla::net::ReferrerPolicy aReferrerPolicy) {
const SRIMetadata& aIntegrity, ReferrerPolicy aReferrerPolicy) {
nsIURI* referrer = mDocument->GetDocumentURIAsReferrer();
ScriptFetchOptions* fetchOptions = new ScriptFetchOptions(
aCORSMode, aReferrerPolicy, aElement, aTriggeringPrincipal);
@ -1649,7 +1648,7 @@ bool ScriptLoader::ProcessExternalScript(nsIScriptElement* aElement,
}
CORSMode ourCORSMode = aElement->GetCORSMode();
mozilla::net::ReferrerPolicy referrerPolicy = GetReferrerPolicy(aElement);
ReferrerPolicy referrerPolicy = GetReferrerPolicy(aElement);
request = CreateLoadRequest(aScriptKind, scriptURI, aElement, principal,
ourCORSMode, sriMetadata, referrerPolicy);
@ -1787,7 +1786,7 @@ bool ScriptLoader::ProcessInlineScript(nsIScriptElement* aElement,
corsMode = aElement->GetCORSMode();
}
mozilla::net::ReferrerPolicy referrerPolicy = GetReferrerPolicy(aElement);
ReferrerPolicy referrerPolicy = GetReferrerPolicy(aElement);
RefPtr<ScriptLoadRequest> request =
CreateLoadRequest(aScriptKind, mDocument->GetDocumentURI(), aElement,
mDocument->NodePrincipal(), corsMode,
@ -1888,7 +1887,7 @@ ScriptLoadRequest* ScriptLoader::LookupPreloadRequest(
// we have now.
nsAutoString elementCharset;
aElement->GetScriptCharset(elementCharset);
mozilla::net::ReferrerPolicy referrerPolicy = GetReferrerPolicy(aElement);
ReferrerPolicy referrerPolicy = GetReferrerPolicy(aElement);
if (!elementCharset.Equals(preloadCharset) ||
aElement->GetCORSMode() != request->CORSMode() ||
@ -1926,11 +1925,9 @@ void ScriptLoader::GetSRIMetadata(const nsAString& aIntegrityAttr,
aMetadataOut);
}
mozilla::net::ReferrerPolicy ScriptLoader::GetReferrerPolicy(
nsIScriptElement* aElement) {
mozilla::net::ReferrerPolicy scriptReferrerPolicy =
aElement->GetReferrerPolicy();
if (scriptReferrerPolicy != mozilla::net::RP_Unset) {
ReferrerPolicy ScriptLoader::GetReferrerPolicy(nsIScriptElement* aElement) {
ReferrerPolicy scriptReferrerPolicy = aElement->GetReferrerPolicy();
if (scriptReferrerPolicy != ReferrerPolicy::_empty) {
return scriptReferrerPolicy;
}
return mDocument->GetReferrerPolicy();
@ -3699,11 +3696,12 @@ void ScriptLoader::ParsingComplete(bool aTerminated) {
ProcessPendingRequests();
}
void ScriptLoader::PreloadURI(
nsIURI* aURI, const nsAString& aCharset, const nsAString& aType,
const nsAString& aCrossOrigin, const nsAString& aIntegrity,
bool aScriptFromHead, bool aAsync, bool aDefer, bool aNoModule,
const mozilla::net::ReferrerPolicy aReferrerPolicy) {
void ScriptLoader::PreloadURI(nsIURI* aURI, const nsAString& aCharset,
const nsAString& aType,
const nsAString& aCrossOrigin,
const nsAString& aIntegrity, bool aScriptFromHead,
bool aAsync, bool aDefer, bool aNoModule,
const ReferrerPolicy aReferrerPolicy) {
NS_ENSURE_TRUE_VOID(mDocument);
// Check to see if scripts has been turned off.
if (!mEnabled || !mDocument->IsScriptEnabled()) {

View File

@ -25,7 +25,6 @@
#include "mozilla/dom/SRICheck.h"
#include "mozilla/MaybeOneOf.h"
#include "mozilla/MozPromise.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/Utf8.h" // mozilla::Utf8Unit
#include "mozilla/Vector.h"
@ -311,7 +310,7 @@ class ScriptLoader final : public nsISupports {
const nsAString& aType, const nsAString& aCrossOrigin,
const nsAString& aIntegrity, bool aScriptFromHead,
bool aAsync, bool aDefer, bool aNoModule,
const mozilla::net::ReferrerPolicy aReferrerPolicy);
const ReferrerPolicy aReferrerPolicy);
/**
* Process a request that was deferred so that the script could be compiled
@ -376,11 +375,12 @@ class ScriptLoader final : public nsISupports {
void EnsureModuleHooksInitialized();
ScriptLoadRequest* CreateLoadRequest(
ScriptKind aKind, nsIURI* aURI, nsIScriptElement* aElement,
nsIPrincipal* aTriggeringPrincipal, mozilla::CORSMode aCORSMode,
const SRIMetadata& aIntegrity,
mozilla::net::ReferrerPolicy aReferrerPolicy);
ScriptLoadRequest* CreateLoadRequest(ScriptKind aKind, nsIURI* aURI,
nsIScriptElement* aElement,
nsIPrincipal* aTriggeringPrincipal,
mozilla::CORSMode aCORSMode,
const SRIMetadata& aIntegrity,
ReferrerPolicy aReferrerPolicy);
/**
* Unblocks the creator parser of the parser-blocking scripts.
@ -408,7 +408,7 @@ class ScriptLoader final : public nsISupports {
* Given a script element, get the referrer policy should be applied to load
* requests.
*/
mozilla::net::ReferrerPolicy GetReferrerPolicy(nsIScriptElement* aElement);
ReferrerPolicy GetReferrerPolicy(nsIScriptElement* aElement);
/**
* Helper function to check the content policy for a given request.

View File

@ -16,7 +16,7 @@
#include "nsIContent.h"
#include "nsContentCreatorFunctions.h"
#include "mozilla/CORSMode.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "ReferrerInfo.h"
// Must be kept in sync with xpcom/rust/xpcom/src/interfaces/nonidl.rs
#define NS_ISCRIPTELEMENT_IID \
@ -241,8 +241,8 @@ class nsIScriptElement : public nsIScriptLoaderObserver {
/**
* Get referrer policy of the script element
*/
virtual mozilla::net::ReferrerPolicy GetReferrerPolicy() {
return mozilla::net::RP_Unset;
virtual mozilla::dom::ReferrerPolicy GetReferrerPolicy() {
return mozilla::dom::ReferrerPolicy::_empty;
}
/**

View File

@ -124,7 +124,7 @@ bool ReferrerInfo::HideOnionReferrerSource() {
}
/* static */
uint32_t ReferrerInfo::GetDefaultReferrerPolicy(nsIHttpChannel* aChannel,
ReferrerPolicy ReferrerInfo::GetDefaultReferrerPolicy(nsIHttpChannel* aChannel,
nsIURI* aURI,
bool privateBrowsing) {
CachePreferrenceValue();
@ -167,14 +167,14 @@ uint32_t ReferrerInfo::GetDefaultReferrerPolicy(nsIHttpChannel* aChannel,
switch (defaultToUse) {
case DefaultReferrerPolicy::eDefaultPolicyNoReferrer:
return nsIHttpChannel::REFERRER_POLICY_NO_REFERRER;
return ReferrerPolicy::No_referrer;
case DefaultReferrerPolicy::eDefaultPolicySameOrgin:
return nsIHttpChannel::REFERRER_POLICY_SAME_ORIGIN;
return ReferrerPolicy::Same_origin;
case DefaultReferrerPolicy::eDefaultPolicyStrictWhenXorigin:
return nsIHttpChannel::REFERRER_POLICY_STRICT_ORIGIN_WHEN_XORIGIN;
return ReferrerPolicy::Strict_origin_when_cross_origin;
}
return nsIHttpChannel::REFERRER_POLICY_NO_REFERRER_WHEN_DOWNGRADE;
return ReferrerPolicy::No_referrer_when_downgrade;
}
/* static */
@ -216,7 +216,7 @@ bool ReferrerInfo::ShouldResponseInheritReferrerInfo(nsIChannel* aChannel) {
/* static */
nsresult ReferrerInfo::HandleSecureToInsecureReferral(nsIURI* aOriginalURI,
nsIURI* aURI,
uint32_t aPolicy,
ReferrerPolicyEnum aPolicy,
bool& aAllowed) {
NS_ENSURE_ARG(aOriginalURI);
NS_ENSURE_ARG(aURI);
@ -233,9 +233,9 @@ nsresult ReferrerInfo::HandleSecureToInsecureReferral(nsIURI* aOriginalURI,
// policy is "unsafe-url", "origin", or "origin-when-cross-origin".
// in other referrer policies, https->http is not allowed...
bool uriIsHttpsScheme = aURI->SchemeIs("https");
if (aPolicy != nsIHttpChannel::REFERRER_POLICY_UNSAFE_URL &&
aPolicy != nsIHttpChannel::REFERRER_POLICY_ORIGIN_WHEN_XORIGIN &&
aPolicy != nsIHttpChannel::REFERRER_POLICY_ORIGIN && !uriIsHttpsScheme) {
if (aPolicy != ReferrerPolicy::Unsafe_url &&
aPolicy != ReferrerPolicy::Origin_when_cross_origin &&
aPolicy != ReferrerPolicy::Origin && !uriIsHttpsScheme) {
return NS_OK;
}
@ -353,8 +353,8 @@ bool ReferrerInfo::ShouldSetNullOriginHeader(net::HttpBaseChannel* aChannel,
if (!referrerInfo) {
return false;
}
uint32_t policy = referrerInfo->GetReferrerPolicy();
if (policy == nsIHttpChannel::REFERRER_POLICY_NO_REFERRER) {
enum ReferrerPolicy policy = referrerInfo->ReferrerPolicy();
if (policy == ReferrerPolicy::No_referrer) {
return true;
}
@ -368,7 +368,7 @@ bool ReferrerInfo::ShouldSetNullOriginHeader(net::HttpBaseChannel* aChannel,
return true;
}
if (policy == nsIHttpChannel::REFERRER_POLICY_SAME_ORIGIN) {
if (policy == ReferrerPolicy::Same_origin) {
return ReferrerInfo::IsCrossOriginRequest(aChannel);
}
@ -434,13 +434,13 @@ ReferrerInfo::TrimmingPolicy ReferrerInfo::ComputeTrimmingPolicy(
uint32_t trimmingPolicy = sUserTrimmingPolicy;
switch (mPolicy) {
case nsIHttpChannel::REFERRER_POLICY_ORIGIN:
case nsIHttpChannel::REFERRER_POLICY_STRICT_ORIGIN:
case ReferrerPolicy::Origin:
case ReferrerPolicy::Strict_origin:
trimmingPolicy = TrimmingPolicy::ePolicySchemeHostPort;
break;
case nsIHttpChannel::REFERRER_POLICY_ORIGIN_WHEN_XORIGIN:
case nsIHttpChannel::REFERRER_POLICY_STRICT_ORIGIN_WHEN_XORIGIN:
case ReferrerPolicy::Origin_when_cross_origin:
case ReferrerPolicy::Strict_origin_when_cross_origin:
if (trimmingPolicy != TrimmingPolicy::ePolicySchemeHostPort &&
IsCrossOriginRequest(aChannel)) {
// Ignore set trimmingPolicy if it is already the strictest
@ -453,9 +453,9 @@ ReferrerInfo::TrimmingPolicy ReferrerInfo::ComputeTrimmingPolicy(
// send. For the next 3 policies: same-origin, no-referrer-when-downgrade,
// unsafe-url, without trimming we should have a full uri. And the trimming
// policy only depends on user prefs.
case nsIHttpChannel::REFERRER_POLICY_SAME_ORIGIN:
case nsIHttpChannel::REFERRER_POLICY_NO_REFERRER_WHEN_DOWNGRADE:
case nsIHttpChannel::REFERRER_POLICY_UNSAFE_URL:
case ReferrerPolicy::Same_origin:
case ReferrerPolicy::No_referrer_when_downgrade:
case ReferrerPolicy::Unsafe_url:
if (trimmingPolicy != TrimmingPolicy::ePolicySchemeHostPort) {
// Ignore set trimmingPolicy if it is already the strictest
// policy. Apply the user cross-origin trimming policy if it's more
@ -467,8 +467,8 @@ ReferrerInfo::TrimmingPolicy ReferrerInfo::ComputeTrimmingPolicy(
}
break;
case nsIHttpChannel::REFERRER_POLICY_NO_REFERRER:
case nsIHttpChannel::REFERRER_POLICY_UNSET:
case ReferrerPolicy::No_referrer:
case ReferrerPolicy::_empty:
default:
MOZ_ASSERT_UNREACHABLE("Unexpected value");
break;
@ -628,13 +628,13 @@ void ReferrerInfo::LogMessageToConsole(
ReferrerInfo::ReferrerInfo()
: mOriginalReferrer(nullptr),
mPolicy(mozilla::net::RP_Unset),
mPolicy(ReferrerPolicy::_empty),
mSendReferrer(true),
mInitialized(false),
mOverridePolicyByDefault(false),
mComputedReferrer(Maybe<nsCString>()) {}
ReferrerInfo::ReferrerInfo(nsIURI* aOriginalReferrer, uint32_t aPolicy,
ReferrerInfo::ReferrerInfo(nsIURI* aOriginalReferrer, ReferrerPolicyEnum aPolicy,
bool aSendReferrer,
const Maybe<nsCString>& aComputedReferrer)
: mOriginalReferrer(aOriginalReferrer),
@ -658,7 +658,7 @@ already_AddRefed<nsIReferrerInfo> ReferrerInfo::Clone() const {
}
already_AddRefed<nsIReferrerInfo> ReferrerInfo::CloneWithNewPolicy(
uint32_t aPolicy) const {
ReferrerPolicyEnum aPolicy) const {
RefPtr<ReferrerInfo> copy(new ReferrerInfo(*this));
copy->mPolicy = aPolicy;
return copy.forget();
@ -686,11 +686,13 @@ ReferrerInfo::GetOriginalReferrer(nsIURI** aOriginalReferrer) {
}
NS_IMETHODIMP
ReferrerInfo::GetReferrerPolicy(uint32_t* aReferrerPolicy) {
ReferrerInfo::GetReferrerPolicy(ReferrerPolicyEnum* aReferrerPolicy) {
*aReferrerPolicy = mPolicy;
return NS_OK;
}
ReferrerPolicy ReferrerInfo::ReferrerPolicy() { return mPolicy; }
NS_IMETHODIMP
ReferrerInfo::GetSendReferrer(bool* aSendReferrer) {
*aSendReferrer = mSendReferrer;
@ -756,7 +758,7 @@ already_AddRefed<nsIURI> ReferrerInfo::GetComputedReferrer() {
return result.forget();
}
PLDHashNumber ReferrerInfo::Hash() const {
HashNumber ReferrerInfo::Hash() const {
MOZ_ASSERT(mInitialized);
nsAutoCString originalReferrerSpec;
if (mOriginalReferrer) {
@ -764,7 +766,7 @@ PLDHashNumber ReferrerInfo::Hash() const {
}
return mozilla::AddToHash(
mPolicy, mSendReferrer, mOverridePolicyByDefault,
static_cast<uint32_t>(mPolicy), mSendReferrer, mOverridePolicyByDefault,
mozilla::HashString(originalReferrerSpec),
mozilla::HashString(mComputedReferrer.isSome() ? mComputedReferrer.value()
: EmptyCString()));
@ -809,7 +811,7 @@ ReferrerInfo::InitWithNode(nsINode* aNode) {
// Referrer policy from referrerpolicy attribute will have a higher priority
// than referrer policy from <meta> tag and Referrer-Policy header.
GetReferrerPolicyFromAtribute(aNode, mPolicy);
if (mPolicy == mozilla::net::RP_Unset) {
if (mPolicy == ReferrerPolicy::_empty) {
// Fallback to use document's referrer poicy if we don't have referrer
// policy from attribute.
mPolicy = aNode->OwnerDoc()->GetReferrerPolicy();
@ -825,11 +827,11 @@ ReferrerInfo::InitWithNode(nsINode* aNode) {
/* static */
already_AddRefed<nsIReferrerInfo>
ReferrerInfo::CreateFromOtherAndPolicyOverride(nsIReferrerInfo* aOther,
uint32_t aPolicyOverride) {
ReferrerPolicyEnum aPolicyOverride) {
MOZ_ASSERT(aOther);
uint32_t policy = aPolicyOverride != net::RP_Unset
ReferrerPolicyEnum policy = aPolicyOverride != ReferrerPolicy::_empty
? aPolicyOverride
: aOther->GetReferrerPolicy();
: aOther->ReferrerPolicy();
nsCOMPtr<nsIURI> referrer = aOther->GetOriginalReferrer();
nsCOMPtr<nsIReferrerInfo> referrerInfo =
@ -840,9 +842,9 @@ ReferrerInfo::CreateFromOtherAndPolicyOverride(nsIReferrerInfo* aOther,
/* static */
already_AddRefed<nsIReferrerInfo>
ReferrerInfo::CreateFromDocumentAndPolicyOverride(Document* aDoc,
uint32_t aPolicyOverride) {
ReferrerPolicyEnum aPolicyOverride) {
MOZ_ASSERT(aDoc);
uint32_t policy = aPolicyOverride != net::RP_Unset
ReferrerPolicyEnum policy = aPolicyOverride != ReferrerPolicy::_empty
? aPolicyOverride
: aDoc->GetReferrerPolicy();
nsCOMPtr<nsIReferrerInfo> referrerInfo =
@ -865,7 +867,7 @@ already_AddRefed<nsIReferrerInfo> ReferrerInfo::CreateForFetch(
aPrincipal->GetURI(getter_AddRefs(principalURI));
if (!aDoc) {
referrerInfo = new ReferrerInfo(principalURI, RP_Unset);
referrerInfo = new ReferrerInfo(principalURI, ReferrerPolicy::_empty);
return referrerInfo.forget();
}
@ -901,7 +903,7 @@ already_AddRefed<nsIReferrerInfo> ReferrerInfo::CreateForFetch(
/* static */
already_AddRefed<nsIReferrerInfo> ReferrerInfo::CreateForExternalCSSResources(
mozilla::StyleSheet* aExternalSheet, uint32_t aPolicy) {
mozilla::StyleSheet* aExternalSheet, ReferrerPolicyEnum aPolicy) {
MOZ_ASSERT(aExternalSheet && !aExternalSheet->IsInline());
nsCOMPtr<nsIReferrerInfo> referrerInfo;
@ -937,8 +939,8 @@ already_AddRefed<nsIReferrerInfo> ReferrerInfo::CreateForSVGResources(
}
void ReferrerInfo::GetReferrerPolicyFromAtribute(nsINode* aNode,
uint32_t& aPolicy) const {
aPolicy = mozilla::net::RP_Unset;
ReferrerPolicyEnum& aPolicy) const {
aPolicy = ReferrerPolicy::_empty;
mozilla::dom::Element* element = aNode->AsElement();
if (!element || !element->IsAnyOfHTMLElements(
@ -1003,11 +1005,11 @@ nsresult ReferrerInfo::ComputeReferrer(nsIHttpChannel* aChannel) {
mComputedReferrer.emplace(EmptyCString());
if (!mSendReferrer || !mOriginalReferrer ||
mPolicy == nsIHttpChannel::REFERRER_POLICY_NO_REFERRER) {
mPolicy == ReferrerPolicy::No_referrer) {
return NS_OK;
}
if (mPolicy == nsIHttpChannel::REFERRER_POLICY_UNSET) {
if (mPolicy == ReferrerPolicy::_empty) {
nsCOMPtr<nsILoadInfo> loadInfo = aChannel->LoadInfo();
OriginAttributes attrs = loadInfo->GetOriginAttributes();
bool isPrivate = attrs.mPrivateBrowsingId > 0;
@ -1022,7 +1024,7 @@ nsresult ReferrerInfo::ComputeReferrer(nsIHttpChannel* aChannel) {
mOverridePolicyByDefault = true;
}
if (mPolicy == nsIHttpChannel::REFERRER_POLICY_NO_REFERRER) {
if (mPolicy == ReferrerPolicy::No_referrer) {
return NS_OK;
}
@ -1060,7 +1062,7 @@ nsresult ReferrerInfo::ComputeReferrer(nsIHttpChannel* aChannel) {
// Don't send referrer when the request is cross-origin and policy is
// "same-origin".
if (mPolicy == nsIHttpChannel::REFERRER_POLICY_SAME_ORIGIN &&
if (mPolicy == ReferrerPolicy::Same_origin &&
IsCrossOriginRequest(aChannel)) {
return NS_OK;
}
@ -1159,10 +1161,12 @@ ReferrerInfo::Read(nsIObjectInputStream* aStream) {
mOriginalReferrer = nullptr;
}
rv = aStream->Read32(&mPolicy);
uint32_t policy;
rv = aStream->Read32(&policy);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
mPolicy = static_cast<ReferrerPolicyEnum>(policy);
rv = aStream->ReadBoolean(&mSendReferrer);
if (NS_WARN_IF(NS_FAILED(rv))) {
@ -1218,7 +1222,7 @@ ReferrerInfo::Write(nsIObjectOutputStream* aStream) {
}
}
rv = aStream->Write32(mPolicy);
rv = aStream->Write32(static_cast<uint32_t>(mPolicy));
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}

View File

@ -10,10 +10,11 @@
#include "nsCOMPtr.h"
#include "nsIReferrerInfo.h"
#include "nsISerializable.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "nsIHttpChannel.h"
#include "nsReadableUtils.h"
#include "mozilla/Maybe.h"
#include "mozilla/HashFunctions.h"
#include "mozilla/dom/ReferrerPolicyBinding.h"
#define REFERRERINFOF_CONTRACTID "@mozilla.org/referrer-info;1"
// 041a129f-10ce-4bda-a60d-e027a26d5ed0
@ -61,10 +62,12 @@ namespace dom {
class ReferrerInfo : public nsIReferrerInfo {
public:
typedef enum ReferrerPolicy ReferrerPolicyEnum;
ReferrerInfo();
explicit ReferrerInfo(
nsIURI* aOriginalReferrer, uint32_t aPolicy = mozilla::net::RP_Unset,
nsIURI* aOriginalReferrer,
ReferrerPolicyEnum aPolicy = ReferrerPolicy::_empty,
bool aSendReferrer = true,
const Maybe<nsCString>& aComputedReferrer = Maybe<nsCString>());
@ -72,7 +75,8 @@ class ReferrerInfo : public nsIReferrerInfo {
already_AddRefed<nsIReferrerInfo> Clone() const;
// create an copy of the ReferrerInfo with new referrer policy
already_AddRefed<nsIReferrerInfo> CloneWithNewPolicy(uint32_t aPolicy) const;
already_AddRefed<nsIReferrerInfo> CloneWithNewPolicy(
ReferrerPolicyEnum aPolicy) const;
// create an copy of the ReferrerInfo with new send referrer
already_AddRefed<nsIReferrerInfo> CloneWithNewSendReferrer(
@ -90,7 +94,7 @@ class ReferrerInfo : public nsIReferrerInfo {
* @param aPolicyOverride referrer policy to override if necessary.
*/
static already_AddRefed<nsIReferrerInfo> CreateFromOtherAndPolicyOverride(
nsIReferrerInfo* aOther, uint32_t aPolicyOverride);
nsIReferrerInfo* aOther, ReferrerPolicyEnum aPolicyOverride);
/*
* Helper function to create a new ReferrerInfo object from a given document
@ -101,7 +105,7 @@ class ReferrerInfo : public nsIReferrerInfo {
* @param aPolicyOverride referrer policy to override if necessary.
*/
static already_AddRefed<nsIReferrerInfo> CreateFromDocumentAndPolicyOverride(
Document* aDoc, uint32_t aPolicyOverride);
Document* aDoc, ReferrerPolicyEnum aPolicyOverride);
/*
* Implements step 3.1 and 3.3 of the Determine request's Referrer algorithm
@ -121,7 +125,8 @@ class ReferrerInfo : public nsIReferrerInfo {
* @param aPolicy referrer policy from header if there's any.
*/
static already_AddRefed<nsIReferrerInfo> CreateForExternalCSSResources(
StyleSheet* aExternalSheet, uint32_t aPolicy = mozilla::net::RP_Unset);
StyleSheet* aExternalSheet,
ReferrerPolicyEnum aPolicy = ReferrerPolicy::_empty);
/**
* Helper function to create new ReferrerInfo object from a given document.
@ -166,7 +171,8 @@ class ReferrerInfo : public nsIReferrerInfo {
* Check whether referrer is allowed to send in secure to insecure scenario.
*/
static nsresult HandleSecureToInsecureReferral(nsIURI* aOriginalURI,
nsIURI* aURI, uint32_t aPolicy,
nsIURI* aURI,
ReferrerPolicyEnum aPolicy,
bool& aAllowed);
/**
@ -194,14 +200,14 @@ class ReferrerInfo : public nsIReferrerInfo {
* network.http.referer.defaultPolicy.trackers.pbmode for third-party trackers
* in private mode
*/
static uint32_t GetDefaultReferrerPolicy(nsIHttpChannel* aChannel = nullptr,
nsIURI* aURI = nullptr,
bool privateBrowsing = false);
static ReferrerPolicyEnum GetDefaultReferrerPolicy(
nsIHttpChannel* aChannel = nullptr, nsIURI* aURI = nullptr,
bool privateBrowsing = false);
/**
/**
* Hash function for this object
*/
PLDHashNumber Hash() const;
HashNumber Hash() const;
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIREFERRERINFO
@ -260,7 +266,7 @@ class ReferrerInfo : public nsIReferrerInfo {
* Currently, referrerpolicy attribute is supported in a, area, img, iframe,
* script, or link element.
*/
void GetReferrerPolicyFromAtribute(nsINode* aNode, uint32_t& aPolicy) const;
void GetReferrerPolicyFromAtribute(nsINode* aNode, ReferrerPolicyEnum& aPolicy) const;
/**
* Return true if node has a rel="noreferrer" attribute.
@ -368,7 +374,7 @@ class ReferrerInfo : public nsIReferrerInfo {
nsCOMPtr<nsIURI> mOriginalReferrer;
uint32_t mPolicy;
ReferrerPolicyEnum mPolicy;
// Indicates if the referrer should be sent or not even when it's available
// (default is true).

View File

@ -45,7 +45,6 @@
#include "mozilla/dom/CSPReportBinding.h"
#include "mozilla/dom/CSPDictionariesBinding.h"
#include "mozilla/ipc/PBackgroundSharedTypes.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "nsINetworkInterceptController.h"
#include "nsSandboxFlags.h"
#include "nsIScriptElement.h"

View File

@ -1295,45 +1295,13 @@ class FetchEventRunnable : public ExtendableFunctionalEventWorkerRunnable,
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(channel);
MOZ_ASSERT(httpChannel, "How come we don't have an HTTP channel?");
uint32_t referrerPolicy = 0;
ReferrerPolicy referrerPolicy = ReferrerPolicy::_empty;
mReferrer = EmptyString();
nsCOMPtr<nsIReferrerInfo> referrerInfo = httpChannel->GetReferrerInfo();
if (referrerInfo) {
referrerPolicy = referrerInfo->GetReferrerPolicy();
referrerPolicy = referrerInfo->ReferrerPolicy();
Unused << referrerInfo->GetComputedReferrerSpec(mReferrer);
}
switch (referrerPolicy) {
case nsIHttpChannel::REFERRER_POLICY_UNSET:
mReferrerPolicy = ReferrerPolicy::_empty;
break;
case nsIHttpChannel::REFERRER_POLICY_NO_REFERRER:
mReferrerPolicy = ReferrerPolicy::No_referrer;
break;
case nsIHttpChannel::REFERRER_POLICY_ORIGIN:
mReferrerPolicy = ReferrerPolicy::Origin;
break;
case nsIHttpChannel::REFERRER_POLICY_NO_REFERRER_WHEN_DOWNGRADE:
mReferrerPolicy = ReferrerPolicy::No_referrer_when_downgrade;
break;
case nsIHttpChannel::REFERRER_POLICY_ORIGIN_WHEN_XORIGIN:
mReferrerPolicy = ReferrerPolicy::Origin_when_cross_origin;
break;
case nsIHttpChannel::REFERRER_POLICY_UNSAFE_URL:
mReferrerPolicy = ReferrerPolicy::Unsafe_url;
break;
case nsIHttpChannel::REFERRER_POLICY_SAME_ORIGIN:
mReferrerPolicy = ReferrerPolicy::Same_origin;
break;
case nsIHttpChannel::REFERRER_POLICY_STRICT_ORIGIN_WHEN_XORIGIN:
mReferrerPolicy = ReferrerPolicy::Strict_origin_when_cross_origin;
break;
case nsIHttpChannel::REFERRER_POLICY_STRICT_ORIGIN:
mReferrerPolicy = ReferrerPolicy::Strict_origin;
break;
default:
MOZ_ASSERT_UNREACHABLE("Invalid Referrer Policy enum value?");
break;
}
rv = httpChannel->GetRequestMethod(mMethod);
NS_ENSURE_SUCCESS(rv, rv);

View File

@ -148,48 +148,14 @@ nsresult GetIPCInternalRequest(nsIInterceptedChannel* aChannel,
InternalRequest::MapChannelToRequestCredentials(underlyingChannel);
nsAutoString referrer;
uint32_t referrerPolicyInt = 0;
ReferrerPolicy referrerPolicy = ReferrerPolicy::_empty;
nsCOMPtr<nsIReferrerInfo> referrerInfo = httpChannel->GetReferrerInfo();
if (referrerInfo) {
referrerPolicyInt = referrerInfo->GetReferrerPolicy();
referrerPolicy = referrerInfo->ReferrerPolicy();
Unused << referrerInfo->GetComputedReferrerSpec(referrer);
}
ReferrerPolicy referrerPolicy;
switch (referrerPolicyInt) {
case nsIHttpChannel::REFERRER_POLICY_UNSET:
referrerPolicy = ReferrerPolicy::_empty;
break;
case nsIHttpChannel::REFERRER_POLICY_NO_REFERRER:
referrerPolicy = ReferrerPolicy::No_referrer;
break;
case nsIHttpChannel::REFERRER_POLICY_ORIGIN:
referrerPolicy = ReferrerPolicy::Origin;
break;
case nsIHttpChannel::REFERRER_POLICY_NO_REFERRER_WHEN_DOWNGRADE:
referrerPolicy = ReferrerPolicy::No_referrer_when_downgrade;
break;
case nsIHttpChannel::REFERRER_POLICY_ORIGIN_WHEN_XORIGIN:
referrerPolicy = ReferrerPolicy::Origin_when_cross_origin;
break;
case nsIHttpChannel::REFERRER_POLICY_UNSAFE_URL:
referrerPolicy = ReferrerPolicy::Unsafe_url;
break;
case nsIHttpChannel::REFERRER_POLICY_SAME_ORIGIN:
referrerPolicy = ReferrerPolicy::Same_origin;
break;
case nsIHttpChannel::REFERRER_POLICY_STRICT_ORIGIN_WHEN_XORIGIN:
referrerPolicy = ReferrerPolicy::Strict_origin_when_cross_origin;
break;
case nsIHttpChannel::REFERRER_POLICY_STRICT_ORIGIN:
referrerPolicy = ReferrerPolicy::Strict_origin;
break;
default:
MOZ_ASSERT_UNREACHABLE("Invalid Referrer Policy enum value?");
break;
}
uint32_t loadFlags;
rv = underlyingChannel->GetLoadFlags(&loadFlags);
NS_ENSURE_SUCCESS(rv, rv);

View File

@ -19,7 +19,6 @@
#include "mozilla/URLExtraData.h"
#include "SVGObserverUtils.h"
#include "nsSVGUseFrame.h"
#include "mozilla/net/ReferrerPolicy.h"
NS_IMPL_NS_NEW_SVG_ELEMENT(Use)

View File

@ -244,11 +244,11 @@ partial interface Document {
readonly attribute URI? documentURIObject;
/**
* Current referrer policy - one of the REFERRER_POLICY_* constants
* from nsIHttpChannel.
* Current referrer policy - one of the referrer policy value from
* ReferrerPolicy.webidl.
*/
[ChromeOnly]
readonly attribute unsigned long referrerPolicy;
readonly attribute ReferrerPolicy referrerPolicy;
/**
* Current referrer info, which holds all referrer related information

View File

@ -0,0 +1,19 @@
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* For more information please see
* https://w3c.github.io/webappsec-referrer-policy#idl-index
*/
enum ReferrerPolicy {
"",
"no-referrer",
"no-referrer-when-downgrade",
"origin",
"origin-when-cross-origin",
"unsafe-url", "same-origin",
"strict-origin",
"strict-origin-when-cross-origin"
};

View File

@ -75,8 +75,3 @@ enum RequestMode { "same-origin", "no-cors", "cors", "navigate" };
enum RequestCredentials { "omit", "same-origin", "include" };
enum RequestCache { "default", "no-store", "reload", "no-cache", "force-cache", "only-if-cached" };
enum RequestRedirect { "follow", "error", "manual" };
enum ReferrerPolicy {
"", "no-referrer", "no-referrer-when-downgrade", "origin",
"origin-when-cross-origin", "unsafe-url", "same-origin", "strict-origin",
"strict-origin-when-cross-origin"
};

View File

@ -745,6 +745,7 @@ WEBIDL_FILES = [
'PushSubscriptionOptions.webidl',
'RadioNodeList.webidl',
'Range.webidl',
'ReferrerPolicy.webidl',
'Reporting.webidl',
'Request.webidl',
'ResizeObserver.webidl',

View File

@ -11,7 +11,7 @@
#include "mozilla/dom/ChannelInfo.h"
#include "mozilla/dom/ServiceWorkerRegistrationDescriptor.h"
#include "mozilla/dom/WorkerCommon.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "nsIInterfaceRequestor.h"
#include "nsILoadContext.h"
#include "nsIRequest.h"

View File

@ -1369,9 +1369,9 @@ void WorkerPrivate::UpdateReferrerInfoFromHeader(
return;
}
net::ReferrerPolicy policy =
ReferrerPolicy policy =
nsContentUtils::GetReferrerPolicyFromHeader(headerValue);
if (policy == net::RP_Unset) {
if (policy == ReferrerPolicy::_empty) {
return;
}

View File

@ -735,8 +735,8 @@ class WorkerPrivate : public RelativeTimeline {
nsIReferrerInfo* GetReferrerInfo() const { return mLoadInfo.mReferrerInfo; }
uint32_t GetReferrerPolicy() const {
return mLoadInfo.mReferrerInfo->GetReferrerPolicy();
ReferrerPolicy GetReferrerPolicy() const {
return mLoadInfo.mReferrerInfo->ReferrerPolicy();
}
void SetReferrerInfo(nsIReferrerInfo* aReferrerInfo) {

View File

@ -2013,7 +2013,7 @@ XMLHttpRequestMainThread::OnStartRequest(nsIRequest* request) {
// the spec requires the response document.referrer to be the empty string
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new ReferrerInfo(nullptr, true, mResponseXML->GetReferrerPolicy());
new ReferrerInfo(nullptr, mResponseXML->ReferrerPolicy());
mResponseXML->SetReferrerInfo(referrerInfo);
mXMLParserStreamListener = listener;

View File

@ -69,7 +69,7 @@ nsresult nsXMLPrettyPrinter::PrettyPrint(Document* aDocument,
rv = nsSyncLoadService::LoadDocument(
xslUri, nsIContentPolicy::TYPE_XSLT, nsContentUtils::GetSystemPrincipal(),
nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_DATA_IS_NULL, nullptr,
aDocument->CookieSettings(), true, mozilla::net::RP_Unset,
aDocument->CookieSettings(), true, ReferrerPolicy::_empty,
getter_AddRefs(xslDocument));
NS_ENSURE_SUCCESS(rv, rv);

View File

@ -41,7 +41,7 @@
#include "ReferrerInfo.h"
using namespace mozilla;
using mozilla::net::ReferrerPolicy;
using mozilla::dom::ReferrerPolicy;
static NS_DEFINE_CID(kCParserCID, NS_PARSER_CID);

View File

@ -895,7 +895,7 @@ uint32_t txMozillaXSLTProcessor::Flags(SystemCallerGuarantee) { return mFlags; }
NS_IMETHODIMP
txMozillaXSLTProcessor::LoadStyleSheet(nsIURI* aUri,
Document* aLoaderDocument) {
mozilla::net::ReferrerPolicy refpol = mozilla::net::RP_Unset;
mozilla::dom::ReferrerPolicy refpol = mozilla::dom::ReferrerPolicy::_empty;
if (mStylesheetDocument) {
refpol = mStylesheetDocument->GetReferrerPolicy();
}

View File

@ -17,7 +17,6 @@
#include "mozilla/ErrorResult.h"
#include "mozilla/dom/BindingDeclarations.h"
#include "mozilla/dom/XSLTProcessorBinding.h"
#include "mozilla/net/ReferrerPolicy.h"
class nsINode;
class nsIURI;
@ -160,7 +159,7 @@ class txMozillaXSLTProcessor final : public nsIDocumentTransformer,
extern nsresult TX_LoadSheet(nsIURI* aUri, txMozillaXSLTProcessor* aProcessor,
mozilla::dom::Document* aLoaderDocument,
mozilla::net::ReferrerPolicy aReferrerPolicy);
mozilla::dom::ReferrerPolicy aReferrerPolicy);
extern nsresult TX_CompileStylesheet(nsINode* aNode,
txMozillaXSLTProcessor* aProcessor,

View File

@ -25,7 +25,7 @@
#include "nsTArray.h"
using namespace mozilla;
using mozilla::net::ReferrerPolicy;
using mozilla::dom::ReferrerPolicy;
txStylesheetCompiler::txStylesheetCompiler(const nsAString& aStylesheetURI,
ReferrerPolicy aReferrerPolicy,
@ -469,7 +469,7 @@ txStylesheetCompilerState::txStylesheetCompilerState(
mDoneWithThisStylesheet(false),
mNextInstrPtr(nullptr),
mToplevelIterator(nullptr),
mReferrerPolicy(mozilla::net::RP_Unset) {
mReferrerPolicy(ReferrerPolicy::_empty) {
// Embedded stylesheets have another handler, which is set in
// txStylesheetCompiler::init if the baseURI has a fragment identifier.
mHandlerTable = gTxRootHandler;
@ -843,7 +843,7 @@ static nsresult findFunction(nsAtom* aName, int32_t aNamespaceID,
extern bool TX_XSLTFunctionAvailable(nsAtom* aName, int32_t aNameSpaceID) {
RefPtr<txStylesheetCompiler> compiler =
new txStylesheetCompiler(EmptyString(), mozilla::net::RP_Unset, nullptr);
new txStylesheetCompiler(EmptyString(), ReferrerPolicy::_empty, nullptr);
NS_ENSURE_TRUE(compiler, false);
nsAutoPtr<FunctionCall> fnCall;

View File

@ -14,7 +14,6 @@
#include "nsAutoPtr.h"
#include "txStylesheet.h"
#include "nsTArray.h"
#include "mozilla/net/ReferrerPolicy.h"
extern bool TX_XSLTFunctionAvailable(nsAtom* aName, int32_t aNameSpaceID);
@ -41,12 +40,14 @@ class txElementContext : public txObject {
int32_t mDepth;
};
using mozilla::dom::ReferrerPolicy;
class txACompileObserver {
public:
NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
virtual nsresult loadURI(const nsAString& aUri, const nsAString& aReferrerUri,
mozilla::net::ReferrerPolicy aReferrerPolicy,
ReferrerPolicy aReferrerPolicy,
txStylesheetCompiler* aCompiler) = 0;
virtual void onDoneCompiling(txStylesheetCompiler* aCompiler,
nsresult aResult,
@ -56,7 +57,7 @@ class txACompileObserver {
#define TX_DECL_ACOMPILEOBSERVER \
nsresult loadURI(const nsAString& aUri, const nsAString& aReferrerUri, \
mozilla::net::ReferrerPolicy aReferrerPolicy, \
ReferrerPolicy aReferrerPolicy, \
txStylesheetCompiler* aCompiler) override; \
void onDoneCompiling(txStylesheetCompiler* aCompiler, nsresult aResult, \
const char16_t* aErrorText = nullptr, \
@ -67,8 +68,7 @@ class txStylesheetCompilerState : public txIParseContext {
explicit txStylesheetCompilerState(txACompileObserver* aObserver);
~txStylesheetCompilerState();
nsresult init(const nsAString& aStylesheetURI,
mozilla::net::ReferrerPolicy aReferrerPolicy,
nsresult init(const nsAString& aStylesheetURI, ReferrerPolicy aReferrerPolicy,
txStylesheet* aStylesheet, txListIterator* aInsertPosition);
// Embedded stylesheets state
@ -159,7 +159,7 @@ class txStylesheetCompilerState : public txIParseContext {
txInstruction** mNextInstrPtr;
txListIterator mToplevelIterator;
nsTArray<txInstruction**> mGotoTargetPointers;
mozilla::net::ReferrerPolicy mReferrerPolicy;
ReferrerPolicy mReferrerPolicy;
};
struct txStylesheetAttr {
@ -175,12 +175,12 @@ class txStylesheetCompiler final : private txStylesheetCompilerState,
friend class txStylesheetCompilerState;
friend bool TX_XSLTFunctionAvailable(nsAtom* aName, int32_t aNameSpaceID);
txStylesheetCompiler(const nsAString& aStylesheetURI,
mozilla::net::ReferrerPolicy aReferrerPolicy,
ReferrerPolicy aReferrerPolicy,
txACompileObserver* aObserver);
txStylesheetCompiler(const nsAString& aStylesheetURI,
txStylesheet* aStylesheet,
txListIterator* aInsertPosition,
mozilla::net::ReferrerPolicy aReferrerPolicy,
ReferrerPolicy aReferrerPolicy,
txACompileObserver* aObserver);
void setBaseURI(const nsString& aBaseURI);

View File

@ -1818,7 +1818,7 @@ nsresult nsXULPrototypeElement::SetAttrAt(uint32_t aPos,
// inline styles are allowed to be applied.
// XXX No specific specs talk about xul and referrer policy, pass Unset
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new mozilla::dom::ReferrerInfo(aDocumentURI, mozilla::net::RP_Unset);
new ReferrerInfo(aDocumentURI, ReferrerPolicy::_empty);
RefPtr<URLExtraData> data =
new URLExtraData(aDocumentURI, referrerInfo, principal);

View File

@ -725,14 +725,14 @@ static bool ValidateSecurityInfo(imgRequest* request, bool forcePrincipalCheck,
// XXX: this will return false if an image has different referrer attributes,
// i.e. we currently don't use the cached image but reload the image with
// the new referrer policy bug 1174921
uint32_t referrerPolicy = RP_Unset;
ReferrerPolicy referrerPolicy = ReferrerPolicy::_empty;
if (aReferrerInfo) {
referrerPolicy = aReferrerInfo->GetReferrerPolicy();
referrerPolicy = aReferrerInfo->ReferrerPolicy();
}
uint32_t requestReferrerPolicy = RP_Unset;
ReferrerPolicy requestReferrerPolicy = ReferrerPolicy::_empty;
if (request->GetReferrerInfo()) {
requestReferrerPolicy = request->GetReferrerInfo()->GetReferrerPolicy();
requestReferrerPolicy = request->GetReferrerInfo()->ReferrerPolicy();
}
if (referrerPolicy != requestReferrerPolicy) {

View File

@ -23,7 +23,6 @@
#include "nsIChannel.h"
#include "nsIThreadRetargetableStreamListener.h"
#include "imgIRequest.h"
#include "mozilla/net/ReferrerPolicy.h"
class imgLoader;
class imgRequestProxy;

View File

@ -49,6 +49,7 @@ class imgRequest final : public nsIStreamListener,
typedef mozilla::image::Image Image;
typedef mozilla::image::ImageCacheKey ImageCacheKey;
typedef mozilla::image::ProgressTracker ProgressTracker;
typedef mozilla::dom::ReferrerPolicy ReferrerPolicy;
public:
imgRequest(imgLoader* aLoader, const ImageCacheKey& aCacheKey);

View File

@ -21,7 +21,6 @@
#include "mozilla/StaticPrefs_layout.h"
#include "mozilla/dom/Document.h"
#include "nsStyleUtil.h"
#include "mozilla/net/ReferrerPolicy.h"
namespace mozilla {
namespace dom {
@ -483,7 +482,7 @@ already_AddRefed<URLExtraData> FontFace::GetURLExtraData() const {
// We pass RP_Unset when creating ReferrerInfo object here because it's not
// going to result to change referer policy in a resource request.
nsCOMPtr<nsIReferrerInfo> referrerInfo =
new mozilla::dom::ReferrerInfo(docURI, net::RP_Unset);
new ReferrerInfo(docURI, ReferrerPolicy::_empty);
RefPtr<URLExtraData> url = new URLExtraData(base, referrerInfo, principal);
return url.forget();

View File

@ -18,7 +18,6 @@
#include "mozilla/dom/FontFaceSetLoadEventBinding.h"
#include "mozilla/dom/Promise.h"
#include "mozilla/FontPropertyTypes.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/AsyncEventDispatcher.h"
#include "mozilla/Logging.h"
#include "mozilla/Preferences.h"

View File

@ -19,7 +19,6 @@
#include "imgIRequest.h"
#include "imgINotificationObserver.h"
#include "mozilla/Attributes.h"
#include "mozilla/net/ReferrerPolicy.h"
class imgIContainer;
class nsIFrame;

View File

@ -1005,7 +1005,7 @@ nsresult SheetLoadData::VerifySheetReadyToParse(nsresult aStatus,
// the same mInner as mSheet and will thus get the same URI.
mSheet->SetURIs(channelURI, originalURI, channelURI);
net::ReferrerPolicy policy =
ReferrerPolicy policy =
nsContentUtils::GetReferrerPolicyFromChannel(aChannel);
nsCOMPtr<nsIReferrerInfo> referrerInfo =
ReferrerInfo::CreateForExternalCSSResources(mSheet, policy);

View File

@ -27,7 +27,6 @@
#include "mozilla/Move.h"
#include "mozilla/StyleSheet.h"
#include "mozilla/UniquePtr.h"
#include "mozilla/net/ReferrerPolicy.h"
class nsICSSLoaderObserver;
class nsIConsoleReportCollector;
@ -87,7 +86,7 @@ class MOZ_RAII LoaderReusableStyleSheets {
};
class Loader final {
typedef mozilla::net::ReferrerPolicy ReferrerPolicy;
typedef mozilla::dom::ReferrerPolicy ReferrerPolicy;
public:
typedef nsIStyleSheetLinkingElement::Completed Completed;

View File

@ -1246,7 +1246,7 @@ const ServoCssRules* StyleSheet::ToShared(
RawServoSharedMemoryBuilder* aBuilder) {
// Assert some things we assume when creating a StyleSheet using shared
// memory.
MOZ_ASSERT(GetReferrerInfo()->GetReferrerPolicy() == net::RP_Unset);
MOZ_ASSERT(GetReferrerInfo()->ReferrerPolicy() == ReferrerPolicy::_empty);
MOZ_ASSERT(GetReferrerInfo()->GetSendReferrer());
MOZ_ASSERT(!nsCOMPtr<nsIURI>(GetReferrerInfo()->GetComputedReferrer()));
MOZ_ASSERT(GetCORSMode() == CORS_NONE);

View File

@ -10,7 +10,6 @@
#include "mozilla/css/SheetParsingMode.h"
#include "mozilla/dom/CSSStyleSheetBinding.h"
#include "mozilla/dom/SRIMetadata.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/CORSMode.h"
#include "mozilla/MozPromise.h"
#include "mozilla/RefPtr.h"

View File

@ -25,7 +25,7 @@ struct URLExtraData;
* Struct for data common to CSSStyleSheetInner and ServoStyleSheet.
*/
struct StyleSheetInfo final {
typedef net::ReferrerPolicy ReferrerPolicy;
typedef dom::ReferrerPolicy ReferrerPolicy;
StyleSheetInfo(CORSMode aCORSMode, const dom::SRIMetadata& aIntegrity,
css::SheetParsingMode aParsingMode);

View File

@ -13,7 +13,7 @@
#include "mozilla/Move.h"
#include "mozilla/StaticPtr.h"
#include "mozilla/UserAgentStyleSheetID.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "ReferrerInfo.h"
#include "nsCOMPtr.h"
#include "nsIPrincipal.h"

View File

@ -14,6 +14,7 @@
#include "mozilla/css/SheetParsingMode.h"
#include "ReferrerInfo.h"
#include "nsCSSValue.h"
#include "ReferrerInfo.h"
using namespace mozilla;
using namespace mozilla::css;

View File

@ -10,7 +10,6 @@
// Keep others in (case-insensitive) order:
#include "mozilla/css/ImageLoader.h"
#include "mozilla/dom/CanvasRenderingContext2D.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "mozilla/PresShell.h"
#include "mozilla/RestyleManager.h"
#include "nsCSSFrameConstructor.h"

View File

@ -21,6 +21,7 @@
#include "nsNetCID.h"
#include "nsNetUtil.h"
#include "nsIChannel.h"
#include "nsIHttpChannel.h"
#include "nsCookiePermission.h"
#include "nsIEffectiveTLDService.h"
#include "nsIURI.h"

View File

@ -22,6 +22,7 @@
#include "nsIServiceManager.h"
#include "nsIScriptSecurityManager.h"
#include "nsIWebProgressListener.h"
#include "nsIHttpChannel.h"
#include "nsIIOService.h"
#include "nsIPermissionManager.h"

View File

@ -3246,7 +3246,7 @@ nsresult HttpBaseChannel::SetupReplacementChannel(nsIURI* newURI,
}
if (mReferrerInfo) {
ReferrerPolicy referrerPolicy = RP_Unset;
dom::ReferrerPolicy referrerPolicy = dom::ReferrerPolicy::_empty;
nsAutoCString tRPHeaderCValue;
Unused << GetResponseHeader(NS_LITERAL_CSTRING("referrer-policy"),
tRPHeaderCValue);
@ -3258,7 +3258,7 @@ nsresult HttpBaseChannel::SetupReplacementChannel(nsIURI* newURI,
}
DebugOnly<nsresult> success;
if (referrerPolicy != RP_Unset) {
if (referrerPolicy != dom::ReferrerPolicy::_empty) {
// We may reuse computed referrer in redirect, so if referrerPolicy
// changes, we must not use the old computed value, and have to compute
// again.

View File

@ -10364,15 +10364,15 @@ void nsHttpChannel::ReEvaluateReferrerAfterTrackingStatusIsKnown() {
// tracking channel, we may need to set our referrer with referrer policy
// once again to ensure our defaults properly take effect now.
if (mReferrerInfo) {
dom::ReferrerInfo* referrerInfo =
static_cast<dom::ReferrerInfo*>(mReferrerInfo.get());
ReferrerInfo* referrerInfo =
static_cast<ReferrerInfo*>(mReferrerInfo.get());
if (referrerInfo->IsPolicyOverrided() &&
referrerInfo->GetReferrerPolicy() ==
referrerInfo->ReferrerPolicy() ==
ReferrerInfo::GetDefaultReferrerPolicy(nullptr, nullptr,
isPrivate)) {
nsCOMPtr<nsIReferrerInfo> newReferrerInfo =
referrerInfo->CloneWithNewPolicy(RP_Unset);
referrerInfo->CloneWithNewPolicy(ReferrerPolicy::_empty);
SetReferrerInfo(newReferrerInfo, false, true);
}
}

View File

@ -71,34 +71,6 @@ interface nsIHttpChannel : nsIChannel
[must_use, noscript]
void setReferrerInfoWithoutClone(in nsIReferrerInfo aReferrerInfo);
/**
* Referrer policies. See ReferrerPolicy.h for more details.
*/
/* The undefined state, or no referrer policy, usually causing a fallback
to a referrer policy definded elsewhere */
const unsigned long REFERRER_POLICY_UNSET = 0;
/* default state, doesn't send referrer from https->http */
const unsigned long REFERRER_POLICY_NO_REFERRER_WHEN_DOWNGRADE = 1;
/* sends no referrer */
const unsigned long REFERRER_POLICY_NO_REFERRER = 2;
/* only sends the origin of the referring URL */
const unsigned long REFERRER_POLICY_ORIGIN = 3;
/* same as default, but reduced to ORIGIN when cross-origin. */
const unsigned long REFERRER_POLICY_ORIGIN_WHEN_XORIGIN = 4;
/* always sends the referrer, even on downgrade. */
const unsigned long REFERRER_POLICY_UNSAFE_URL = 5;
/* send referrer when same-origin, no referrer when cross-origin */
const unsigned long REFERRER_POLICY_SAME_ORIGIN = 6;
/* send origin when request from https->https or http->http(s)
No referrer when request from https->http. */
const unsigned long REFERRER_POLICY_STRICT_ORIGIN = 7;
/* send referrer when same-origin,
Send origin when cross-origin from https->https or http->http(s)
No referrer when request from https->http. */
const unsigned long REFERRER_POLICY_STRICT_ORIGIN_WHEN_XORIGIN = 8;
/**
* Returns the network protocol used to fetch the resource as identified
* by the ALPN Protocol ID.

View File

@ -9,7 +9,7 @@
#include "nsContentUtils.h"
#include "nsHtml5DocumentMode.h"
#include "nsHtml5String.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "ReferrerInfo.h"
class nsHtml5TreeOpExecutor;
@ -301,7 +301,7 @@ class nsHtml5SpeculativeLoad {
* of the "referrerpolicy" attribute. This field holds one of the values
* (REFERRER_POLICY_*) defined in nsIHttpChannel.
*/
mozilla::net::ReferrerPolicy mScriptReferrerPolicy;
mozilla::dom::ReferrerPolicy mScriptReferrerPolicy;
};
#endif // nsHtml5SpeculativeLoad_h

View File

@ -948,27 +948,26 @@ bool nsHtml5TreeOpExecutor::ShouldPreloadURI(nsIURI* aURI) {
return mPreloadedURLs.EnsureInserted(spec);
}
net::ReferrerPolicy nsHtml5TreeOpExecutor::GetPreloadReferrerPolicy(
dom::ReferrerPolicy nsHtml5TreeOpExecutor::GetPreloadReferrerPolicy(
const nsAString& aReferrerPolicy) {
net::ReferrerPolicy referrerPolicy =
net::AttributeReferrerPolicyFromString(aReferrerPolicy);
return GetPreloadReferrerPolicy(referrerPolicy);
}
net::ReferrerPolicy nsHtml5TreeOpExecutor::GetPreloadReferrerPolicy(
dom::ReferrerPolicy nsHtml5TreeOpExecutor::GetPreloadReferrerPolicy(
ReferrerPolicy aReferrerPolicy) {
if (aReferrerPolicy != net::RP_Unset) {
if (aReferrerPolicy != dom::ReferrerPolicy::_empty) {
return aReferrerPolicy;
}
return static_cast<net::ReferrerPolicy>(
mDocument->GetPreloadReferrerInfo()->GetReferrerPolicy());
return mDocument->GetPreloadReferrerInfo()->ReferrerPolicy();
}
void nsHtml5TreeOpExecutor::PreloadScript(
const nsAString& aURL, const nsAString& aCharset, const nsAString& aType,
const nsAString& aCrossOrigin, const nsAString& aIntegrity,
net::ReferrerPolicy aReferrerPolicy, bool aScriptFromHead, bool aAsync,
dom::ReferrerPolicy aReferrerPolicy, bool aScriptFromHead, bool aAsync,
bool aDefer, bool aNoModule) {
nsCOMPtr<nsIURI> uri = ConvertIfNotPreloadedYet(aURL);
if (!uri) {

View File

@ -22,7 +22,6 @@
#include "nsHashKeys.h"
#include "mozilla/LinkedList.h"
#include "nsHtml5DocumentBuilder.h"
#include "mozilla/net/ReferrerPolicy.h"
class nsHtml5Parser;
class nsHtml5StreamParser;
@ -39,7 +38,7 @@ class nsHtml5TreeOpExecutor final
public nsAHtml5TreeOpSink,
public mozilla::LinkedListElement<nsHtml5TreeOpExecutor> {
friend class nsHtml5FlushLoopGuard;
typedef mozilla::net::ReferrerPolicy ReferrerPolicy;
typedef mozilla::dom::ReferrerPolicy ReferrerPolicy;
using Encoding = mozilla::Encoding;
template <typename T>
using NotNull = mozilla::NotNull<T>;