Firefox 5 for developers
========================

Firefox 5 は Gecko 5.0 ベースのブラウザで、2011 年 6 月 21 日にリリースされました。このページは Firefox 5 のリリースにあたり、開発者に影響する変更について情報をまとめたものです。

Web 開発者向けの変更点一覧
---------------

### HTML

* すべての HTML 要素が `accessKey` 属性を持つようになりました。また、`blur()`, `click()`, `focus()` メソッドもすべての要素に定義されました。これらの属性やメソッドは `HTMLElement` に定義されています。
* HTML5 仕様への準拠により、文字エンコーディング UTF-7 と UTF-32 のサポートが削除されました。
* Quirks モードにおいて、空の `<map>` がマッチされず、空でない `<map>` にスキップしてしまう問題が修正されました。詳細は `<map>` 要素のページにある Gecko の実装に関する注意書き (en-US) をご覧ください。
* Android 版 Firefox mobile が `@font-face` で WOFF を利用できるようになりました。
* セキュリティ対策により、WebGL で もとのドメイン外からのテクスチャが読み込まれなくなりました。将来的に HTTP access control のサポートが行われ、セキュリティを確保したかたちでクロステクスチャが実現できるでしょう。

#### Canvas の修正

* `<canvas>` 2D コンテキストの `createImageData()` メソッドに `ImageData` オブジェクト指定できるようになりました。このメソッドは指定したオブジェクトと同じ大きさの 新しい `ImageData` オブジェクトを作成 (en-US) しますが、すべてのピクセルが透明な黒で描画されます。これは実装されたと書かれていたのですが、そうではありませんでした。
* `CanvasGradient` の `addColorStop()` メソッドの呼び出しで非有限なカラーストップが指定された際、`INDEX_SIZE_ERR` が適切に投げられるようになりました (これまでは `SYNTAX_ERR` が投げられていました)。
* `HTMLCanvasElement` の `toDataURL()` メソッド実装が修正され、指定した MIME 型をマッチングの前に小文字に変換するようになりました。
* `getImageData()` が修正され、canvas の境界を超えた矩形を受け入れるようになりました。canvas 外にあるピクセルは透明な黒として返されます。
* `drawImage()` と `createImageData()` が仕様に準拠し、負の引数を処理するようになりました。この処理は、適切な軸にそって矩形を反転させます。**We need an article about CSS sizing and how this works.**
* `createImageData()` の呼び出しで非有限な値が指定された際、`NOT_SUPPORTED_ERR` が適切に投げられるようになりました。
* 1px より小さな矩形が指定された際、`createImageData()` と `getImageData()` は適切に 1px 相当の ImageData を返すようになりました。
* `createRadialGradient()` の半径に負の値を指定した際、`INDEX_SIZE_ERR` が適切に投げられるようになりました。
* `createPattern()` や `drawImage()` の呼び出しで、画像に `null` や `undefined` が指定された際、`TYPE_MISMATCH_ERR` が適切に投げられるようになりました。
* `globalAlpha` に不正な値が指定されても `SYNTAX_ERR` が投げられないようになりました。このような場合は適切にただ無視されます。
* `translate()`, `transform()`, `rect()`, `clearRect()`, `fillRect()`, `strokeRect()`, `lineTo()`, `moveTo()`, `quadraticCurveTo()`, `arc()` に不正な値が指定されても例外が投げられないようになりました。このような場合は適切にただ無視されます。
* `shadowOffsetX`, `shadowOffsetY`, `shadowBlur` に不正な値が指定された際、それらはただ無視されるようになりました。
* `rotate`, `scale` に不正な値が指定された際、それらはただ無視されるようになりました。
### CSS

CSS Animations

CSS Animations がサポートされました。`-moz-` 接頭辞をつければ利用可能です。

### DOM

* `selection` オブジェクトの `modify()` (en-US) メソッドが変更され、単語の選択で単語の後にある空白を含まなくなりました。この変更はプラットフォームごとの一貫性を向上させ、また WebKit の挙動とも一致します。
* アクティブでないタブにおいて `window.setTimeout()` メソッドのタイムアウトが 1 秒に 1 回 を超えないようになりました。また、入れ子のタイムアウトが HTML5 仕様で定められた最小値 4ms になりました (これまでは 10ms でした)。
* 上記と同様に、アクティブでないタブにおける `window.setInterval()` も 1 秒に 1 回以下になりました。
* `XMLHttpRequest` が `loadend` イベントをサポート for progress listeners. このイベントはすべての転送が終了した際 (つまり、`abort`, `error`, `load` イベントの後) に発生します。このイベントを利用すると、転送の成功・失敗に関わらず実行されるタスクを処理できます。
* `Blob` オブジェクトと `File` オブジェクトの `slice()` メソッドが削除され、代わりに提案中のメソッドに置き換えられました。提案中のメソッドは JavaScript の `Array.slice()`, `String.slice()` メソッドにより近いものです。現時点では `mozSlice()` という名前がつけられています。
* `window.navigator.language` の値が `Accept-Language` HTTP ヘッダ の値から決定されるようになりました。
* DOM 仕様の要件により、`Node.prefix` プロパティが readonly になりました。
### JavaScript

