
Chrome源码阅读
文章平均质量分 69
zero_lee
这个作者很懒,什么都没留下…
展开
-
[Chrome源码阅读]2个重要的类RenderViewHost和TabStripModel
1. RenderViewHost为中心的相关类2. TabContents/NavigationController/TabStripModel/Browser之间的相互关系原创 2012-08-21 21:20:24 · 2324 阅读 · 1 评论 -
[Chrome源码阅读] Browser相关的类
1. TabStripModel在正式解释Brower类之前,来简要概述下TabStripModel与Browser的关系:Browser类相当于一个controller,而TabStripModel相当于一个model。Browser聚合model(在类初始化时就实例化一个model)。Browser反过来又是TabStripModel的delegate,帮忙做一些TabStri原创 2012-09-05 20:35:46 · 2944 阅读 · 2 评论 -
[Chrome源码阅读] 理解Chrome的smart pointer
Chrome代码中大量运用了智能指针来管理对象的指针,解决对象生命期的问题。这篇文章尝试着理解Chrome中定义的几个智能指针类。1. scoped_ptr/scoped_array/scopred_array_malloc以scopred开头的智能指针类定义在/src/base/scoped_ptr.h文件中。它们有着很明确的设计目标,对new/new[]/malloc出来的对象指针进行原创 2012-08-25 18:46:44 · 3276 阅读 · 0 评论 -
[Chrome源码阅读] MessageLoop类的点点滴滴
一个线程只能有一个MessageLoop被实例化。在BrowserMain函数中(这个函数是browser进程的入口函数),实例化了一个局部变量MessageLoop:MessageLoop main_message_loop ( MessageLoop:: TYPE_UI );之后就可以直接调用的MessageLoop的静态函数current()获取那个messagelo原创 2012-08-24 18:28:02 · 6230 阅读 · 1 评论 -
[Chrome源码阅读] 理解ObserverList类的实现技巧
Chrome中大量用到了Observer模式,比较关键的类是ObserverList。这个类的comment,提到了一个很关键的问题,就是在loop每个observer时,可能有observer尝试着被调用RemoveObserver,从列表中去除,而ObserverList内部是借用std::vector存储所有的observer,这样就会导致一个问题,就是std::vector::eras原创 2012-08-22 12:04:07 · 2313 阅读 · 0 评论 -
[Chrome源码阅读] 理解Browser进程
首先贴出一张来自于Chrome官网上design document上的图。这张图描述了Browser进程中主要几个类之间的相互关系。这张图仅仅列出了Browser进程里的2个线程:UI线程和IPC线程。UI线程是主线程,主要负责整个UI的渲染和消息的响应,包括自身的消息和从Render 进程发过来的消息。IPC线程负责Browser进程与Render进程之间的通信和网络资源消息的过滤。原创 2012-08-23 18:20:45 · 3268 阅读 · 0 评论 -
[Chrome源码阅读]IPC通信初探
RenderWidgetHost继承于IPC::Channel::Listener,所以它必然需要实现Listener::OnMessageReceived纯虚函数。Chrome对这个函数进行了宏的封装,宏的写法有点类似于MFC/wxWidget的事件响应表,不同点在于Chrome里的宏是对函数的实现封装,而MFC/wxWidget里却是对事件表的初始化。IPC::Chan原创 2012-08-23 11:47:54 · 7704 阅读 · 0 评论 -
[Chrome源码阅读]Chrome增加一个New Tab时都干了些什么
当我们通过TAB栏上的"+"标签增加一个新的空TAB时,Chrome内部的代码是怎么样的呢?这篇文章将会介绍它内部的流程。首先用一个callstack截图来看下它的前一段处理流程:TAB旁边的那个“+”(注意不是"New Tab (Ctrl+T)")菜单,在Chrome中是一个button。这个button是放置在TabStrip 视图类中的。TabStrip类捕捉到了这个butt原创 2012-08-22 18:47:54 · 7144 阅读 · 3 评论 -
[Chrome源码阅读]Chrome启动代码流程3
Chrome启动代码流程3 (v2.0版,Windows平台)从URL bar中进行URL的导航过程接着上一篇,不管是接受用户输入的一个有效的URL地址,还是启动Chrome时自动load一个URL地址,the navigation controller都会进入到NavigationController::LoadURL函数。LoadURL最终调用LoadEntry函数。原创 2012-08-15 17:52:22 · 2842 阅读 · 0 评论 -
[Chrome源码阅读]Chrome启动代码流程2
Chrome启动代码流程2 (v2.0版,Windows平台)TAB URL 启动和navigation初始化接着上一篇,关于AddTabWithURL函数。这个函数是在启动Chrome Browser应用程序时调用的,会自动打开一些tabs,用来导航欲加载的URLs。譬如上次运行Chrome时打开并记录的URLs。这个函数定义在Browser类中:TabConte原创 2012-08-15 16:14:41 · 2316 阅读 · 0 评论 -
[Chrome源码阅读]Chrome启动代码流程1
Chrome启动代码流程:(v2.0版,Windows平台)应用程序启动过程:1. WinMain函数为入口点,定义在文件\chrome\app\chrome_exe_main.cc文件中(位于chrome_exe工程项目中)2. WinMain从注册表中找到当前版本的子目录,然后装载chrome.dll文件。如果没找到,则直接从当前exe目录查找dll文件,并装载。原创 2012-08-15 15:20:39 · 5297 阅读 · 1 评论 -
[Chrome源码阅读] 理解Chrome导航网址的流程及render进程启动模式
1. 用tab +键打开一个新的TAB,会做如下事情:2. 当一个TAB地址栏打开过很多网址,或者这个TAB页面打开过很多网址,我们可以用GO BACK键来选择以前导航过的网址:3. 关于chrome的进程模式启动项的解释:默认的进程模型是process-per-site-instance,就是说打开一个网站,然后从这个网站链开的一系列网站都属于原创 2012-08-21 18:30:31 · 2221 阅读 · 0 评论 -
[Chrome源码阅读] 理解Thread类实现
Chrome中的Thread类实现比较有意思,没有复杂的接口,没有很多可调控的参数,譬如线程优先级什么的。线程类Thread定义在base命名空间里,是一个比较通用的基础类。位于文件src\base\thread.h。Thread继承于PlatformThread::Delegate类,除了提供易用的接口之外,比较中要的内容就是实现了线程入口函数,这种继承框架是基于跨平台考虑。跟平台相关的代码原创 2012-08-24 15:18:21 · 3687 阅读 · 0 评论 -
[Chrome源码阅读] Chrome的多进程调试方法
Chrome的多进程模型给DEBUG带来了很大的挑战。这篇文章尝试着解释如何在VS中调试Chrome的子进程。如果你设置代码的断点,默认情况下,VS只会跟踪那些在主进程Browser代码中的那些断点。VS提供了"Attach To Process"的方法。比如当Render Process启动之后,可以用菜单"Debug"=>"Attach To Process"选项,选择那个新产生的进程,然原创 2012-08-27 22:35:14 · 3856 阅读 · 1 评论