Firefox 6 for developers
========================

Firefox 6 は Gecko 6.0 ベースのブラウザで、2011 年 8 月 16 日にリリースされました。このページは Firefox 6 のリリースにあたり、開発者に関係する変更についてまとめたものです。

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

### HTML

* プログレスバーを表す HTML5 の `<progress>` 要素がサポートされました。
* メディア要素にテキストトラックを追加する HTML5 の `<track>` 要素について、そのパース処理部分が実装されました。要素そのものは実装されていませんが、DOM に現れるようにはなります。
* `border-radius` プロパティによって角が丸められたコンテナ内の `<iframe>` についても、適切に角が丸められるようになりました。
* `<form>` 要素の `<input>` テキストフィールドが XUL の `maxwidth` プロパティをサポートしなくなりました。これは意図的なものではなく、また HTML 仕様違反でもあります。要素の最大幅を設定するには、`size` 属性を利用します。
* `<canvas>` の `CanvasRenderingContext2d` プロパティ `fillStyle` と `strokeStyle` はこれまで、妥当な色の指定の後に続く余計なものを無視する処理をしていましたが、適切にエラーとして処理されるように修正されました。たとえば、"red blue" を指定したとき、これまでは "red" と扱われていましたが、これからは指定そのものが無視されます。
* `<canvas>` 要素の width と height を適切に 0px と指定できるようになりました。これまではそう指定しても 300px にされていました。
* HTML カスタムデータ属性 (data-\*) がサポートされました。DOM プロパティ `element.dataset` からデータにアクセスできます。
* `<textarea>` 要素がフォーカスされたとき、テキスト挿入箇所が最後ではなく先頭になりました。これにより、他のブラウザの挙動と一致します。
### CSS

`-moz-text-decoration-color`

このプロパティは `text-decoration` で指定する `underline`, `overline`, `strikethrough` などの色を指定します。

`-moz-text-decoration-line`

このプロパティは `text-decoration` の種類を指定します。

`-moz-text-decoration-style`

このプロパティは `text-decoration` で指定する `underline`, `overline`, `strikethrough` などのスタイルを指定します。スタイルには `solid`, `double`, `dotted`, `dashed`, `wavy` などがあります。

`-moz-hyphens`

このプロパティは行送りが発生する際、単語のハイフネーションを制御するプロパティです。

`-moz-orient` (en-US)

現在は Mozilla 固有のプロパティで、いくつかの要素 (`<progress>` 要素など) の縦横の向きを制御します。

`::-moz-progress-bar`

Mozilla 固有の擬似要素で、`<progress>` 要素において、完了した部分のスタイルづけを行うためのものです。

#### その他の変更

* `@-moz-document` (en-US) に新しく `regexp()` 関数記法が追加されました。これにより、スタイルシートを適用する文書の URL を 正規表現でマッチさせられます。
* `aural` 媒体グループのために持っていたコードを削除したため、`azimuth` CSS プロパティのサポートが廃止されました。このプロパティはちゃんと実装されていなかったため、パッチを当て続けるのではなく未完成の実装を省くほうが理にかなっていると考えました。
* これまで、`:hover` 擬似クラスは Quirks モードにおいてクラスセレクタに適用されませんでした。このため `.someclass:hover` といったコードは動きませんでしたが、この例外が取り払われました。
* `:indeterminate` 擬似クラスは `<progress>` 要素にも適用できます。これは非標準ですが、便利ですので他のブラウザにも取り入れられて欲しいと考えています。
### DOM

コード内でのメディアクエリの使用

`window.matchMedia()` メソッドと `MediaQueryList` インターフェースによって、メディアクエリーの結果をプログラムから検証できます。

Touch events

Firefox 6 は W3C の標準タッチイベント仕様をサポートします。これにより、タッチスクリーンやトラックパッドなどタッチセンサー式のデバイスでのタッチの解釈が容易になります。

Server-sent events

Server-sent events はサーバが手元で生成された DOM イベントと同じようにイベントを送出するよう、Web アプリケーションが尋ねるための機能です。

