日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 1964 0
?

上一次說到調(diào)用函數(shù) OpenURL 來打開網(wǎng)絡(luò)連接,這僅是網(wǎng)絡(luò)瀏覽的開始,現(xiàn)在再來分析它怎么樣去下載網(wǎng)頁數(shù)據(jù),然后再顯示出來。

#001 ? void AutocompleteEdit::OpenURL(const std::wstring& url,

#002 ???????????????????????????????? WindowOpenDisposition disposition,

#003 ???????????????????????????????? PageTransition::Type transition,

#004 ???????????????????????????????? const std::wstring& alternate_nav_url,

#005 ???????????????????????????????? size_t selected_line,

#006 ???????????????????????????????? const std::wstring& keyword) {

#007 ??? if (url.empty())

#008 ????? return;

#009 ?

#010 ??? ScopedFreeze freeze(this, GetTextObjectModel());

#011 ??? SendOpenNotification(selected_line, keyword);

#012 ?

#013 ??? if (disposition != NEW_BACKGROUND_TAB)

#014 ????? RevertAll(); ? // Revert the box to its unedited state

#015 ??? controller_->OnAutocompleteAccept(url, disposition, transition,

#016 ????????????????????????????????????? alternate_nav_url);

#017 ? }

?

在這個函數(shù)里第一個參數(shù) url 是要打開的網(wǎng)絡(luò)連接;第二個參數(shù) disposition 是顯示位置,比如新添加一個 TAB 顯示,還是在原來的 TAB 顯示;第三個參數(shù) transition 是下載的類型,比如是重新加載,還是新的連接下載;第四個參數(shù) alternate_nav_url 是候選的連接;第五個參數(shù)是選擇那一行提示菜單;第六個參數(shù) keyword 是關(guān)鍵字。

?

7 行判斷打開的連接是否為空,如果為空就不用打開連接了。

10 行鎖定輸入框。

11 行通知選中的關(guān)鍵字。

13 行, 14 行關(guān)閉當前輸入提示,直接在當前窗口顯示,清除一些狀態(tài)和內(nèi)容。

15 行調(diào)控制實例來打開輸入的連接。

?

上面的代碼在 AutocompleteEdit 類里處理完成了,然后就把打開網(wǎng)絡(luò)連接放到別的類里來執(zhí)行,這樣可以提高代碼的復用性,降低了代碼復雜程度。那么這個 controller_ 是何方神圣呢?一看 AutocompleteEdit 類有 Controller 類的定義,肯定就是它了,但再仔細一看它,它只是一個接口類,所有函數(shù)都是純虛函數(shù),真是百思不得其解時,突然想起,既然它是接口類,肯定就有其它類繼承它的,那么再通過搜索,一查看,果然找到一個繼承它的類 LocationBarView ,接著查看它的聲明,如下:

#001 ? /////////////////////////////////////////////////////////////////////////////

#002 ? //

#003 ? // LocationBarView class

#004 ? //

#005 ? // ?? The LocationBarView class is a View subclass that paints the background

#006 ? // ?? of the URL bar strip and contains its content.

#007 ? //

#008 ? /////////////////////////////////////////////////////////////////////////////

#009 ? class LocationBarView : public ChromeViews::View,

#010 ????????????????????????? public AutocompleteEdit::Controller {

#011 ?? public:

?

可見類 LocationBarView 是繼承 ChromeViews::View 類,并且繼承 AutocompleteEdit::Controller 類。說明它是一個窗口類,并且是控制類,那么就是說所有接口的功能都是在這個類里實現(xiàn)的,只需要分析這個類里的內(nèi)容,就知道它是怎么樣打開連接的了,下一次再來分析它。

?

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 沾化县| 三门县| 讷河市| 巴东县| 博湖县| 公安县| 达拉特旗| 民勤县| 榆中县| 会昌县| 英超| 三原县| 沙湾县| 扎赉特旗| 彰武县| 潢川县| 阿克苏市| 仁怀市| 双江| 龙井市| 漠河县| 西吉县| 博野县| 姜堰市| 梅州市| 嘉定区| 进贤县| 藁城市| 冷水江市| 双鸭山市| 六盘水市| 五原县| 于都县| 乌兰县| 墨江| 平遥县| 定兴县| 磐石市| 普兰店市| 四子王旗| 礼泉县|