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

包含 PDF.jsWebCompat 内置扩展。

browser/themes

包含用于为每个操作系统(Linux、Mac 和 Windows)美化浏览器的图像和 CSS 文件。

build

构建过程中使用的各种文件。另请参阅 config

caps

基于功能的网页安全管理。它包含用于根据安全设置或证书(例如 VeriSign)确定内容功能的 C++ 接口和代码。请参阅 组件安全

chrome

toolkit/ 一起使用的 Chrome 注册表。这些文件最初是从 rdf/chrome/ 中复制的文件。

config

构建过程中使用的更多文件,makefile 的常用包含文件等。

devtools

Firefox 开发者工具服务器和客户端组件。请参阅 贡献者用户 文档。

docs

包含文档配置(基于 Sphinx)、索引页面和贡献页面。

docshell

docshell 的实现,它是管理与文档窗口相关事项的主要对象。每个框架都有自己的 docshell。它包含用于加载 URI、管理 URI 内容侦听器等方法。它是用于将 Gecko 浏览器嵌入应用程序的嵌入 API 的最外层。

dom

  • DOM 规范定义的接口以及 Mozilla 对这些接口的扩展的 IDL 定义(这些接口的实现主要(但不完全)在 content 中)。

  • JavaScript 和 DOM 对象实现之间连接的各个部分,这些部分同时特定于 JavaScript 和 DOM。

  • 一些核心“DOM Level 0”对象的实现,例如 windowwindow.navigatorwindow.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 这需要一个描述。

存储

存储:sqlite的XPCOM包装器。希望统一所有与配置文件相关数据的存储。取代了mork。另请参见统一存储

taskcluster

用于自动构建和测试Mozilla树的脚本和代码,用于持续集成和发布流程。

测试

Mozilla代码库项目的通用测试工具、自动化测试运行的测试套件定义、不适合其他任何地方的测试以及其他有趣的内容。

第三方

Mozilla外部维护的供应商依赖项。

工具包

Thunderbird、Firefox等使用的“新工具包”。这包含应用程序之间共享的众多前端组件,以及XUL语言的大多数XBL实现部分(其中大部分最初是从xpfe/中的版本派生出来的)。

工具包/mozapps/扩展/测试/xpinstall

安装程序,其中包含安装Mozilla和安装XPI/扩展的代码。此目录还包含构建安装程序包所需的代码。参见XPInstallXPInstall项目页面

工具

在Mozilla构建过程中可选构建的一些工具。

工具/lint

代码检查声明和配置。参见代码检查文档

uriloader

uriloader/base

Mozilla中的内容分发。用于加载uri并为数据查找合适的内容监听器。还管理Web进度通知。参见文档加载:从加载开始到查找处理程序HTML HTTP请求的生命周期

uriloader/exthandler

用于处理Mozilla无法自行处理的内容。负责显示帮助程序应用程序对话框,以及通常查找有关帮助程序应用程序的信息。

uriloader/prefetch

用于预取文档以将其缓存以便更快加载的服务。

视图

视图管理器。包含用于绘制、滚动、事件处理、z排序和不透明度的跨平台代码。即将过时,逐渐淘汰。

窗口部件

一个跨平台API,在每个平台上都有实现,用于处理操作系统/环境窗口部件,即与创建和处理窗口、弹出窗口和其他本机窗口部件相关的代码,以及将系统相关的绘制和事件消息转换为Mozilla的其他部分(例如view/content/)使用的消息,后者将许多消息转换为另一个API,即DOM事件API。

xpcom

跨平台组件对象模型。还包含Mozilla其余代码使用的数据结构。另请参见XPCOM项目

xpfe

XPFE(跨平台前端)是SeaMonkey前端。它包含浏览器界面的XUL文件、Mozilla套件其他部分使用的通用文件以及XUL语言中以XBL实现的部分的XBL文件。其中许多代码已被复制到browser/toolkit/中,以便在Firefox、Thunderbird等中使用。

xpfe/组件

Mozilla前端使用的组件,以及Mozilla其他部分期望的接口实现。