Firefox 源代码目录结构¶
本文概述了各个目录包含的内容。
要简单地查看 Firefox 源代码,您无需下载它。您可以使用 Searchfox 直接在 Web 浏览器中查看源代码(从 https://searchfox.org/mozilla-central/source 开始查看 HEAD 分支的完整 Firefox 源代码)。
为了修改源代码,您必须通过下载 源代码快照 或从 代码库 中检出当前源代码来获取它。
本文档描述了目录结构,即至少 Mozilla 项目的一些客户端产品使用的目录。Mozilla 其他代码库中还有其他目录,例如 Web 工具目录和 Classic 代码库目录。
请参阅 Gecko 各部分的更详细概述。
.cargo¶
Cargo 包管理器 的配置文件。
.vscode¶
在 mozilla-central 代码树中工作时,Visual Studio Code IDE 使用的配置文件。
accessible¶
辅助功能(即 MSAA(Microsoft Active Accessibility)、ATK(Accessibility Toolkit,GTK 使用)支持文件)的文件。请参阅 辅助功能。
browser¶
包含 Firefox 桌面浏览器的前端代码(使用 XUL、Javascript、XBL 和 C++)。许多这些文件最初是从 xpfe 中复制的文件。
browser/extensions¶
browser/themes¶
包含用于为每个操作系统(Linux、Mac 和 Windows)美化浏览器的图像和 CSS 文件。
build¶
构建过程中使用的各种文件。另请参阅 config。
caps¶
基于功能的网页安全管理。它包含用于根据安全设置或证书(例如 VeriSign)确定内容功能的 C++ 接口和代码。请参阅 组件安全。
chrome¶
与 toolkit/ 一起使用的 Chrome 注册表。这些文件最初是从 rdf/chrome/ 中复制的文件。
config¶
构建过程中使用的更多文件,makefile 的常用包含文件等。
devtools¶
docs¶
包含文档配置(基于 Sphinx)、索引页面和贡献页面。
docshell¶
docshell 的实现,它是管理与文档窗口相关事项的主要对象。每个框架都有自己的 docshell。它包含用于加载 URI、管理 URI 内容侦听器等方法。它是用于将 Gecko 浏览器嵌入应用程序的嵌入 API 的最外层。
dom¶
DOM 规范定义的接口以及 Mozilla 对这些接口的扩展的 IDL 定义(这些接口的实现主要(但不完全)在 content 中)。
JavaScript 和 DOM 对象实现之间连接的各个部分,这些部分同时特定于 JavaScript 和 DOM。
一些核心“DOM Level 0”对象的实现,例如 window、window.navigator、window.location 等。
editor¶
editor 目录包含可嵌入编辑器组件的 XUL/Javascript,该组件用于 HTML 编辑器(“Composer”)、纯文本和 HTML 邮件撰写以及整个产品中的文本字段和文本区域。编辑器设计得像一个“具有编辑功能的浏览器窗口”:它添加了一些用于编辑文本和管理事务撤消/重做的特殊类,但在几乎所有其他方面都重用了浏览器代码。
extensions¶
包含对 mozilla 的一些扩展,可以使用 --enable-extensions
配置参数在编译时启用。
请注意,其中一些现在是专门构建的,而不是使用 --enable-extensions
选项。例如,禁用 xmlextras 是通过使用 --disable-xmlextras
来完成的。
extensions/auth¶
HTTP 和其他协议的协商身份验证方法的实现。包含 SSPI、GSSAPI 等的代码。请参阅 集成身份验证。
extensions/pref¶
与首选项相关的扩展。
extensions/spellcheck¶
mailnews 和 composer 的拼写检查器。
extensions/universalchardet¶
检测文本的字符编码。
gfx¶
包含抽象平台特定图形工具包功能的接口,以及在各种平台上的实现。这些接口提供用于绘制图像、文本和基本形状等方法。它还包含此处和 Mozilla 其他部分使用的基本数据结构,例如点和矩形。
gradle¶
包含与 Java 构建系统相关的文件。
hal¶
包含平台指定的函数(例如获取电池状态、传感器信息、内存信息、Android 闹钟/振动/通知/方向等)。
image¶
图像渲染库。包含 Firefox 支持的图像格式的解码器。
intl¶
国际化和本地化支持。请参阅 L10n:NewProjects。
intl/locale¶
与从操作系统环境确定区域设置信息相关的代码。
intl/lwbrk¶
与换行和断字相关的代码。
intl/strres¶
与用于本地化的字符串资源相关的代码。
intl/uconv¶
在 UTF-16 和许多其他字符编码之间进行转换(双向:编码器和解码器)的代码。
intl/unicharutil¶
与实现 Unicode 文本的各种算法(例如大小写转换)相关的代码。
ipc¶
IPC(进程间通信)实现的容器。
js/src¶
JavaScript 引擎,也称为 SpiderMonkey。另请参阅 JavaScript。
js/xpconnect¶
使用 XPCOM 接口从 C++ 代码调用 JavaScript 代码以及从 JavaScript 代码调用 C++ 代码的支持代码。请参阅 XPConnect。
layout¶
实现渲染对象树的代码,这些对象描述在屏幕上显示的对象的类型和位置(例如 CSS 盒子、表格、表单控件、XUL 盒子等),以及管理该渲染树的操作的代码(例如创建和销毁它、执行布局、绘制和事件处理)。请参阅 文档 和 其他信息。
layout/base¶
处理渲染树的代码。
layout/forms¶
HTML 表单控件的渲染树对象。
layout/generic¶
基本渲染对象接口以及基本 CSS 盒子的渲染树对象。
layout/mathml¶
MathML 的渲染树对象。
layout/svg¶
SVG 的渲染树对象。
layout/tables¶
CSS/HTML 表格的渲染树对象。
layout/xul¶
XUL 的其他渲染对象接口以及 XUL 盒子的渲染树对象。
media¶
包含使用的媒体库的源代码,例如 libpng。
内存¶
跨平台的内存分配函数等包装器。
mfbt¶
实现诸如WeakPtr之类的类。多平台断言等。
移动¶
移动/安卓¶
适用于Android的Firefox和Geckoview。
模块¶
压缩/归档、数学库、字体(和字体压缩)、偏好设置库。
模块/libjar¶
用于读取zip文件的代码,用于读取包含Mozilla前端文件的.jar文件。
模块/libpref¶
用于读取和写入偏好设置的库。
模块/zlib¶
zlib的源代码,至少在网络库中用于压缩传输。
mozglue¶
包含各种低级功能的粘合库,包括Android的动态链接器、Windows的DLL阻止列表等。
netwerk¶
网络库,也称为Necko。负责执行与服务器之间的数据实际传输,以及URI处理和相关内容。
nsprpub¶
Netscape可移植运行时。用作线程、文件I/O和套接字I/O等内容的抽象层。参见NSPR。
nsprpub/lib¶
大部分未被使用;可能在Mac上使用?
其他许可证¶
包含不受MPL涵盖但用于某些Firefox代码的库。
解析器¶
基于XML/HTML解析文件所需的一组结构和函数。
解析器/expat¶
expat源代码的副本,它是Mozilla使用的XML解析器。
解析器/html¶
HTML解析器(除了about:blank之外的所有内容)。
解析器/htmlparser¶
用于about:blank的旧版HTML解析器。它的一部分也用于在XML解析情况下管理网络字节流到Unicode的转换。
解析器/xml¶
将expat(来自parser/expat)集成到Gecko的代码。
python¶
跨模块Python代码。
python/mach¶
Mach构建工具的代码。
安全¶
包含NSS和PSM,以支持Mozilla中的加密功能(如S/MIME、SSL等)。参见网络安全服务(NSS)和个人安全管理器(PSM)。
服务¶
Firefox帐户和同步(历史记录、偏好设置、标签页、书签、遥测、启动时间、安装了哪些附加组件等)。参见此处。
servo¶
Servo,并行浏览器引擎项目。
startupcache¶
XXX 这需要一个描述。
存储¶
taskcluster¶
用于自动构建和测试Mozilla树的脚本和代码,用于持续集成和发布流程。
测试¶
Mozilla代码库项目的通用测试工具、自动化测试运行的测试套件定义、不适合其他任何地方的测试以及其他有趣的内容。
第三方¶
Mozilla外部维护的供应商依赖项。
工具包¶
Thunderbird、Firefox等使用的“新工具包”。这包含应用程序之间共享的众多前端组件,以及XUL语言的大多数XBL实现部分(其中大部分最初是从xpfe/中的版本派生出来的)。
工具包/mozapps/扩展/测试/xpinstall¶
安装程序,其中包含安装Mozilla和安装XPI/扩展的代码。此目录还包含构建安装程序包所需的代码。参见XPInstall和XPInstall项目页面。
工具¶
在Mozilla构建过程中可选构建的一些工具。
工具/lint¶
代码检查声明和配置。参见代码检查文档
uriloader¶
uriloader/base¶
Mozilla中的内容分发。用于加载uri并为数据查找合适的内容监听器。还管理Web进度通知。参见文档加载:从加载开始到查找处理程序和HTML HTTP请求的生命周期。
uriloader/exthandler¶
用于处理Mozilla无法自行处理的内容。负责显示帮助程序应用程序对话框,以及通常查找有关帮助程序应用程序的信息。
uriloader/prefetch¶
用于预取文档以将其缓存以便更快加载的服务。
视图¶
视图管理器。包含用于绘制、滚动、事件处理、z排序和不透明度的跨平台代码。即将过时,逐渐淘汰。
窗口部件¶
一个跨平台API,在每个平台上都有实现,用于处理操作系统/环境窗口部件,即与创建和处理窗口、弹出窗口和其他本机窗口部件相关的代码,以及将系统相关的绘制和事件消息转换为Mozilla的其他部分(例如view/和content/)使用的消息,后者将许多消息转换为另一个API,即DOM事件API。
xpcom¶
xpfe¶
XPFE(跨平台前端)是SeaMonkey前端。它包含浏览器界面的XUL文件、Mozilla套件其他部分使用的通用文件以及XUL语言中以XBL实现的部分的XBL文件。其中许多代码已被复制到browser/和toolkit/中,以便在Firefox、Thunderbird等中使用。
xpfe/组件¶
Mozilla前端使用的组件,以及Mozilla其他部分期望的接口实现。