* これまでずっと、空文字列を返すだけだった `navigator.securityPolicy` プロパティが完全に削除されました。
* `BlobBuilder` がサポートされました。現時点では接頭辞付きの実装 (`MozBlobBuilder`) となっています。
* `document.height`, `document.width` が削除されました。 バグ 585877
* `DocumentType` オブジェクトの `entities`, `notations` プロパティが削除されました。これは実装されておらず常に `null` を返しており、また仕様からも削除されていました。
* `DOMConfiguration` インターフェースと、それを使用していた `document.domConfig` プロパティが削除されました。これらはサポートされておらず、また DOM 仕様からも削除されていました。
* `hashchange` イベントが適切に `newURL`, `oldURL` フィールド を含むようになりました。
* `FileReader` インターフェースの `abort()` メソッドが、ファイルの読み込み中に利用された際に例外を投げるようになりました。
* `window.postMessage()` メソッドが structured clone algorithm (en-US) を使用するようになり、あるウィンドウから他のウィンドウに文字列ではなく JavaScript オブジェクトを渡せるようになりました。
* `window.history` API が `pushState()`, `replaceState()` メソッドに渡されたオブジェクトのシリアライズに structured clone algorithm (en-US) を使用するようになりました。これによって循環参照などを含むより複雑なオブジェクトも使用可能となりました。
* 新しく追加された `beforeprint`, `afterprint` イベントによって、印刷が行われたときと完了したときを検出する (en-US) ことができるようになりました。
* `document.strictErrorChecking` プロパティが削除されました。実装されておらず、また DOM 仕様からも削除されていました。
* 標準である `event.defaultPrevented` プロパティがサポートされました。`event.preventDefault()` がイベントから呼び出されたかを知る際には、非標準の `getPreventdefault()` ではなくこちらを使うようにしましょう。
* `window.top` プロパティが、適切に readonly となりました。
* これまでドキュメントのなかった DOM views が削除されました。これらには実装の詳細が多く、また不必要に様々なものを複雑にしていたため削除されました。もしこの変化に気づいた場合は、何か誤ったことをしている可能性があります。
* `EventTarget` の関数 `addEventListener()` に指定する引数 `useCapture` が optional となりました。これは WebKit の動作とも共通し、また新しい仕様でもそう定義されています。
* `XMLHttpRequest` オブジェクトの `mozResponseArrayBuffer` プロパティが `responseType`, `response` プロパティに置き換えられました。
* `HTMLElement` インターフェースに `element.dataset` プロパティが追加されました。このプロパティにより 要素の `data-*` グローバル属性 にアクセスできます。
* `CustomEvent` インターフェースが実装されました (バグ 427537)
* セキュリティの観点から、ユーザーがロケーションバーに `data:` URI と `javascript:` URI を入力した時、現在のページのセキュリティコンテキストを受け継がなくなりました。代わりに、新しい空のセキュリティコンテキストが生成されます。これにより、ロケーションバーに入力した `javascript:` URI から読み込まれたスクリプトは、DOM メソッドなどへのアクセスを持たなくなります。しかし、これらの URI がスクリプトから使用された場合は、これまでと同じように動作します。
### JavaScript

* これまで、いくつかの組み込み関数 (`eval`, `parseInt`, `Date.parse` など) に対し `new` オペレータを使うことができましたが、仕様においてこれは許されるべきではないとされていました。Firefox 6 では、このサポートが廃止されました。`new` オペレータのこういった利用は公式にはサポートされておらず、また広く利用されてもいません。この変更が何かに影響することはないでしょう。
* ECMAScript Harmony の WeakMaps がプロトタイプ実装として追加されました。
### SVG

* `pathLength` (en-US) 属性がサポートされました。
* `data:` URL から読み込まれたパターン、グラデーション、フィルタが適切に動作するようになりました。
### MathML

* `<mstyle>` (en-US) の実装が修正されました。
### アクセシビリティ (ARIA)

* 状態変化イベントが `aria-busy` の値の変化でも発生するようになりました。
* `aria-sort` が発生した際に属性変化イベントが発生するようになりました。
### ネットワーク

WebSocket

WebSocket プロトコルのサポートがバージョン 07 に更新されました。また、グローバルオブジェクトの`WebSocket`オブジェクトが`MozWebSocket`に改称されました。接頭辞のないオブジェクトの検出を目的としたときに問題となるため、それを防ぐ目的です。

* `Content-Disposition` ヘッダの構文解析が修正され、バックスラッシュでエスケープされた ASCII 文字が適切に文字そのものとして処理されるようになりました。これまではその文字をアンダースコア ("`_`")に置き換えるという誤った処理がなされていました。
* `Set-Cookie` ヘッダのパスの値において、クォートが適切に処理されるようになりました。これまでクォートを使った場合はそれがデリミタではなく、パスの文字列として認識されていました。\*\*この変更により、いくつかのサイトで互換性の問題が発生する可能性があります。\*\*製作者はコードをチェックすることが望まれます。
* `Upgrade` リクエストヘッダがサポートされました。`nsIHttpChannelInternal.HTTPUpgrade()` を呼ぶことで、HTTP チャネルから他のプロトコルへのアップグレードをリクエストできます。
### その他の変更

* Microsummary が削除されました。広く使われおらず、また見つけにくい機能でもあり、サポートの継続によって Places (ブックマークと履歴) のアーキテクチャを向上させることが難しくなっていたからです。
* WebGL が `OES_texture_float` 拡張をサポートしました。
* JavaScript コードをテストする簡易で便利なツール Scratchpad が追加されました。
Mozilla 開発者とアドオン開発者向けの変更点
-------------------------

