惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 步孤天

程序员去新加坡打工的杂事记录 基于Bert的中文评价情感分析 (转载)DeepSeek+LoRA+FastAPI-微调大模型并暴露接口给后端调用 用YOLOv5截取出短剧的人物 Chromium源码分析五:写一个利用ipc+protobuf通信的demo - 步孤天 Chromium源码分析四:RunLoop、Bind、scoped_refptr Chromium源码分析三:Chromium中用到的设计模式 Chromium源码分析二:LifeofaPixel.pdf 交叉编译valgrind在嵌入式设备上调试程序 gerrit 反向代理从 apache 换成 nginx 之后项目页报错“The page you requested was not found, or you do not have permission to view this page” golang实现一个简单的文件浏览下载功能代码示例 六十花甲子纳音表中的五行是怎么算出来的 df查看30GB的磁盘满了而du -sh查看磁盘占用只有6GB centos7+mariadb安装在线评判系统 如何去掉Linux vim文本中的^M 如何从超大(10G)sql语句文本中分离出需要的部分 golang如何打印变量类型,golang list如何把元素转换为可用类型 数据库文件导入报错"MySQL server has gone away" 如何在Linux上用tshark命令把抓包中follow的二进制流保存成文件
Chromium源码分析一:基础知识
步孤天 · 2024-11-15 · via 博客园 - 步孤天

我的衣食父母基于Chromium实现小程序功能,现在已经开发维护代码一年多了,抽时间对公开的知识做个笔记总结。
本文内容源于《WebKit技术内幕》

Webkit、chromium、Google chrome

WebKit是一个开源的浏览器引擎,包含了两个主要组件:WebCore(负责渲染 HTML 和 XML 文档)和 JavaScriptCore(负责执行 JavaScript 代码)。WebKit 被设计为一个可嵌入的框架,可以被各种应用程序使用,而不局限于浏览器。
它最初是由 KDE 项目的一部分演化而来,主要由苹果公司在 Safari 浏览器中进行开发和改进。

Chromium 是一个开源的浏览器项目,由 Google 发起和维护。它不仅仅是一个浏览器引擎,而是一个完整的浏览器框架,包括了浏览器界面、扩展程序支持、安全性特性等。Chromium 的核心部分使用了 WebKit 作为其渲染引擎,但随着时间的推移,Google 开始对 WebKit 进行了大量的修改和扩展,最终在 2013 年宣布将 WebKit 的渲染引擎部分分离出来,形成了 Blink 渲染引擎。

Chromium 和 Google Chrome(通常简称 Chrome)都是由 Google 开发的基于 Chromium 开源项目的网络浏览器,但 Google 在 Chromium 的基础上加入了一些专有组件和功能,使其成为一个闭源软件。尽管大部分代码仍然是开放的,但某些部分(如数字签名证书、部分多媒体解码器等)是闭源的。

各模块结构图

Chromium各模块结构
Chromium模块结构图

Blink:渲染引擎
V8 JavaScript引擎:用来解析和执行js代码的。
沙箱模型:三大特点:进程隔离、权限限制、安全策略。Linux中的沙箱是依赖于内核的,chromium中的沙箱是应用层实现的。
CC(Chromium Compositor): Chromium 的合成器模块,它负责将多个图层(cc::Layer)组合成最终的画面,进行高效的图形渲染和动画处理。
IPC:负责IPC通信,chromium的各个进程之间也是通过ipc进行通信的。同时,也可以和外部通信,比如播放音视频什么的,打开内置页面什么的。就可以自己在系统里实现个适配器通过IPC跟chromium进行通信,来控制chromium的行为。
Content Shell:不负责任的说,相当于C语言中的main函数的入口。开几个进程,进程的初始化参数都是在这里处理的。我所在的某公司通过修改这部分代码调用自定义的一些模块,实现了小程序的功能。在Android系统上,Content Shell的作用更大,这是因为同它并排的左侧的“Chromium浏览器”部分的代码根本就没有开源,这直接导致开发者只能依赖Content Shell。

进程模型

Chromium进程模型

1.Browser进程收到用户的请求,首先由UI线程处理,而且将相应的任务转给IO线程,它随即将该任务传递给Renderer进程。
2.Renderer进程的IO线程经过简单解释后交给渲染线程。渲染线程接受请求,加载网页并渲染网页,这其中可能需要Browser进程获取资源和需要GPU进程来帮助渲染。最后Renderer进程将结果由IO线程传递给Browser进程。
3.最后,Browser进程接收到结果并将结果绘制出来。

代码结构

Chromium源码结构
Chromium源码结构
Chromium中src/content部分的源码结构