Mozilla ファミリ(Firefox や Thunderbird、その他)に関係するすべてのプロジェクトにおいては、ソースコードがひとつのソースツリーにまとめられています。ツリーにはソースコードのみならず、サポートしているプラットフォーム(Linux や Windows、OS X など)で各プロジェクトをビルドするのに必要なコードも含まれています。どのディレクトリにどのファイルが含まれているのか、この記事で概要を説明します。
Mozilla のソースコードを確認するには、コードをダウンロードせずともブラウザで直接閲覧することができます。ブラウザで DXR(https://dxr.mozilla.org/mozilla-central/source/)にアクセスすると、Mozilla 全体にわたって最新版のソースコードを確認できます。
コードを修正したい場合は、 ソースのスナップショットをダウンロードするか、現在のソースを Mercurial からチェックアウトしてください。
このドキュメントでは、client.mk
でプルすることができるディレクトリ構造を説明します。すなわち、Mozilla プロジェクトにおいて何かしらのクライアント製品が利用しているディレクトリです。Mozilla の CVS レポジトリにも他のディレクトリがありますが、Web tools や以前のコードベースに関係するソースコードが管理されています。
情報は古いですが、同じ内容について少し異なるドキュメントを参照したい場合は、ソースコードディレクトリ構造の概要を参考にしてください。また、 Gecko の構成要素に関する詳しい概要も合わせて参照してください。
accessible
アクセシビリティに関係するファイル(MSAA(Microsoft Active Accessibility)や、ATK(GTK+2 が利用する Accessibility Toolkit)がサポートするファイル)が含まれています。 Accessibility も参照してください。
addon-sdk
標準の Web 技術で Firefox アドオンを作成するための Add-on SDK に関係したコードが含まれています。
b2g
Boot2Gecko プロジェクトにおける FirefoxOS のビルドに必要なソースコードが含まれています。
browser
Firefox ブラウザのフロントエンドにあたるコード(言語は XUL や JavaScript、XBL、C++)が含まれています。これらのファイルの多くは、xpfe/ からコピーしてきたファイルに由来しています。
browser/devtools
開発ツール(Scratchpad や Style Editor など)のフロントエンドにあたるコードが含まれています。toolkit/devtools も参照してください。
browser/extensions
ビルトイン拡張の PDF.js と Shumway に関するコードが含まれています。
browser/themes
それぞれの OS(Linux や Mac、Windows)に合わせたブラウザのスキンを構成する、画像や CSS ファイルが含まれています。
build
ビルドプロセスに用いる様々なファイルが含まれています。config/ も参照してください。
caps
Capability に基づく Web ページのセキュリティマネジメントを担当するコードが含まれています。コンテンツの Capability はセキュリティ設定や証明書(VeriSign など)に基づいて決定されますが、これに必要な C++ のインターフェイスとコードが管理されています。詳しくは Component Security を参照してください。
chrome
toolkit/ と一緒に chrome を構成するコードのレジストリです。これらのファイルは rdf/chrome/ からコピーしてきたファイルに由来しています。
config
Makefile その他が参照する共通インクルードファイルなど、ビルドプロセスに必要なファイルが多く含まれています。build/ も参照してください。
content
Web ページ(HTML、SVG、XML ドキュメント、要素、テキストノード、その他)の構造を表現するデータ構造に関係したコードが含まれています。データ構造のオブジェクトには DOM インターフェイスの実装が数多く含まれている上、オブジェクトに関連する動作(リンクの処理やフォームコントロールの動作、フォームの送信など)も同時に実装されています。
このディレクトリには、XUL や XBL、XTF、<canvas>、XSLT、そしてエラーハンドリングを実装したコードも含まれています。
db
データベースにアクセスするモジュール群を含んだコンテナです。
db/sqlite3
Storage が利用する SQLite データベースです。
docshell
ドキュメントウィンドウ周辺を管理する主要なオブジェクト docshell を実装したコードが含まれています。各フレームは自分自身の docshell を持っています。docshell に含まれるメソッドには、URI の読み込みや URI コンテンツリスナの管理などを行うものがあります。アプリケーションに組み込んだ Gecko の API に関して、最も外側のレイヤーを docshell は担当します。webshell/ も参照してください。
dom
- DOM 仕様書で定義されたインターフェイスの IDL 定義 や、そのインターフェイスに対する Mozilla 拡張のコードが含まれています(インターフェイスの実装は主にこのディレクトリで管理されていますが、一部は content/ にもあります)。
- JavaScript と DOM の両方に特化された DOM オブジェクトと、JavaScript との間を連携する部分のコードが含まれています(この部分は DOM に特化していません。例えば、XPCOM と JavaScript の間を包括的に橋渡しする部分は js/xpconnect/ にあります)。
window
やwindow.navigator
、window.location
などの "DOM Level 0" オブジェクトのコア部分に関する実装が少し含まれています。
editor
editor ディレクトリには、HTML Editor(Composer)やメール(plain または HTML)の文章作成、プロダクト全体におけるテキストフィールドやテキストエリアが利用する、埋め込み型エディタのコンポーネントに対する C++ のインターフェイスや C++、XUL、JavaScript のコードが含まれています。editor は「エディタ機能を持ったブラウザウィンドウ」となるよう設計されています。すなわち、テキスト処理やアンドゥ・リドゥのためのクラスが追加されているだけで、他の大半の部分はブラウザのコードを再利用しています。
このディレクトリには次のコードが含まれています。
- HTML とテキストの処理におけるバックエンドのコード。このコードはメールやページの作成のみならず、Web ページ内でリッチテキストを作成する 際にも利用されています。(プレインテキストの変形として)テキストエリアや入力フィールドにも利用されています。詳しくは Mozilla Editor を参照してください。
- SeaMonkey に組み込まれている HTML エディタのフロントエンドのコード。
embedding
このディレクトリには、Gecko をアプリケーションへ組み込む際に必要となる IDL やヘッダファイル、サポートファイルが含まれています。
Embedding Mozilla も合わせて参照してください。
extensions
Mozilla 用の拡張がいくつか含まれています。これらはコンパイル時の引数として --enable-extensions
オプションを与えると有効になります。
ただし、拡張機能の中には --enable-extensions
オプションを付けなくても有効になっているものもあります。例として、xmlextras を無効にするには --disable-xmlextras
オプションが必要になります。
extensions/auth
HTTP や他のプロトコルに関して、認証機能を追加してネゴシエーションをするメソッド(SSPI や GSSAPI など)が実装されています。詳しくは Integrated Authentication を参照してください。
extensions/content-packs
ユーザインターフェイスを切り替えるための content-pack と locale-pack が含まれています。
extensions/cookie
Cookie や画像ファイルなどの権限管理を行うバックエンドのコードや、権限管理と他の Cookie に関する機能へのインターフェイスが含まれています。
extensions/cview
その時点で登録されているコンポーネントとインターフェイスを確認する、Component viewer に関するコードが含まれています。
extensions/datetime
datetime プロトコルをサポートするコードが含まれています。
extensions/finger
finger プロトコルをサポートするコードが含まれています。
extensions/gnomevfs
Mozilla 内部の gnome-vfs でサポートされているプロトコルを利用する、gnome-vfs へのインターフェイスが含まれています。
extensions/help
Help Viewer のコードとヘルプのコンテンツが含まれています。詳しくは Mozilla Help Viewer Project を参照してください。
extensions/irc
IRC(Internet Relay Chat)の ChatZilla に関するコードが含まれています。詳しくは ChatZilla を参照してください。
extensions/java
XPCOM と Java をブリッジする JavaXPCOM(以前は Javaconnect)に関するコードが含まれています。java/ ディレクトリ内のコードとは無関係です。
extensions/layout-debug
"viewer.exe" に代わるものとして作られた Layout debugger のコードが含まれています。レイアウトのリグレッションテストや、レイアウトをデバッグを行うことができます。
extensions/lightning
強固に統合されたカレンダー機能(スケジュール管理や Todo 機能)を Thunderbird に組み込む拡張機能の、Lightning プロジェクトに関係するコードが含まれています。詳しくは Lightning を参照してください。
extensions/mono
CLR/.NET/Mono/C# などの領域と XPCOM をブリッジするコードが含まれています。
extensions/p3p
W3C 規格の Platform for Privacy Preferences を実装したコードが含まれています。詳しくは Platform for Privacy Preferences (P3P) を参照してください。
extensions/pref
設定項目に関する拡張機能が含まれています。
extensions/python
Python による XPCOM の実装をサポートするためのコードが含まれています。詳しくは PyXPCOM を参照してください。
extensions/reporter
Web ページに関する問題点を報告するクライアントサイドの拡張機能が含まれています。 詳しくは Mozilla Reporter を参照してください。
extension/schema-validation
明示された XML スキーマに従って XML ツリーをバリデーションするコードが含まれています。
extension/spatialnavigation
画面上での位置に従ってドキュメントのリンク間をナビゲーションする Spatial navigation のコードが含まれています。詳しくは Spatial Navigation を参照してください。
extensions/spellcheck
MailNews や Composer で利用するスペルチェッカーのコードが含まれています。
extensions/sql
XUL アプリケーションから SQL データベースにアクセスするためのコードが含まれています。詳しくは Mozilla における SQL サポート を参照してください。
extensions/sroaming
リモートサーバ上でプロファイルを保存するような、セッションローミングに関するコードが含まれています。
extensions/transformiix
XSLT をサポートするためのコードが含まれています。XSL Transformations とは、XML ドキュメントを別の XML ドキュメントへ変換する言語です。詳しくは XSL Transformations を参照してください。
extensions/tridentprofile
MSIE からプロファイルをインポートするためのコードが含まれています。
extensions/typeaheadfind
表示されているページ上でタイプされた文字列によって Web ページを素早くナビゲーションする、Find As You Type のコードが含まれています。詳しくは Find As You Type を参照してください。
extensions/universalchardet
多言語のキャラクタセットを判別するコードが含まれています。
extensions/venkman
JavaScript Debugger に関するコードが含まれています。
extensions/wallet
パスワードと入力フォームを管理するコードが含まれています。
extensions/webdav
WebDAV サーバにアクセスするための API が含まれています。これらは Calendar プロジェクトで利用されています。
extensions/webservices
Webservices をサポートするためのコードが含まれています。詳しくは Web Services を参照してください。
extensions/xforms
XForms 拡張のコードが含まれています。詳しくは XForms を参照してください。
extensions/xmlextras
XML 関連の拡張機能が含まれています。詳しくは XML Extras を参照してください。
extensions/xml-rpc
XML Remote Procedure Calls のコードが含まれています。 最近では XML-RPC の商標を所有している団体はいません。詳しくは XML-RPC in Mozilla を参照してください。
extensions/xmlterm
Mozilla の技術で実装されたターミナルの XMLTerm に関するコードが含まれています。GTK でビルドした場合のみ利用可能です。
gfx
特定のグラフィックスツールキット向けのプラットフォームで利用可能な機能を、様々なプラットフォームにおける実装によって抽象化したインターフェイスが含まれています。このインターフェイスでは、画像やテキスト、基本的な図形の描画などを行うメソッドが提供されています。 また、点や長方形などといった基本的なデータ構造も含まれており、他の Mozilla 製品からも利用されています。
(C++ ラッパの thebes を経由した)cairo による新しいグラフィックスのアーキテクチャの基盤にもなっています。詳しくは NewGFXAPIs や GFXEvolution を参照してください。
hal
Windows 上でバッテリ残量を取得するような、特定の機能に向けたプラットフォームが含まれています。
image
Mozilla がサポートしている画像フォーマットのデコーダなど、画像をレンダリングするライブラリが含まれています。
intl
多言語で利用可能にするためのコードが含まれています。詳しくは L10n:NewProjects を参照してください。
intl/chardet
Web ページの文字エンコーディングを「スニッフィング」するコードが含まれています。
intl/ctl
南アジアの言語の体裁に関連する Complex Text Layout を処理するコードが含まれています(デフォルトではビルドされないため、有効にするには --enable-ctl
オプションが必要です)。
intl/locale
実行環境からロケールの情報を判断するためのコードが含まれています。
intl/lwbrk
行や単語の改行に関連したコードが含まれています。
intl/strres
ローカライゼーションに利用する文字列のリソースに関するコードが含まれています。
intl/uconv
UTF-16 と他の多くの文字エンコーディングとを変換(エンコードとデコード)するためのコードが含まれています。
intl/unicharutil
大文字・小文字を変換するような、Unicode のテキストに関する様々なアルゴリズムの実装が含まれています。
ipc
IPC(Inter-Process Communication)の実装におけるコンテナとなっています。
js
js/src
JavaScript エンジンの SpiderMonkey に関するコードが含まれています。JavaScript も合わせて参照してください。
js/jsd
JavaScript をデバッグするためのライブラリが含まれています。詳しくは JavaScript Debugging を参照してください。
js/xpconnect
XPCOM のインターフェイスを介して、C++ と JavaScript が互いに他方を呼び出すためのコードが含まれています。詳しくは XPConnect を参照してください。
layout
画面にレンダリングするオブジェクト(CSS や XUL のボックス、テーブル、フォームコントロールなど)の型や位置を表現するツリーの実装や、レンダリングツリーに関する処理(ツリーの作成、削除、配置、描画、イベントハンドリングなど)を管理するコードが含まれています。詳しくは documentation や 他の情報 を参照してください。
layout/base
ツリーのレンダリングを処理するコードが含まれています。
layout/generic
基本的なレンダリングオブジェクトのインターフェイスや、CSS ボックス用のレンダリングツリーオブジェクトが含まれています。
layout/forms
HTML のフォームコントロール用のレンダリングツリーオブジェクトが含まれています。
layout/tables
CSS/HTML のテーブル用のレンダリングツリーオブジェクトが含まれています。
layout/mathml
MathML 用のレンダリングツリーオブジェクトが含まれています。
layout/svg
SVG 用のレンダリングツリーオブジェクトが含まれています。
layout/xul
XUL 用のレンダリングオブジェクトのインターフェイスや、XUL ボックス用のレンダリングツリーオブジェクトが含まれています。
media
libpng といったメディアライブラリに関するコードが含まれています。
memory
クロスプラットフォームで memallocs 機能などを利用するためのラッパが含まれています。
mfbt
マルチプラットフォームで assertions などを利用するための、WeakPtr といったクラスを実装したコードが含まれています。
modules
modules/libjar
zip ファイルを読み込むコードが含まれています。Mozilla のフロントエンドのファイルが入った .jar ファイルを読み込む際に利用されます。
modules/libpref
設定項目を読み書きするためのライブラリが含まれています。
modules/zlib
ネットワーク上の通信を圧縮する際に zlib を使うためのライブラリが含まれています。
mozglue
Android 用の動的リンカや Windows 用の DLL ブロックリストなど、様々な低レベルの機能を備えた Glue ライブラリが含まれています。
netwerk
Necko と呼ばれている ネットワークライブラリ です。URI や関連する処理に加え、サーバに対する実際の通信を担当します。
nsprpub
Netscape Portable Runtime に関するコードが含まれています。スレッドやファイル I/O、ソケット I/O などに対する抽象レイヤとして利用されます。詳しくは Netscape Portable Runtime を参照してください。
nsprpub/lib
ほとんど使われていません。Mac で利用されているかもしれません。
other-licenses
Mozilla のコードからいくつか利用されているけれども、MPL ではカバーしきれていないライブラリが含まれています。
parser
XML/HTML のファイルをパースするのに必要な構造体や機能が含まれています。
parser/expat
Mozilla が XML をパースするのに利用する、expat のソースコードのコピーです。
parser/html
HTML パーサ(about:blank を除く)のコードが含まれています。
parser/xml
expat を(parser/expat から)Gecko に統合するためのコードが含まれています。
parser/htmlparser
レガシーな HTML パーサのコードが含まれており、about:blank には今でも利用されています。一部のコードは、XML のパースにおいてネットワークのバイトストリームを Unicode へ変換する際にも利用されています。
probes
XXX 説明が必要です
profile
プロファイルマネージャのバックエンドとフロントエンドのコードが含まれています。
python
python/mach
ビルドツールの Mach に関するコードが含まれています。
rdf
RDF を処理するための API が含まれています。詳しくは RDF と Resource Description Framework (RDF) を参照してください。 このディレクトリには、SeaMonkey が利用する chrome レジストリのコードも含まれています。なお、ツールキットのアプリケーション(Firefox や Thunderbird など)は chrome/ に fork されたコピーを使用しています。
security
Mozilla における暗号機能(S/MIME や SSL など)をサポートするため、NSS と PSM に関するコードが含まれています。詳しくは Network Security Services (NSS) と Personal Security Manager (PSM) を参照してください。
services
XXX 説明が必要です
startupcache
XXX 説明が必要です
storage
SQLite 用の XPCOM ラッパ Storage に関するコードが含まれています。mork に取って代わり、プロファイルに関するすべてのデータをストレージに集約することを目指しています。詳しくは Unified Storage を参照してください。
testing
Mozilla のプロジェクト向けの共通なテストツールが含まれています。自動テストのための定義セットや、他のディレクトリには属さないテストコード、他にも面白いものが含まれています。
toolkit
Thunderbird や Firefox などが利用する「新しいツールキット」が含まれています。このディレクトリには、アプリケーション間で共有されるフロントエンドのコンポーネントが数多く含まれており、XBL で実装された XUL 言語の大部分も含まれています(これに関しては、xpfe/ から fork してきたコピーにほぼ由来しています)。
toolkit/mozapps/extensions/test/xpinstall
Mozilla や XPIs/extensions のインストールに必要なインストーラが含まれています。このディレクトリには、インストーラのパッケージをビルドするのに必要なコードも含まれています。詳しくは XPInstall を参照してください。
tools
Mozilla のビルドプロセスにおいて、オプションとしてビルドされるツールがいくつか含まれています。これらはデバッグのために利用されることがほとんどです。
uriloader
XXX 説明が必要です
uriloader/base
Mozilla がコンテンツをディスパッチするコードが含まれています。URI をロードし、データに対して適切なコンテンツリスナを決定するために利用されます。Web の進捗状況を通知する際にも利用されています。詳しくは Document Loading - From Load Start to Finding a Handler と The life of an HTML HTTP request を参照してください。
uriloader/exthandler
Mozila が処理できないコンテンツを扱う際に利用するコードが含まれています。ヘルプアプリケーションのダイアログを表示し、ヘルプの情報を検索するために利用されています。
uriloader/prefetch
ドキュメントをキャッシュして読み込みを高速化するために、ドキュメントをプリフェッチするためのコードが含まれています。
view
View manager に関連して、描画やスクロール、イベントハンドリング、z-index の順番、opacity の処理をクロスプラットフォームで行うためのコードが含まれています。徐々に廃止されることになります。
webapprt
XXX 説明が必要です
widget
OS や実行環境依存のウィジェットを扱うため、各プラットフォームにおける実装を備えたクロスプラットフォームの API です。一例として、ウィンドウやポップアップ、他のネイティブなウィジェットを作成したり管理するコードが含まれています。他にも、描画やイベントに関するシステムのメッセージを Mozilla 用のメッセージに変換するコードも含まれています(view/ と content/ がこれを担当しています。後者は、多くのメッセージをさらに別の DOM イベント API 向けに変換しています)。
xpcom
Cross-Platform Component Object Model に関するコードや、他の Mozilla のコードから利用されるデータ構造などが含まれています。
xpfe
SeaMonkey のフロントエンドである XPFE(Cross Platform Front End)のコードが含まれています。このディレクトリでは、ブラウザのインターフェイス用の XUL ファイルや、他の Mozilla 製品から利用される共通ファイル、XBL で実装された XUL 言語のための XBL ファイルが管理されています。これらのコードの多くは、Firefox や Thunderbird などで利用するために browser/ やtoolkit/ にコピーされています。
xpfe/components
Mozilla のフロントエンドに利用されるコンポーネントや、他の Mozilla 製品がアクセスするインターフェイスの実装が含まれています。