NS_IMETHODIMP WyciwygChannelParent::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext) { LOG(("WyciwygChannelParent::OnStartRequest [this=%x]\n", this)); nsresult rv; nsCOMPtr<nsIWyciwygChannel> chan = do_QueryInterface(aRequest, &rv); NS_ENSURE_SUCCESS(rv, rv); nsresult status; chan->GetStatus(&status); PRInt32 contentLength = -1; chan->GetContentLength(&contentLength); PRInt32 charsetSource = kCharsetUninitialized; nsCAutoString charset; chan->GetCharsetAndSource(&charsetSource, charset); nsCOMPtr<nsISupports> securityInfo; chan->GetSecurityInfo(getter_AddRefs(securityInfo)); nsCString secInfoStr; if (securityInfo) { nsCOMPtr<nsISerializable> serializable = do_QueryInterface(securityInfo); if (serializable) NS_SerializeToString(serializable, secInfoStr); else { NS_ERROR("Can't serialize security info"); return NS_ERROR_UNEXPECTED; } } if (mIPCClosed || !SendOnStartRequest(status, contentLength, charsetSource, charset, secInfoStr)) { return NS_ERROR_UNEXPECTED; } return NS_OK; }
NS_IMETHODIMP PSMContentDownloaderChild::OnStartRequest(nsIRequest* request, nsISupports* context) { nsCOMPtr<nsIDivertableChannel> divertable = do_QueryInterface(request); if (divertable) { mozilla::net::ChannelDiverterChild* diverter = nullptr; nsresult rv = divertable->DivertToParent(&diverter); if (NS_FAILED(rv)) { return rv; } MOZ_ASSERT(diverter); return SendDivertToParentUsing(diverter) ? NS_OK : NS_ERROR_FAILURE; } int64_t contentLength = ComputeContentLength(request); if (contentLength < 0) { return NS_ERROR_FAILURE; } mozilla::unused << SendOnStartRequest(contentLength); return NS_OK; }
NS_IMETHODIMP HttpChannelParent::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext) { LOG(("HttpChannelParent::OnStartRequest [this=%x]\n", this)); nsHttpChannel *chan = static_cast<nsHttpChannel *>(aRequest); nsHttpResponseHead *responseHead = chan->GetResponseHead(); nsHttpRequestHead *requestHead = chan->GetRequestHead(); bool isFromCache = false; chan->IsFromCache(&isFromCache); PRUint32 expirationTime = nsICache::NO_EXPIRATION_TIME; chan->GetCacheTokenExpirationTime(&expirationTime); nsCString cachedCharset; chan->GetCacheTokenCachedCharset(cachedCharset); bool loadedFromApplicationCache; chan->GetLoadedFromApplicationCache(&loadedFromApplicationCache); if (loadedFromApplicationCache) { nsCOMPtr<nsIApplicationCache> appCache; chan->GetApplicationCache(getter_AddRefs(appCache)); nsCString appCacheGroupId; nsCString appCacheClientId; appCache->GetGroupID(appCacheGroupId); appCache->GetClientID(appCacheClientId); if (mIPCClosed || !SendAssociateApplicationCache(appCacheGroupId, appCacheClientId)) { return NS_ERROR_UNEXPECTED; } } nsCOMPtr<nsIEncodedChannel> encodedChannel = do_QueryInterface(aRequest); if (encodedChannel) encodedChannel->SetApplyConversion(PR_FALSE); // Keep the cache entry for future use in RecvSetCacheTokenCachedCharset(). // It could be already released by nsHttpChannel at that time. chan->GetCacheToken(getter_AddRefs(mCacheDescriptor)); nsCString secInfoSerialization; nsCOMPtr<nsISupports> secInfoSupp; chan->GetSecurityInfo(getter_AddRefs(secInfoSupp)); if (secInfoSupp) { mAssociatedContentSecurity = do_QueryInterface(secInfoSupp); nsCOMPtr<nsISerializable> secInfoSer = do_QueryInterface(secInfoSupp); if (secInfoSer) NS_SerializeToString(secInfoSer, secInfoSerialization); } // sync request headers to child, in case they've changed RequestHeaderTuples headers; mHeadersToSyncToChild = &headers; requestHead->Headers().VisitHeaders(this); mHeadersToSyncToChild = 0; nsHttpChannel *httpChan = static_cast<nsHttpChannel *>(mChannel.get()); if (mIPCClosed || !SendOnStartRequest(responseHead ? *responseHead : nsHttpResponseHead(), !!responseHead, headers, isFromCache, mCacheDescriptor ? PR_TRUE : PR_FALSE, expirationTime, cachedCharset, secInfoSerialization, httpChan->GetSelfAddr(), httpChan->GetPeerAddr())) { return NS_ERROR_UNEXPECTED; } return NS_OK; }
NS_IMETHODIMP HttpChannelParent::OnStartRequest(nsIRequest *aRequest, nsISupports *aContext) { LOG(("HttpChannelParent::OnStartRequest [this=%x]\n", this)); nsHttpChannel *chan = static_cast<nsHttpChannel *>(aRequest); nsHttpResponseHead *responseHead = chan->GetResponseHead(); nsHttpRequestHead *requestHead = chan->GetRequestHead(); PRBool isFromCache = false; chan->IsFromCache(&isFromCache); PRUint32 expirationTime = nsICache::NO_EXPIRATION_TIME; chan->GetCacheTokenExpirationTime(&expirationTime); nsCString cachedCharset; chan->GetCacheTokenCachedCharset(cachedCharset); PRBool loadedFromApplicationCache; chan->GetLoadedFromApplicationCache(&loadedFromApplicationCache); if (loadedFromApplicationCache) { nsCOMPtr<nsIApplicationCache> appCache; chan->GetApplicationCache(getter_AddRefs(appCache)); nsCString appCacheGroupId; nsCString appCacheClientId; appCache->GetGroupID(appCacheGroupId); appCache->GetClientID(appCacheClientId); if (mIPCClosed || !SendAssociateApplicationCache(appCacheGroupId, appCacheClientId)) { return NS_ERROR_UNEXPECTED; } } nsCOMPtr<nsIEncodedChannel> encodedChannel = do_QueryInterface(aRequest); if (encodedChannel) encodedChannel->SetApplyConversion(PR_FALSE); // Keep the cache entry for future use in RecvSetCacheTokenCachedCharset(). // It could be already released by nsHttpChannel at that time. chan->GetCacheToken(getter_AddRefs(mCacheDescriptor)); nsCString secInfoSerialization; nsCOMPtr<nsISupports> secInfoSupp; chan->GetSecurityInfo(getter_AddRefs(secInfoSupp)); if (secInfoSupp) { nsCOMPtr<nsISerializable> secInfoSer = do_QueryInterface(secInfoSupp); if (secInfoSer) NS_SerializeToString(secInfoSer, secInfoSerialization); } RequestHeaderTuples headers; nsHttpHeaderArray harray = requestHead->Headers(); for (PRUint32 i = 0; i < harray.Count(); i++) { RequestHeaderTuple* tuple = headers.AppendElement(); tuple->mHeader = harray.Headers()[i].header; tuple->mValue = harray.Headers()[i].value; tuple->mMerge = false; } if (mIPCClosed || !SendOnStartRequest(responseHead ? *responseHead : nsHttpResponseHead(), !!responseHead, headers, isFromCache, mCacheDescriptor ? PR_TRUE : PR_FALSE, expirationTime, cachedCharset, secInfoSerialization)) { return NS_ERROR_UNEXPECTED; } return NS_OK; }