コンポーネントの登録と互換性
Ben Goodger - 2004/07/20
補足: コンポーネントの登録と互換性
この項目はさほど重要なものではなく、コンポーネントに関して拡張機能システムがどのように機能しているのかということについての洞察を提供することを目的としたものに過ぎません。
前のドキュメント で説明したように、Firefox は、拡張機能の互換性判別を設定するために app.extensions.version を使っており、インストール時やアップグレード時の互換性チェックによって判別されます。これは、全体的に見て、拡張機能のバージョン管理を行うのに十分な仕組みです。拡張機能は通常、リリースと次のリリースの間にほぼ毎日生成されるナイトリービルドでも機能し、ナイトリービルドのユーザもそれらを使いたいと考えているからです。また、何か問題があった場合でも、たいていのナイトリービルドのユーザは、問題を解明し、拡張機能を削除するだけの十分な知識を持っています (つまり言い換えれば、ナイトリービルドを使っている人は、拡張機能の互換性問題に対応するだけの心構えがあり、何か起きても適切に処理できるはずです)。
しかし、普段実際に変更が加えられているのは、Mozilla のコアコードに含まれるコンポーネントやインターフェイスであり、変更は毎日のように行われています。これらのコンポーネントやインターフェイスに関する情報は「コンポーネントレジストリ」ファイル (compreg.dat と xpti.dat) に保存されています。あるビルドバージョンによって生成されたこれらのファイルは、別のバージョンによって生成されたファイルとは 互換性がない 可能性が高いと言えます。Firefox 0.9 の時点では、コンポーネントレジストリはユーザのプロファイルディレクトリに保存されています (Firefox の組み込みコンポーネント以外に、プロファイルにインストールされている拡張機能に関するコンポーネントの登録情報が含まれているためです)。以前、コンポーネントレジストリが主にアプリケーションディレクトリにあったときは、新しいバージョンのアプリケーションをインストールすると、たいていの場合そのファイルも削除されていました。しかし、インストーラはプロファイルディレクトリには一切関知しないため、compreg.dat と xpti.dat の互換性を判断する別の方法を考える必要がありました。
そこでビルド ID を使うことにしました。ビルド ID とは、そのビルドが作成された日時 (時間は 1 時間単位で四捨五入されます) を示す番号です。Firefox は、プロファイルディレクトリにある compatibility.ini ファイルの「Build ID」という項目を起動のたびにチェックし、異なっていた場合は compreg.dat と xpti.dat を削除します。
Firefox と自動再起動
今のところ XPCOM が簡易再起動やコンポーネントレジストリの更新をサポートしていないため、コンポーネントの再登録が必要な処理を行う場合、Firefox は必ず自ら再起動を行わなくてはなりません。再起動を実行するイベントは数多くあります。それらのイベントについては、そのうちこのドキュメントで説明しましょう。