diff --git a/tools/docs/docs/contribute/mozilla_source_code_directory_structure.rst b/tools/docs/docs/contribute/mozilla_source_code_directory_structure.rst new file mode 100644 index 000000000000..9871e4423056 --- /dev/null +++ b/tools/docs/docs/contribute/mozilla_source_code_directory_structure.rst @@ -0,0 +1,869 @@ +Mozilla Source Code Directory Structure +--------------------------------------- + +The code for all projects in the Mozilla family (such +as `Firefox `__ , `Thunderbird `__ , `etc. `__) +is combined into a single source tree. The tree contains the source code +as well as the code required to build each project on supported +platforms (Linux, Windows, macOS, etc). This article provides an +overview of what the various directories contain. + +To simply take a look at the Mozilla source code, you do not need to +download it. You can look at the source directly with your web browser +using DXR (start at https://dxr.mozilla.org/mozilla-central/source/ for +the complete mozilla source code of branch HEAD). + +In order to modify the source, you have to acquire it either by +downloading a +`snapshot `__ +of the sources or by `checking out the current sources from +Mercurial `__. + +This document describes the directory structure that can be pulled by +``client.mk`` -- i.e., directories that are used by at least some of the +Mozilla project's client products. There are other directories in the +Mozilla CVS repository, such as those for Web tools and those for the +Classic codebase. + +See `source code directories +overview `__ for a +somewhat different (older) version of the same information. Also see the +`more detailed overview of the pieces of +Gecko `__. + +.cargo +------ + +Configuration files for the `Cargo package +manager `__. + +.vscode +------- + +Configuration files used by the `Visual Studio Code +IDE `__ when working in the +mozilla-central tree. + +accessible +---------- + +Files for accessibility (i.e., MSAA (Microsoft Active Accessibility), +ATK (Accessibility Toolkit, used by GTK+ 2) support files). See +`Accessibility `__. + + +browser +------- + +Contains the front end code (in XUL, Javascript, XBL, and C++) for the +Firefox browser. Many of these files started off as a copy of files in +`xpfe `__/. + +browser/extensions +------------------ + +Contains `PDF.js `__ and +`Shumway `__ built-in extensions. + +browser/themes +-------------- + +Contains images and CSS files to skin the browser for each OS (Linux, +Mac and Windows) + +build +----- + +Miscellaneous files used by the build process. See also +`config `__/. + +caps +---- + +Capability-based web page security management. It contains C++ interfaces +and code for determining the capabilities of content based on the +security settings or certificates (e.g., VeriSign). See \ `Component +Security `__\ . + +chrome +------ + +Chrome registry (See +`here `__) +used with `toolkit <#toolkit>`__/. These files were originally copies of +files in `rdf/chrome/` (SeaMonkey still uses these). + +config +------ + +More files used by the build process, common includes for the makefiles, +etc. + +db +-- + +Container for database-accessing modules. + + +db/sqlite3 +---------- + +The SQLite database, used by `storage `__. + + +devtools +-------- + +The `Firefox Developer Tools `__ server and client components. + +docshell +-------- + +Implementation of the docshell, the main object managing things related +to a document window. Each frame has its own docshell. It contains +methods for loading URIs, managing URI content listeners, etc. It is the +outermost layer of the embedding API used to embed a Gecko browser into +an application. + +dom +--- + +- `IDL definitions `__ of the interfaces defined by + the DOM specifications and Mozilla extensions to those interfaces + (implementations of these interfaces are primarily, but not + completely, in `content `__). +- The parts of the connection between JavaScript and the + implementations of DOM objects that are specific both to JavaScript + and to the DOM. +- Implementations of a few of the core "DOM Level 0" objects, such as + `window `__ , `window.navigator `__, `window.location `__, etc. + +editor +------ + +The editor directory contains C++ interfaces, C++ code, and +XUL/Javascript for the embeddable editor component, which is used for +the HTML Editor("Composer"), for plain and HTML mail composition, and +for text fields and text areas throughout the product. The editor is +designed like a "browser window with editing features": it adds some +special classes for editing text and managing transaction undo/redo, but +reuses browser code for nearly everything else. + +Contains: + +- The backend for HTML and text editing. This is not only used for the + mail composer and the page editor composer, but also for `rich text + editing inside + webpages `__. + Textarea and input fields are using such an editor as well (in the + plaintext variant). See `Mozilla + Editor `__. +- The frontend for the HTML editor that is part of SeaMonkey. + +embedding +--------- + +This directory contains IDL, headers, and support files needed in order +to embed Gecko in applications. + +See also: `Embedding Mozilla `__. + +extensions +---------- + +Contains several extensions to mozilla, which can be enabled at +compile-time using the ``--enable-extensions`` configure argument. + +Note that some of these are now built specially and not using the +``--enable-extensions`` option. For example, disabling xmlextras is done +using ``--disable-xmlextras``. + + +extensions/auth +--------------- + +Implementation of the negotiate auth method for HTTP and other +protocols. Has code for SSPI, GSSAPI, etc. See `Integrated +Authentication `__. + + +extensions/cookie +----------------- + +Permissions backend for cookies, images, etc., as well as the user +interface to these permissions and other cookie features. + +extensions/pref +--------------- + +Preference-related extensions. + +extensions/spellcheck +--------------------- + +Spellchecker for mailnews and composer. + +extensions/universalchardet +--------------------------- + +Detects the character encoding of text. + +gfx +--- + +Contains interfaces that abstract the capabilities of platform specific +graphics toolkits, along with implementations on various platforms. +These interfaces provide methods for things like drawing images, text, +and basic shapes. It also contains basic data structures such as points +and rectangles used here and in other parts of Mozilla. + +It is also the home of the new graphics architecture based on cairo (via +a C++ wrapper called thebes). See +`NewGFXAPIs `__ and +`GFXEvolution `__. + +gradle +------ + +Containing files related to a JVM (Java Virtual Machine) build system. + +hal +--- + +Contains platform specified functions (e.g. obtaining battery status, +sensor information, memory information, Android +alarms/vibrate/notifications/orientation, etc) + +image +----- + +Image rendering library. Contains decoders for the image formats mozilla +supports. + +intl +---- + +Internationalization and localization support. See +`L10n:NewProjects `__. + +intl/chardet +------------ + +Code for "sniffing" the character encoding of Web pages. + +intl/locale +----------- + +Code related to determination of locale information from the operating +environment. + +intl/lwbrk +---------- + +Code related to line breaking and word breaking. + +intl/strres +----------- + +Code related to string resources used for localization. + +intl/uconv +---------- + +Code that converts (both ways: encoders and decoders) between UTF-16 and +many other character encodings. + +intl/unicharutil +---------------- + +Code related to implementation of various algorithms for Unicode text, +such as case conversion. + +ipc +--- + +Container for implementations of IPC (Inter-Process Communication). + +js +-- + +js/src +------ + +The JavaScript engine, also known as +`SpiderMonkey `__. +See also `JavaScript `__. + +js/xpconnect +------------ + +Support code for calling JavaScript code from C++ code and C++ code from +JavaScript code, using XPCOM interfaces. See +`XPConnect `__. + +layout +------ + +Code that implements a tree of rendering objects that describe the types +and locations of the objects that are displayed on the screen (such as +CSS boxes, tables, form controls, XUL boxes, etc.), and code that +manages operations over that rendering tree (such as creating and +destroying it, doing layout, painting, and event handling). See +`documentation `__ and `other +information `__. + +layout/base +----------- + +Code that deals with the rendering tree. + +layout/forms +------------ + +Rendering tree objects for HTML form controls. + +layout/generic +-------------- + +The basic rendering object interface and the rendering tree objects for +basic CSS boxes. + +layout/mathml +------------- + +Rendering tree objects for `MathML `__. + +layout/svg +---------- + +Rendering tree objects for `SVG `__. + +layout/tables +------------- + +Rendering tree objects for CSS/HTML tables. + +layout/xul +---------- + +Additional rendering object interfaces for `XUL `__ and +the rendering tree objects for XUL boxes. + +media +----- + +Contains sources of used media libraries for example *libpng*. + +memory +------ + +Cross-platform wrappers for *memallocs* functions etc. + +mfbt +---- + +Implementations of classes like *WeakPtr*. Multi-platform *assertions* +etc. `More on +MFBT `__ + +mobile +------ + +mobile/android +-------------- + +Firefox for Android + +modules +------- + +Compression/Archiving, math library, font (and font compression), +Preferences Library + +modules/libjar +-------------- + +Code to read zip files, used for reading the .jar files that contain the +files for the mozilla frontend. + +modules/libpref +--------------- + +Library for reading and writing preferences. + +modules/zlib +------------ + +Source code of zlib, used at least in the networking library for +compressed transfers. + +mozglue +------- + +Glue library containing various low-level functionality, including a +dynamic linker for Android, a DLL block list for Windows, etc. + +netwerk +------- + +`Networking library `__, also known as Necko. +Responsible for doing actual transfers from and to servers, as well as +for URI handling and related stuff. + +nsprpub +------- + +Netscape Portable Runtime. Used as an abstraction layer to things like +threads, file I/O, and socket I/O. See `Netscape Portable +Runtime `__. + +nsprpub/lib +----------- + +Mostly unused; might be used on Mac? + +other-licenses +-------------- + +Contains libraries that are not covered by the MPL but are used in some +mozilla code. + +parser +------ + +Group of structures and functions needed to parse files based on +XML/HTML. + +parser/expat +------------ + +Copy of the expat source code, which is the XML parser used by mozilla. + +parser/html +----------- + +The HTML parser (for everything except about:blank). + +parser/htmlparser +----------------- + +The legacy HTML parser that's still used for about:blank. Parts of it +are also used for managing the conversion of the network bytestream into +Unicode in the XML parsing case. + +parser/xml +---------- + +The code for integrating expat (from parser/expat) into Gecko. + +probes +------ + +Files related to dtrace. + +python +------ + +Cross module python code. + +python/mach +----------- + +The code for the `Mach `__ building +tool. + +rdf +--- + +RDF handling APIs. See `RDF `__ and +`RDF `__. Also contains the chrome +registry code used by SeaMonkey, although toolkit apps (such as Firefox +and Thunderbird) use the copy forked into `chrome/` . + +security +-------- + +Contains NSS and PSM, to support cryptographic functions in mozilla +(like S/MIME, SSL, etc). See `Network Security Services +(NSS) `__ and +`Personal Security Manager +(PSM) `__. + +services +-------- + +Firefox accounts and sync (history, preferences, tabs, bookmarks, +telemetry, startup time, which addons are installed, etc). See +`here `__. + +servo +----- + +`Servo `__, the parallel browser engine project. + +startupcache +------------ + +XXX this needs a description. + +storage +------- + +`Storage `__: XPCOM wrapper for sqlite. Wants to +unify storage of all profile-related data. Supersedes mork. See also +`Unified Storage `__. + +taskcluster +----------- + +Scripts and code to automatically build and test Mozilla trees for the +continuous integration and release process. + +testing +------- + +Common testing tools for mozilla codebase projects, test suite +definitions for automated test runs, tests that don't fit anywhere else, +and other fun stuff. + +third_party +----------- + +Vendored dependencies maintained outside of Mozilla. + +toolkit +------- + +The "new toolkit" used by Thunderbird, Firefox, etc. This contains +numerous front-end components shared between applications as well as +most of the XBL-implemented parts of the XUL language (most of which was +originally forked from versions in `xpfe/`). + +toolkit/mozapps/extensions/test/xpinstall +----------------------------------------- + +The installer, which contains code for installing Mozilla and for +installing XPIs/extensions. This directory also contains code needed to +build installer packages. See `XPInstall `__ and +the `XPInstall project +page `__. + +tools +----- + +Some tools which are optionally built during the mozilla build process, +mostly used for debugging. + +uriloader +--------- + +uriloader/base +-------------- + +Content dispatch in Mozilla. Used to load uris and find an appropriate +content listener for the data. Also manages web progress notifications. +See `Document Loading: From Load Start to Finding a +Handler `__ +and `The Life Of An HTML HTTP +Request `__. + + +uriloader/exthandler +-------------------- + +Used to handle content that Mozilla can't handle itself. Responsible for +showing the helper app dialog, and generally for finding information +about helper applications. + +uriloader/prefetch +------------------ + +Service to prefetch documents in order to have them cached for faster +loading. + +view +---- + +View manager. Contains cross-platform code used for painting, scrolling, +event handling, z-ordering, and opacity. Soon to become obsolete, +gradually. + +widget +------ + +A cross-platform API, with implementations on each platform, for dealing +with operating system/environment widgets, i.e., code related to +creation and handling of windows, popups, and other native widgets and +to converting the system's messages related to painting and events into +the messages used by other parts of Mozilla (e.g., `view/` and +`content/`, the latter of which converts many of the +messages to yet another API, the DOM event API). + +xpcom +----- + +`Cross-Platform Component Object Model `__. Also +contains data structures used by the rest of the mozilla code. See also +`XPCOM Project `__. + +xpfe +---- + +XPFE (Cross Platform Front End) is the SeaMonkey frontend. It contains +the XUL files for the browser interface, common files used by the other +parts of the mozilla suite, and the XBL files for the parts of the XUL +language that are implemented in XBL. Much of this code has been copied +to `browser/` and `toolkit/` for use in +Firefox, Thunderbird, etc. + + +xpfe/components +--------------- + +Components used by the Mozilla frontend, as well as implementations of +interfaces that other parts of mozilla expect. + + +Moved/Renamed/Deleted Directories +--------------------------------- + +b2g +--- + +Source code for the Boot2Gecko project used when building +`FirefoxOS `__. + + +content +------- + +The data structures that represent the structure of Web pages (HTML, +SVG, XML documents, elements, text nodes, etc.) These objects contain +the implementation of many DOM interfaces and also implement some +behaviors associated with those objects, such as link handling, form +control behavior, and form submission. + +This directory also contains the code for `XUL `__, +`XBL `__, `XTF `__, +` `__, as well as the code implementing +XSLT and event handling. + + +extensions +---------- + +extensions/content-packs +------------------------ + +Content- and locale-pack switching user interface. + + +extensions/cview +---------------- + +Component viewer, which allows to view the currently registered +components and interfaces. + +extensions/datetime +------------------- + +Support for the datetime protocol. + +extensions/finger +----------------- + +Support for the finger protocol. + +extensions/gnomevfs +------------------- + +Interface to gnome-vfs to allow using all protocols supported by +gnome-vfs inside of mozilla. + +extensions/help +--------------- + +Help viewer and help content. See `Mozilla Help Viewer +Project `__. + +extensions/irc +-------------- + +This is ChatZilla, the IRC (Internet Relay Chat) component. See +`ChatZilla `__. + +extensions/java +--------------- + +XPCOM<->Java bridge ("`JavaXPCOM `__", formerly +known as Javaconnect). + +extensions/layout-debug +----------------------- + +Layout debugger. Intended as replacement for "viewer". Can be used to +run layout regression tests and has support for other layout debugging +features. + +extensions/lightning +-------------------- + +The Lightning project, "an extension to tightly integrate calendar +functionality (scheduling, tasks, etc.) into Thunderbird." See +`Lightning `__. + +extensions/mono +--------------- + +A two-way bridge between the CLR/.NET/Mono/C#/etc. world and XPCOM. + +extensions/p3p +-------------- + +Implementation of W3C's Platform for Privacy Preferences standard. See +`Platform for Privacy Preferences +(P3P) `__. + +extensions/python +------------------- + +Support for implementing XPCOM components in python. See +`PyXPCOM `__. + + +extensions/reporter +------------------- + +An extension to report problems with web pages. Client-side part. See +`Mozilla Reporter `__. + +extension/schema-validation +--------------------------- + +Allows to validate XML trees according to specified XML Schemas. + +extension/spatialnavigation +--------------------------- + +Spatial navigation, navigating between links of a document according to +their on-screen position. See `Spatial +Navigation `__. + +extensions/sql +-------------- + +Support for accessing SQL databases from XUL applications. See `SQL +Support in Mozilla `__. + +extensions/sroaming +------------------- + +Session roaming, i.e. support for storing a profile on a remote server. + + +extensions/transformiix +----------------------- + +XSLT support. XSL Transformations is a language used to transform XML +documents into other XML documents. See `XSL +Transformations `__. + + +extensions/tridentprofile +------------------------- + +Support for importing profiles from MSIE. + + +extensions/typeaheadfind +------------------------ + +Find As You Type allows quick web page navigation when you type a +succession of characters in the body of the displayed page. See `Find As +You +Type `__. + + +extensions/universalchardet +--------------------------- + +Universal character set detector. + + +extensions/venkman +------------------ + +The `JavaScript Debugger `__. + +extensions/wallet +----------------- + +Password and Form Manager. + +extensions/webdav +----------------- + +WebDAV code; exposes special APIs for accessing WebDAV servers. Used by +the Calendar project. + + +extensions/webservices +---------------------- + +Support for Webservices. See `Web +Services `__. + + +extensions/xforms +----------------- + +Code for the XForms extension. See +`XForms `__. + + +extensions/xmlextras +-------------------- + +Several XML-related extensions. See `XML +Extras `__. + + +extensions/xml-rpc +------------------ + +XML Remote Procedure Calls. Unowned these days. See `XML-RPC in +Mozilla `__. + + +extensions/xmlterm +------------------ + +XMLTerm, a terminal implemented using mozilla technology. Only available +on GTK builds. + + +intl +---- + +intl/ctl +-------- + +Code for dealing with Complex Text Layout, related to shaping of south +Asian languages (not built by default, needs ``--enable-ctl``). + +profile +------- + +Code for profile handling, the profile manager backend and frontend. + +xulrunner +--------- + +Code for `XULRunner `__. See +also `XULRunner `__. + + +More documentation about Mozilla Source Code Directory Structure +---------------------------------------------------------------- + +https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Source_Code/Directory_structure