#001 passrefptrresourcehandle::create(const resourcerequest& request,
#002 resourcehandleclient* client,
#003 frame* deprecated,
#004 bool defersloading,
#005 bool shouldcontentsniff,
#006 bool mightdownloadfromhandle)
在這個函式裡呼叫newhandle->start函式來處理,其實它是呼叫下面的函式來工作的:
bool resourcehandle::start(frame* deprecated)
那麼這裡的d例項是什麼呢?可以通過resourcehandle的建構函式來看到它的類,如下:
resourcehandle::resourcehandle(const resourcerequest& request,
resourcehandleclient* client,
bool defersloading,
bool shouldcontentsniff,
bool mightdownloadfromhandle)
#pragma warning(suppress: 4355) // it's okay to pass |this| here!
:d(new resourcehandleinternal(this, request, client))
可以看到d是類resourcehandleinternal的例項,這就是說呼叫d->start函式,其實就是呼叫下面的函式:
#001 bool resourcehandleinternal::start(
#002 resourceloaderbridge::syncloadresponse* sync_load_response)
#159
通過上面的處理,然後就呼叫橋連線成員bridge_來建立訊息。
#160 bool rv = bridge_->start(this);
#161 if (rv) else
#167
#168 return rv;
#169 }
在這裡使用乙個設計模式,叫橋連線模式。函式bridge_->start的**如下:
// writes a footer on the message and sends it
bool ipcresourceloaderbridge::start(peer* peer)
resource_log("starting request for " << url_);
儲存當前接收的連線端點。
peer_ = peer;
生成請求id,以便返回資料時可以找到相應的顯示程序和視窗。
request_id_ = dispatcher_->addpendingrequest(peer_, request_.resource_type,
request_.mixed_content);
找到ipc的訊息傳送物件,然後建立viewhostmsg_requestresource訊息並傳送出去。
ipc::message::sender* sender = dispatcher_->message_sender();
bool ret = false;
if (sender)
ret = sender->send(new viewhostmsg_requestresource(msg_routing_none,
request_id_,
request_));
return ret;}
通過上面漫長的分析,總算搞清楚了這個過程:
谷歌瀏覽器的原始碼分析 8
上一次說到處理wm char訊息,當使用者每鍵入乙個字元時,萬能連線框就會去進行一次查詢的過程,然後把智慧型提示資訊顯示出來。說到autocompleteedit handlekeystroke函式的操作,那麼它為什麼需要凍結這個函式的使用呢?現在就來分析這部份的內容。如下 scopedfreeze...
谷歌瀏覽器的原始碼分析 30
上次說到函式winhttpreaddata 通過上面的函式可以看到,當資料接收完成後,就會呼叫docallback函式處理接收到的資料。docallback函式的 如下 看到這裡又是乙個 函式c run的通知,它是呼叫開始建立這個連線時設定的 物件。如果是http請求,那麼這個請求 函式是物件url...
谷歌瀏覽器的原始碼分析 32
上一次說到在類resourcedispatcher會收到接收http資料訊息,並進一步處理資料。那麼resourcedispatcher類又把接收到的資料發往何處呢?這是需要我們去搞懂它的。通過進一步的跟蹤,會發現在resourcedispatcher onreceiveddata函式呼叫webco...