Firefox 7 for developers
========================

Firefox 7 は 2011 年 9 月 27 日にリリースされました。このページは Firefox 7 のリリースにあたり、開発者に関係する変更についてまとめたものです。

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

### HTML

* `HTMLHeadElement` の `profile` プロパティが削除されました。このプロパティは Gecko 2.0 から非推奨となっていました。
* `HTMLImageElement` の `x` プロパティと `y` プロパティが削除されました。
* `HTMLSelectElement` の `add()` メソッドの `before` 引数が optional となりました。
* `<body>` の `background` 属性が URI として解決されなくなりました。この変更は HTML 仕様への準拠によるものです。
* `<option>` の `label` 属性が指定されていない場合、要素の内容テキストを反映するようになりました。

#### Canvas

* `setTransform()`, `bezierCurveTo()`, `arcTo()` に不正な値を与え呼び出したとき、例外が投げられなくなりました。これらは無視されます。
* `isPointInPath()` (en-US) メソッドに与えられた点と現在のパスを比較するにあたり、変換マトリクスを適切に考慮するようになりました。
* `strokeRect()` メソッドが幅 0 高さ 0 で呼び出された場合、何もしなくなりました。
* `drawImage()` (en-US) メソッドが幅 0 もしくは高さ 0 で呼び出された場合、`<canvas>` は `INVALID_STATE_ERR` を投げるようになりました。
* `drawImage()` (en-US) メソッドが非定形の座標で呼び出された場合に、例外が投げられなくなりました。
* `toDataURL()` が JPEG の品質を制御する引数を受け付けるようになりました。
* `globalCompositeOperation` の値から、非標準だった `clear` と `over` が削除されました。
* 影 が `source-over` 合成処理の場合にのみ描画されるようになりました。
* Canvas の塗りつぶし方を設定する `mozFillRule` (en-US) アトリビュートが追加されました。
### CSS

* `text-overflow` がサポートされました。
* `-moz-orient` (en-US) が修正され、縦配置の `<progress>` でも進行方向が適切なものになりました。
### MathML

* XLink href が復活し、また MathML3 の `href` 属性もサポートされました。リンクには後者の属性を使うことが望まれます。
* `<mpadded> (en-US)` 要素に `voffset` 属性のサポートが追加されました。また `lspace` 属性の挙動も修正されました。
* トップレベル要素である `<math>` 要素が `<mstyle> (en-US)` 要素のもつ属性すべてを受け入れるようになりました。
* Asana Math フォントのサポートが追加されました。
* `<mfrac>` 要素によって表される分数の線の太さ `medium` が修正され、規定の太さになりました。
* 負のスペースを表すキーワード (en-US) がサポートされました。
### DOM

* `File` インターフェースの非標準なメソッド `getAsBinary()`, `getAsDataURL()`, `getAsText()` が削除されました。あわせて、非標準なプロパティ `fileName` と `fileSize`も削除されました。
* `Blob` によってデータが指定され、また `Content-Disposition` HTTP ヘッダが送信されたとき、`FormData` (en-US) インターフェースはファイル名を空文字列として報告しないようになりました。これによって幾つかのサーバに起こっていたエラーが解消されます。
* `element.dir` 属性が結果を常に小文字で返すようになりました。これは HTML 仕様の要件によるものです。
* `FileReader` の `readAsArrayBuffer()` メソッドが実装されました。
* `document.createEntityReference` が削除されました。このメソッドは適切に実装されておらず、他のブラウザのほとんどで実装されていませんでした。
* `document.normalizeDocument` が削除されました。今後は `Node.normalize` を利用してください。
* `index` が範囲外の場合、`DOMTokenList.item` が `undefined` を返すようになりました。これまでは `null` を返していました。
* `Node.getFeature` が削除されました。
* `HTMLInsElement` インターフェースと `HTMLDelElement` インターフェースが削除されました。これは `<ins>` と `<del>` 要素が実際には `HTMLModElement` を使用していたためです。
* 新しい DOM4 仕様にある `Attr` が `Node` を継承しない (DOM Core 1, 2, 3 まではしていた) という定義に準拠するため、`Attr` インターフェース上の `Node` プロパティやメソッドについて、将来的にこれらを削除するといった意味の 警告を出す (en-US) ようになりました。
* `Window` オブジェクトに `window.ondeviceorientation` (en-US) プロパティと `window.ondevicemotion` プロパティのサポートを追加しました。
* `window.resizeTo`、`window.resizeBy`、`window.moveTo`、`window.moveBy` はメインウィンドウに適用されなくなりました。
### JavaScript

