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

原创 2008年10月02日 10:15:00
 

现在继续分析浏览器去下载网页的过程,上一次说到需要分析函数NavigateToPendingEntry,在这个函数又是怎么去处理下载网页的呢?那就需要分析它的源码了,如下:

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

 

下面从历史里找到入口选项。

#005    if (!pending_entry_) {

#006      DCHECK(pending_entry_index_ != -1);

#007      pending_entry_ = entries_[pending_entry_index_].get();

#008    }

#009 

 

复位当前的SSL状态。

#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 

 

设置内容是否可以显示。

#014    if (from_contents && from_contents->type() != pending_entry_->tab_type())

#015      from_contents->SetActive(false);

#016 

 

获取当前的父窗口的句柄。

#017    HWND parent =

#018        from_contents ? GetParent(from_contents->GetContainerHWND()) : 0;

 

获取当前显示的TAB内容对象。

#019    TabContents* contents =

#020        GetTabContentsCreateIfNecessary(parent, *pending_entry_);

#021 

#022    contents->SetActive(true);

#023    active_contents_ = contents;

#024 

 

修改委托对象。

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

#026      if (from_contents->delegate())

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

#028    }

#029 

 

现在开始打开入口对象里指定的网站。

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

#031      DiscardPendingEntry();

#032  }

 

TabContents类主要描述主显示区的内容,在第30行里就调用它的函数Navigate去浏览网页的内容。pending_entry_成员变量是NavigationEntry类的对象,它主要保存所有创建浏览时需要的信息,比如网络连接地址。

 

当我再跟踪contents->Navigate这行代码时,它不是运行TabContents类的Navigate,这比较奇怪,但回过头来再看一下它的声明如下:

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

可见,它前面加了virtual关键字,说明它是虚函数,也就是说设计时,就让它是多态的出现,因此在什么情况下运行什么样的函数内容是不定的,对于这些样的函数,就需要小心一点了,只有实际运行的类才知道它是什么内容。由于我是输入URL关键字,所以它调用的函数是类WebContents里的Navigate函数。下一次再来分析类WebContents里的Navigate函数。

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

随着网络技术的发展,越来越多应用都已经离不开网络,特别像人类大脑一样的知识库的搜索引擎,更加是离不开功能强大的云计算。不过,即便云计算非常强大,但它还不能直接地把结果呈现给用户,这样就需要一个客户端来...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月27日 12:36
  • 4026

谷歌chrome浏览器源码分析

转自CSDN 前言: 1、之所以整理此文,有俩个目的:一是为了供自己学习研究之用;二是为了备份,以作日后反复研究。除此之外,无它。 2、此文的形式其实是有点俩不像的,既不是个人首创即原创...
  • orichisonic
  • orichisonic
  • 2016年01月21日 15:24
  • 3558

关于使用google浏览器调试html和JavaScript代码

首先,要知道哪些页面是可以调试的: 带有后缀的页面是可以调试的,没有后缀的页面,是服务器的页面,不可以调试代码. 如下图,带有猴子.htm的网页是可以调试的. 而像下面这个页面是不可以调试...
  • u010523770
  • u010523770
  • 2016年05月13日 18:54
  • 2534

谷歌浏览器源码分析

  • 2012年11月28日 15:08
  • 873KB
  • 下载

Chrome谷歌浏览器源码分析

  • 2017年03月22日 11:29
  • 777KB
  • 下载

谷歌chrome浏览器源码分析

转自CSDN 前言: 1、之所以整理此文,有俩个目的:一是为了供自己学习研究之用;二是为了备份,以作日后反复研究。除此之外,无它。 2、此文的形式其实是有点俩不像的,既不是个人首创即原创...
  • orichisonic
  • orichisonic
  • 2016年01月21日 15:24
  • 3558

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

上一次说到需要调用这个OpenURLFromTab函数,那么这个函数是做什么的呢?从名称上可能猜到它是打开网页,但是是从目前TAB页里打开呢?还是新建一个?或者使用每个TAB页一个进程呢?这些疑惑,只...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月27日 12:43
  • 683

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

上一次说到类RenderThread和类RenderView把消息处理,那么这两个类是怎么样处理消息的呢?又是怎么样处理浏览的消息呢?现在就带着这两个问题去分析它的源码,理解它处理消息的方法。类Ren...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月27日 12:46
  • 686

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

上一次介绍到怎么样从其它地方返回搜索到的超级连接,现在就来分析一下使用搜索引擎去查找的类SearchProvider,它是通过搜索引擎来查找出来的,在这里是通过GOOGLE搜索引擎来查找出来。它的声明...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月27日 12:41
  • 665

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

随着网络技术的发展,越来越多应用都已经离不开网络,特别像人类大脑一样的知识库的搜索引擎,更加是离不开功能强大的云计算。不过,即便云计算非常强大,但它还不能直接地把结果呈现给用户,这样就需要一个客户端来...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年04月27日 12:36
  • 4026
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:谷歌浏览器的源码分析(18)
举报原因:
原因补充:

(最多只允许输入30个字)