Firefox 4 for developers
========================

Firefox 4 （6 月後半にベータ版リリースが予定されています）では、パフォーマンスが向上し、 HTML 5 やその他の革新的な Web 技術のさらなるサポートが追加され、さらには、セキュリティも改善しています。 この記事では、この次期リリースについてのとっかかりの情報と、 Web 開発者、アドオン開発者、そして、Gecko プラットフォーム開発者向けに利用可能になる機能の一覧を提供します。

これらの機能の多くはすでに Firefox 4 beta リリース、もしくは（冒険心にあふれているなら）ナイトリー trunk ビルド で試すことできます。

**メモ:** この記事は作成中であり、このページからリンクされている記事もまた同様です。多くの記事名が仮名であり、いくつかのトピックは複数の記事に分割されるかもしれません。

Web 開発者向け機能
-----------

Gecko は現在 HTML5 パーサーを利用しています。それはバグが修正され、相互運用性が改善され、また、パフォーマンスが向上されたものです。また、HTML マークアップでコンテンツに SVG と MathML を直接埋め込むことも可能にします。

### HTML

HTML5 パーサー入門 (en-US)

HTML5 パーサーが意味することと、どのように SVG と MathML をコンテンツにインラインで埋め込むかの概説。

HTML5 におけるフォーム

HTML5 における Web フォームの改善の概説。これらの変更点には `<input>` 要素における入力種類の追加、データバリデーションなどが含まれています。

HTML5 Sections

Gecko は文書におけるセクションに関する新しい HTML5 要素をサポートします。: `<article>`、`<section>`、`<nav>`、`<aside>`、 `<hgroup>`、`<header>` および `<footer>`。

HTML5 の hidden 属性

この属性は、すべての要素に共通であり、Web ページでユーザに現在は関係しないコンテントを隠すために用いられます。

その他の HTML5 要素

Gecko は次の新しい HTML5 要素もサポートします。: `<mark>`、`<figure>` および `<figcaption>`。

WebSocket

Web アプリケーションとサーバーの間でリアルタイムコミュニケーションを行うための WebSocket API を利用するためのガイド。

#### Canvas improvements

The following changes were made to the `CanvasRenderingContext2D` interface to bring our `<canvas>` implementation closer to being in line with the specification:

* Specifying a negative radius when calling `arc()` now correctly throws an `INDEX_SIZE_ERR` exception.
* Specifying non-finite values when calling `createLinearGradient()` and `createRadialGradient()` now throws `NOT_SUPPORTED_ERR` instead of `SYNTAX_ERR`.
* Setting `miterLimit` to a negative value no longer throws an exception; instead, it properly ignores non-positive values.
* Setting `lineWidth` to a negative value no longer throws an exception; instead, it properly ignores non-positive values.
* The `putImageData()` method now supports the optional parameters `dirtyX`, `dirtyY`, `dirtyWidth`, and `dirtyHeight`.

#### 小さな HTML の変更

* `<textarea>` 要素をデフォルトでサイズ変更できるようになりました。これを無効にするために `resize` CSS プロパティが利用できます。
* `canvas.getContext` および `canvas.toDataURL` が認識できない引数を指定して呼び出したときに例外を投げなくなりました。
* `<canvas>` 要素に Mozilla 固有の `mozGetAsFile()` メソッドが追加されました。これを用いることで、Canvas の内容である画像を含んだメモリベースのファイルを保持できます。詳細は `HTMLCanvasElement` を参照してください。
* `canvas2dcontext.lineCap` および `canvas2dcontext.lineJoin` が認識できない値を設定したときに例外を投げなくなりました。
* `canvas2dcontext.globalCompositeOperation` が認識できない値を設定したときに例外を投げなくなりました。また、非標準の値 `darker` をサポートしなくなりました。
* 他のブラウザでは実装されておらず、非推奨 な要素である `<spacer>` 要素のサポートが無くなりました。
* The `<isindex>` 要素が、`document.createElement()` メソッドによって作成されたときに、 一切プロパティもメソッドも持たない単純な要素として作成されるようになりました。
* Gecko に `<input>` 要素での `click()`メソッドの呼び出しが追加されました。このメソッドを用いることでファイル選択ダイアログが開けます。Web アプリケーションからファイルを利用する の記事内の 例 を参照してください。
* `<input>` 要素に新しい `mozactionhint` (en-US) 属性が追加されました。これを用いることで仮想キーボード上でのエンターキーのラベルを指定できます。
* `<iframe>`、`<noembed>`、および `<noframes>` 要素内の `<script>` 要素が実行されるようになりました。以前のバージョンの Firefox ではこれらの要素内での実行はされませんでした。これは仕様準拠であり、他のブラウザの挙動と合致します。
### CSS

CSS transitions

新しい CSS transitions サポートが Firefox 4 では利用できるようになりました。

CSS での算出値

`-moz-calc` (en-US) のサポートが追加されました。これを用いることで、`<length>` の値を数式で指定できます。

セレクタのグルーピング

セレクタをグループ化しコンビネータを分解する `:-moz-any` (en-US) がサポートされました。

背景画像の部分領域のサポート