* `Function.arity` プロパティが削除されました。今後は `Function.length` を利用してください。
### WebSocket

* 設定項目に `network.websocket.max-connections` が導入されました。これは WebSocket の同時最大接続数を決定するために使用されます。既定値は 200 です。
* WebSocket プロトコルで使用するプロトコルバージョンが、IETF draft 10 で指定されているバージョン 8 になりました。Firefox 6 ではバージョン 7 が使われていました。
* WebSocket API が Firefox Mobile でも利用可能になりました。
### Console API

* web console が開かれる前に `console.log` によって記録されたメッセージもあらかじめ記録され、web console が開かれた時に表示されるようになりました。
### Web Timing

* Navigation Timing 仕様の初期実装が完了しました。
### XML

* XSLT スタイルシートはこれまでサポートされていた `text/xsl` に加えて、正式な `MIME` 型 `application/xslt+xml` も利用可能になりました。(スタイルシート処理命令もしくは HTTP Link ヘッダで利用できます。)
Mozilla 開発者とアドオン開発者向けの変更点
-------------------------

これらの変更は、アドオン開発者と、Mozilla 本体のコードに関わっている開発者の双方に影響するものです。アドオン開発者は アドオンの Firefox 7 対応 に書かれている追加情報も参照してください。

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

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

#### FileUtils.jsm

* 書き込みのための、安全でない状態のファイル出力ストリームを開ける `openFileOutputStream()` メソッドが追加されました。

#### AddonManager.jsm

* アプリケーション起動中に変更が行われたアドオンの一覧を管理できるメソッドがアドオンマネージャに追加されました。`addStartupChange()`、`removeStartupChange()`、`getStartupChanges()` の 3 つです。
### XUL

* `tree` 要素で、`datasources` 属性によって参照されたノードがすべて `id` 属性で指定された固有 ID を持っていた場合、3 種類の公開状態を記憶できるようになりました。
* `panel` 要素で、新しい `backdrag` 属性を使って、ユーザがバックグラウンドの任意の場所をクリックして、その要素をドラッグできるように 設定することが可能となりました。
### XPCOM

* `Components.utils.schedulePreciseGC()` メソッドが追加されました。これは、以後どこかの時点で JavaScript コードが何も実行されていないときに、完全なガベージコレクション処理を行う予定を入れられるものです。
* `Components.utils.unload()` メソッドが追加されました。これは、`Components.utils.load()` で読み込まれた JavaScript コードモジュールを破棄できるようにするものです。
### ユーザ体験の変更

* 拡張機能のオプションが、再起動不要型と従来型のいずれでも アドオンマネージャ内に表示 されるようになりました。
* ダウンロードされたファイルの保存先がサイトごとに記憶されるようになりました。このデータは DownloadLastDir.jsm を使ってアクセスできます。
### ビルドシステムの変更

* ActiveX 組み込み API はビルドされなくなり、ビルドシステムでのサポートも削除されました。関連インタフェースも削除されました。下記 削除されたインタフェース を参照してください。
* Windows でのビルド時に `-Zc:wchar_t-` を指定できなくなりました。詳しくは、更新された ビルド手順 をご覧ください。
### インタフェースの変更

