author | Christoph Kerschbaumer <mozilla@christophkerschbaumer.com> |
Fri, 14 Nov 2014 08:57:09 -0800 | |
changeset 215849 | b746586983f42c728f0d9389d59314842f439577 |
parent 215848 | b292b91c67556911c01e80485247f30cc788339b |
child 215850 | b9da209fe2f2a2067cce28cd029ba101502461dd |
push id | 27827 |
push user | ryanvm@gmail.com |
push date | Fri, 14 Nov 2014 22:48:07 +0000 |
treeherder | mozilla-central@acbd7b68fa8c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jduell |
bugs | 1083422 |
milestone | 36.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/netwerk/ipc/NeckoChannelParams.ipdlh +++ b/netwerk/ipc/NeckoChannelParams.ipdlh @@ -47,16 +47,17 @@ struct HttpChannelOpenArgs bool resumeAt; uint64_t startPos; nsCString entityID; bool chooseApplicationCache; nsCString appCacheClientID; bool allowSpdy; OptionalFileDescriptorSet fds; PrincipalInfo requestingPrincipalInfo; + PrincipalInfo triggeringPrincipalInfo; uint32_t securityFlags; uint32_t contentPolicyType; }; struct HttpChannelConnectArgs { uint32_t channelId; }; @@ -73,16 +74,17 @@ union HttpChannelCreationArgs struct FTPChannelOpenArgs { URIParams uri; uint64_t startPos; nsCString entityID; OptionalInputStreamParams uploadStream; PrincipalInfo requestingPrincipalInfo; + PrincipalInfo triggeringPrincipalInfo; uint32_t securityFlags; uint32_t contentPolicyType; }; struct FTPChannelConnectArgs { uint32_t channelId; };
--- a/netwerk/protocol/ftp/FTPChannelChild.cpp +++ b/netwerk/protocol/ftp/FTPChannelChild.cpp @@ -144,31 +144,38 @@ FTPChannelChild::GetUploadStream(nsIInpu //----------------------------------------------------------------------------- // helper function to assign loadInfo to openArgs void propagateLoadInfo(nsILoadInfo *aLoadInfo, FTPChannelOpenArgs& openArgs) { - mozilla::ipc::PrincipalInfo principalInfo; + mozilla::ipc::PrincipalInfo requestingPrincipalInfo; + mozilla::ipc::PrincipalInfo triggeringPrincipalInfo; if (aLoadInfo) { mozilla::ipc::PrincipalToPrincipalInfo(aLoadInfo->LoadingPrincipal(), - &principalInfo); - openArgs.requestingPrincipalInfo() = principalInfo; + &requestingPrincipalInfo); + openArgs.requestingPrincipalInfo() = requestingPrincipalInfo; + + mozilla::ipc::PrincipalToPrincipalInfo(aLoadInfo->TriggeringPrincipal(), + &triggeringPrincipalInfo); + openArgs.triggeringPrincipalInfo() = triggeringPrincipalInfo; + openArgs.securityFlags() = aLoadInfo->GetSecurityFlags(); openArgs.contentPolicyType() = aLoadInfo->GetContentPolicyType(); return; } // use default values if no loadInfo is provided mozilla::ipc::PrincipalToPrincipalInfo(nsContentUtils::GetSystemPrincipal(), - &principalInfo); - openArgs.requestingPrincipalInfo() = principalInfo; + &requestingPrincipalInfo); + openArgs.requestingPrincipalInfo() = requestingPrincipalInfo; + openArgs.triggeringPrincipalInfo() = requestingPrincipalInfo; openArgs.securityFlags() = nsILoadInfo::SEC_NORMAL; openArgs.contentPolicyType() = nsIContentPolicy::TYPE_OTHER; } NS_IMETHODIMP FTPChannelChild::AsyncOpen(::nsIStreamListener* listener, nsISupports* aContext) { LOG(("FTPChannelChild::AsyncOpen [this=%p]\n", this));
--- a/netwerk/protocol/ftp/FTPChannelParent.cpp +++ b/netwerk/protocol/ftp/FTPChannelParent.cpp @@ -82,18 +82,18 @@ NS_IMPL_ISUPPORTS(FTPChannelParent, bool FTPChannelParent::Init(const FTPChannelCreationArgs& aArgs) { switch (aArgs.type()) { case FTPChannelCreationArgs::TFTPChannelOpenArgs: { const FTPChannelOpenArgs& a = aArgs.get_FTPChannelOpenArgs(); return DoAsyncOpen(a.uri(), a.startPos(), a.entityID(), a.uploadStream(), - a.requestingPrincipalInfo(), a.securityFlags(), - a.contentPolicyType()); + a.requestingPrincipalInfo(), a.triggeringPrincipalInfo(), + a.securityFlags(), a.contentPolicyType()); } case FTPChannelCreationArgs::TFTPChannelConnectArgs: { const FTPChannelConnectArgs& cArgs = aArgs.get_FTPChannelConnectArgs(); return ConnectChannel(cArgs.channelId()); } default: NS_NOTREACHED("unknown open type"); @@ -102,16 +102,17 @@ FTPChannelParent::Init(const FTPChannelC } bool FTPChannelParent::DoAsyncOpen(const URIParams& aURI, const uint64_t& aStartPos, const nsCString& aEntityID, const OptionalInputStreamParams& aUploadStream, const ipc::PrincipalInfo& aRequestingPrincipalInfo, + const ipc::PrincipalInfo& aTriggeringPrincipalInfo, const uint32_t& aSecurityFlags, const uint32_t& aContentPolicyType) { nsCOMPtr<nsIURI> uri = DeserializeURI(aURI); if (!uri) return false; #ifdef DEBUG @@ -137,27 +138,34 @@ FTPChannelParent::DoAsyncOpen(const URIP if (NS_FAILED(rv)) return SendFailedAsyncOpen(rv); nsCOMPtr<nsIPrincipal> requestingPrincipal = mozilla::ipc::PrincipalInfoToPrincipal(aRequestingPrincipalInfo, &rv); if (NS_FAILED(rv)) { return SendFailedAsyncOpen(rv); } + nsCOMPtr<nsIPrincipal> triggeringPrincipal = + mozilla::ipc::PrincipalInfoToPrincipal(aTriggeringPrincipalInfo, &rv); + if (NS_FAILED(rv)) { + return SendFailedAsyncOpen(rv); + } + nsCOMPtr<nsIChannel> chan; - rv = NS_NewChannel(getter_AddRefs(chan), - uri, - requestingPrincipal, - aSecurityFlags, - aContentPolicyType, - nullptr, // aLoadGroup - nullptr, // aCallbacks - nsIRequest::LOAD_NORMAL, - ios); + rv = NS_NewChannelWithTriggeringPrincipal(getter_AddRefs(chan), + uri, + requestingPrincipal, + triggeringPrincipal, + aSecurityFlags, + aContentPolicyType, + nullptr, // aLoadGroup + nullptr, // aCallbacks + nsIRequest::LOAD_NORMAL, + ios); if (NS_FAILED(rv)) return SendFailedAsyncOpen(rv); mChannel = chan; // later on mChannel may become an HTTP channel (we'll be redirected to one // if we're using a proxy), but for now this is safe
--- a/netwerk/protocol/ftp/FTPChannelParent.h +++ b/netwerk/protocol/ftp/FTPChannelParent.h @@ -61,16 +61,17 @@ protected: // Asynchronously calls NotifyDiversionFailed. void FailDiversion(nsresult aErrorCode, bool aSkipResume = true); bool DoAsyncOpen(const URIParams& aURI, const uint64_t& aStartPos, const nsCString& aEntityID, const OptionalInputStreamParams& aUploadStream, const ipc::PrincipalInfo& aRequestingPrincipalInfo, + const ipc::PrincipalInfo& aTriggeringPrincipalInfo, const uint32_t& aSecurityFlags, const uint32_t& aContentPolicyType); // used to connect redirected-to channel in parent with just created // ChildChannel. Used during HTTP->FTP redirects. bool ConnectChannel(const uint32_t& channelId); virtual bool RecvCancel(const nsresult& status) MOZ_OVERRIDE;
--- a/netwerk/protocol/http/HttpChannelChild.cpp +++ b/netwerk/protocol/http/HttpChannelChild.cpp @@ -1239,31 +1239,38 @@ HttpChannelChild::Resume() // HttpChannelChild::nsIChannel //----------------------------------------------------------------------------- // helper function to assign loadInfo to openArgs void propagateLoadInfo(nsILoadInfo *aLoadInfo, HttpChannelOpenArgs& openArgs) { - mozilla::ipc::PrincipalInfo principalInfo; + mozilla::ipc::PrincipalInfo requestingPrincipalInfo; + mozilla::ipc::PrincipalInfo triggeringPrincipalInfo; if (aLoadInfo) { mozilla::ipc::PrincipalToPrincipalInfo(aLoadInfo->LoadingPrincipal(), - &principalInfo); - openArgs.requestingPrincipalInfo() = principalInfo; + &requestingPrincipalInfo); + openArgs.requestingPrincipalInfo() = requestingPrincipalInfo; + + mozilla::ipc::PrincipalToPrincipalInfo(aLoadInfo->TriggeringPrincipal(), + &triggeringPrincipalInfo); + openArgs.triggeringPrincipalInfo() = triggeringPrincipalInfo; + openArgs.securityFlags() = aLoadInfo->GetSecurityFlags(); openArgs.contentPolicyType() = aLoadInfo->GetContentPolicyType(); return; } // use default values if no loadInfo is provided mozilla::ipc::PrincipalToPrincipalInfo(nsContentUtils::GetSystemPrincipal(), - &principalInfo); - openArgs.requestingPrincipalInfo() = principalInfo; + &requestingPrincipalInfo); + openArgs.requestingPrincipalInfo() = requestingPrincipalInfo; + openArgs.triggeringPrincipalInfo() = requestingPrincipalInfo; openArgs.securityFlags() = nsILoadInfo::SEC_NORMAL; openArgs.contentPolicyType() = nsIContentPolicy::TYPE_OTHER; } NS_IMETHODIMP HttpChannelChild::GetSecurityInfo(nsISupports **aSecurityInfo) { NS_ENSURE_ARG_POINTER(aSecurityInfo);
--- a/netwerk/protocol/http/HttpChannelParent.cpp +++ b/netwerk/protocol/http/HttpChannelParent.cpp @@ -100,18 +100,18 @@ HttpChannelParent::Init(const HttpChanne a.apiRedirectTo(), a.topWindowURI(), a.loadFlags(), a.requestHeaders(), a.requestMethod(), a.uploadStream(), a.uploadStreamHasHeaders(), a.priority(), a.redirectionLimit(), a.allowPipelining(), a.allowSTS(), a.thirdPartyFlags(), a.resumeAt(), a.startPos(), a.entityID(), a.chooseApplicationCache(), a.appCacheClientID(), a.allowSpdy(), a.fds(), - a.requestingPrincipalInfo(), a.securityFlags(), - a.contentPolicyType()); + a.requestingPrincipalInfo(), a.triggeringPrincipalInfo(), + a.securityFlags(), a.contentPolicyType()); } case HttpChannelCreationArgs::THttpChannelConnectArgs: { const HttpChannelConnectArgs& cArgs = aArgs.get_HttpChannelConnectArgs(); return ConnectChannel(cArgs.channelId()); } default: NS_NOTREACHED("unknown open type"); @@ -187,16 +187,17 @@ HttpChannelParent::DoAsyncOpen( const U const bool& doResumeAt, const uint64_t& startPos, const nsCString& entityID, const bool& chooseApplicationCache, const nsCString& appCacheClientID, const bool& allowSpdy, const OptionalFileDescriptorSet& aFds, const ipc::PrincipalInfo& aRequestingPrincipalInfo, + const ipc::PrincipalInfo& aTriggeringPrincipalInfo, const uint32_t& aSecurityFlags, const uint32_t& aContentPolicyType) { nsCOMPtr<nsIURI> uri = DeserializeURI(aURI); if (!uri) { // URIParams does MOZ_ASSERT if null, but we need to protect opt builds from // null deref here. return false; @@ -218,41 +219,47 @@ HttpChannelParent::DoAsyncOpen( const U if (NS_FAILED(rv)) return SendFailedAsyncOpen(rv); nsCOMPtr<nsIPrincipal> requestingPrincipal = mozilla::ipc::PrincipalInfoToPrincipal(aRequestingPrincipalInfo, &rv); if (NS_FAILED(rv)) { return SendFailedAsyncOpen(rv); } + nsCOMPtr<nsIPrincipal> triggeringPrincipal = + mozilla::ipc::PrincipalInfoToPrincipal(aTriggeringPrincipalInfo, &rv); + if (NS_FAILED(rv)) { + return SendFailedAsyncOpen(rv); + } bool appOffline = false; uint32_t appId = GetAppId(); if (appId != NECKO_UNKNOWN_APP_ID && appId != NECKO_NO_APP_ID) { gIOService->IsAppOffline(appId, &appOffline); } uint32_t loadFlags = aLoadFlags; if (appOffline) { loadFlags |= nsICachingChannel::LOAD_ONLY_FROM_CACHE; loadFlags |= nsIRequest::LOAD_FROM_CACHE; loadFlags |= nsICachingChannel::LOAD_NO_NETWORK_IO; } nsCOMPtr<nsIChannel> channel; - rv = NS_NewChannel(getter_AddRefs(channel), - uri, - requestingPrincipal, - aSecurityFlags, - aContentPolicyType, - nullptr, // loadGroup - nullptr, // aCallbacks - loadFlags, - ios); + rv = NS_NewChannelWithTriggeringPrincipal(getter_AddRefs(channel), + uri, + requestingPrincipal, + triggeringPrincipal, + aSecurityFlags, + aContentPolicyType, + nullptr, // loadGroup + nullptr, // aCallbacks + loadFlags, + ios); if (NS_FAILED(rv)) return SendFailedAsyncOpen(rv); mChannel = static_cast<nsHttpChannel *>(channel.get()); mChannel->SetTimingEnabled(true); if (mPBOverride != kPBOverride_Unset) { mChannel->SetPrivate(mPBOverride == kPBOverride_Private ? true : false);
--- a/netwerk/protocol/http/HttpChannelParent.h +++ b/netwerk/protocol/http/HttpChannelParent.h @@ -105,16 +105,17 @@ protected: const bool& doResumeAt, const uint64_t& startPos, const nsCString& entityID, const bool& chooseApplicationCache, const nsCString& appCacheClientID, const bool& allowSpdy, const OptionalFileDescriptorSet& aFds, const ipc::PrincipalInfo& aRequestingPrincipalInfo, + const ipc::PrincipalInfo& aTriggeringPrincipalInfo, const uint32_t& aSecurityFlags, const uint32_t& aContentPolicyType); virtual bool RecvSetPriority(const uint16_t& priority) MOZ_OVERRIDE; virtual bool RecvSetCacheTokenCachedCharset(const nsCString& charset) MOZ_OVERRIDE; virtual bool RecvSuspend() MOZ_OVERRIDE; virtual bool RecvResume() MOZ_OVERRIDE; virtual bool RecvCancel(const nsresult& status) MOZ_OVERRIDE;
--- a/netwerk/protocol/wyciwyg/PWyciwygChannel.ipdl +++ b/netwerk/protocol/wyciwyg/PWyciwygChannel.ipdl @@ -18,16 +18,17 @@ protocol PWyciwygChannel { manager PNecko; parent: __delete__(); Init(URIParams uri, PrincipalInfo requestingPrincipalInfo, + PrincipalInfo triggeringPrincipalInfo, uint32_t securityFlags, uint32_t contentPolicyType); AsyncOpen(URIParams originalURI, uint32_t loadFlags, SerializedLoadContext loadContext, PBrowserOrId browser); AppData(SerializedLoadContext loadContext, PBrowserOrId browser);
--- a/netwerk/protocol/wyciwyg/WyciwygChannelChild.cpp +++ b/netwerk/protocol/wyciwyg/WyciwygChannelChild.cpp @@ -88,35 +88,41 @@ WyciwygChannelChild::Init(nsIURI* uri) mURI = uri; mOriginalURI = uri; URIParams serializedUri; SerializeURI(uri, serializedUri); // propagate loadInfo - mozilla::ipc::PrincipalInfo principalInfo; + mozilla::ipc::PrincipalInfo requestingPrincipalInfo; + mozilla::ipc::PrincipalInfo triggeringPrincipalInfo; uint32_t securityFlags; uint32_t policyType; if (mLoadInfo) { mozilla::ipc::PrincipalToPrincipalInfo(mLoadInfo->LoadingPrincipal(), - &principalInfo); + &requestingPrincipalInfo); + mozilla::ipc::PrincipalToPrincipalInfo(mLoadInfo->TriggeringPrincipal(), + &triggeringPrincipalInfo); securityFlags = mLoadInfo->GetSecurityFlags(); policyType = mLoadInfo->GetContentPolicyType(); } else { // use default values if no loadInfo is provided mozilla::ipc::PrincipalToPrincipalInfo(nsContentUtils::GetSystemPrincipal(), - &principalInfo); + &requestingPrincipalInfo); + mozilla::ipc::PrincipalToPrincipalInfo(nsContentUtils::GetSystemPrincipal(), + &triggeringPrincipalInfo); securityFlags = nsILoadInfo::SEC_NORMAL; policyType = nsIContentPolicy::TYPE_OTHER; } SendInit(serializedUri, - principalInfo, + requestingPrincipalInfo, + triggeringPrincipalInfo, securityFlags, policyType); return NS_OK; } //----------------------------------------------------------------------------- // WyciwygChannelChild::PWyciwygChannelChild //-----------------------------------------------------------------------------
--- a/netwerk/protocol/wyciwyg/WyciwygChannelParent.cpp +++ b/netwerk/protocol/wyciwyg/WyciwygChannelParent.cpp @@ -57,16 +57,17 @@ NS_IMPL_ISUPPORTS(WyciwygChannelParent, //----------------------------------------------------------------------------- // WyciwygChannelParent::PWyciwygChannelParent //----------------------------------------------------------------------------- bool WyciwygChannelParent::RecvInit(const URIParams& aURI, const ipc::PrincipalInfo& aRequestingPrincipalInfo, + const ipc::PrincipalInfo& aTriggeringPrincipalInfo, const uint32_t& aSecurityFlags, const uint32_t& aContentPolicyType) { nsresult rv; nsCOMPtr<nsIURI> uri = DeserializeURI(aURI); if (!uri) return false; @@ -81,26 +82,33 @@ WyciwygChannelParent::RecvInit(const URI return SendCancelEarly(rv); nsCOMPtr<nsIPrincipal> requestingPrincipal = mozilla::ipc::PrincipalInfoToPrincipal(aRequestingPrincipalInfo, &rv); if (NS_FAILED(rv)) { return SendCancelEarly(rv); } + nsCOMPtr<nsIPrincipal> triggeringPrincipal = + mozilla::ipc::PrincipalInfoToPrincipal(aTriggeringPrincipalInfo, &rv); + if (NS_FAILED(rv)) { + return SendCancelEarly(rv); + } + nsCOMPtr<nsIChannel> chan; - rv = NS_NewChannel(getter_AddRefs(chan), - uri, - requestingPrincipal, - aSecurityFlags, - aContentPolicyType, - nullptr, // loadGroup - nullptr, // aCallbacks - nsIRequest::LOAD_NORMAL, - ios); + rv = NS_NewChannelWithTriggeringPrincipal(getter_AddRefs(chan), + uri, + requestingPrincipal, + triggeringPrincipal, + aSecurityFlags, + aContentPolicyType, + nullptr, // loadGroup + nullptr, // aCallbacks + nsIRequest::LOAD_NORMAL, + ios); if (NS_FAILED(rv)) return SendCancelEarly(rv); mChannel = do_QueryInterface(chan, &rv); if (NS_FAILED(rv)) return SendCancelEarly(rv);
--- a/netwerk/protocol/wyciwyg/WyciwygChannelParent.h +++ b/netwerk/protocol/wyciwyg/WyciwygChannelParent.h @@ -32,16 +32,17 @@ public: WyciwygChannelParent(); protected: virtual ~WyciwygChannelParent(); virtual bool RecvInit(const URIParams& uri, const ipc::PrincipalInfo& aRequestingPrincipalInfo, + const ipc::PrincipalInfo& aTriggeringPrincipalInfo, const uint32_t& aSecurityFlags, const uint32_t& aContentPolicyType) MOZ_OVERRIDE; virtual bool RecvAsyncOpen(const URIParams& original, const uint32_t& loadFlags, const IPC::SerializedLoadContext& loadContext, const PBrowserOrId &parent) MOZ_OVERRIDE; virtual bool RecvWriteToCacheEntry(const nsString& data) MOZ_OVERRIDE; virtual bool RecvCloseCacheEntry(const nsresult& reason) MOZ_OVERRIDE;