Firefox 57 (Quantum) for developers
===================================

Firefox 57 (別名 Firefox Quantum) は、米国時間 2017 年 11 月 14 日にリリースされました。このページでは、開発者に影響する Firefox 57 の変更点をまとめています。

Firefox 57 === Firefox Quantum
------------------------------

Firefox 57 は、Firefox を徹底的に再構築してパフォーマンス、安定性、外見を大きく向上させることを目指す Firefox Quantum エンジニアリングプロジェクトにちなんで **Quantum** というリリース名が与えられました。Firefox 57 はこれらの改善点の一部をリリースする最初のバージョンであり、祝福を求めていました。

**メモ:** このリリースの Quantum の特徴について詳しくは、Dan Callahan による記事 Firefox Quantum Developer Edition: the fastest Firefox ever with Photon UI and better tooling をご覧ください。

Firefox's new parallel CSS engine、別名 **Quantum CSS** または **Stylo** はデスクトップ版の Firefox 57 でデフォルトで有効であり、モバイル版の Firefox は追って有効化します。多くのパフォーマンス向上は別として、開発者が何らかの大きな違いに気づくことがあってはいけません。Stylo には多くの小規模な機能差がありますが、Gecko で取り除くべき非標準の動作を修正するために実装したものです。このような差異は、適宜リファレンスのページやリリースノートに掲載します (Quantum CSS に関する補足 を参照)。

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

### 開発者ツール

*変更なし。*

### HTML

* `<input>` の date および time 型が、すべてのビルドで有効になりました (Firefox バグ 1399036)。
### CSS

* `display-mode` メディアクエリーの値 `minimal-ui` および `standalone` をサポートしました (Firefox バグ 1369815)。ウェブアプリマニフェストの `display` フィールド もご覧ください。
* `grid-row-gap` および `grid-column-gap` プロパティが、`grid` ショートハンドプロパティでリセットされないようになりました (Firefox バグ 1387410)。
* 設定項目 `layout.css.clip-path-shapes.enabled` を削除しました (Firefox バグ 1399767)。この設定項目で、`clip-path` の `<basic-shape>` のサポートを無効化できました。これは Firefox 54 で導入されたものであり、今後は無効化できません。

#### Quantum CSS に関する補足

Quantum で以下の不具合を修正しました。

* 以前の Gecko のスタイルシステムでは `radial-gradient(circle gold,red)` のような放射状のグラデーションが、`circle` と `gold` の間にカンマがないため動作すべきではないにもかかわらず、動作していました (Firefox バグ 1383323)。
* オフスクリーンの要素をオンスクリーンにアニメーションするときに遅延を指定すると、Gecko は Windows など一部のプラットフォームで再描画を行いません (Firefox バグ 1383239)。
* Gecko では、`<details>` 要素で `animation` をアクティブにすると `open` 属性を使用して既定で開かせることができません (Firefox バグ 1382124)。
* Gecko では、色を指定した `text-shadow` から色を指定しない `text-shadow` へ遷移する場合に`トランジション`が動作しません (Firefox バグ 726550)。
* Gecko ではアニメーションのフィリングをキャンセルする (例えば `animation-fill-mode: forwards` を設定) と、1 回だけですが同じ要素に設定したトランジションを発生させられます (詳しくは Firefox バグ 1192592 および こちらのテストケース をご覧ください)。一般的に、宣言的なアニメーションがトランジションを発生させるべきではありません。
* Gecko では em 単位を使用するアニメーションが、アニメーションする要素の親で `font-size` を変更しても影響を受けませんが、実際は影響を受けるべきです (Firefox バグ 1254424)。
* Gecko と Quantum CSS では `font-size` の継承が異なっており、Gecko では一部の言語設定で継承したフォントのサイズが想定より小さくなります (Firefox バグ 1391341)。
* Gecko では `@-moz-document` 規則の `domain()` あるいは `url-prefix()` URL マッチング関数で解析するときに、URL トークンの解析と同じ仕組みを再使用します。Quantum CSS は同じ仕組みを使用せず、括弧や引用符を含む場合にトークンを無効とみなしません (Firefox バグ 1362333)。
* Gecko では canvas 2D コンテキストの `font` の値としてシステムフォント (例えば `menu`) を設定すると、期待するフォントが返りません (何も返りません)。Quantum でこの不具合を修正しました (Firefox バグ 1374885)。
* Gecko では、切り離されたサブツリー (例えば `createElement()` を使用して作成した、DOM に未挿入の `<div>`) を作成すると、サブツリーのルート要素がブロックレベル要素として設定されます。Quantum CSS では仕様書に従って、インラインとして設定します (Firefox バグ 1374994)。
* Gecko では `calc()` 式を `radial-gradient()` の半径の構成要素として使用すると、式が拒否されて値が無効になります (Firefox バグ 1376019)。
* Gecko では `calc(1*2*3)` が正しく解析されません。Quantum CSS でこの不具合を修正しました (Firefox バグ 1379467)。
* Quantum CSS では、`calc()` を仕様書で説明されているとおり全面的にサポートしています (Firefox バグ 1350857)。Gecko はそうではありません。
* Gecko は `::before` および `::after` 疑似要素で、`content` プロパティの値が `normal` や `none` であっても疑似要素を生成する不具合があります。仕様書によると、このようにするべきではありません (Firefox バグ 1387931)。
* Gecko は `background-position` プロパティで、異なる数の `<position>` 値を持つ 2 つの値の間 (例えば `background-position: 10px 10px;` と `background-position: 20px 20px, 30px 30px;`) でトランジションを行えない不具合があります (Firefox バグ 1390446)。
### SVG

*変更なし。*

### JavaScript

* 非標準の `for each...in` (E4X) ループを廃止しました。代わりに `for...of` を使用してください。また、移行の助けになる Warning: JavaScript 1.6's for-each-in loops are deprecated をご覧ください。(Firefox バグ 1083470)
* `Object.prototype.watch()` および `unwatch()` メソッドが非推奨になり、使用すると警告が発生します。また、将来削除する予定です (Firefox バグ 934669)。
* 非標準の `Iterator` および `StopIteration` オブジェクトと、古いイテレーションプロトコルを廃止しました (Firefox バグ 1098412)。
* 非同期ジェネレーターを有効化しました (Firefox バグ 1352312)。
* for await (... of ...) 構文を有効化しました (Firefox バグ 1352312)。
### API

#### 新規 API

* `PerformanceObserver` API をデフォルトで有効にしました (Firefox バグ 1386021)。
* `AbortController` および `AbortSignal` インターフェイス (Abort API) を追加しました。必要に応じて、DOM リクエスト (fetch リクエスト など) を中止できます (Firefox バグ 1378342)。
* Storage API を実装して、デフォルトで有効にしました (Firefox バグ 1399038)。

#### DOM

* Selection API の `Selection.type` (en-US) プロパティを実装しました (Firefox バグ 1359157)。
* `Document.createEvent('FocusEvent')` をサポートしました (Firefox バグ 1388069)。
* `HTMLInputElement` インターフェイスの `files` プロパティが設定可能になりました (Firefox バグ 1384030)。
* `HTMLDocument.getSelection()` メソッドを `Document` インターフェイスに移動して、XML ドキュメントで使用可能になりました (Firefox バグ 718711)。
* `messageerror` イベントを実装して、メッセージターゲットで実装したイベントハンドラーの発動に反応して実行するコードを持つことが可能になりました。`MessagePort.messageerror_event`、`DedicatedWorkerGlobalScope.messageerror_event`、`Worker.messageerror_event`、`BroadcastChannel.messageerror_event`、`Window.messageerror_event` をご覧ください (Firefox バグ 1359017)。
* `Headers` の値で反復処理を行うとき、値を自動的に辞書順で整列して、さらに重複するヘッダー名の値を結合するようになりました (Firefox バグ 1396848)。

#### DOM イベント

*変更なし。*

#### メディアと WebRTC

* SCTP メッセージの end-of-record (EOR) フラグを使用することにより、`RTCDataChannel` で任意のサイズ (256kiB が相互運用性が高いのですが、最大 1GiB まで) のメッセージをサポートしました。詳しくは Understanding message size limits (en-US) をご覧ください (Firefox バグ 979417)。

**メモ:** Firefox は、複数のソースの SCTP メッセージを多重化する機能を提供する SCTP ndata プロトコルが未サポートですので、大きなデータオブジェクトを送信すると他のすべての SCTP 通信で著しい遅延が発生する可能性があります。Firefox の ndata サポートの実装および展開の進捗を追跡するには、Firefox バグ 1381145 をご覧ください。
* `RTCDataChannel.send()` (en-US) メソッドで、送信しようとしたメッセージのサイズが受信側の ユーザーエージェント と互換性がない場合に `TypeError` 例外を発生できるようになりました (これは Firefox バグ 979417 の一部として実装しました)。
* MediaStream Recording API を更新し、録画中に発生した問題を報告するために送信される `error` イベントを一般的なイベントから `MediaRecorderErrorEvent` 型にしました。
* `OfflineAudioContext` のコンストラクターで引数のリストに加えてオブジェクトを指定可能になったため、関連文書を更新しました (Firefox バグ 1388591)。
### セキュリティ

* `resource://` URL が情報を漏えいしないようになりました (Firefox バグ 863246)。
* Data URI のオリジンが、ナビゲーションの責任がある設定オブジェクトのオリジンを継承するのではなく、一意の opaque origin として扱うようになりました (Firefox バグ 1324406)。
### プラグイン

*変更なし。*

### その他

* Firefox の ヘッドレスモード に、コマンドラインからウェブサイトのスクリーンショットを直接取得することを可能にする `-screenshot` フラグを追加しました (Firefox バグ 1378010)。
ウェブプラットフォームから廃止
---------------

### HTML

* さまざまなウェブ互換性の問題があるため、Firefox 57 で `<link rel="preload">` (Preloading content with rel="preload" をご覧ください) を無効化しました (Firefox バグ 1405761)。キャッシュ不可のリソース向けに改良したバージョンを Firefox 58 に搭載する予定です。
### API

* Mozilla 独自仕様 ソーシャル API を完全に削除しました (Firefox バグ 1388902)。
### SVG

*変更なし。*

アドオン開発者と Mozilla 開発者向けの変更点
--------------------------

**メモ:** Firefox 57 より、XPCOM ベースのアドオンのサポートを全面的に廃止します。すべての拡張機能は新しい ブラウザー拡張機能 (WebExtensions としても知られています) への移行が必要であり、そうしなければ動作しません。

### WebExtensions

以下の API を追加または拡張しました:

* `bookmarks`
    + `bookmarks.BookmarkTreeNodeType` でセパレーターをサポートしました。
* `browser_action`
    + light/dark テーマアイコンのための `theme_icons` プロパティ
* `browserAction`
    + `browserAction.openPopup()` (en-US)
* `browserSettings`
    + `allowPopupsForUserEvents` (en-US)
    + `homepageOverride` (en-US)
    + `imageAnimationBehavior` (en-US)
    + `newTabPageOverride`
* `browsingData`
    + `browsingData.removeLocalStorage()` (en-US)
* `clipboard`
    + `setImageData()`
* `contextualIdentities`
    + `onCreated` (en-US)
    + `onRemoved` (en-US)
    + `onUpdated` (en-US)
    + `contextualIdentitities.ContextualIdentity` (en-US) の `colorCode` および `iconUrl`
* `devtools.panels`
    + `devtools.panels.ElementsPanel.createSidebarPane()` (en-US)
* `downloads`
    + `downloads.download()` の `incognito` オプション
    + `downloads.DownloadItem` (en-US) の `estimatedEndTime` プロパティ
* `find`
    + `find()`
    + `highlightResults()` (en-US)
    + `removeHighlighting()` (en-US)
* `pageAction.openPopup()` (en-US)
* `privacy` (en-US)
    + `websites.trackingProtectionMode` (en-US)
* `proxy`
    + `FindProxyForURL()` がオブジェクトを返せるようになりました
* `runtime`
    + `runtime.openOptionsPage()` を Android でサポート
* `sessions`
    + `setTabValue()` (en-US)
    + `getTabValue()` (en-US)
    + `removeTabValue()` (en-US)
    + `setWindowValue()` (en-US)
    + `getWindowValue()` (en-US)
    + `removeWindowValue()` (en-US)
* `sidebarAction`
    + `sidebarAction.open()` (en-US)
* `storage`
    + `storage.managed` (en-US)
* `tabs`
    + `tabs.update()` (en-US) の `loadReplace` オプション
    + `tabs.Tab`、`tabs.onUpdated` (en-US)、`tabs.query()` の `discarded` プロパティ
    + `tabs.create()` で "view-source:" URL を開くことが可能になりました
    + `tabs.Tab`、`tabs.create()`、`tabs.query()`、`tabs.update()` (en-US) の `openerTabId` プロパティ
* `theme` (en-US)
    + `colors.toolbar`
    + `colors.toolbar_field`
    + `colors.toolbar_field_text`
    + `colors.toolbar_text`
* `theme`
    + `theme.update()` (en-US) の `windowId` オプション
* `webRequest`
    + `filterResponseData()` (en-US)
    + `webRequest` イベントの `proxyInfo` プロパティ
* `windows`
    + `windows.create()` (en-US) の `allowScriptsToClose` プロパティ
過去のバージョン
--------

* Firefox 56 for developers
* Firefox 55 for developers
* Firefox 54 for developers
* Firefox 53 for developers
* Firefox 52 for developers
* Firefox 51 for developers
* 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