問い
Jetpack といえば「再起動不要」。 Jetpack Prototype では、Firefox 拡張である Jetpack が 動的に *.js ファイルを読み込み、管理することでこれを実現していた。 しかし、Jetpack SDK では、それぞれの軽量拡張自体が *.xpi として パッケージングされ、従来の拡張と同じ枠組みで管理される。 それなのになぜ再起動が不要なのか。
答え
Firefox の拡張管理機能自体に手を加え、 再起動不要な場合は再起動しないようにするから。
Bug 555349 に、toolkit に対するパッチが登録されている。 アドオンのタイプが拡張であり、install.rdf で bootstrap が "true" と宣言されている場合、再起動なしでもアドオンが有効化される。 この変更は Firefox 4 で実装され、 Firefox 3.6 以前では Jetpack も通常の拡張と同じように再起動が要求される。
再起動せずに拡張の有効/無効を切り替えるには、 有効化時に拡張を初期化し、無効化時に全ての変更を元に戻さなければならない。 この仕組みは Extension_Manager: Bootstrapped_Extensions で解説されている。 install.rdf と同じフォルダに置かれた bootstrap.js で、 拡張の起動/終了/インストール/アンインストールをハンドリングする。 各拡張は適切な bootstrap.js を用意しなければならない。
Jetpack SDK を利用する場合、適切な bootstrap.js が自動生成される (Bug 562819)。 Jetpack API を使って登録したイベントハンドラやメニュー等は自動的に破棄される。 開発者が起動/終了/インストール/アンインストール時に独自に処理をしたい場合には、 Lifecycle API を利用する。
関連リンク
- https://wiki.mozilla.org/Labs/Jetpack/Reboot/JEP/101
- https://wiki.mozilla.org/Extension_Manager:Bootstrapped_Extensions
- https://bugzilla.mozilla.org/show_bug.cgi?id=555349
- https://bugzilla.mozilla.org/show_bug.cgi?id=562819
更新履歴
- 2010/07/04: Lifecycle API のページにリンク。Firefox 3.7 を Firefox 4 に修正。
- 2010/05/11: 初版作成。