`-moz-image-rect` 関数を用いることで、画像の一部分の領域 (subrectangle)を背景画像として利用できるようになります。

CSS touch プロパティ群

touch プロパティ群が追加されました。詳細と正式な記事名は後日追記予定です。

CSS 背景として任意の要素を使用する (en-US)

`-moz-element` (en-US) CSS 関数と `document.mozSetImageElement()` (en-US) DOM 関数を用いることで、任意の HTML 要素を背景として使用することができます。

プライバシーと :visited セレクタ

CSS セレクタを用いた訪問済みリンクのスタイルについて取得できる情報が変更されました。これはいくつかの Web アプリケーションに影響するかもしれません。

#### 新しい CSS プロパティ

| プロパティ | 説明 |
| --- | --- |
| `-moz-font-feature-settings` (en-US) | OpenType フォントの高度な機能を変更できます。 |
| `-moz-tab-size` (en-US) | テキストを描画するときのタブ文字 (U+0009) の幅を空白文字数で指定します。 |
| `resize` | サイズ変更可能な要素の方向を制御できます。 |

#### 新しい CSS 擬似クラス

| 擬似クラス | 説明 |
| --- | --- |
| `:-moz-handler-crashed` (en-US) | プラグインがクラッシュした要素の表示に用いられます。 |
| `:-moz-placeholder` | フォームフィールドのガイドテキストに適用されます。 |
| `:-moz-submit-invalid` | 1 つ、もしくは、複数のフォームフィールドの入力が妥当でないときのフォームの送信ボタンに適用されます。 |
| `:-moz-window-inactive` (en-US) | アクティブでないウィンドウの要素に適用されます。 |
| `:invalid` | 入力が妥当でない `<input>` フィールドに自動的に適用されます。 |
| `:optional` | `required` 属性を指定していない `<input>` フィールドに自動的に適用されます。 |
| `:required` | `required` 属性を指定している `<input>` フィールドに自動的に適用されます。 |
| `:valid` | 入力が妥当であると判断された `<input>` フィールドに自動的に適用されます。 |

#### 新しい CSS 擬似セレクタ

| 擬似セレクタ | 説明 |
| --- | --- |
| `:-moz-focusring` | Gecko がフォーカスインジケータを描画すべきとしている要素の見え方を指定できます。 |

#### 新しい CSS 関数

| 関数 | 説明 |
| --- | --- |
| `:-moz-any` (en-US) | セレクタをグループ化しコンビネータを分解できます。 |
| `-moz-calc` (en-US) | `<length> の値を数式で指定できます。` |
| `-moz-element` (en-US) | 任意の要素を `background-image` および `background` の背景として使用できます。 |
| `-moz-image-rect` | 画像の一部分を `background-image` もしくは `background`で利用できます。 |

#### 改名された CSS プロパティ

| 旧名称 | 新名称 | 備考 |
| --- | --- | --- |
| `-moz-background-size` | `background-size` | `-moz-background-size` という名称はサポートされません。 |
| `-moz-border-radius` | `border-radius` | 旧名称は、サイトを更新するための時間を考慮して、限られた期間サポートされます。描画の変更も仕様の最新版に適合するようになります。 |
| `-moz-box-shadow` | `box-shadow` |  |

#### 小さな CSS の変更

* `text-shadow` プロパティのぼかし範囲が 300 までに制限されるようになりました。これは健全さとパフォーマンスの理由によるものです。
* `overflow` プロパティがテーブルグループ要素 (`<thead>`、`<tbody>`、および `<tfoot>`) に適用されなくなりました。
* `-moz-appearance` プロパティが要素に境界のない Aero Glass の見た目を適用する `-moz-win-borderless-glass 値をサポートするようになりました。`
* `-moz-device-pixel-ratio` メディア機能が追加されました。これを用いることで、Media Query で用いられる、CSS ピクセルを基準としたデバイスのピクセル比率を指定できます。
* Gecko の CSS 単位の (en-US) 扱いが他のブラウザにより良く適合するように、また、絶対的長さをデバイスの DPI を基準にした画面ピクセル数により的確に変換するように修正されました。
### グラフィックとビデオ

WebGL

開発中の WebGL 標準が Firefox でサポートされました。

グラフィックパフォーマンスの最適化

Firefox 4 でグラフィックとビデオのパフォーマンスを最大限引き出すための Tips & Tricks。

WebM ビデオのサポート

新しいオープンな WebM ビデオフォーマットが Gecko2.0 でサポートされます。このサポートは 6 月 9 日以降のナイトリーに含まれています。

SMIL による SVG アニメーション

SVG の SMIL アニメーションのサポートが利用できるようになりました。バグ 482402 を参照してください。

画像と CSS 背景としての SVG の利用

SVG を `<img>` 要素とともに、また、CSS の `background-image` で利用することができるようになりました。

メディア要素での `buffered` 属性サポート

`<video>` および `<audio>` 要素での `buffered` 属性がサポートされました。これを用いることでメディアファイルでバッファリングされた範囲が判断可能になります。これをサポートするために `TimeRanges` DOM インタフェースが実装されました。

メディア要素での `preload` 属性

