【专业技术】Chromium浏览器的Content模块设计意图

Content 模块概述

“content”模块放在src \content里面,并使用多进程浏览器沙盒模块来呈现页面所需的核心代码。它包括所有的网络平台功能(如HTML5)和GPU加速。它不包括Chrome浏览器的功能,即扩展/自动填充/拼写等。它的目标是,任何嵌入者或者说使用者应该能够用它来开始建立一个浏览器,然后从中挑选Chrome功能。

动机是什么?

由于Chrome代码的不断壮大,功能不可避免地有时候会放在错误的地方,从而导致分层规则的不规范,以及不应该存在的依赖关系。它已经很难为开发者找出最好的方法,因为这些API和功能都在同一个目录下。为了避免这种情况发生,并增加核心部分的代码,Chrome采用多进程浏览器并对呈现页面的工作明确分工,把核心浏览器代码转移到src\content里面。

content 还是Chrome?

content应该只是呈现页面所需的核心代码。 Chrome功能由content提供的API来过滤IPC,以及得到事件通知。

举一个例子好了,下面是一个Chrome功能列表部分。它们并不在content里面,这意味着content的代码不应该知道他们,content只需要提供通用的API,Chrome的那些功能可以基于这些API来编写:

  • Extensions
  • NaCl
  • ChromeFrame
  • SpellCheck
  • Autofill
  • Sync
  • Prerendering
  • Safe Browsing
  • Translate

体系结构图

上图显示了不同模块的层次结构。一个模块可以直接包括较低的模块代码。模块可以不包括一个比它更高模块的代码。这是通过DEPS规则强制执行实现的。模块可以实现嵌入者比如Chrome的API,使低于自己的模块可以调自己。这些API的实例是WebKit的API和content的API。

Content API

Content API 告诉我们如何基于content来间接调用浏览器。如果可能的话,Chrome功能尝试通过IPC过滤,监听事件来设置钩子。如果没有足够的上下文(比如WebKit的回调),或在回调是一次性的情况下,chromium有一个ContentClient接口,嵌入者(Chrome浏览器)实现好了的。 ContentClient在所有进程里都是可用的,一些进程也有自己的回调API,比如 ContentBrowserClient / ContentRendererClient / ContentPluginClient等等。

部分参考:http://www.chromium.org/developers/content-module

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-08-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python爬虫与算法进阶

翻墙,一个应用就够了

访问谷歌,下载一个免费工具就可以啦。 推荐的一款工具是:Lantern (http://lanterncn.cn/down)下载 。只要你使用以下系统,你...

5119
来自专栏学一学大数据

微信跳一跳秒shua分

1638
来自专栏java思维导图

针对nginx,我们来具体聊聊正向代理与反向代理区别

所谓代理服务器就是位于发起请求的客户端与原始服务器端之间的一台跳板服务器,正向代理可以隐藏客户端,反向代理可以隐藏原始服务器。

901
来自专栏知晓程序

开发 | 网络接口全攻略!这些技巧,让你的小程序永不「失联」

微信为小程序提供了 4 个接口,供小程序访问网络。如果你刚开始接触小程序开发,也许会对小程序网络访问产生不少的疑问。

894
来自专栏FreeBuf

一记组合拳,批量SSH弱密码爆破检测工具分享

SSH登录密码的破解工具已然有许多,但偶尔还是存在不能满足任务需求的情况。比如,批量地对IP列表里的IP地址进行SSH登录破解,现有的工具直接使用起来总觉得不方...

832
来自专栏区块链入门

2018中国区块链行业分析报告-鲸准

本文由鲸准研究院出品,PDF下载地址如下: 链接: https://pan.baidu.com/s/1HRtqLM08ow_eJ47aSavBJQ 密码: f...

471
来自专栏后端之路

网页慢!谁的锅?

背景 出于对google的尊重,许多面试官都喜欢问这样的问题。从你在浏览器键入www.google.com 到页面最终渲染出来 期间究竟发生了什么? 当然现在也...

2535
来自专栏云计算

Kubernetes的服务网格(第4部分):通过流量切换持续部署

除了服务发现,重要指标和TLS之外,linkerd还具有强大的路由语言,称为dtabs,可以用来改变请求的方式 - 甚至是单个请求 - 流经应用程序拓扑。在本文...

3667
来自专栏james大数据架构

微信公众号第三方平台开发概况

  首先要知道为什么要用公众号第三方平台,公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三...

3315
来自专栏智能计算时代

Envoy 部署类型

Envoy可用于各种不同的场景,但是在跨基础架构中的所有主机进行网格部署时,它是最有用的。 本节介绍三种推荐的部署类型,其复杂程度越来越高。 服务到服务 服务到...

4246

扫描关注云+社区