Bug 1546334 - Use referrerInfo in URLExtraData r=heycam

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

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Thomas Nguyen 2019-07-16 11:43:25 +00:00
parent 2376337c41
commit 8ddc35d9e5
2 changed files with 22 additions and 24 deletions

View File

@ -10,7 +10,7 @@
#include "mozilla/NullPrincipalURI.h"
#include "nsProxyRelease.h"
#include "mozilla/net/ReferrerPolicy.h"
#include "ReferrerInfo.h"
namespace mozilla {
@ -19,10 +19,9 @@ StaticRefPtr<URLExtraData> URLExtraData::sDummy;
/* static */
void URLExtraData::InitDummy() {
RefPtr<nsIURI> baseURI = NullPrincipalURI::Create();
RefPtr<nsIURI> referrer = baseURI;
sDummy = new URLExtraData(baseURI.forget(), referrer.forget(),
NullPrincipal::CreateWithoutOriginAttributes(),
net::RP_Unset);
nsCOMPtr<nsIReferrerInfo> referrerInfo = new dom::ReferrerInfo(nullptr);
sDummy = new URLExtraData(baseURI.forget(), referrerInfo.forget(),
NullPrincipal::CreateWithoutOriginAttributes());
}
/* static */

View File

@ -18,6 +18,7 @@
#include "nsCOMPtr.h"
#include "nsIPrincipal.h"
#include "nsIURI.h"
#include "nsIReferrerInfo.h"
class nsLayoutStylesheetCache;
@ -25,30 +26,29 @@ namespace mozilla {
struct URLExtraData {
URLExtraData(already_AddRefed<nsIURI> aBaseURI,
already_AddRefed<nsIURI> aReferrer,
already_AddRefed<nsIPrincipal> aPrincipal,
net::ReferrerPolicy aReferrerPolicy)
already_AddRefed<nsIReferrerInfo> aReferrerInfo,
already_AddRefed<nsIPrincipal> aPrincipal)
: mBaseURI(std::move(aBaseURI)),
mReferrer(std::move(aReferrer)),
mReferrerPolicy(aReferrerPolicy),
mPrincipal(std::move(aPrincipal)),
// When we hold the URI data of a style sheet, mReferrer is always
// equal to the sheet URI.
mIsChrome(mReferrer ? dom::IsChromeURI(mReferrer) : false) {
mReferrerInfo(std::move(aReferrerInfo)),
mPrincipal(std::move(aPrincipal)) {
MOZ_ASSERT(mBaseURI);
MOZ_ASSERT(mPrincipal);
MOZ_ASSERT(mReferrerInfo);
// When we hold the URI data of a style sheet, referrer is always
// equal to the sheet URI.
nsCOMPtr<nsIURI> referrer = mReferrerInfo->GetOriginalReferrer();
mIsChrome = referrer ? dom::IsChromeURI(referrer) : false;
}
URLExtraData(nsIURI* aBaseURI, nsIURI* aReferrer, nsIPrincipal* aPrincipal,
net::ReferrerPolicy aReferrerPolicy)
: URLExtraData(do_AddRef(aBaseURI), do_AddRef(aReferrer),
do_AddRef(aPrincipal), aReferrerPolicy) {}
URLExtraData(nsIURI* aBaseURI, nsIReferrerInfo* aReferrerInfo,
nsIPrincipal* aPrincipal)
: URLExtraData(do_AddRef(aBaseURI), do_AddRef(aReferrerInfo),
do_AddRef(aPrincipal)) {}
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(URLExtraData)
nsIURI* BaseURI() const { return mBaseURI; }
nsIURI* GetReferrer() const { return mReferrer; }
net::ReferrerPolicy GetReferrerPolicy() const { return mReferrerPolicy; }
nsIReferrerInfo* ReferrerInfo() const { return mReferrerInfo; }
nsIPrincipal* Principal() const { return mPrincipal; }
static URLExtraData* Dummy() {
@ -67,12 +67,11 @@ struct URLExtraData {
~URLExtraData();
nsCOMPtr<nsIURI> mBaseURI;
nsCOMPtr<nsIURI> mReferrer;
net::ReferrerPolicy mReferrerPolicy;
nsCOMPtr<nsIReferrerInfo> mReferrerInfo;
nsCOMPtr<nsIPrincipal> mPrincipal;
// True if mReferrer is a chrome:// URI.
const bool mIsChrome;
// True if referrer is a chrome:// URI.
bool mIsChrome;
static StaticRefPtr<URLExtraData> sDummy;
};