HTML5 仕様から `preload` 属性が実装されました。これは以前実装された（そしてもうサポートされない）`autobuffer` 属性を置き換えものです。これは `<video>` および `<audio>` 要素、同様に`nsIDOMHTMLMediaElement` インタフェースを実装した要素で利用できます。

SVG text 位置指定の改善

SVG `<text>` and `<tspan>` 要素で `x`、`y`、`dx`、および `dy` プロパティの値のためのリストを指定できるようになりました。これを用いることで、文字列中の各文字の位置を個別に制御できます。

### DOM

JavaScript 型付き配列

JavaScript 型付き配列 (typed arrays) のサポートが追加されました。これを用いることで、ネイティブデータ型を用いた生のデータを含むバッファを扱えます。 File API (en-US)、WebGL、および WebSockets を含む、いくつかの API でこれを用いることができます。

範囲の境界領域の保持

`Range` オブジェクトに `range.getClientRects()` および `range.getBoundingClientRect()` メソッドが追加されました。

任意の要素上でのマウスイベントのキャプチャ

Internet Explorer 由来の `setCapture()` と `releaseCapture()`API のサポートが追加されました。バグ 503943 を参照してください。

ブラウザ履歴の操作

`window.history` オブジェクトを通して利用できる、既存のドキュメント履歴オブジェクトが新しい HTML5 の `pushState()` と `replaceState()` メソッドをサポートするようになりました。

MozBeforePaint を用いたアニメーション

追加された新しいイベントと `window.mozRequestAnimationFrame()` (en-US) メソッドおよび `window.mozAnimationStartTime` (en-US) プロパティを組み合わせることで、互いに同期したアニメーションを作成する方法が提供されます。

タッチイベントとマルチタッチイベント

タッチイベントとマルチタッチイベントのサポートが追加されました。

#### HTML 要素の DOM インタフェースが変更されました

いくつかの HTML 要素に関連づけられた DOM インタフェースが、以下のように、 HTML5 仕様で要求されるひとつのインタフェースに変更されました。

| Firefox 3.6 でのインタフェース | Firefox 4 でのインタフェース | HTML 要素 |
| --- | --- | --- |
| `HTMLSpanElement` | `HTMLElement` | `<abbr>`, `<acronym>`, `<address>`, `<b>`, `<bdo>`, `<big>`, `<blink>`, `<center>`, `<cite>`, `<code>`, `<dd>`, `<dfn>`, `<dt>`, `<em>`, `<i>`, `<kbd>`, `<listing>`, `<nobr>`, `<plaintext>`, `
`, `<samp>`, `<small>`, `<strike>`, `<strong>`, `<sub>`, `<sup>`, , `<tt>`, `<u>`, `<var>`, `<xmp>` |
| `HTMLDivElement` | `HTMLElement` | `<noembed>`, `<noframes>`, `<noscript>` |
| `HTMLWBRElement` | `HTMLElement` | `<wbr>` |

#### 小さな DOM の変更

* `wrap` DOM 属性を利用することで、`<textarea>` `要素の折り返しを`DOM によってコントロールできるようになりました。バグ 41464
* `document.createElement()` を用いて作成されてドキュメントに追加された `<script>` 要素が、標準で HTML5 仕様に従って動作するようになりました。 `src` 属性で指定されたスクリプトは（順番を調整することはせずに）実行可能になりしだい実行され、`src` 属性で指定されていないスクリプトは同期的に実行されます。`src` 属性を持つ挿入されたスクリプトを挿入された順番で実行するには、`それらに .async=false を指定します。`
* DOM の `file` オブジェクトが url プロパティを提供するようになりました。
* DOM の `file` オブジェクトに`新しく click()` メソッドが追加されました。
* XMLHttpRequest で FormData (en-US) がサポートされました。
* `element.isContentEditable` プロパティが実装されました。
* `document.currentScript` プロパティを用いることで、現在実行されている `<script>` 要素のスクリプトを判別できます。新しく追加された `element.onbeforescriptexecute` および `element.onafterscriptexecute` イベントは script 要素の実行前後に発生します。
* `DragTransfer` オブジェクトに `mozSourceNode` プロパティが追加されました。
* `Selection` オブジェクトに `selection.modify()` (en-US) メソッドが追加されました。このメソッドを用いると、ブラウザウィンドウでの現在のテキスト選択範囲あるいはカーソル位置を簡単に変更できます。
* `window.directories` オブジェクトと `window.open` の `directories` 特性（これらは他のブラウザではサポートされていません）が 削除されました。代わりに `personalbar` を利用してください。バグ 474058
* `event.mozInputSource` プロパティが DOM ユーザインタフェースイベントに追加されました。この非標準プロパティを用いると、イベントを生成したデバイスのタイプを判別できます。
* `document.onreadystatechange` イベントが実装されました。
* `document.createElement` メソッドが Quirks モードでタグ名の前後の `<` と `>` を受け入れないようになりました。
* `element.setCapture()` および`document.releaseCapture()` メソッドが追加され、これらを用いることで、`指定要素で mousedown` イベントが発生した後にマウスが通常の追跡領域を越えても、マウスイベントを追い続けることができます。
* The `window.mozPaintCount` プロパティが追加されました。これを用いることで、何回ドキュメントが描画されたかを判定できます。これは Web アプリケーションのパフォーマンスをテストするときに役立ちます。
* `window.navigator.appVersion` および `window.navigator.userAgent` から言語トークンが削除されました。代わりに `window.navigator.language` もしくは Accept-Language ヘッダ (en-US) を利用してください。 バグ 572656
* XMLHttpRequest オブジェクトに追加された Gecko 固有の `mozResponseArrayBuffer`プロパティを用いると、レスポンスを文字列と同様 に JavaScript Typed Array として扱えます。
* Mouse イベント (en-US) に `mozPressure` プロパティが追加されました。このプロパティは圧力感知をサポートする入力デバイスでの圧力を示します。
* ~~window.createBlobURL()~~ `window.URL.createObjectURL()` (en-US) および `window.URL.revokeObjectURL()` (en-US) メソッドを用いることで、ローカルファイルを参照する BLOB ("Binary Large OBject") URL を作成できます。
* `DOMImplementation.createHTMLDocument()` メソッドを用いることで、新しい HTML 文書を作成できます。
* `Node.mozMatchesSelector()` が指定セレクタ文字列が妥当ではない場合に正しくない `false` を返すのではなく、`SYNTAX_ERR` 例外を投げるようになりました。
* CSS 同様の省略構文を用いて 要素の SVG プロパティの値を設定できるようになりました。例: `element.style.fill = 'lime'`。詳細は `element.style` を参照してください。
* ドキュメントルートに `privatebrowsingmode` 属性 が追加されました。これはプライベートブラウジングがセッションで一時的であるか永続的であるかの状態を含む、プライベートブラウジングモードの状態を示します。
* `window.getComputedStyle()` メソッドの 2 番目のパラメータが、他の主なブラウザと同様に省略可能になりました。
* DOM の `StorageEvent` オブジェクトが仕様の最新版に合致するようになりました。
* `window.setTimeout()` メソッドの最小遅延時間を設定するための `dom.min_timeout_value が追加されました。`
* `MozAfterPaint` イベントは、潜在的なセキュリティ問題があるため、デフォルトでは送られなくなりました。設定を変更することで有効にできます。
### セキュリティ

Content Security Policy (CSP)

Content Security Policy (CSP) は Mozilla が提案する Web デザイナーとサーバー管理者が Web サイトの相互利用でどのようなコンテンツを指定するかの仕様です。目的はクロスサイトスクリプティングを含む攻撃とデータインジェクション攻撃を判定し、軽減することです。

HTTP Strict Transport Security

HTTP Strict Transport Security は Web サイトがブラウザに HTTP を用いる代わりに HTTPS を用いてのみやり取りすべきであることを伝えるセキュリティ機能です。

X-FRAME-OPTIONS レスポンスヘッダ

Internet Explorer 8 で導入された X-FRAME-OPTIONS HTTP レスポンスヘッダが Firefox でサポートされるようになりました。これを用いることでサイトがページをフレーム内で用いることができるかどうか、フレーム内で利用可能ならば、同じドメイン内に限定するかどうかを指示することができます。

User Agent 文字列 の変更

HTTP リクエストで送ったデータとエントロピーの総量を減少させるべきにあるように、 ユーザエージェント文字列から暗号の強度を表す文字列と言語を表す文字列が削除されました。

### JavaScript

JavaScript 1.8.5 で実装される変更の概要については、JavaScript 1.8.5 の新機能 を参照してください。Firefox 4 における JavaScript は ECMASCript 5 標準へのさらなる順守となる予定です。

### 開発者ツール

Web コンソールの利用

Web コンソールツールは Web 開発者および拡張開発者のデバッグ作業の補助に役立ちます。


**メモ:** Gecko 2.0 のメモ(Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)エラーコンソールは Firefox 4 からデフォルトで無効化されます。`devtools.errorconsole.enabled 設定を` `true` に変更し、ブラウザを再起動することで再び有効にすることができます。

Mozilla およびアドオン開発者向けの変更
-----------------------

Firefox 4 向けに既存の拡張を更新する上で役立つ Tips は、Updating extensions for Firefox 4 を参照してください。ここでは既存のアドオンの互換性を破壊する主な変更点のいくつかを取り上げているだけです。ですから、上記記事も必ず読んでください。

テーマ開発者であるならば、注意する必要がある重要な変更点を理解するために Theme changes in Firefox 4 を読むべきです。

### 新しい JavaScript コードモジュール

Services.jsm

`Services.jsm` コードモジュールは preferences service や window mediator などのよく用いられているサービスへの参照を簡単に取得できるようにするゲッターを提供します。

JS-ctypes API

JS-ctypes API は C 互換外部ライブラリ関数を XPCOM を利用すること無しに呼び出せるようにします。

Add-ons Manager

新しい Add-ons Manager はインストールされたアドオンについての情報の提供、それらの管理のためのサポート、および、アドオンのインストールと削除の方法を提供します。

PopupNotifications.jsm

新しいポップアップ通知モジュールを用いることで簡単に魅力的な非モーダルな通知をユーザに提供できます。この API の使い方はポップアップ通知の利用で参照できます。

chrome: URL からコードモジュールを読み込む

**chrome:** URL を用いて JavaScript コードモジュールを読め込むことができるようになりました。JAR ファイルの中でも可能です。

DownloadLastDir.jsm

`DownloadLastDir.jsm` コードモジュールは `gDownloadLastDir` グローバル変数を提供します。この変数には最後のダウンロードが行われたディレクトリのパスを知るために利用可能な文字列が含まれています。このモジュールはプライベートブラウジングに対応しています。

PerfMeasurement.jsm コードモジュールを用いたパフォーマンスの測定

`PerfMeasurement.jsm` コードモジュールは JavaScript コードにおける CPU レベルでのパフォーマンスデータを測定するための API を提供します。

#### 小さなコードモジュールの変更

* `NetUtil.jsm` コードモジュールが `readInputStreamToString()` メソッドを提供するようになりました。これを用いることで、ストリームが null 文字を含んでいても、ストリームから文字列に任意のバイトを読み出せます。
* JavaScript コードモジュール内で Worker を利用できるようになりました。
### DOM の変更

`ChromeWorker`

特権コード向けの新しいタイプの Worker です。これを用いると、拡張およびアプリケーションコードで Worker から js-ctypes のようなものを用いることができます。

タッチイベント

(非標準の) タッチイベントのサポートが追加されました。これを用いると、タッチスクリーン上で同時に複数の指でトラックできます。

### XUL

#### Tabbrowser (gBrowser) の変更

いくつかの変更が <tabbrowser> 要素になされており、タブ機能の拡張に影響があります。アイコンタブのサポートに加えて、タブバーが標準ツールバーに統合されたという変更もあります。この変更によって、ユーザがツールバーボタンをそこへドラッグできるようになっています。

* TabClose/TabSelect/TabOpen イベントはもはや tabbrowser 要素 (gBrowser) にバブルアップしません。これらのイベントのためのイベントリスナーは gBrowser 直接ではなく gBrowser.tabContainer に追加すべきです。
* タブコンテキストメニューはもはや tabbrowser の無名の子要素ではありません。それゆえ XUL オーバーレイで直接オーバレイできるようになります。gBrowser.tabContextMenu 経由で JavaScript でより直接的にアクセスすることもできます。詳細はこのブログ投稿を参照してください。
* 新たに `visibleTabs` プロパティが追加され、これを用いると、現在表示されているタブの配列を取得することができます。このことにより、現在のタブセットでどのタブが表示されているかを知ることができます。これは例えば、Firefox Panorama で利用されています。
* 新たに `showOnlyTheseTabs` メソッドが追加されました。これは Firefox Panorama で用いられています。
* 新たに `getIcon` メソッドが追加されました。これを用いると、`<xul:browser>` 要素から引っ張り出す必要無しに、 タブのファビコンを得ることができます。
* 新たに `tabbrowser.tabs` プロパティが追加されました。これを用いると、簡単に `<xul:tabbrowser>` 要素内のタブの一覧を取得できます。
* 新たに `pinTab` と `unpinTab` メソッドが追加されました。これを用いると、タブのアイコン化およびタブのアイコン化の解除ができます（つまり、アイコンタブと通常タブを切り替えます）。
* `getTabModalPromptBox` メソッドと `<xul:tabbrowser>` 要素の `tabmodalPromptShowing` 属性がタブモーダルアラートのサポートのために追加されました。

#### ポップアップに対する変更点

* `<xul:popup>` 要素がサポートされなくなりました。代わりに `<xul:menupopup>` 要素を使うべきです。(`popup` 要素を用い続けた場合、その要素にはもはや何の特別な意味もないため、不具合に遭遇するでしょう。例えば、`<xul:menuseparator>` 要素は `<xul:popup>` 要素内で用いたときに透明で表示される可能性があります。)
* `<xul:menupopup>` XUL 要素に `triggerNode` プロパティが追加されました。このプロパティはポップアップを開くイベントが起こったノードを示します。これは `openPopup` メソッドに対するトリガーイベント引数の追加も必要とします。また、 `anchorNode` プロパティも追加されました。このプロパティはポップアップが作成されたときに指定されたアンカーを返します。
* `<xul:panel>` 要素に `fade` および `flip` 属性が追加されました。これらの属性は新しい "arrow" スタイル通知パネルの挙動を設定するために用いられます。

#### リモート XUL サポートの削除

リモート XUL がサポートされなくなりました。 これは HTTP を経由して供給される XUL ドキュメントにのみ影響します。 また、`dom.allow_XUL_XBL_for_file` の設定を作成して、その値を `true` に設定しない限り、`file://` URL 形式を用いた XUL 文書の読み込みも行えなくなります。しかしながら、ホワイトリスト機能を用いることで、特定ドメインのリモート XUL を読み込むことを許可できます。Remote XUL Manager 拡張 を用いると、このホワイトリストを管理できます。

#### 小さな XUL の変更

* `readonly` 属性がフィールドで正しく動作するようになりました。
* `<xul:resizer>` 要素でウィンドウをリサイズする代わりにリサイズする要素を指定できる `element` 属性を用いることができるようになりました。
* `<xul:resizer>` 要素に `type` 属性が追加され、これを用いることで、要素の変わりにウィンドウのリサイズグリップを指定し、ウィンドウのリサイズグリップが 2 度描画されることを防ぐことができます。
* "active" 属性は XUL ウィンドウでは設定されません。背景ウィンドウに異なるスタイルを指定するための新しい `:-moz-window-inactive` (en-US) 擬似クラスを利用してください。
* `emptytext` 属性は非推奨になりました。代わりに `placeholder` を用いるべきです。
* `<xul:popup>` 要素はサポートされません。代わりに `<xul:menupopup>` を持ちいるべきです。
* `<xul:window>` 要素が `accelerated` 属性を提供するようになりました。true の場合、ハードウェアレイヤーマネージャがウィンドウをアクセラレーションすることが許可されます。
* `<xul:stack>` 要素が `bottom` と `right` 要素をサポートするようになりました。
* `<xul:tree>` 要素での `alternatingbackground` 属性はサポートされません。代わりに `:-moz-tree-row` 擬似クラスを利用できます。
* anonid chevronPopup を持っていたブックマークツールバーのオーバーフローボタンは無名になりました。それは PlacesChevron の id を持っています。
* `<xul:tabs>` 要素に `tabbox` プロパティが追加されました。これは古い `_tabbox` プロパティを置き換えます。古い方のプロパティは非推奨です（そして決してドキュメント化されません）。
* XUL `<xul:window>` 要素に `drawintitlebar` 属性が追加されました。この値が `true であれば、`ウィンドウのコンテント領域にはタイトルバーが含まれており、タイトルバー内に描画することを許可します。
* 新たに `TabPinned` および `TabUnpinned` イベントが追加され、これを用いることで、タブがアイコン化したかアイコン化が解除されたかを検知できます。
* 新しい `TabAttrModified` イベント はタブの `label`、`crop`、`busy`、 `image`、あるいは、`selected` 属性のいずれかが変化したときに送られます。
* `<xul:tab>` 要素に `pinned` 属性が追加されました。これを用いることで、タブが現在アイコン化されているかどうか判定できます。
* `<xul:tree>` 要素上の `setDirectionIndicator` クラスは何もしないことがありましたが、一切利用されないようになりました。
* `<xul:window>` 要素に `chromemargin` 属性が追加され、これを用いることで、ウィンドウの両端の Chrome とコンテントのマージンを設定できます。例えば、タイトルバーに描画するためにこれを用いることができます。
* `<xul:window>` 要素に `disablechrome` 属性が追加されました。これは `about:addons のように`ブラウザ内 UI に表示するために用いるときにウィンドウで Chrome のほどんどを隠すために用いることができます。
* `<xul:window>` 要素に `disablefastfind` 属性が追加されました。これを用いることで、ウィンドウ内のページ内検索バーを無効にできます。このときコンテント内でページ検索バーはサポートされません。例えば、これはアドオンパネルで使われています。
* ツールバーをツールボックスの外部に置けるようになりました。`<xul:toolbar>` 要素の `toolboxid` プロパティを設定することで、以前のように `<xul:toolbox>` 要素のメンバーとして扱うことができます。また、`<xul:toolbox>` 要素に `externalToolbars` プロパティが追加されました。このプロパティによって、そのツールボックスのメンバーとして扱われるツールバーのすべての一覧を取得できます。
* デバッグ目的向けに logging XUL テンプレートのロギング のサポートが追加されました。
### 開発者に影響がある UI の変更

アドオンバー

ステータスバーが削除され、新しいアドオンバーに置き換えられました。以前にステータスバーに UI を追加していた拡張は更新する必要があります。

ブラウザのクロームを隠す

ブラウザのクロームを隠したいときに、隠せるようになりました。例えば、`about:addons` がこれを用いています。

### Storage

#### 小さなストレージ API の変更

* `mozIStorageBindingParamsArray` インタフェースが 配列である`mozIStorageBindingParams` オブジェクトの数を示す length 属性を持つようになりました。
* `mozIStorageStatement`の メソッド bindParameters が 指定された `mozIStorageBindingParamsArray` が空のときにエラーを返すようになりました。
* `mozIStorageConnection.clone()` メソッドが追加されました。これを用いると、存在するデータベース接続を複製できます。
* `mozIStorageConnection.asyncClose()` が追加されました。これを用いると、非同期にデータベース接続を閉じることができます。クローズ処理が完了したときに通知されるコールバックを指定します。
* `mozIStorageConnection.setGrowthIncrement()` メソッドが追加されました。これを用いると、SQLite のフラグメンテーションを減らすことを助けるために、データベースファイルでの一度の増加量を指定できます。
* `SQLITE_CONSTRAINT` エラーが `NS_ERROR_FAILURE` の代わりに `NS_ERROR_STORAGE_CONSTRAINT` を報告するようになりました。
### XPCOM

以下から参照できる特定の変更に加えて、凍結されたインタフェースが一切無くなったという重要な変更もあります。すべてのインタフェースは非凍結となっています。ドキュメンテーションに書いていることに関わらずです。ドキュメンテーションを後ほど更新する予定です。

Gecko 2.0 における XPCOM の変更

Firefox 4 で互換性に影響を与える XPCOM への変更についての詳細。

Components.utils.getGlobalForObject()

この新しいメソッドはオブジェクトが属しているグローバルオブジェクトを返します。これは現在削除された `__parent__ の一般的用途を置き換えます。`

### Places

* Places クエリの結果が複数のオブザーバによって提供されるようになり、それらのクエリは非同期で実行される可能性があります。このことにより、`nsINavHistoryResult`、`nsINavHistoryQueryOptions`、および`nsINavHistoryContainerResultNode` インタフェースにいくつかの変更があります。より大きな変更は、`nsINavHistoryResultViewer` インタフェースが `nsINavHistoryResultObserver` に改名されたことです。
* いくつかの 新しい通知 が追加されました。この通知を用いると、ブラウザが Places サービスのシャットダウンプロセスをより確実に追跡できます。これらのうち、ほとんどは内部での利用のためにのみ用意されたものですが、`places-connection-closed` 通知は Places サービスが自身のシャットダウンプロセスを完了したときを知るために利用可能です。
* いくつかの Places のメソッドで配列サイズ出力を指定する引数がオプションになりました。
* `<menupopup type="places">` のサポートが削除されました。代わりに、以前は自動で行なわれていた Places の情報を持つメニューを手動で作成して配置する必要があります。詳細はメニュービューを用いて Places 情報を表示するを参照してください。
### インタフェースの変更

* The `nsIDocShell` and `nsIWebBrowser` interfaces now have a new `isActive` attribute, which is used to allow optimization of code paths for documents that aren't currently visible.
* The `nsIMemory` method `nsIMemory.isLowMemory()` has been deprecated. You should use "memory-pressure" notifications to watch for low memory situations instead.
* The API for handling redirects on HTTP channels has changed to let them be processed asynchronously. Any code that implements redirect handling using `nsIChannelEventSink.onChannelRedirect()` needs to be updated to use `nsIChannelEventSink.asyncOnChannelRedirect()` instead. This accepts a callback handler that must be called when a redirect is successfully completed.
* The `nsINavHistoryResultObserver.batching()` method has been added, providing a way to group Places operations into batches, reducing the number of update notifications delivered, which can improve performance when observers are performing relatively involved tasks (such as refreshing views).
* The long-obsolete `nsIPref` interface has finally been removed. If you haven't already switched to `nsIPrefService`, now is the time.
* The `nsISessionStore` and `nsISessionStartup` interfaces received changes to support on-demand session restore. See the `nsISessionStore.restoreLastSession()` method.
* The `nsIPrincipal` methods `nsIPrincipal.subsumes()` and `nsIPrincipal.checkMayLoad()`, as well as its `origin`, `csp`, and `URI` attributes, are now available from script; previously they were only available from native code.
* The `nsIPrompt` interface now supports tab-modal alerts; see Using tab-modal prompts for details.
* The `nsIEffectiveTLDService.getPublicSuffixFromHost()` method now correctly rejects host name starting with a period (".").
* The `mozIJSSubScriptLoader.loadSubScript()` method now has an optional argument allowing you to specify the character set of the script; if one is not provided, ASCII is assumed (as was always assumed previously).
* The `nsIAccessProxy` interface has been removed. It was an implementation detail that has outlived its usefulness.
* The `nsIContentView` and `nsIContentViewManager` interfaces have been added for Firefox Mobile. It represents a scrollable content view whose contents are actually drawn by a separate process.
* The `nsIDiskCacheStreamInternal` interface has been added.
* The `nsIExternalURLHandlerService` interface has been added.
* The `nsISyncJPAKE` interface has been added. See bug 601645.

* `nsIDocShell` および `nsIWebBrowser` インタフェースに新しく `isActive` 属性が追加されました。これは現在表示されていないドキュメントのためにコードパスを最適化することを許可するために用いることができます。
* `nsIMemory` のメソッドである `isLowMemory()` は非推奨になりました。低メモリ状況を監視するには "memory-pressure" 通知 を用いることが推奨されます。
* HTTP チャンネル上でリダイレクトを扱う API が非同期で動作できるように変更されました。`nsIChannelEventSink.onChannelRedirect()` を用いてリダイレクトを扱う実装を行なっているコードは `nsIChannelEventSink.asyncOnChannelRedirect` を代わりに用いて更新する必要があります。これはリダイレクトが正常に完了したときに呼び出されるコールバックハンドラを受け入れます。
* `nsINavHistoryResultObserver.batching()` メソッドが追加されました。このメソッドは Places 操作をバッチにグループ化する方法を提供し、送られてくる更新通知の数を減少させ、その結果、オブザーバが（ビューをリフレッシュするような）相対的にタスクを追加するときのパフォーマンスを向上させます。
* 長い間廃止状態であった `nsIPref` インタフェースがついに削除されました。まだ `nsIPrefService` に移行していないなら、今がそのときです。
* `nsISessionStore` および `nsISessionStartup` インタフェースがユーザの要求に応じたセッションリストアのサポートへの変更を受けとるようになりました。`nsISessionStore.restoreLastSession()` メソッドを参照してください。
* `nsIPrincipal` のメソッドである `nsIPrincipal.subsumes()` および `nsIPrincipal.checkMayLoad()` が `origin`、`csp、` および `URI` 属性同様に、スクリプトから利用可能になりました。以前はこれらはネイティブコードからのみ利用可能でした。
* `nsIPrompt` インタフェースがタブモーダルアラートをサポートするようになりました。詳細はタブモーダルプロンプトの利用を参照してください。
* `nsIEffectiveTLDService.getPublicSuffixFromHost()` メソッドがピリオド (".") で始まるホスト名を正しく拒否するようになりました。
### メモリ管理

