mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 17:25:36 +00:00
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
f4c9f068fa
commit
b4b9392f9d
@ -395,7 +395,8 @@ class StartRequestEvent : public NeckoTargetChannelEvent<HttpChannelChild> {
|
||||
const NetAddr& aPeerAddr, const uint32_t& aCacheKey,
|
||||
const nsCString& altDataType, const int64_t& altDataLen,
|
||||
const bool& deliveringAltData, const bool& aApplyConversion,
|
||||
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming)
|
||||
const bool& aIsResolvedByTRR, const ResourceTimingStruct& aTiming,
|
||||
const bool& aAllRedirectsSameOrigin)
|
||||
: NeckoTargetChannelEvent<HttpChannelChild>(aChild),
|
||||
mChannelStatus(aChannelStatus),
|
||||
mResponseHead(aResponseHead),
|
||||
@ -418,7 +419,8 @@ class StartRequestEvent : public NeckoTargetChannelEvent<HttpChannelChild> {
|
||||
mDeliveringAltData(deliveringAltData),
|
||||
mLoadInfoForwarder(loadInfoForwarder),
|
||||
mIsResolvedByTRR(aIsResolvedByTRR),
|
||||
mTiming(aTiming) {}
|
||||
mTiming(aTiming),
|
||||
mAllRedirectsSameOrigin(aAllRedirectsSameOrigin) {}
|
||||
|
||||
void Run() override {
|
||||
LOG(("StartRequestEvent [this=%p]\n", mChild));
|
||||
@ -428,7 +430,7 @@ class StartRequestEvent : public NeckoTargetChannelEvent<HttpChannelChild> {
|
||||
mCacheEntryId, mCacheFetchCount, mCacheExpirationTime, mCachedCharset,
|
||||
mSecurityInfoSerialization, mSelfAddr, mPeerAddr, mCacheKey,
|
||||
mAltDataType, mAltDataLen, mDeliveringAltData, mApplyConversion,
|
||||
mIsResolvedByTRR, mTiming);
|
||||
mIsResolvedByTRR, mTiming, mAllRedirectsSameOrigin);
|
||||
}
|
||||
|
||||
private:
|
||||
@ -454,6 +456,7 @@ class StartRequestEvent : public NeckoTargetChannelEvent<HttpChannelChild> {
|
||||
ParentLoadInfoForwarderArgs mLoadInfoForwarder;
|
||||
bool mIsResolvedByTRR;
|
||||
ResourceTimingStruct mTiming;
|
||||
bool mAllRedirectsSameOrigin;
|
||||
};
|
||||
|
||||
mozilla::ipc::IPCResult HttpChannelChild::RecvOnStartRequest(
|
||||
@ -468,7 +471,8 @@ mozilla::ipc::IPCResult HttpChannelChild::RecvOnStartRequest(
|
||||
const int16_t& redirectCount, const uint32_t& cacheKey,
|
||||
const nsCString& altDataType, const int64_t& altDataLen,
|
||||
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);
|
||||
LOG(("HttpChannelChild::RecvOnStartRequest [this=%p]\n", this));
|
||||
// mFlushedForDiversion and mDivertingToParent should NEVER be set at this
|
||||
@ -488,7 +492,7 @@ mozilla::ipc::IPCResult HttpChannelChild::RecvOnStartRequest(
|
||||
cacheEntryId, cacheFetchCount, cacheExpirationTime, cachedCharset,
|
||||
securityInfoSerialization, selfAddr, peerAddr, cacheKey, altDataType,
|
||||
altDataLen, deliveringAltData, aApplyConversion, aIsResolvedByTRR,
|
||||
aTiming));
|
||||
aTiming, aAllRedirectsSameOrigin));
|
||||
|
||||
{
|
||||
// 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 nsCString& altDataType, const int64_t& altDataLen,
|
||||
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));
|
||||
|
||||
// mFlushedForDiversion and mDivertingToParent should NEVER be set at this
|
||||
@ -598,6 +603,8 @@ void HttpChannelChild::OnStartRequest(
|
||||
|
||||
mTransactionTimings = aTiming;
|
||||
|
||||
mAllRedirectsSameOrigin = aAllRedirectsSameOrigin;
|
||||
|
||||
DoOnStartRequest(this, nullptr);
|
||||
}
|
||||
|
||||
|
@ -141,7 +141,8 @@ class HttpChannelChild final : public PHttpChannelChild,
|
||||
const uint32_t& cacheKey, const nsCString& altDataType,
|
||||
const int64_t& altDataLen, const bool& deliveringAltData,
|
||||
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 RecvRedirect1Begin(
|
||||
const uint32_t& registrarId, const URIParams& newURI,
|
||||
@ -471,7 +472,8 @@ class HttpChannelChild final : public PHttpChannelChild,
|
||||
const NetAddr& peerAddr, const uint32_t& cacheKey,
|
||||
const nsCString& altDataType, const int64_t& altDataLen,
|
||||
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,
|
||||
const uint32_t& count);
|
||||
void OnTransportAndData(const nsresult& channelStatus, const nsresult& status,
|
||||
|
@ -1467,6 +1467,9 @@ HttpChannelParent::OnStartRequest(nsIRequest* aRequest) {
|
||||
bool isResolvedByTRR = false;
|
||||
chan->GetIsResolvedByTRR(&isResolvedByTRR);
|
||||
|
||||
bool allRedirectsSameOrigin = false;
|
||||
chan->GetAllRedirectsSameOrigin(&allRedirectsSameOrigin);
|
||||
|
||||
rv = NS_OK;
|
||||
if (mIPCClosed ||
|
||||
!SendOnStartRequest(
|
||||
@ -1476,7 +1479,8 @@ HttpChannelParent::OnStartRequest(nsIRequest* aRequest) {
|
||||
mCacheEntry ? true : false, cacheEntryId, fetchCount, expirationTime,
|
||||
cachedCharset, secInfoSerialization, chan->GetSelfAddr(),
|
||||
chan->GetPeerAddr(), redirectCount, cacheKey, altDataType, altDataLen,
|
||||
deliveringAltData, applyConversion, isResolvedByTRR, timing)) {
|
||||
deliveringAltData, applyConversion, isResolvedByTRR, timing,
|
||||
allRedirectsSameOrigin)) {
|
||||
rv = NS_ERROR_UNEXPECTED;
|
||||
}
|
||||
requestHead->Exit();
|
||||
|
@ -129,7 +129,8 @@ child:
|
||||
bool deliveringAltData,
|
||||
bool applyConversion,
|
||||
bool isResolvedByTRR,
|
||||
ResourceTimingStruct timing);
|
||||
ResourceTimingStruct timing,
|
||||
bool allRedirectsSameOrigin);
|
||||
|
||||
// Used to cancel child channel if we hit errors during creating and
|
||||
// AsyncOpen of nsHttpChannel on the parent.
|
||||
|
Loading…
Reference in New Issue
Block a user