forked from mirrors/gecko-dev
Bug 1554847 - Improve cross-origin checks in canvas API - propagate allRedirectsSameOrigin to HttpChannelChild actor, r=mayhemer
Differential Revision: https://phabricator.services.mozilla.com/D32793 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
8df66534cf
commit
21cf95c1c2
4 changed files with 24 additions and 10 deletions
|
|
@ -395,7 +395,8 @@ class StartRequestEvent : public NeckoTargetChannelEvent<HttpChannelChild> {
|
||||||
const NetAddr& aPeerAddr, const uint32_t& aCacheKey,
|
const NetAddr& aPeerAddr, const uint32_t& aCacheKey,
|
||||||
const nsCString& altDataType, const int64_t& altDataLen,
|
const nsCString& altDataType, const int64_t& altDataLen,
|
||||||
const bool& deliveringAltData, const bool& aApplyConversion,
|
const bool& deliveringAltData, const bool& aApplyConversion,
|
||||||
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming)
|
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming,
|
||||||
|
const bool& aAllRedirectsSameOrigin)
|
||||||
: NeckoTargetChannelEvent<HttpChannelChild>(aChild),
|
: NeckoTargetChannelEvent<HttpChannelChild>(aChild),
|
||||||
mChannelStatus(aChannelStatus),
|
mChannelStatus(aChannelStatus),
|
||||||
mResponseHead(aResponseHead),
|
mResponseHead(aResponseHead),
|
||||||
|
|
@ -418,7 +419,8 @@ class StartRequestEvent : public NeckoTargetChannelEvent<HttpChannelChild> {
|
||||||
mDeliveringAltData(deliveringAltData),
|
mDeliveringAltData(deliveringAltData),
|
||||||
mLoadInfoForwarder(loadInfoForwarder),
|
mLoadInfoForwarder(loadInfoForwarder),
|
||||||
mIsResolvedByTRR(aIsResolvedByTRR),
|
mIsResolvedByTRR(aIsResolvedByTRR),
|
||||||
mTiming(aTiming) {}
|
mTiming(aTiming),
|
||||||
|
mAllRedirectsSameOrigin(aAllRedirectsSameOrigin) {}
|
||||||
|
|
||||||
void Run() override {
|
void Run() override {
|
||||||
LOG(("StartRequestEvent [this=%p]\n", mChild));
|
LOG(("StartRequestEvent [this=%p]\n", mChild));
|
||||||
|
|
@ -428,7 +430,7 @@ class StartRequestEvent : public NeckoTargetChannelEvent<HttpChannelChild> {
|
||||||
mCacheEntryId, mCacheFetchCount, mCacheExpirationTime, mCachedCharset,
|
mCacheEntryId, mCacheFetchCount, mCacheExpirationTime, mCachedCharset,
|
||||||
mSecurityInfoSerialization, mSelfAddr, mPeerAddr, mCacheKey,
|
mSecurityInfoSerialization, mSelfAddr, mPeerAddr, mCacheKey,
|
||||||
mAltDataType, mAltDataLen, mDeliveringAltData, mApplyConversion,
|
mAltDataType, mAltDataLen, mDeliveringAltData, mApplyConversion,
|
||||||
mIsResolvedByTRR, mTiming);
|
mIsResolvedByTRR, mTiming, mAllRedirectsSameOrigin);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -454,6 +456,7 @@ class StartRequestEvent : public NeckoTargetChannelEvent<HttpChannelChild> {
|
||||||
ParentLoadInfoForwarderArgs mLoadInfoForwarder;
|
ParentLoadInfoForwarderArgs mLoadInfoForwarder;
|
||||||
bool mIsResolvedByTRR;
|
bool mIsResolvedByTRR;
|
||||||
ResourceTimingStruct mTiming;
|
ResourceTimingStruct mTiming;
|
||||||
|
bool mAllRedirectsSameOrigin;
|
||||||
};
|
};
|
||||||
|
|
||||||
mozilla::ipc::IPCResult HttpChannelChild::RecvOnStartRequest(
|
mozilla::ipc::IPCResult HttpChannelChild::RecvOnStartRequest(
|
||||||
|
|
@ -468,7 +471,8 @@ mozilla::ipc::IPCResult HttpChannelChild::RecvOnStartRequest(
|
||||||
const int16_t& redirectCount, const uint32_t& cacheKey,
|
const int16_t& redirectCount, const uint32_t& cacheKey,
|
||||||
const nsCString& altDataType, const int64_t& altDataLen,
|
const nsCString& altDataType, const int64_t& altDataLen,
|
||||||
const bool& deliveringAltData, const bool& aApplyConversion,
|
const bool& deliveringAltData, const bool& aApplyConversion,
|
||||||
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming) {
|
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming,
|
||||||
|
const bool& aAllRedirectsSameOrigin) {
|
||||||
AUTO_PROFILER_LABEL("HttpChannelChild::RecvOnStartRequest", NETWORK);
|
AUTO_PROFILER_LABEL("HttpChannelChild::RecvOnStartRequest", NETWORK);
|
||||||
LOG(("HttpChannelChild::RecvOnStartRequest [this=%p]\n", this));
|
LOG(("HttpChannelChild::RecvOnStartRequest [this=%p]\n", this));
|
||||||
// mFlushedForDiversion and mDivertingToParent should NEVER be set at this
|
// mFlushedForDiversion and mDivertingToParent should NEVER be set at this
|
||||||
|
|
@ -488,7 +492,7 @@ mozilla::ipc::IPCResult HttpChannelChild::RecvOnStartRequest(
|
||||||
cacheEntryId, cacheFetchCount, cacheExpirationTime, cachedCharset,
|
cacheEntryId, cacheFetchCount, cacheExpirationTime, cachedCharset,
|
||||||
securityInfoSerialization, selfAddr, peerAddr, cacheKey, altDataType,
|
securityInfoSerialization, selfAddr, peerAddr, cacheKey, altDataType,
|
||||||
altDataLen, deliveringAltData, aApplyConversion, aIsResolvedByTRR,
|
altDataLen, deliveringAltData, aApplyConversion, aIsResolvedByTRR,
|
||||||
aTiming));
|
aTiming, aAllRedirectsSameOrigin));
|
||||||
|
|
||||||
{
|
{
|
||||||
// Child's mEventQ is to control the execution order of the IPC messages
|
// Child's mEventQ is to control the execution order of the IPC messages
|
||||||
|
|
@ -522,7 +526,8 @@ void HttpChannelChild::OnStartRequest(
|
||||||
const NetAddr& selfAddr, const NetAddr& peerAddr, const uint32_t& cacheKey,
|
const NetAddr& selfAddr, const NetAddr& peerAddr, const uint32_t& cacheKey,
|
||||||
const nsCString& altDataType, const int64_t& altDataLen,
|
const nsCString& altDataType, const int64_t& altDataLen,
|
||||||
const bool& deliveringAltData, const bool& aApplyConversion,
|
const bool& deliveringAltData, const bool& aApplyConversion,
|
||||||
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming) {
|
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming,
|
||||||
|
const bool& aAllRedirectsSameOrigin) {
|
||||||
LOG(("HttpChannelChild::OnStartRequest [this=%p]\n", this));
|
LOG(("HttpChannelChild::OnStartRequest [this=%p]\n", this));
|
||||||
|
|
||||||
// mFlushedForDiversion and mDivertingToParent should NEVER be set at this
|
// mFlushedForDiversion and mDivertingToParent should NEVER be set at this
|
||||||
|
|
@ -598,6 +603,8 @@ void HttpChannelChild::OnStartRequest(
|
||||||
|
|
||||||
mTransactionTimings = aTiming;
|
mTransactionTimings = aTiming;
|
||||||
|
|
||||||
|
mAllRedirectsSameOrigin = aAllRedirectsSameOrigin;
|
||||||
|
|
||||||
DoOnStartRequest(this, nullptr);
|
DoOnStartRequest(this, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,8 @@ class HttpChannelChild final : public PHttpChannelChild,
|
||||||
const uint32_t& cacheKey, const nsCString& altDataType,
|
const uint32_t& cacheKey, const nsCString& altDataType,
|
||||||
const int64_t& altDataLen, const bool& deliveringAltData,
|
const int64_t& altDataLen, const bool& deliveringAltData,
|
||||||
const bool& aApplyConversion, const bool& aIsResolvedByTRR,
|
const bool& aApplyConversion, const bool& aIsResolvedByTRR,
|
||||||
const ResourceTimingStruct& aTiming) override;
|
const ResourceTimingStruct& aTiming,
|
||||||
|
const bool& aAllRedirectsSameOrigin) override;
|
||||||
mozilla::ipc::IPCResult RecvFailedAsyncOpen(const nsresult& status) override;
|
mozilla::ipc::IPCResult RecvFailedAsyncOpen(const nsresult& status) override;
|
||||||
mozilla::ipc::IPCResult RecvRedirect1Begin(
|
mozilla::ipc::IPCResult RecvRedirect1Begin(
|
||||||
const uint32_t& registrarId, const URIParams& newURI,
|
const uint32_t& registrarId, const URIParams& newURI,
|
||||||
|
|
@ -471,7 +472,8 @@ class HttpChannelChild final : public PHttpChannelChild,
|
||||||
const NetAddr& peerAddr, const uint32_t& cacheKey,
|
const NetAddr& peerAddr, const uint32_t& cacheKey,
|
||||||
const nsCString& altDataType, const int64_t& altDataLen,
|
const nsCString& altDataType, const int64_t& altDataLen,
|
||||||
const bool& deliveringAltData, const bool& aApplyConversion,
|
const bool& deliveringAltData, const bool& aApplyConversion,
|
||||||
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming);
|
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming,
|
||||||
|
const bool& aAllRedirectsSameOrigin);
|
||||||
void MaybeDivertOnData(const nsCString& data, const uint64_t& offset,
|
void MaybeDivertOnData(const nsCString& data, const uint64_t& offset,
|
||||||
const uint32_t& count);
|
const uint32_t& count);
|
||||||
void OnTransportAndData(const nsresult& channelStatus, const nsresult& status,
|
void OnTransportAndData(const nsresult& channelStatus, const nsresult& status,
|
||||||
|
|
|
||||||
|
|
@ -1467,6 +1467,9 @@ HttpChannelParent::OnStartRequest(nsIRequest* aRequest) {
|
||||||
bool isResolvedByTRR = false;
|
bool isResolvedByTRR = false;
|
||||||
chan->GetIsResolvedByTRR(&isResolvedByTRR);
|
chan->GetIsResolvedByTRR(&isResolvedByTRR);
|
||||||
|
|
||||||
|
bool allRedirectsSameOrigin = false;
|
||||||
|
chan->GetAllRedirectsSameOrigin(&allRedirectsSameOrigin);
|
||||||
|
|
||||||
rv = NS_OK;
|
rv = NS_OK;
|
||||||
if (mIPCClosed ||
|
if (mIPCClosed ||
|
||||||
!SendOnStartRequest(
|
!SendOnStartRequest(
|
||||||
|
|
@ -1476,7 +1479,8 @@ HttpChannelParent::OnStartRequest(nsIRequest* aRequest) {
|
||||||
mCacheEntry ? true : false, cacheEntryId, fetchCount, expirationTime,
|
mCacheEntry ? true : false, cacheEntryId, fetchCount, expirationTime,
|
||||||
cachedCharset, secInfoSerialization, chan->GetSelfAddr(),
|
cachedCharset, secInfoSerialization, chan->GetSelfAddr(),
|
||||||
chan->GetPeerAddr(), redirectCount, cacheKey, altDataType, altDataLen,
|
chan->GetPeerAddr(), redirectCount, cacheKey, altDataType, altDataLen,
|
||||||
deliveringAltData, applyConversion, isResolvedByTRR, timing)) {
|
deliveringAltData, applyConversion, isResolvedByTRR, timing,
|
||||||
|
allRedirectsSameOrigin)) {
|
||||||
rv = NS_ERROR_UNEXPECTED;
|
rv = NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
requestHead->Exit();
|
requestHead->Exit();
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,8 @@ child:
|
||||||
bool deliveringAltData,
|
bool deliveringAltData,
|
||||||
bool applyConversion,
|
bool applyConversion,
|
||||||
bool isResolvedByTRR,
|
bool isResolvedByTRR,
|
||||||
ResourceTimingStruct timing);
|
ResourceTimingStruct timing,
|
||||||
|
bool allRedirectsSameOrigin);
|
||||||
|
|
||||||
// Used to cancel child channel if we hit errors during creating and
|
// Used to cancel child channel if we hit errors during creating and
|
||||||
// AsyncOpen of nsHttpChannel on the parent.
|
// AsyncOpen of nsHttpChannel on the parent.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue