Firefox 51 for developers
=========================

Firefox の最新の開発者向け機能を試すには、Firefox Developer Edition をインストールしてください。Firefox 51 は、米国時間 2017 年 1 月 24 日にリリースされました。このページでは、開発者に影響する Firefox 51 の変更点をまとめています。

ウェブ開発者向けの変更点一覧
--------------

### HTML

* `<menu>` 要素内でセパレーターとして `<hr>` が使用可能になりました (Firefox バグ 870388)。
* `<input>` および `<textarea>` 要素の `selectionStart` および `selectionEnd` 属性が、テキストが選択されていない場合に 0 ではなく、現在のテキスト入力カーソルの位置を正しく返すようになりました (Firefox バグ 1287655)。
### CSS

* <input type="radio"> 向けに `:indeterminate` を実装しました(Firefox バグ 885359)。
* `<input type="text">` 向けに `:placeholder-shown` を実装しました (Firefox バグ 1069015)。
* `::placeholder` 擬似要素の接頭辞を削除しました (Firefox バグ 1069012)。
* `:valid` CSS 擬似クラスが有効な `<form>` 要素に一致しない問題を修正しました (Firefox バグ 1285425)。
* `unicode-bidi` の値 `plaintext` が、縦書きモードでも動作するようになりました (Firefox バグ 1302734)。
* `clip-path` の値 `fill-box` および `stroke-box` を正式にサポートしました。以前は `border-box` の別名でした (Firefox バグ 1289011)。
* max-height が指定された、単一行で高さが自動のフレックスコンテナー内で、フレックス行の高さを抑える (引き延ばされたフレックスアイテムを抑える) ようになりました (仕様変更) (Firefox バグ 1000957)。
### JavaScript

* ES2015 の `Symbol.toStringTag` プロパティを実装しました (Firefox バグ 1114580)。
* ES2015 の `TypedArray.prototype.toString()` および `TypedArray.prototype.toLocaleString()` メソッドを実装しました (Firefox バグ 1121938)。
* `DateTimeFormat.prototype.formatToParts()` メソッドが使用可能になりました (Firefox バグ 1289340)。
* `const` および `let` が ES2015 に完全準拠しました (Firefox バグ 950547)。
* `for...of` ループ内で `const` を使用すると `SyntaxError` が発生せず、イテレーションのたびに新たなバインディングを行うようになりました (Firefox バグ 1101653)。
* 非推奨の for each...in ループは、コンソールで警告が発生する ようになりました (Firefox バグ 1293205)。標準化された `for...of` ループを使用するように、コードを移行してください。
* ジェネレーター関数 は label を持つことができなくなりました。また、ラベル名として "`let`" が許可されなくなりました (Firefox バグ 1288459)。
* 非推奨の 古いジェネレーター関数 (en-US) を メソッド定義 内で使用すると、エラーが発生するようになりました (Firefox バグ 1199296)。
* イテレータープロトコル の `next()` メソッドは、返値がオブジェクトではない場合に `TypeError` が発生するようになりました (Firefox バグ 1016936)。
### 開発者ツール

* ネットワークモニターで、ネットワーク要求の "ブロック" 状態を表示するようになりました。
* Firefox 50 から Firefox 51 の間に解決した開発ツール関連のバグ一覧
### WebGL

* WebGL 2 をデフォルトで有効化しました。webglsamples.org/WebGL2Samples でいくつかのデモをご覧ください。
    + WebGL 2 は、`<canvas>` 要素に OpenGL ES 3.0 をもたらす `WebGL2RenderingContext` (en-US) インターフェイスを提供します。
    + 新機能:
        - 3D テクスチャ (en-US)、
        - Sampler object (en-US)、
        - Uniform Buffer object (en-US)、
        - Sync object (en-US)、
        - Query object (en-US)、
        - Tranform Feedback object (en-US)、
        - WebGL 2 のコア機能に昇格した拡張: Vertex Array object (en-US)、instancing (en-US)、Multiple Render Targets (en-US)、fragment depth (en-US)。
* `WEBGL_compressed_texture_es3` 拡張 (Firefox 46 で実装) を `WEBGL_compressed_texture_etc` (en-US) に改名して (Firefox バグ 1316778)、WebGL 2 コンテキストにデフォルトで含まれないようになりました (Firefox バグ 1306174)。
* `EXT_disjoint_timer_query` (en-US) 拡張を、`WebGLTimerQuery` オブジェクトではなく `WebGLQuery` (en-US) オブジェクトを使用するように更新しました (Firefox バグ 1308057)。
* `OES_vertex_array_object` (en-US) 拡張が、独自の `WebGLVertexArrayObjectOES` オブジェクトではなく WebGL 2 の `WebGLVertexArrayObject` (en-US) オブジェクトを使用するようになりました (Firefox バグ 1318523)。
* `WebGLRenderingContext.texImage2D()` (en-US)、`WebGLRenderingContext.texSubImage2D()` (en-US)、`WebGL2RenderingContext.texImage3D()` (en-US)、`WebGL2RenderingContext.texSubImage3D()` (en-US) といったメソッドで、テクスチャ画像のソースとして `ImageBitmap` が使用可能になりました (Firefox バグ 1324924)。
### IndexedDB v2

* IndexedDB バージョン 2 の実装が完了しました:
    + `IDBObjectStore.getKey()` メソッドをサポートしました (Firefox バグ 1271506)。
    + `IDBCursor.continuePrimaryKey()` メソッドをサポートしました (Firefox バグ 1271505)。
    + バイナリーキーをサポートしました (Firefox バグ 1271500)。
    + "What's new in IndexedDB 2.0?" – Mozilla hacks もご覧ください。
### Canvas

* 非標準の `CanvasRenderingContext2D.mozFillRule`() メソッドを削除しました。塗りつぶし規則は、標準の `CanvasRenderingContext2D.fill()` (en-US) メソッドの引数で定義できます (Firefox バグ 826619)。
* `CanvasRenderingContext2D.imageSmoothingEnabled` の接頭辞を削除しました (Firefox バグ 768072)。
### SVG

* `tabindex (en-US)` 属性を追加しました (Firefox バグ 778654)。
* `xlink:href (en-US)` を不要にさせる、`href (en-US)` 属性を追加しました (Firefox バグ 1245751)。
* `SVGElement.dataset` プロパティと `data-\* (en-US)` SVG 属性一式を使用して、SVG 要素でカスタムデータ属性を使用できるようになりました (Firefox バグ 921834)。
* `<img>` 要素内の SVG で使用する CSS アニメーションが、再び動作するようになりました。これは、過去のリグレッションでした (Firefox バグ 1190881)。
### Web Workers

* 非標準かつ廃止扱いの `WorkerGlobalScope.onclose` (en-US) イベントハンドラーと、`close` イベントを `Worker` で使用する機能を Firefox から削除しました。
### ネットワーク

* MIME タイプ `image/*`、`video/*`、`audio/*`、`text/csv` で提供されるスクリプトをブロックして、読み込みおよび実行しないようになりました。`<script>` 要素を使用して宣言したとき、あるいは `Worker.importScripts()`、`Worker()`、`SharedWorker()` を使用して読み込んだときに発生します (Firefox バグ 1229267 and Firefox バグ 1288361)。
* 公式に信頼された認証局から、SHA-1 証明書のサポートを削除しました (Firefox バグ 1302140)。詳しくは、Phasing Out SHA-1 on the Public Web もご覧ください。
* WoSign および StartCom の新たな証明書は、今後受け入れません (Firefox バグ 1309707)。詳しくは Distrusting New WoSign and StartCom Certificates をご覧ください。
* 情報漏えいを避けるために PAC の `FindProxyForURL(url, host)` 関数は、https:// URL からパスおよびクエリーを取り除くようになりました (Firefox バグ 1255474、Sniffing HTTPS URLS with malicious PAC files、`CVE-2017-5384` をご覧ください)。
### XHR

* `XMLHttpRequest.responseXML` プロパティは、受信したデータを解析する際にパースエラーが発生した場合に、先頭に <parsererror> ノードを置いた部分的な `Document` を返さないようになりました。代わりに、正しく `null` を返します (Firefox バグ 289714)。
* 最新の仕様書に合わせて、`setRequestHeader()` で `Accept` ヘッダーを設定していない `XMLHttpRequest` は、値として `*/*` を設定した Accept ヘッダーを送信するようになりました (Firefox バグ 918752)。
* `XMLHttpRequest.open()` で、パラメーター `username` および `password` を省略した場合の既定値を、仕様書に従って `null` にするよう修正しました (Firefox バグ 933759)。
### WebRTC

* `RTCPeerConnection.removeStream()` (en-US) メソッドを削除しました。これは Firefox 22 から非推奨であり、長い間 `NotSupportedError` が発生していました。代わりに、ストリームの各トラックで `RTCPeerConnection.removeTrack()` (en-US) を使用しなければなりません。
* WebRTC で、デフォルトで VP9 コーデックをサポートします。Firefox 46 で VP9 を追加したときはデフォルトで無効化していましたが、有効化すれば優先的に選択するコーデックになりました。ただし、CPU 使用率のために第 2 の選択肢 (VP8 より後) になることがありました。
* `HTMLMediaElement.captureStream()` メソッドは、指定した `<video>` または `<audio>` のコンテンツを含む `MediaStream` を返します。このメソッドはまだ `mozCaptureStream()` として接頭辞がついており、仕様書に完全には準拠していないことに注意が必要です。
### Audio/video

* FLAC コンテナーおよび Ogg コンテナーの FLAC (FLAC コーデック) をサポートしました (Firefox バグ 1195723)。サポートする FLAC の MIME タイプは、`audio/flac` および `audio/x-flac` です。Ogg コンテナーの FLAC でサポートする MIME タイプは、`audio/ogg; codecs=flac` および `video/ogg; codecs=flac` です。
* MP4 で FLAC をサポートしました (MSE の有無にかかわらず) (Firefox バグ 1303888)。
* Firefox 50 で、`setInterval()` および `setTimeout()` で作成したタイマーをバッググラウンドのタブで抑制する機能は、ウェブオーディオ API の `AudioContext` がアクティブで音声を再生しているときに実施しないようになりました。しかし、これはタイミングに敏感な音声再生 (タイマーを使用して個々の音を生成する音楽プレイヤーなど) が正しく動作しない問題を、すべての状況では解決できませんでした。このため、Firefox 51 では音声を再生していない場合でも `AudioContext` が存在するバックグラウンドタブで抑制しないようになりました。
### DOM

* `DOMImplementation.hasFeature()` は、どのような場合でも `true` を返すようになりました (Firefox バグ 984778)。
* `HTMLInputElement` および `HTMLTextAreaElement` の `selectionStart` および `selectionEnd` プロパティが、テキストが選択されていない場合に 0 ではなく、現在のテキスト入力カーソルの位置を正しく返すようになりました (Firefox バグ 1287655)。
* `HTMLImageElement` インターフェイスと対応する `<img>` 要素で `onerror` イベントハンドラーをサポートしました。 `error` イベントを、画像の読み込みや解釈を行おうとしてエラーが発生したときに、要素に送信します。
* `effect` プロパティに値を設定して、ウェブアニメーション (`Animation`) のエフェクトを変更できるようになりました。以前は、このプロパティが読み取り専用でした (Firefox バグ 1049975)。
* Permissions API の `Permissions.revoke()` メソッドを追加しました。設定項目 (`dom.permissions.revoke.enable`) で制御しており、設計や存在自体について Web Application Security Working Group で議論されているため、デフォルトで無効化しています。
* ストレージ API の `navigator.storage` (en-US) プロパティおよび `StorageManager.estimate()` メソッドを、必要なサポートコードと共に実装しました。ストレージユニットの永続化機能は未実装です。Firefox バグ 1267941 をご覧ください。
* セキュリティ上の理由で、`BatteryManager.chargingTime` (en-US) および `BatteryManager.dischargingTime` (en-US) は返値をもっとも近い 15 分単位の値に丸めるようになりました (Firefox バグ 1292655)。
### イベント

* Firefox で `onanimationstart`、`onanimationiteration`、`onanimationstart` イベントハンドラーと、`addEventListener()` でそれらに対応するイベントをサポートしました (Firefox バグ 911987)。
* Firefox で `ontransitionend` イベントハンドラーをサポートしました (Firefox バグ 911987)。
### セキュリティ

