最近抽时间分析了一下chromium的extension机制,总的来说其架构是比较清晰的,但是由于需要与chromium浏览器(或OS)运行时的各个模块交互,实现起来就比较复杂了,主要代码集中分布于如下几个目录中:./extensions/、./chrome/browser/extensions/、./chrome/common/extensions/、./chrome/renderer/extensions/;刚开始入手分析时试图从这几个目录的实现代码中找到分析突破口,走了不少弯路,总是剪不断,理还乱,几个回合下来还是一头雾水,最后尝试从chromium浏览器启动流程上跟下来,结果豁然开朗。接下来总结下extension系统的初始化过程(主要建立起依赖关系图)、extensionservice的创建及初始化、WebStore应用商店app的安装、WebRequest回调的实现这几个模块的分析情况。
首先可以将浏览器主线程的初始化作为extension系统的初始化入口,此处从BrowserMainRunnerImpl::Initialize方法开始进行分析,为便于进行描述,大致可以分为如下两个阶段:
阶段一:预初始化(从BrowserMainRunnerImpl::Initialize到ChromeBrowserMainExtraPartsProfiles::EnsureBrowserContextKeyedServiceFactoriesBuilt),关键流程如图所示:
注释1:在上图中ChromeContentBrowserClient::CreateBrowserMainParts方法中根据具体的运行平台创建对应的ChromeBrowserMainParts实现对象main_parts(此处以基类代替):
ChromeBrowserMainParts* main_parts;
// Construct the Main browser p

最低0.47元/天 解锁文章
1224

被折叠的 条评论
为什么被折叠?