確実なメモリアロケーション

Mozilla は null を返さないことを保証する確実なメモリアロケータを複数提供するようになりました。この記事を読んでそれらがどのように動作し、どのようにして不確実な、あるいは、確実なメモリアロケーションを明確に指定して呼び出すのかを学んでください。

### その他の変更

* Firefox 内に含まれるリソースのほとんどが単一の JAR アーカイブである `omni.jar` にまとめられました。これにより、 I/O が減少し、その結果、起動パフォーマンスが向上しています。詳細は omni.jar についてを読んでください。
* `accessibility.disablecache` 設定はサポートされなくなりました。これはデバッグ目的で公開されており、もはや用いられません。
* バージョンアップによって GUID が変更になるアドオンが正しく更新されるようになりました。
* プラットフォーム固有のディレクトリを削除した副作用として、各プラットフォーム向けに異なった設定を提供することができなくなりました。
* デフォルトで、拡張はインストール時に展開されなくなりました。その代わりに XPI ファイルから直接実行されます。拡張は古い挙動を選択するためにインストールマニフェスト内で unpack プロパティを使用できます。バイナリコンポーネントや、js-ctypes を利用して読み込まれる DLL、検索プラグイン (en-US)、辞書、ウィンドウアイコンは展開される必要があるように指定しなければなりません。SQLite データベースを生成する拡張や、拡張ディレクトリからファイルシステムへ相対的に何かをコピーする拡張も、それらのコードを変更する必要があるかもしれません。
* カスタマイズされた Firefox にアプリケーションスタートアップ時に自動でインストールされる拡張を含められるようになりました。
その他の変更
------

ルートの chrome.manifest ファイルだけが読み込まれるように

ルートの `chrome.manifest` ファイルだけが読み込まれるようになりました。 2 つ以上のマニフェストファイルを読み込む必要がある場合は、ルートの `chrome.manifest` でそれらを読み込むために `manifest` コマンドを使用できます。

Gopher サポートの削除

Gopher プロトコルがネイティブでサポートされなくなりました。継続してサポートを受けるには OverbiteFF 拡張を利用できます。

コンテントプロセスイベントハンドリング

out-of-process プラグインのサポートとその他の multiple-process 機能をサポートするために、プロセス間でメッセージを送ることをサポートするための新しい API が導入されました。

ブートストラップ拡張

ブラウザを再起動せずにインストール、アンインストール、更新（またはダウングレード）できる拡張を作成できるようになりました。

デフォルトプラグイン の削除

デフォルトプラグインが削除されました。アプリケーションプラグインフォルダもデフォルトで削除されますが、このフォルダ経由でプラグインをインストールするためのサポートはまだ存在します。bug 533891 を参照してください。

Extension Manager の AddonManager への置き換え

nsIExtensionManager は AddonManager に置き換えられました。 指定した拡張 ID からインストール場所を取得するための方法は現在のところ存在しないと思われるので、それに最も近い回避策はプロファイルディレクトリを見つけるためにディレクトリサービスを用い、それに "extensions" を追加することです（この手段ではプロファイルディレクトリ外あるいは他の位置にエイリアスされている拡張は取得できません）。

子 HWND はもはや利用されません

Firefox は Windows で内部利用していた 子 HWND を作成しないようになりました。これらの HWND を扱うネィティブコードを用いる拡張を書いていた場合、その拡張は Firefox 4 では動作しないでしょう。HWND を用いることを止めるか、NPAPI プラグインで HWND に依存するコードをラップする必要があります。それは多大な作業であり、HWND を直接用いることを避けられるならば、そうすべきです。

ジェスチャの変更

トラックパッド上の 3 本指の上下スワイプジェスチャが、デフォルトで、Firefox Panorama (旧称 TabCandy) の開閉に変更されました。これらの変更を以前の scroll-to-top および scroll-to-bottom コマンドに戻すには、about:config を開き、`browser.gesture.swipe.down` を `cmd_scrollBottom` にし、`browser.gesture.swipe.up` を `cmd_scrollTop` に設定してください。

関連情報
----

* Firefox 5 for developers
* Firefox 4 for developers
* Firefox 3.6 for developers
* Firefox 3.5 for developers
* Firefox 3 for developers
* Firefox 2 for developers
* Firefox 1.5 for developers