Chrome网络库的请求处理
->WebUrlLoader::start (或者 clientAndroid->webFrame()->startLoadingResource)
->WebUrlLoaderClient::start
? ? ? ?創建一個網絡線程來處理請求
->thread->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(m_request.get(), &WebRequest::start));
---------------------------------------------------------------------------------
網絡線程
->WebRequest::start->net::URLRequest::start
根據URL類型創建不同的Job,并啟動URLRequestXXXXJob::Start
【Http】
->URLRequestHttpJob::Start
->AddExtraHeaders()
->取Cookie
->創建HttpCacheTransaction
HttpCacheTransaction
? ? ? ->啟動事務HttpCache::Transaction::Start
? ? ? ->循環Doloop() 狀態機
? ? ? ?do {
? ? ? ? ? switch (state) {
? ? ? ? ? ? ? ?DoGetBackend();
? ? ? ? ? ? ? ??? ? ? ?DoGetBackendComplete(rv);
? ? ? ? ? ? ? ?DoSendRequest();
? ? ? ? ? ? ? ??? ? ? ?DoSendRequestComplete(rv);
? ? ? ? ? ? ? ?DoSuccessfulSendRequest();
? ? ? ? ? ? ? ?DoNetworkRead();
? ? ? ? ? ? ? ??? ? ? ?DoNetworkReadComplete(rv);
? ? ? ? ? ? ? ?DoInitEntry();
? ? ? ? ? ? ? ?DoOpenEntry();
? ? ? ? ? ? ? ??? ? ? ?DoOpenEntryComplete(rv);
? ? ? ? ? ? ? ?DoCreateEntry();
? ? ? ? ? ? ? ??? ? ? ?DoCreateEntryComplete(rv);
? ? ? ? ? ? ? ?DoDoomEntry();
? ? ? ? ? ? ? ??? ? ? ?DoDoomEntryComplete(rv);
? ? ? ? ? ? ? ?DoAddToEntry();
? ? ? ? ? ? ? ??? ? ? ?DoAddToEntryComplete(rv);
? ? ? ? ? ? ? ?DoNotifyBeforeSendHeaders();
? ? ? ? ? ? ? ??? ? ? ?DoNotifyBeforeSendHeadersComplete(rv);
? ? ? ? ? ? ? ?DoStartPartialCacheValidation();
? ? ? ? ? ? ? ?DoCompletePartialCacheValidation(rv);
? ? ? ? ? ? ? ?DoUpdateCachedResponse();
? ? ? ? ? ? ? ??? ? ? ?DoUpdateCachedResponseComplete(rv);
? ? ? ? ? ? ? ?DoOverwriteCachedResponse();
? ? ? ? ? ? ? ?DoTruncateCachedData();
? ? ? ? ? ? ? ??? ? ? ?DoTruncateCachedDataComplete(rv);
? ? ? ? ? ? ? ?DoTruncateCachedMetadata();
? ? ? ? ? ? ? ??? ? ? ?DoTruncateCachedMetadataComplete(rv);
? ? ? ? ? ? ? ?DoPartialHeadersReceived();
? ? ? ? ? ? ? ?DoCacheReadResponse();
? ? ? ? ? ? ? ??? ? ? ?DoCacheReadResponseComplete(rv);
? ? ? ? ? ? ? ?DoCacheWriteResponse();
? ? ? ? ? ? ? ?DoCacheWriteTruncatedResponse();
? ? ? ? ? ? ? ??? ? ? ?DoCacheWriteResponseComplete(rv);
? ? ? ? ? ? ? ?DoCacheReadMetadata();
? ? ? ? ? ? ? ??? ? ? ?DoCacheReadMetadataComplete(rv);
? ? ? ? ? ? ? ?DoCacheQueryData();
? ? ? ? ? ? ? ??? ? ? ?DoCacheQueryDataComplete(rv);
? ? ? ? ? ? ? ?DoCacheReadData();
? ? ? ? ? ? ? ??? ? ? ?DoCacheReadDataComplete(rv);
? ? ? ? ? ? ? ?DoCacheWriteData(rv);
? ? ? ? ? ? ? ??? ? ? ?DoCacheWriteDataComplete(rv);
? ? ? ? ? }
? ? ? ? } while?(rv != ERR_IO_PENDING && next_state_ != STATE_NONE);
->創建HttpNeworkTransaction ? (HttpCacheTransaction::DoSendRequest)
HttpNeworkTransaction
? ? ? ->啟動事務HttpNetworkTransaction::Start
? ? ? ->循環DoLoop() 狀態機
? ? ? ?do {
? ? ? ? ? switch (state) {
? ? ? ? ? ? ? ?DoCreateStream();
? ? ? ? ? ? ? ? ? ? ? ?DoCreateStreamComplete(rv);
? ? ? ? ? ? ? ?DoInitStream();
? ? ? ? ? ? ? ? ? ? ? ?DoInitStreamComplete(rv);
? ? ? ? ? ? ? ?DoGenerateProxyAuthToken();
? ? ? ? ? ? ? ? ? ? ? ?DoGenerateProxyAuthTokenComplete(rv);
? ? ? ? ? ? ? ?DoGenerateServerAuthToken();
? ? ? ? ? ? ? ? ? ? ? ?DoGenerateServerAuthTokenComplete(rv);
? ? ? ? ? ? ? ?DoBuildRequest();
? ? ? ? ? ? ? ? ? ? ? ?DoBuildRequestComplete(rv);
? ? ? ? ? ? ? ?DoSendRequest(); ? ? Socket阻塞發送
? ? ? ? ? ? ? ? ? ? ? ?DoSendRequestComplete(rv);
? ? ? ? ? ? ? ?DoReadHeaders(); ? ?Socket阻塞讀取
? ? ? ? ? ? ? ? ? ? ? ?DoReadHeadersComplete(rv);
? ? ? ? ? ? ? ?DoReadBody(); ? ? ? ? Socket阻塞讀取
? ? ? ? ? ? ? ? ? ? ? ?DoReadBodyComplete(rv);
? ? ? ? ? ? ? ?DoDrainBodyForAuthRestart();
? ? ? ? ? ? ? ? ? ? ? ?DoDrainBodyForAuthRestartComplete(rv);
? ? ? ? ? }
? ? ? ? } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);
【Ftp】
總結
以上是生活随笔為你收集整理的Chrome网络库的请求处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML表单提交规则
- 下一篇: WebApp本地存储 (离线缓存策略策略