黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

谷歌瀏覽器的源碼分析(18)

系統(tǒng) 3388 0
?

現(xiàn)在繼續(xù)分析瀏覽器去下載網(wǎng)頁(yè)的過程,上一次說(shuō)到需要分析函數(shù) NavigateToPendingEntry ,在這個(gè)函數(shù)又是怎么去處理下載網(wǎng)頁(yè)的呢?那就需要分析它的源碼了,如下:

#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)容對(duì)象。

#019 ??? TabContents* contents =

#020 ??????? GetTabContentsCreateIfNecessary(parent, *pending_entry_);

#021 ?

#022 ??? contents->SetActive(true);

#023 ??? active_contents_ = contents;

#024 ?

?

修改委托對(duì)象。

#025 ??? if (from_contents && from_contents != contents) {

#026 ????? if (from_contents->delegate())

#027 ??????? from_contents->delegate()->ReplaceContents(from_contents, contents);

#028 ??? }

#029 ?

?

現(xiàn)在開始打開入口對(duì)象里指定的網(wǎng)站。

#030 ??? if (!contents->Navigate(*pending_entry_, reload))

#031 ????? DiscardPendingEntry();

#032 ? }

?

TabContents 類主要描述主顯示區(qū)的內(nèi)容,在第 30 行里就調(diào)用它的函數(shù) Navigate 去瀏覽網(wǎng)頁(yè)的內(nèi)容。 pending_entry_ 成員變量是 NavigationEntry 類的對(duì)象,它主要保存所有創(chuàng)建瀏覽時(shí)需要的信息,比如網(wǎng)絡(luò)連接地址。

?

當(dāng)我再跟蹤 contents->Navigate 這行代碼時(shí),它不是運(yùn)行 TabContents 類的 Navigate ,這比較奇怪,但回過頭來(lái)再看一下它的聲明如下:

virtual bool Navigate(const NavigationEntry& entry, bool reload);

可見,它前面加了 virtual 關(guān)鍵字,說(shuō)明它是虛函數(shù),也就是說(shuō)設(shè)計(jì)時(shí),就讓它是多態(tài)的出現(xiàn),因此在什么情況下運(yùn)行什么樣的函數(shù)內(nèi)容是不定的,對(duì)于這些樣的函數(shù),就需要小心一點(diǎn)了,只有實(shí)際運(yùn)行的類才知道它是什么內(nèi)容。由于我是輸入 URL 關(guān)鍵字,所以它調(diào)用的函數(shù)是類 WebContents 里的 Navigate 函數(shù)。下一次再來(lái)分析類 WebContents 里的 Navigate 函數(shù)。

谷歌瀏覽器的源碼分析(18)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!??!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論