谷歌浏览器的源码分析(17)

系统 2051 0
 

当输入的网页连接传送给 LoadURL 函数之后,还需要处理很多内容,其实这是由类 NavigationController 来管理的, NavigationController 类主要就是管理加载网页、退回、前进等等控制。

#001   void NavigationController::LoadURL(const GURL& url,

#002                                      PageTransition::Type transition) {

#003     // The user initiated a load, we don't need to reload anymore.

#004     needs_reload_ = false;

#005  

#006     NavigationEntry* entry = CreateNavigationEntry(url, transition);

#007  

#008     LoadEntry(entry);

#009   }

这个函数的第一个参数 url 是网络连接地址,第二个参数 transition 是传送的类型。

4 行代码里设置不是重新加载。

6 行里创建了一个处理网页浏览的入口对象,它是由类 NavigationEntry 管理。

8 行里就调用函数 LoadEntry 来加载网页。

 

LoadEntry 函数更进一步去加载网页的内容,它的代码如下:

#001   void NavigationController::LoadEntry(NavigationEntry* entry) {

#002     // When navigating to a new page, we don't know for sure if we will actually

#003     // end up leaving the current page.   The new page load could for example

#004     // result in a download or a 'no content' response (e.g., a mailto: URL).

#005  

#006     // TODO(pkasting): http://b/1113085 Should this use DiscardPendingEntry()?

 

清除内部变量。

#007     DiscardPendingEntryInternal();

 

保存当前的入口对象。

#008     pending_entry_ = entry;

 

通知服务器有一个浏览器对象加入。

#009     NotificationService::current()->Notify(

#010         NOTIFY_NAV_ENTRY_PENDING,

#011         Source<NavigationController>(this),

#012         NotificationService::NoDetails());

 

下面开始进入加载网页的动作。

#013     NavigateToPendingEntry(false);

#014   }

 

9 行里的类 NotificationService 是使用 OBSERVER 的设计模式来实现一对多的显示关系。这个设计模式也是跟 MVC 与生具来的,显然设计这个浏览器代码的人,已经是对设计模式是专家式的人物了。

 

13 行里调用函数 NavigateToPendingEntry ,下一次再来分析它的功能。

谷歌浏览器的源码分析(17)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论