author | Honza Bambas <honzab.moz@firemni.cz> |
Wed, 05 Jul 2017 11:24:00 -0400 | |
changeset 367542 | ce9c8ba8d34919b72b5a047231145fe91916e041 |
parent 367541 | 2a2a56dbc6de318f55171f89a3bb0270533367fd |
child 367543 | 2286518951ebf60bbad4e118ecb56720adde1637 |
push id | 32137 |
push user | cbook@mozilla.com |
push date | Thu, 06 Jul 2017 09:18:21 +0000 |
treeherder | mozilla-central@018b3829d0a7 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jduell, bz |
bugs | 1368110 |
milestone | 56.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/protocol/http/HttpChannelChild.cpp +++ b/netwerk/protocol/http/HttpChannelChild.cpp @@ -1593,36 +1593,38 @@ HttpChannelChild::SetupRedirect(nsIURI* mRedirectChannelChild = do_QueryInterface(newChannel); newChannel.forget(outChannel); return NS_OK; } void HttpChannelChild::Redirect1Begin(const uint32_t& registrarId, - const URIParams& newUri, + const URIParams& newOriginalURI, const uint32_t& redirectFlags, const nsHttpResponseHead& responseHead, const nsACString& securityInfoSerialization, const uint64_t& channelId) { + nsresult rv; + LOG(("HttpChannelChild::Redirect1Begin [this=%p]\n", this)); - nsCOMPtr<nsIURI> uri = DeserializeURI(newUri); + nsCOMPtr<nsIURI> uri = DeserializeURI(newOriginalURI); if (!securityInfoSerialization.IsEmpty()) { NS_DeserializeObject(securityInfoSerialization, getter_AddRefs(mSecurityInfo)); } nsCOMPtr<nsIChannel> newChannel; - nsresult rv = SetupRedirect(uri, - &responseHead, - redirectFlags, - getter_AddRefs(newChannel)); + rv = SetupRedirect(uri, + &responseHead, + redirectFlags, + getter_AddRefs(newChannel)); if (NS_SUCCEEDED(rv)) { if (mRedirectChannelChild) { // Set the channelId allocated in parent to the child instance nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(mRedirectChannelChild); if (httpChannel) { rv = httpChannel->SetChannelId(channelId); MOZ_ASSERT(NS_SUCCEEDED(rv));
--- a/netwerk/protocol/http/HttpChannelParent.cpp +++ b/netwerk/protocol/http/HttpChannelParent.cpp @@ -1749,39 +1749,46 @@ HttpChannelParent::Delete() //----------------------------------------------------------------------------- NS_IMETHODIMP HttpChannelParent::StartRedirect(uint32_t registrarId, nsIChannel* newChannel, uint32_t redirectFlags, nsIAsyncVerifyRedirectCallback* callback) { + nsresult rv; + LOG(("HttpChannelParent::StartRedirect [this=%p, registrarId=%" PRIu32 " " "newChannel=%p callback=%p]\n", this, registrarId, newChannel, callback)); if (mIPCClosed) return NS_BINDING_ABORTED; - nsCOMPtr<nsIURI> newURI; - newChannel->GetURI(getter_AddRefs(newURI)); + // Sending down the original URI, because that is the URI we have + // to construct the channel from - this is the URI we've been actually + // redirected to. URI of the channel may be an inner channel URI. + // URI of the channel will be reconstructed by the protocol handler + // on the child process, no need to send it then. + nsCOMPtr<nsIURI> newOriginalURI; + newChannel->GetOriginalURI(getter_AddRefs(newOriginalURI)); URIParams uriParams; - SerializeURI(newURI, uriParams); + SerializeURI(newOriginalURI, uriParams); nsCString secInfoSerialization; UpdateAndSerializeSecurityInfo(secInfoSerialization); // If the channel is a HTTP channel, we also want to inform the child // about the parent's channelId attribute, so that both parent and child // share the same ID. Useful for monitoring channel activity in devtools. uint64_t channelId; nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(newChannel); if (httpChannel) { - nsresult rv = httpChannel->GetChannelId(&channelId); + rv = httpChannel->GetChannelId(&channelId); NS_ENSURE_SUCCESS(rv, NS_BINDING_ABORTED); } nsHttpResponseHead *responseHead = mChannel->GetResponseHead(); bool result = false; if (!mIPCClosed) { result = SendRedirect1Begin(registrarId, uriParams, redirectFlags, responseHead ? *responseHead
--- a/netwerk/protocol/http/PHttpChannel.ipdl +++ b/netwerk/protocol/http/PHttpChannel.ipdl @@ -112,17 +112,17 @@ child: // Used to cancel child channel if we hit errors during creating and // AsyncOpen of nsHttpChannel on the parent. async FailedAsyncOpen(nsresult status); // Called to initiate content channel redirect, starts talking to sinks // on the content process and reports result via Redirect2Verify above async Redirect1Begin(uint32_t registrarId, - URIParams newUri, + URIParams newOriginalUri, uint32_t redirectFlags, nsHttpResponseHead responseHead, nsCString securityInfoSerialization, uint64_t channelId, NetAddr oldPeerAddr); // Called if redirect successful so that child can complete setup. async Redirect3Complete();