* `nsISocketTransport` に新しい接続フラグ `DISABLE_IPV6` が追加されました。これは、利用可能な IPv6 アドレスがあってもそれを無視して、IPv4 アドレスのみに接続するようソケットを設定するものです。また、`nsIDNSService` に新しい解決フラグ `RESOLVE_DISABLE_IPV6` が追加されました。これは、利用可能な IPv6 アドレスがあってもそれを無視して、IPv4 ホストのみを考慮してドメイン名解決を行うものです。これらの変更は、IPv4 と IPv6 の両方に対応している (その中でも特に IPv6 接続がうまくいかない) ホストへ接続する際の応答時間を短縮する 「幸せな目玉」戦略 を実装するために使われます。
* `inIDOMUtils` に 2 つのメソッドが追加されました。あるノードの子ノード一覧を返す `getChildrenForNode()` と、選択範囲内で使用されているフォントフェイス一覧を返す `getUsedFontFaces()` です。
* `nsIMarkupDocumentViewer_MOZILLA_2_0_BRANCH` インタフェースは `nsIMarkupDocumentViewer` インタフェースへ統合されました。
* `nsIDOMWindow2` インタフェースは `nsIDOMWindow` インタフェースへ統合されました。
* `nsIDOMWindow_2_0_BRANCH` インタフェースは `nsIDOMWindowInternal` インタフェースへ統合されました。
* URI 引数付きで `nsINavHistoryObserver` メソッドを使う場合、GUID も必要となります。
* `nsISHistory_2_0_BRANCH` インタフェースは `nsISHistory` インタフェースへ統合されました。
* `nsITelemetry` に、ID からヒストグラムを返す `getHistogramById()` メソッドと、`false` 設定時に 使用統計情報 (Telemetry) の記録を無効化できる `canRecord` 属性が追加されました。使用統計情報はプライベートブラウジングモードでは記録されなくなりました。(Firefox バグ 661574、Firefox バグ 661573)
 `newHistogram()` で定義された使用統計ヒストグラムは、Mozilla への定期報告に含まれません。
* `nsIMemoryReporter` インタフェースに大幅な変更が行われました。使用する場合はコードに変更を加える必要があるでしょう。
* `nsIXMLHttpRequest.setRequestHeader()` によって設定されたヘッダが、リダイレクトを辿る際にもリクエストに含まれて送信されるようになりました。これまでこの方法で設定されたヘッダは送信されていませんでした。
* `nsIDocShell` に `allowWindowControl` 属性が追加されました。`true` を設定すると、docshell のコンテンツがウィンドウをコントロールできるようになります (ウィンドウの移動やサイズ変更など)。
* `nsIThreadInternal2` インタフェースは `nsIThreadInternal` インタフェースへ統合されました。

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

`nsIDOMFontFace`

ひとつのフォントフェイスを表します。

`nsIDOMFontFaceList`

`nsIDOMFontFace` で表されたフォントフェイスの一覧を表します。

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

以下のインタフェースは、不要となり削除された実装です。

* `nsIDOM3Attr`
* `nsIDOM3Node`
* `nsIDOM3TypeInfo`
* `nsIDOM3Text`
* `nsIDOMDocumentStyle`
* `nsIDOMNSDocument`
* `nsIDOMNSFeatureFactory`
* `nsIDOMNSHTMLDocument`
* `nsIDOMNSHTMLFormElement`
* `nsIDOMNSHTMLHRElement`
* `nsIDOMNSHTMLTextAreaElement`

以下のインタフェースは、ActiveX 組み込み API 廃止の一環として削除されました。

* `DITestScriptHelper`
* `DWebBrowserEvents`
* `DWebBrowserEvents2`
* `IDispatch`
* `IMozControlBridge`
* `IMozPluginHostCtrl`
* `IWebBrowser`
* `IWebBrowser2`
* `IWebBrowserApp`
* `IXMLDocument`
* `IXMLElement`
* `IXMLElementCollection`
* `IXMLError`
* `nsIActiveXSecurityPolicy`
* `nsIDispatchSupport`
* `nsIMozAxPlugin`
* `nsIScriptEventHandler`
* `nsIScriptEventManager`
参考
--

* 高速リリースサイクルに関するよくある質問

* Firefox 6 for developers
* 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