Firefox 6 へアドオンを対応させるために必要な作業の概要は アドオンの Firefox 6 対応 をご覧ください。

**メモ:** Firefox 6 では、従来のメジャーリリースと同様に、バイナリコンポーネントをコンパイルし直す必要があります。詳しくは バイナリインタフェース をご覧ください。

### JavaScript コードモジュール

#### FileUtils.jsm

* `openSafeFileOutputStream()` メソッドは、ファイルを即座に開こうとする代わりに、`DEFER_OPEN` ビヘイビアフラグ 付きで開くようになりました。

#### XPCOMUtils.jsm

* 新しい `importRelative()` メソッドは、ある JavaScript コードモジュールを、他の JavaScript コードモジュールの相対パスから読み込むようになりました。これによって互いに依存するモジュールを開発しやすくなりました。
### XPCOM

* `nsCOMArray<T>` に、配列から複数のオブジェクトを一度に削除できる `RemoveObjectsAt()` メソッドが追加されました。
### クロームからの DOM の使用

クロームコードでの DOM File API の使用

これまでもクロームコード内で DOM File API を使うことは可能でしたが、`File` (en-US) コンストラクタをクロームで使用した場合に、ローカルパス名文字列を指定できるようになりました。また、`nsIFile` オブジェクトを使用して、DOM File API を通じてアクセスするファイルを指定できるようになりました。

### インタフェースの変更

* `nsINavHistoryQueryOptions` で、新たな定数 `SORT_BY_FRECENCY_ASCENDING` と `SORT_BY_FRECENCY_DESCENDING` を使った訪問頻度順のソートが可能になりました。
* `nsIFilePicker` に `addToRecentDocs` 属性が追加されました。これは、もしユーザの「最近使用したドキュメント」リストがあれば、そのリストに選択したファイルを追加するよう指定できるものです。この属性はプライベートブラウジングモードでは無視されます。
* `nsINavBookmarkObserver` メソッドにアイテム ID 引数を与える場合、GUID も必要となります。
* `nsIPrefBranch.clearUserPref()` が、指定された設定が存在しない場合やユーザ設定値がない場合も、例外を投げなくなりました。その代わり、単に何もしなくなりました。
* `nsIMemoryReporter` インタフェースで、調べたいメモリの種類 (マップ、ヒープ、その他) を指定できるようになりました。
* `nsISHEntry` の `stateData` 属性が `nsIStructuredCloneContainer` を返すようになりました。
* `nsIURI` に `ref` 属性が追加されました。これは、URI の一部の参照 (「#」以降の部分) を返すものです。また、参照メンバーなしに `nsIURI` を複製できる `cloneIgnoringRef()` メソッドと、参照メンバーを無視して他の `nsIURI` と比較できる `equalsExceptRef()` メソッドが追加されました。

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

`mozIAsyncFavicons`

ブックマークアイコン (favicon) サービスへの非同期アクセスが可能な新サービスです。

`nsIEventSource`

*詳細は後日解説します。*

`nsIGSettingsCollection`

*詳細は後日解説します。*

`nsIGSettingsService`

*詳細は後日解説します。*

`nsIHttpUpgradeListener`

`nsIHttpChannelInternal.HTTPUpgrade()` メソッドを通じた HTTP アップグレード要求を処理するためのコールバックインタフェースです。

`nsIStructuredCloneContainer`

構造化された複製アルゴリズム を使ってシリアライズされたオブジェクトのためのコンテナです。

`nsITelemetry`

パフォーマンス測定を目的とした 使用統計情報 (Telemetry) を記録とヒストグラムの生成に使用されます。バグ 649502 と バグ 585196 参照。

`nsITimedChannel`

バグ 576006 参照。

`nsIWebSocketListener`

バグ 640003 参照。

`nsIWebSocketProtocol`

バグ 640003 参照。

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

以下のインタフェースは、不要となり削除された実装です。詳細はバグを参照してください。

* `nsIDOMDocumentEvent` (バグ 655517)
* `nsIDOMDocumentTraversal` (バグ 655514)
* `nsIDOMDocumentRange` (バグ 655513)
* `IWeaveCrypto` (バグ 651596)
* `nsIDOM3DocumentEvent` (バグ 481863)
* `nsIDOMAbstractView`
* `nsILiveTitleNotificationSubject`
* `nsIPlugin` (バグ 637253)
* `nsIPluginInstance` (バグ 637253)
* `nsIHTMLEditRules` (バグ 633750)
* `nsIXSLTProcessorObsolete` (バグ 649534)
### その他の変更

アプリケーションコードからの設定の使用

設定へ簡単にアクセスできる、新しい静的な API が実装されました。これはアプリケーションコードからのみ使用可能であり、アドオンでは使用できません。

参考
--

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

* 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