注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

写着玩

Bob

 
 
 

日志

 
 
 
 

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

2009-12-19 21:49:52|  分类: Chrome |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

上一次说到调用函数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类。说明它是一个窗口类,并且是控制类,那么就是说所有接口的功能都是在这个类里实现的,只需要分析这个类里的内容,就知道它是怎么样打开连接的了,下一次再来分析它。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/caimouse/archive/2008/09/24/2974983.aspx

  评论这张
 
阅读(269)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017