* ログインページ (すなわち `<input type="password">` フィールドを含むページ) でログイン情報が安全でない方法で送信されると思われる場合に、Firefox はユーザーに警告するため、アドレスバーに打ち消し線付きの錠前のアイコンを表示します (Firefox バグ 1319119)。詳しくは 安全でないパスワード をご覧ください。
### 廃止

* 非標準の Simple Push API を、Gecko から完全に削除しました。これは主に Firefox OS 用の API であり、W3C Push API に置き換えられました (Firefox バグ 1296579)。
* 非標準の Alarms API を Gecko から完全に削除しました。これは主に Firefox OS 用の API でした (Firefox バグ 1300884)。
* Page Visibility API で、接頭辞のサポートを廃止しました (Firefox バグ 812701)。
アドオン開発者と Mozilla 開発者向けの変更点
--------------------------

### WebExtensions

* 新規 API:
    + `idle.queryState()` (en-US) (Firefox バグ 1299846)
    + `idle.onStateChanged` (en-US) (Firefox バグ 1299775)
    + `management.getSelf()` (en-US) (Firefox バグ 1283116)
    + `management.uninstallSelf()` (en-US) (Firefox バグ 1220136)
    + `runtime.getBrowserInfo()` (en-US) (Firefox バグ 1268399)
    + `runtime.reload()` (en-US) および `runtime.onUpdateAvailable()` (en-US) (Firefox バグ 1279012)
* レガシーアドオンに WebExtension を埋め込む ことが可能になりました (Firefox バグ 1252215)。
* クリップボードへのアクセス をサポートしました (Firefox バグ 1197451)。
* `tabs.executeScript()` のコールバックに渡す引数を修正しました (Firefox バグ 1290157)。
* WebExtension をアンインストールするとき、localStorage (en-US) を消去するようになりました (Firefox バグ 1213990)。
* Web Extensions で変更された `Content-Type` ヘッダーを考慮するようになりました (Firefox バグ 1304331)。
### その他

* アドオンがインストールされるときに Firefox でマルチプロセスの有効化を避けるために、`install.rdf` の `multiprocessCompatible` プロパティで明示的に `false` を設定することが必要になりました。
* Mozilla 特有の Social API を、以下のとおり大きく変更しました (主に、もはや使用されていない API を削除しました):
    + `MozSocial` インターフェイスと、これをサポートする `navigator.mozSocial` プロパティを削除しました。
    + Social Bookmarks API を削除しました。
    + ソーシャルチャット機能を削除しました。
    + Social Status API を削除しました。
    + Share panel を除く、すべての ソーシャルウィジェット を削除しました。social sidebar や flyover panel などが含まれます。
    + 削除した API のためにサポートしていたユーザインターフェイスや機能も、同様に削除しました。
    + 削除した機能をサポートする、Social service provider manifest のプロパティを廃止しました。
* ファイル拡張子と MIME タイプの関連付けを与えるために `mimeTypes.rdf` をアドオンが使用する場合に、`"ext-to-type-mapping"` カテゴリーで項目を登録することが必要になりました (Firefox バグ 306471)。
* Browser API が、`mozbrowserlocationchange` イベントのイベントオブジェクトで `detail` オブジェクトを含むようになりました。`canGoForward`/`canGoBack` プロパティを持っており、mozBrowser の戻る/進む の状態を同期的に取得できます (Firefox バグ 1279635)。
過去のバージョン
--------

* Firefox 50 for developers
* Firefox 49 for developers
* Firefox 48 for developers
* Firefox 47 for developers
* Firefox 46 for developers
* Firefox 45 for developers
* Firefox 44 for developers
* Firefox 43 for developers
* Firefox 42 for developers
* Firefox 41 for developers
* Firefox 40 for developers
* Firefox 39 for developers
* Firefox 38 for developers
* Firefox 37 for developers
* Firefox 36 for developers
* Firefox 35 for developers
* Firefox 34 for developers
* Firefox 33 for developers
* Firefox 32 for developers
* Firefox 31 for developers
* Firefox 30 for developers
* Firefox 29 for developers
* Firefox 28 for developers
* Firefox 27 for developers
* Firefox 26 for developers
* Firefox 25 for developers
* Firefox 24 for developers
* Firefox 23 for developers
* Firefox 22 for developers
* Firefox 21 for developers
* Firefox 20 for developers