* 正規表現を関数のように呼び出せなくなりました。この変更は WebKit チームと互換性の確保について話し合った結果行われたものです。(WebKit bug 28285 をお読みください。この機能は長いこと存在していたものの、少なくとも MDC ではドキュメント化されていませんでした。)
* `Function.prototype.isGenerator()` メソッドがサポートされました。個のメソッドによってある関数が generator であるかを調べられます。
* chrome コード内に生成された DOM 文書が sandbox 内のスクリプトに現れなくなりました。
* 予約語 `class`, `enum`, `export`, `extends`, `import`, `super` はこれまで Strict Mode のみで予約されていましたが、Strict Mode ではない通常のモードでも予約語扱いになりました。
* JSON パーサが書き直され、スピードと準拠度が向上しました。この書き直しには Firefox バグ 572279 の修正も含まれています。
### SVG

* `class (en-US)` SVG アトリビュートを動的に変化させられるようになりました。
* `SVGLengthList` (en-US), `SVGNumberList` (en-US), `SVGPathSegList`, `SVGPointList` (en-US) など、オブジェクトのリストを表す SVG DOM インターフェースがインデックスされ、配列のようにアクセス可能となりました。加えて、リスト中の項目数を表す `length` も持ちます。
### HTTP

* Firefox は `Keep-Alive` HTTP ヘッダを送信しないようになります。私たちはこのヘッダを正しく整形していませんでした。また、`Connection` や `Proxy-Connection` ヘッダに "keep-alive" を指定していたため重複しており、意味がなかったのです。
* HTTP のトランザクションモデルを変更し、持続的接続プール内の接続を再利用するというより高度なものになりました。Necko はプールを FIFO と扱うのではなく、プール内の接続を congestion window (CWND) の大きい順に並べ替えます。Window のサイズ拡大を避けることで、多くのケースで HTTP トランザクションの確認応答時間 (RTT) を減少させることができるでしょう。
* Firefox は `Content-Disposition` HTTP レスポンスヘッダについて、`filename`, `filename*` パラメタがどちらも与えられている場合にそれらをより効果的に処理するようになりました。これは `filename` が先に与えられている場合でも `filename*` をまず調べすべての名前を読み取ることで実現しています。これまでは最初にマッチしたパラメタが使われており、後により適切な名前が与えられていた場合でもそれが使われなかったのです。詳細は Firefox バグ 588781 をお読みください。
### MathML

* embellished operators がサポートされました。
### 開発者ツール

* Web コンソールの `Console` オブジェクト に `debug()` メソッドが導入されました。これは `log()` のエイリアスで、導入によっていくつかの Web サイトとの互換性が向上します。
アドオン開発者向けの変更点一覧
---------------

すでに開発済みのアドオンを Firefox 5 向けにアップデートを行う方法については Firefox 5 へのアドオンのアップデート方法をご覧ください。

**メモ:** Firefox 5 は他のメジャーリリース版の Firefox と同様に、再コンパイルされたバイナリコンポーネントが必要となります。詳しくはバイナリインターフェースをご覧ください。

### JavaScript コードモジュールに対する変更点

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

* `Dict.jsm`コードモジュールが追加されました。このモジュールはキーと値のペアの辞書に対する API を提供します。

#### NetUtil.jsm

* `asyncFetch()` メソッドは今回から`nsIInputStream` として入力ソースの特定をサポートします。
### インターフェースの変更点

* `nsIHttpChannelInternal` インターフェースはチャネルの端点のアドレスとポートの情報にアクセスする新しい属性を持っています。この情報は主にデバッグに用いることができます。
* `<canvas>` エレメントの `width` と `height` 属性は今回から符号付き整数から符合なし整数に変わり、IDL におけるリフレクトを行います（`HTMLCanvasElement` (en-US) をご覧ください）。
* `nsIAppStartup2` と `nsIAppStartup_MOZILLA_2_0` インターフェースは`nsIAppStartup` インターフェースに統合されました。
* `nsIDocShell_MOZILLA_2_0_BRANCH は` `nsIDocShell` インターフェースに統合されました。
* `nsIFocusManager_MOZILLA_2_0_BRANCH` インターフェースは `nsIFocusManager` インターフェースに統合されました。
* `nsIHTMLEditor_MOZILLA_2_0_BRANCH` インターフェースは `nsIHTMLEditor` インターフェースに統合されました。

#### 新しいインターフェース

* `nsIDOMAnimationEvent` が追加されました。 `AnimationEvent`

#### 削除されたインターフェース

次にあげるインターフェースはもはや必要がないと判断されました。

* `nsICiter` （Firefox バグ 633066 をご覧ください）
* `nsIDOM3Document` （Firefox バグ 639849 をご覧ください。）
* `nsIFIXptrEvaluator`
* `nsISelectElement` （Firefox バグ 619996 をご覧ください。）
### デバッグの補助

* 新しい `DebugOnly<T>` ヘルパーはデバッグモードにおけるビルドにおいてのみ変数の定義を可能にしました。
### JavaScript API (SpiderMonkey)

* `jsdouble` の値を C の符号付き整数型と符合なし整数型に変換するために `JS_DoubleToInt32()` と `JS_DoubleToUint32()` が追加されました。
### ビルドシステムの変更点

* `mozconfig` ファイルがなくても Firefox をビルドできるようになり、 `--enable-application` setting (en-US) が "browser" のデフォルトになりました。コードをダウンロード後、`configure && make` (or `make -f client.mk`) を行うだけで Firefox をビルドできます。
参考
--

* Firefox 5 の後方互換性に関わる修正のまとめ
* 高速リリースサイクルに関するよくある質問

* 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