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

 

现在继续分析浏览器去下载网页的过程,上一次说到需要分析函数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函数。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值