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

系统 1785 0
 

上一次说到调用函数 OpenURL 来打开网络连接,这仅是网络浏览的开始,现在再来分析它怎么样去下载网页数据,然后再显示出来。

#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   }

 

在这个函数里第一个参数 url 是要打开的网络连接;第二个参数 disposition 是显示位置,比如新添加一个 TAB 显示,还是在原来的 TAB 显示;第三个参数 transition 是下载的类型,比如是重新加载,还是新的连接下载;第四个参数 alternate_nav_url 是候选的连接;第五个参数是选择那一行提示菜单;第六个参数 keyword 是关键字。

 

7 行判断打开的连接是否为空,如果为空就不用打开连接了。

10 行锁定输入框。

11 行通知选中的关键字。

13 行, 14 行关闭当前输入提示,直接在当前窗口显示,清除一些状态和内容。

15 行调控制实例来打开输入的连接。

 

上面的代码在 AutocompleteEdit 类里处理完成了,然后就把打开网络连接放到别的类里来执行,这样可以提高代码的复用性,降低了代码复杂程度。那么这个 controller_ 是何方神圣呢?一看 AutocompleteEdit 类有 Controller 类的定义,肯定就是它了,但再仔细一看它,它只是一个接口类,所有函数都是纯虚函数,真是百思不得其解时,突然想起,既然它是接口类,肯定就有其它类继承它的,那么再通过搜索,一查看,果然找到一个继承它的类 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 类。说明它是一个窗口类,并且是控制类,那么就是说所有接口的功能都是在这个类里实现的,只需要分析这个类里的内容,就知道它是怎么样打开连接的了,下一次再来分析它。

 

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


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

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

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

【本文对您有帮助就好】

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

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