【专业技术】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 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

Redis从单机到集群,一步步教你环境部署以及使用

Redis作为缓存系统来说还是很有价值的,在大数据方向里,也是需要有缓存系统的。一般可以考虑tachyon或者redis,由于redis安装以及使用更简单,所...

4046
来自专栏北京马哥教育

Python 官方推荐的一款打包工具

原文链接:https://robots.thoughtbot.com/how-to-manage-your-python-projects-with-pipen...

3155
来自专栏FreeBuf

通过SSTI漏洞获取服务器远程Shell

本文我将为大家演示,如何利用服务器端模板注入(SSTI)漏洞,来获取应用托管服务器上的shell。

2132
来自专栏bdcn

Flask学习笔记-使用PyCharm 顶

不得不PyCharm确实是开发Python优秀IDE,用于开发Flask更是没说的。

1095
来自专栏黑白安全

8种DOS命令

  它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:...

1652
来自专栏王亮的专栏

基于腾讯云大数据套件 TBDS 的 flume 异常问题排查过程

长期运营中发现部署了 flume 集群的磁盘满,经过排查发现 flume 的日志目录导致。这里记录下来我的具体排查过程及解决方案。

3K3
来自专栏Sorrower的专栏

详尽! Win10安装Java8+Tomcat9!

Java也好, Tomcat也好, 都是很实用的啦, 早点掌握还是有必要的. 喜欢记得点赞哦, 有意见或者建议评论区哦, 当然暗中关注我也是可以的.

2133
来自专栏企鹅号快讯

如何搭建Nginx服务器做到负载均衡?

小白,这是一篇关于:使用tomcat和Nginx进行配合做负载均衡和静态与动态资源分配的文章,春招前学一下~ 好的,大佬! 1.什么是Nginx? Nginx也...

2645
来自专栏WD学习记录

Linux学习笔记(1)

计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。操作系统接管硬件后,首先读入/boot目录下的文件。

1581
来自专栏智能合约

依赖注入和控制反转是什么?

6344

扫码关注云+社区