この記事は Chromium Blog の記事 "Chrome 90 Beta: AV1 Encoder for WebRTC, New Origin Trials, and More" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
特に記載のない限り、下記の変更は Android、Chrome OS、Linux、macOS、Windows 向けの最新の Chrome ベータ版チャンネル リリースに適用されます。ここに記載されている機能の詳細については、リンクまたは ChromeStatus.com の一覧でご確認ください。2021 年 3 月 11 日時点で、Chrome 90 はベータ版です。
AV1 エンコーダ
デスクトップ版の Chrome に AV1 エンコーダが搭載されます。このエンコーダは、組み込みの WebRTC を利用したテレビ会議に特に最適化されています。AV1 には、以下のようなメリットがあります。
- 他の動画エンコーディングよりも圧縮効率が高いため、帯域幅の消費を抑えて画質を改善できる
- 帯域幅が低いネットワークで動画が利用できる(30 kbps 以下で動画が利用可能)
- VP9 などのコーデックに比べて、画面共有の効率が大幅に向上する
WebRTC は最近正式に W3C と IETF の標準になったので、この追加は特に重要です。
オリジン トライアル
このバージョンの Chrome には、以下のオリジン トライアルが導入されています。オリジン トライアルとして新機能を試せるようにすることで、ウェブ標準コミュニティにユーザビリティ、実用性、有効性についてのフィードバックを提供することができます。以下の項目を含め、現在 Chrome でサポートされているオリジン トライアルに登録するには、Chrome オリジン トライアル ダッシュボードをご覧ください。Chrome のオリジン トライアルの詳細については、ウェブ デベロッパーのためのオリジン トライアル ガイドをご覧ください。Microsoft Edge は、Chrome とは別に独自のオリジン トライアルをしています。詳細については、Microsoft Edge オリジン トライアル デベロッパー コンソールをご覧ください。
新しいオリジン トライアル
getCurrentBrowsingContextMedia()
mediaDevices.getCurrentBrowsingContextMedia() メソッドを使うと、getDisplayMedia() と同様に、現在のタブの動画(可能な場合は音声も)から MediaStream をキャプチャできます。getDisplayMedia() とは異なり、この新しいメソッドを呼び出すと、許可するか拒否するかを選択する単純なダイアログ ボックスが表示されます。ユーザーが許可した場合は、現在のタブがキャプチャされます。getCurrentBrowsingContextMedia() のその他の動作は、すべて getDisplayMedia() と同じです。このオリジン トライアルは、Chrome 92 まで行われる予定です。
MediaStreamTrack Insertable Streams(別名 Breakout Box)
カメラやマイク、画面キャプチャ、コーデックのデコーダ部分などの出力や、コーデックのデコーダ部分への入力など、MediaStreamTrack のローメディアを操作する API です。WebCodecs インターフェースを使ってローメディアのフレームを表現し、ストリームを使って公開します。この仕組みは、WebRTC Insertable Streams API が RTCPeerConnection からエンコード済みデータを公開する方法と同様です。次のようなユースケースをサポートすることを想定しています。
- 特殊効果 : 背景を削除したり、おかしな帽子をかぶったり、ボイス エフェクトを加えたりするなど、エンコード前やデコード後のメディアを操作することを指します。
- 機械学習 : リアルタイム物体識別、注釈付けなどのアプリケーションを指します。
このオリジン トライアルは、Chrome 92 まで行われる予定です。
WebAssembly の例外ハンドリング
WebAssembly が例外ハンドリングをサポートするようになりました。例外ハンドリングを利用すると、コードで例外がスローされたときに制御フローを抜けることができます。例外は、WebAssembly モジュールの既知の例外でも、インポートされて呼び出された関数がスローした未知の例外でも構いません。このオリジン トライアルは、Chrome 94 まで行われる予定です。
完了したオリジン トライアル
Chrome で以前にオリジン トライアルが行われていた以下の機能は、現在デフォルトで有効化されています。
WebXR AR ライティング推定
ライティング推定を利用すると、サイトから WebXR セッション内の環境光条件の推定値を照会できます。これにより、環境光を表す球面調和関数と、「反射」を表すキューブマップ テクスチャの両方を取得できます。ライティング推定を追加すると、モデルが自然になってユーザーの環境への「適合度」が上がる可能性があります。
今回のリリースに追加されたその他の機能
CSS
aspect-ratio の補完
aspect-ratio
プロパティを使うと、ある要素の横か縦のサイズだけが指定された場合に、もう片方のサイズを自動計算できます。もともとこのプロパティは、アニメーション時に補完されない(つまり、ターゲット値にスナップする)ものとして導入されました。この機能により、あるアスペクト比から別のアスペクト比に変化するときに、スムーズな補完が行われるようになります。
カスタム状態疑似クラス
カスタム要素が、状態を表す CSS 疑似クラスを介してカスタム要素の状態を公開するようになります。ビルトイン要素には状態が存在します。これは、ユーザーのインタラクションなどによって時間とともに変化する場合があり、疑似クラスを通してウェブ制作者に公開されます。たとえば、フォームのコントロールの中には、"invalid" 状態を持つものがあり、これが :invalid 疑似クラスで公開されています。カスタム要素も状態を持つので、ビルトイン要素と同じように状態を公開できるのは妥当です。
appearance と -webkit-appearance への 'auto' 値の実装
以下のフォーム コントロールの CSS プロパティ appearance
と -webkit-appearance
のデフォルト値が、'auto'
に変更されます。
<input type=color>
と <select>
- Android のみ :
<input type=date>
、<input type=datetime-local>
、<input type=month>
、<input type=time>
、<input type=week>
これらのコントロールのデフォルトのレンダリングは変更されません。
overflow: clip プロパティ
overflow
に clip
値を指定すると、ボックスのコンテンツがボックスのオーバーフロー クリップエッジでクリップされます。さらに、スクロール インターフェースは提供されず、ユーザーやプログラムはコンテンツをスクロールできなくなります。また、ボックスはスクロール コンテナとは見なされず、新しいフォーマッティング コンテキストは開始されません。そのため、この値を使うと、overflow: hidden
を使う場合よりもパフォーマンスが向上します。
overflow-clip-margin プロパティ
overflow-clip-margin
プロパティを使うと、要素が境界のどのくらい外側まで描画できるかを指定できます(その範囲を超えるとクリップされます)。デベロッパーは、このプロパティを使ってクリップ境界を拡張することもできます。これは、インク オーバーフローを表示したい場合に特に便利です。
Permissions-Policy ヘッダー
Permissions-Policy
HTTP ヘッダーは、アクセス許可や機能の委譲を制御する既存の Feature-Policy
ヘッダーを置き換えます。このヘッダーを使うと、どのオリジンに機能へのアクセスを許可するかをサイトで厳密に制限できます。
Chrome 74 で導入された Feature Policy API は、最近 "Permissions Policy" という名前に変わり、それに伴って HTTP ヘッダーの名前も変更されました。同時に、コミュニティは HTTP の構造化フィールド値に基づいた新しい構文を決定しています。
Cross-Origin-Read-Blocking による application/x-protobuffer の保護
Cross-Origin-Read-Blocking
が利用する盗聴されない MIME タイプのリストに application/x-protobuffer
を追加し、これを投機的実行攻撃から守ります。application/x-protobuf
は、すでに盗聴されない MIME タイプとして保護されています。application/x-protobuffer
もよく使われている MIME タイプで、protobuf ライブラリによって "ALT_CONTENT_TYPE"
として定義されています。
File System Access API での末尾を超えたファイルのシーク
FileSystemWritableFileStream.write()
にファイルの末尾を超えるデータを渡した場合、0x00
(NUL
)を書き込んでファイルを拡張します。これにより、疎なファイルを作成できるので、書き込むデータが順不同で届く場合に、コンテンツをファイルに保存する処理を大幅に簡略化できます。
この機能がないと、ファイルのコンテンツを順不同で受け取るアプリケーション(たとえば、BitTorrent のダウンロード)は、事前に、または書き込み中にファイルのサイズ変更が必要になった場合に、手動でそれを行う必要があります。
StaticRange コンストラクタ
現在、ウェブ制作者が作成できる範囲型は Range
のみです。しかし、Range
オブジェクトは「ライブ」であり、これをメンテナンスするのはコストがかかる場合があります。ツリーが変更されるたびに、影響を受けるすべての Range
オブジェクトの更新が必要です。新しい StaticRange
オブジェクトは、ライブではない軽量の範囲型を表すので、Range
と同じようなメンテナンス コストはかかりません。StaticRange
を作成可能にすることで、ウェブ制作者は DOM ツリーの変更に応じて更新する必要がない範囲にこれを利用できます。
<picture> の <source> 要素での幅と高さの指定のサポート
<picture>
要素内で <source>
要素を使う場合、width
と height
プロパティがサポートされます。これにより、Chrome が <picture>
要素のアスペクト比を計算できるようになります。これは、<img>
、<canvas>
、<video>
の各要素の動作と一致します。
WebAudio: OscillatorOptions.periodicWave を null 不可能に
新しい OscillatorNode
オブジェクトを作成するときに、periodicWave に null を設定できなくなります。この値は、OscillatorNode()
コンストラクタに渡される options オブジェクトに設定されます。WebAudio 仕様では、この値に null を設定することは許可されていません。これにより、Chrome の動作が仕様と Firefox に一致します。
JavaScript
このバージョンの Chrome には、V8 JavaScript エンジンのバージョン 9.0 が組み込まれます。具体的には、以下の変更点が含まれます。最新の機能リストをすべて確認したい方は、V8 リリースノートをご覧ください。
Array、String、TypedArray の相対インデックス メソッド
Array、String、TypedArray が at()
メソッドをサポートします。このメソッドは、負の数による相対インデックスをサポートします。たとえば、次のコードは指定された配列の最後の項目を返します。
let arr = [1,2,3,4];
arr.at(-1);
サポートの終了と機能の削除
このバージョンの Chrome では、以下のサポートの終了と機能の削除が行われます。現在サポートが終了している機能と以前に削除された機能のリストは、ChromeStatus.com をご覧ください。
コンテンツ セキュリティ ポリシー ディレクティブ 'plugin-types' の削除
'plugin-types' ディレクティブを使うと、<embed>
または <object>
html 要素で読み込めるプラグインの種類をデベロッパーが制限できます。これにより、デベロッパーはページ内の Flash をブロックできます。Flash のサポートは終了したので、このポリシー ディレクティブは不要になりました。
WebRTC RTP データ チャンネルの削除
Chrome では、WebRTC の非標準である RTP データ チャンネルのサポートを削除しました。ユーザーは、標準の SCTP ベースのデータ チャンネルを使用する必要があります。
navigator.plugins と navigator.mimeTypes で空を返却
Chrome は navigator.plugins
と navigator.mimeTypes
に対して空を返します。Flash が削除されたことで、これらのプロパティから何かを返す必要はなくなりました。
Reviewed by
Eiji Kitamura - Developer Relations Team