[Chrome源码阅读] Browser相关的类

1. TabStripModel

在正式解释Brower类之前,来简要概述下TabStripModel与Browser的关系:

Browser类相当于一个controller,而TabStripModel相当于一个model。Browser聚合model(在类初始化时就实例化一个model)。Browser反过来又是TabStripModel的delegate,帮忙做一些TabStripModel不能做的事情,譬如UI方面的事情。另外Browser又是TabStripModel的一个观察者。

//  A TabStripModel has one delegate that it relies on to perform certain tasks
//  like creating new TabStripModels (probably hosted in Browser windows) when
//  required. See TabStripDelegate above for more information.
这里提到Browser作为TabStripModel的Delegate,是想让Browser创建一个全新的TabStripModel,这种情况发生在shuffling tab时发生的。

//  A TabStripModel also has N observers (see TabStripModelObserver above),
//  which can be registered via Add/RemoveObserver. An Observer is notified of
//  tab creations, removals, moves, and other interesting events. The
//  TabStrip implements this interface to know when to create new tabs in
//  the View, and the Browser object likewise implements to be able to update
//  its bookkeeping when such events happen.
关于TabStripModel的观察者,这里也提到了,主要是对Add/Remove/Move Tabs会触发观察者做一些后续的事情,譬如TabStrip会做一些UI/View之类的事情。

TabStripModel维护着一个包含TabContent的列表。

2. Browser

我们从UI角度解释Browser与UI类的相互关系。

我们知道BrowserInit类将会实例化一个Browser对象,这个对象此时并没有被任何对象所拥有,直到后面创建Browser相关的UI对象。

请看下面:


当实例化Browser时,Chrome会紧接着实例化一个BrowserView,作为BrowserWindow传给Browser::browser_成员,在实例化BrowserView时,是将Browser自己作为参数传入进去的,也就是说BrowserView必须要有一个Browser来进行初始化,维护着它的生命周期(用scopred_ptr来管理)。通过这样的过程,Browser/BrowserView就建立了紧密的关系。

BrowserView类是一个非常重要的类,代表着Chrome主窗口中的Non-Client的窗口,比如TabStrip,Toolbar,BookMarkbar等,请看下图:


所以BrowserView将会负责产生并布局TabStrip/Toolbar/BookMarkBar/TabContent/DownloadShelf的UI.

实例化BrowserView时,就会实例化BrowserFrame,并把自己传入进去,让BrowseFrame来帮忙来管理自己的生命周期。

  1. BrowserWindow* BrowserWindow::CreateBrowserWindow(Browser* browser) {  
  2.   BrowserView* browser_view = new BrowserView(browser);  
  3.   (new BrowserFrame(browser_view))->Init();  
  4.   return browser_view;  
  5. }  

Browser->window_->Show()函数将会转调用Frame->Show()从而达到整个Frame window的显示。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值