Firefox のシステム統合
Firefox は、デフォルトブラウザやデスクトップ背景画像の設定機能など、様々な形で Windows シェルと統合しています。これらの設定を利用するには nsIWindowsHooks と呼ばれる Windows 専用のインターフェイスを使う必要があります。しかし、こういった機能 (例に挙げたものだけではありません) は Windows 以外のプラットフォームでも必要とされるものなので、汎用インターフェイスを提供することが望ましいと思われます。
このため、各プラットフォームで、そのプラットフォーム特有の API を利用したコードで実装された、クロスプラットフォームなインターフェイス = nsIShellIntegration へ移行する予定です。プラットフォーム特有の機能 (例えば Windows 版 Thunderbird の未読メールカウントなど) は、そのプラットフォーム特有のインターフェイスを通じて表に現れます。
例えば:
browser/components/shell-integration/
public/nsIShellIntegration.idl
public/nsIWindowsShellIntegration.idl
public/nsIMacShellIntegration.idl
public/nsIGNOMEShellIntegration.idl
...
win/nsShellIntegration.cpp
...
mac/nsShellIntegration.cpp
...
gnome/nsShellIntegration.cpp
現在の nsWindowsHooks やそれに関連したコードは別の場所に移動可能です (同時に少し簡素化できるはずです)。nsIWindowsHooksSettings は、フロントエンドには一切影響を与えないので、おそらく削除されることになるでしょう。
nsIShellIntegration は次のようになるはずです。
[scriptable, uuid(19c9fbb0-06a3-11d4-8076-00600811a9c3)]
interface nsIShellIntegration : nsISupports
{
boolean attribute isDefaultBrowser;
const long BACKGROUND_TILE = 0;
const long BACKGROUND_STRETCH = 1;
const long BACKGROUND_CENTER = 2;
void setDesktopBackground(in nsIDOMElement aElement
in long aPosition);
const long CLIENT_MAIL = 0;
const long CLIENT_NEWS = 1;
void openDefaultClient(in long aClient);
};
nsWindowsHooks は、今のところ、Firefox をデフォルトブラウザにするかどうかを確認するダイアログを自ら表示していますが、この新しいインターフェイスでは、ブラウザフロントエンド自身が (ファイル形式やプロトコルの処理といったシステムレジストリ内で必要なチェックをすべて行う) isDefaultBrowser 属性を利用して確認し、必要に応じてユーザインターフェイスを表示します。同様に、フロントエンドからユーザに確認を行って isDefaultBrowser 属性を設定することで、Windows 向けに実装されているコードを大幅に簡素化できます。
(引数として渡される) 要素が <IMG> 要素では ない 場合、背景はすでに使用されていると考えられるので、「背景に使用」パラメータは setDesktopBackground メソッドから削除できるはずです。
「壁紙」の参照は、クロスプラットフォーム化を行いつつ現状に合わせるため (Windows 自体、既に壁紙を「壁紙」とは呼んでいません) 「背景」の参照というように変更されます。
nsIWindowsShellIntegration は次のようになるはずです。
[scriptable, uuid(19c9fbb0-06a3-11d4-8076-00600811a9c3)]
interface nsIWindowsShellIntegration : nsIShellIntegration
{
attribute long desktopColor;
readonly attribute unsigned long unreadMailCount;
};
このインターフェイスは、クロスプラットフォームなコードを継承しているため、両方のメソッドやプロパティにアクセスしたい開発者は、わざわざ別々の QueryInterface を使う必要がなくなります。setDesktopColor/getDesktopColor メソッドは、属性による設定に変更されます。
— Ben Goodger (2004/03/06)