現(xiàn)在繼續(xù)分析瀏覽器去下載網(wǎng)頁的過程,上一次說到需要分析函數(shù)
NavigateToPendingEntry
,在這個(gè)函數(shù)又是怎么去處理下載網(wǎng)頁的呢?那就需要分析它的源碼了,如下:
#001
?
void NavigationController::NavigateToPendingEntry(bool reload) {
#002
???
TabContents* from_contents = active_contents_;
#003
?
#004
???
// For session history navigations only the pending_entry_index_ is set.
下面從歷史里找到入口選項(xiàng)。
#005
???
if (!pending_entry_) {
#006
?????
DCHECK(pending_entry_index_ != -1);
#007
?????
pending_entry_ = entries_[pending_entry_index_].get();
#008
???
}
#009
?
復(fù)位當(dāng)前的
SSL
狀態(tài)。
#010
???
// Reset the security states as any SSL error may have been resolved since we
#011
???
// last visited that page.
#012
???
pending_entry_->ssl() = NavigationEntry::SSLStatus();
#013
?
設(shè)置內(nèi)容是否可以顯示。
#014
???
if (from_contents && from_contents->type() != pending_entry_->tab_type())
#015
?????
from_contents->SetActive(false);
#016
?
獲取當(dāng)前的父窗口的句柄。
#017
???
HWND parent =
#018
????
???
from_contents ? GetParent(from_contents->GetContainerHWND()) : 0;
獲取當(dāng)前顯示的
TAB
內(nèi)容對象。
#019
???
TabContents* contents =
#020
???????
GetTabContentsCreateIfNecessary(parent, *pending_entry_);
#021
?
#022
???
contents->SetActive(true);
#023
???
active_contents_ = contents;
#024
?
修改委托對象。
#025
???
if (from_contents && from_contents != contents) {
#026
?????
if (from_contents->delegate())
#027
???????
from_contents->delegate()->ReplaceContents(from_contents, contents);
#028
???
}
#029
?
現(xiàn)在開始打開入口對象里指定的網(wǎng)站。
#030
???
if (!contents->Navigate(*pending_entry_, reload))
#031
?????
DiscardPendingEntry();
#032
?
}
TabContents
類主要描述主顯示區(qū)的內(nèi)容,在第
30
行里就調(diào)用它的函數(shù)
Navigate
去瀏覽網(wǎng)頁的內(nèi)容。
pending_entry_
成員變量是
NavigationEntry
類的對象,它主要保存所有創(chuàng)建瀏覽時(shí)需要的信息,比如網(wǎng)絡(luò)連接地址。
當(dāng)我再跟蹤
contents->Navigate
這行代碼時(shí),它不是運(yùn)行
TabContents
類的
Navigate
,這比較奇怪,但回過頭來再看一下它的聲明如下:
virtual bool Navigate(const NavigationEntry& entry, bool reload);
可見,它前面加了
virtual
關(guān)鍵字,說明它是虛函數(shù),也就是說設(shè)計(jì)時(shí),就讓它是多態(tài)的出現(xiàn),因此在什么情況下運(yùn)行什么樣的函數(shù)內(nèi)容是不定的,對于這些樣的函數(shù),就需要小心一點(diǎn)了,只有實(shí)際運(yùn)行的類才知道它是什么內(nèi)容。由于我是輸入
URL
關(guān)鍵字,所以它調(diào)用的函數(shù)是類
WebContents
里的
Navigate
函數(shù)。下一次再來分析類
WebContents
里的
Navigate
函數(shù)。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
