WebAssembly 移行ガイド

(P)NaCl のサポート終了に関するお知らせ

WebAssembly はブラウザ横断型に対応しつつあるため、 サポートを終了する予定です。 2019 年第 4 四半期に PNaCl を追加(Chrome アプリは除く)。WebAssembly 関連の活発なエコシステムは、新しいものも既存のものも含め、高性能ウェブアプリに適したものになります。また、PNaCl の利用率が低いことも、サポート終了の十分な理由となっています。

Chrome 76 以降、オープンウェブの PNaCl はオリジン トライアルの対象になりました。これは、ウェブ デベロッパーが登録して、デフォルトで有効になっていないものにアクセスするためのメカニズムです。通常は新しく提案された機能ですが、この場合は非推奨の機能となります。 デベロッパーは Origin Trial Console に登録してトークンを受け取ることができます。このトークンはページに埋め込むことができ、ユーザーがフラグを使用することなくこの機能を有効にできます。(詳しくは、リンク先のガイドをご覧ください)。トライアルは Chrome 78 まで、つまり 2019 年 12 月ごろまで実施される予定です。この変更は、Chrome のアプリや拡張機能に含まれる NaCl や PNaCl、および「enable-nacl」 chrome://flags のフラグを使用して、テスト用に PNaCl をローカルで有効にすることもできます。 (このフラグは、任意のページで非 PNaCl の「ネイティブ」NaCl を有効にする現在の機能も保持します)。

また、ChromeOS 以外の Chrome アプリのサポート終了を 2018 年第 1 四半期に発表しました。

ツールチェーンの移行

ほとんどの(P)NaCl のユースケースでは、NaCl SDK から Emscripten に移行することをおすすめします。移行はかなり単純になる可能性が高い アプリケーションが Linux に移植できる場合は、 SDL API、POSIX API です。 NaCl / Pepper API の直接サポートは利用できませんが、Web API の同等の API をリストアップしました。移行が難しいケースについては、 native-client-discuss@googlegroups.com

API の移行

(P)NaCl に公開されている各 API のウェブ プラットフォームの代替のステータスは次のとおりです。また、最も近い代替手段となる Emscripten のライブラリまたはオプションも表に示されています。

2017 年には WebAssembly に共有メモリスレッドのサポートを追加する予定です スレッドは (P)NaCl の最も興味深い用途と 対応できます今後のスレッドのサポートを前提とした移行項目は、以下にマークされています。アプリケーションのフロー制御がブロックに大きく依存している場合、 移植を容易にするために、スレッドのサポートが必要になることもあります。

この表は正確を期しておりますが、誤りや抜け漏れがある可能性があります。問題が発生した場合は、native-client-discuss@googlegroups.com までお問い合わせください。

PPAPI

PPB_Audio

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 x SDL(一部) GAP(部分)- AudioWorkletNode とほぼ同等 AudioWorkletSpec は作成済みですが、この API には AudioDeviceClient のほうが適している可能性があります。AudioDeviceClient は現在、コミュニティによって仕様が定められています。ワークレットは、この API とほぼ同等ではない場合があります。
GetCurrentConfig SDL AudioContext*。(渡された設定を取得します)
StartPlayback SDL AudioBufferSourceNode.start
StopPlayback SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetTimestamp SDL AudioBufferSourceNode.start(パラメータ) バッファに接続されるのではなく、毎回渡されます。
SetTimestamp SDL AudioBufferSourceNode.start(パラメータ)
GetSampleRate SDL AudioBuffer.sampleRate
GetSampleSize GAP GAP - WebAudio は 32 ビットの浮動小数点数のみを使用し、PPAPI は 16 ビットの整数を使用します。 PPAPI は理論上、複数のサンプリング サイズをサポートしています。実際には、16 ビットのサンプルのみがサポートされています。残念なことに、メモリ使用量を節約するために 16 ビットのサンプルサイズをリクエストしているデベロッパーもいます。Web Audio 仕様の次期バージョンでは、16 ビット サンプルのサポートが実装されます。Firefox と同様に、decodeAudioData から取得したオーディオに 16 ビット バッファを使用すると、AudioBuffer の最適化を実装できます。
GetNumberOfChannels SDL AudioBuffer.numberOfChannels
GetDataBuffer SDL AudioBuffer.getChannelData
GetBufferSize SDL AudioBuffer.length

PPB_AudioConfig

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
CreateStereo16Bit GAP GAP - 32 ビットの浮動小数点サンプルのみがサポートされる 次のバージョンの Web Audio 仕様では、16 ビットサンプルのサポートが実装されます。
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.length
RecommendSampleRate SDL AudioContext.sampleRate(デフォルトのコンストラクタから) AudioContext のデフォルトの優先サンプルレートは、ハードウェア オーディオ デバイスの実際のサンプルレートと一致します。
RecommendSampleFrameCount GAP GAP - 予定されている AudioDeviceClient で処理されます ユーザー指定のサイズを許可する問題は未解決ですが、現在定義中です。これは、特定のハードウェアに適したサイズを教えてくれる AudioDeviceClient で処理するのが最適です。

PPB_Console

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
ログ utime console.log/warn/error/...
LogWithSource GAP GAP LogWithSource が提供する機能について、デベロッパーから具体的なユースケースが提示されない限り、Console API は十分に完全な代替手段と見なされます。DevTools ソースマップを使用すると、変換された JavaScript を元のソース言語でデバッグできます。

PPB_Core

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
getTime utime new Date().getTime()
getTimeTicks Utime new Date().getTime()
IsMainThread GAP window.document !== undefined
CallOnMainThread GAP Worker.postMessage + Atomics.wait 同等の同期を構築できます。

PPB_FileIO

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 FS(一部) window.chooseFileSystemEntries() 「作成」と「開く」の使い方は異なりますが、それぞれの要素には同じ効果があります。
[ FS(一部) window.chooseFileSystemEntries()
クエリ FS(一部) Blob.size、FileSystemHandle.getFile()、FileSystemHandle.getDirectory()、File.lastModified GAP(部分) - Blob.type を使用して MIME タイプを確認することもできます。ファイル システムの種類、作成日時、最終アクセス日時は、Native File System API では判別できません。
アイコン FS(一部) FileSystemDirectoryHandle.getFile("name", {create: true})
読み取り FS(一部) Blob.slice().arrayBuffer()
書き込み FS(一部) FileSystemWriter.write()
SetLength FS(一部) FileSystemWriter.truncate()
フラッシュ GAP(部分) GAP(部分的)- FileSystemWrite.close() が呼び出されるとファイルがフラッシュされる これは、ネイティブ ファイル システム API ファイルが OS に公開されるため、データを OS に表示する前にセーフ ブラウジング チェックを行う必要があるという設計上のものです。
閉じる FS(一部) FileSystemWriter.close() 保留中のオペレーションはキャンセルされませんが、これまでに書き込まれたデータはすべてディスクにフラッシュされます。
ReadToArray GAP Blob.slice().arrayBuffer() または Blob.arrayBuffer() 複数のサブ範囲の読み取りを並列で実行できます。

PPB_FileRef

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 FS(一部) FileSystemDirectoryHandle.getFile("name", {create: true})
GetFileSystemType FS(一部) FileSystem.type
GetName FS(一部) File.name
GetPath FS(一部) GAP(部分的)- ネイティブ ファイル システム API では、FileSystemHandle.resolve(FileSystemHandle) を使用して、ファイルを含むディレクトリへの参照からファイルの相対パスを特定できます。 ファイルの絶対パスを特定できないため、ファイルを含むディレクトリへのアクセス権をユーザーが付与する必要があります。
GetParent FS(一部) GAP(部分)- ネイティブ ファイル システム API では、FileSystemHandle.resolve(FileSystemHandle) を使用して、ファイルを含むディレクトリへの参照からファイルの相対パスを特定できます。 ファイルを含むディレクトリへのアクセス権をユーザーが付与する必要があります。
MakeDirectory FS(一部) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
アイコン FS(一部) FileSystemDirectoryHandle.getFile("name", {create: true}) 書き込みによって変更時間を延長できます。
削除 FS(一部) FileSystemDirectoryHandle.removeEntry() PPAPI とは異なり、ディレクトリを空にする必要はありません。
名前を変更 FS(一部) GAP(部分的)- ネイティブ ファイル システム API を使用すると、新しい名前の FileSystemFileHandle.getFile() と、古いファイルの内容を含む FileSystemFileHandle.createWriter().write() を組み合わせて、新しい名前でファイルを書き込むことができます。次に、FileSystemDirectoryHandle.removeEntry() を使用して古いファイルを削除します。 ネイティブ ファイル システム API には、これを 1 ステップで行う直接の API はありません。
クエリ GAP(部分) Blob.size、FileSystemHandle.getFile、FileSystemHandle.getDirectory、File.lastModified GAP(部分的)- Blob.type を使用して MIME タイプを確認することもできます。ファイル システムのタイプ、作成日時、最終アクセス日時は、Native File System API では特定できません。
ReadDirectoryEntries FS(一部) FileSystemDirectoryHandle.getEntries()

PPB_FileSystem

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 FS(一部) window.requestFileSystem JS API ではこの両方を 1 つのステップで実行できる
[ GAP window.requestFileSystem JS API ではこの両方を 1 つのステップで実行できる
GetType GAP FileSystem.type

PPB_Fullscreen

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
IsFullScreen html5.h Document.fullscreenEnabled
SetFullscreen html5.h Document.requestFullscreen
GetScreenSize html5.h Document.exitFullscreen

PPB_Gamepad

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
サンプル SDL ゲームパッド* Gamepad オブジェクトは、navigationStart を基準としたタイムスタンプを公開します。ハードウェアからデータが受信されると更新されます。https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Graphics2D

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL Canvas.getContext('2d')
説明 SDL Canvas.clientWidth + Canvas.clientHeight
PaintImageData SDL CanvasRenderingContext2D.putImageData
スクロール GAP CanvasRenderingContext2D.scrollIntoView、CanvasRenderingContext2D.drawImage GAP(部分)- drawImage を使用してキャンバスをオフセットで自身に描画し、残りを塗りつぶすことで実装できます。
ReplaceContents SDL CanvasRenderingContext2D.drawImage
フラッシュ GAP 同等のものはない GAP(部分)- 描画コードの最後には常に暗黙的なフラッシュがあります。これは変更される可能性は低いです。ただし、OffscreenCanvasImageBitmapRenderingContext を組み合わせると、同様の機能を提供できます。
SetScale SDL CanvasRenderingContext2D.scale
GetScale SDL CanvasRenderingContext2D.currentTransform
SetLayerTransform SDL CanvasRenderingContext2D.setTransform CanvasRenderingContext2D.scale CanvasRenderingContext2D.translate

PPB_Graphics3D

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP(部分的)- WebGL 2.0 と Emscripten の OpenGL ES 3.0 の公開により、ユーザー定義のマルチサンプリング フレームバッファがサポートされます。このフレームバッファでは、PPAPI を介して構成可能なすべてのパラメータを設定できます。
作成 SDL Canvas.getContext
GetAttribs SDL WebGLRenderingContext.getContextAttributes
SetAttribs SDL Canvas.getContext(.., OPTIONS)
GetError SDL WebGLRenderingContext.getError
ResizeBuffers SDL Canvas.width = w;Canvas.height = h;
SwapBuffers GAP 同等のものはない GAP(部分)- 描画コードの最後には常に暗黙的なフラッシュがあります。これは変更される可能性は低いです。ただし、 OffscreenCanvas および ImageBitmapRenderingContext 同様の機能を提供します。

PPB_ImageData

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetNativeImageDataFormat SDL ImageData で RGBA 順序が必須になる
IsImageDataFormatSupported SDL ImageData では RGBA の順序が必須
作成 SDL CanvasRenderingContext2d.createImageData
説明する SDL ImageData はストライドなし
マップ SDL ImageData.data
マッピング解除 SDL ImageData.data

PPB_InputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
RequestInputEvents SDL 同等のものはない JS / Wasm はメインスレッドで実行されるため、この機能がないことは問題にならないでしょう。また、クロスプロセス ラウンドトリップを発生させることなく、イベントをより安価にフィルタできます。
RequestFilteringInputEvents SDL マウス* キー* ホイール* タッチ* 合成* イベント
SDL Element.addEventListener
ClearInputEventRequest SDL Element.removeEventListener
GetType SDL イベントクラスの子孫
GetTimeStamp SDL Event.timeStamp
GetModifiers SDL *Event.altKey/shiftKey/metaKey/ctrlKey

PPB_MouseInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL MouseEvent
GetButton SDL MouseEvent.button
GetPosition SDL MouseEvent.client*/page*/offset*
GetClickCount SDL dblclick「mousedown」との比較イベント
GetMovement SDL MouseEvent.movement*

PPB_WheelInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL WheelEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAP GAP - deltaMode にはこの情報が含まれていますが、不完全です。 WheelEvent.deltaMode API の実装に関する議論があります。https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAP GAP - deltaMode にはこの情報が含まれていますが、不完全です。 WheelEvent.deltaMode API の実装に関する議論があります。https://github.com/w3c/uievents/issues/181#issuecomment-537811017

PPB_KeyboardInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL KeyboardEvent
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.key
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL TouchEvent
AddTouchPoint SDL TouchEvent.touches.push
GetTouchCount SDL TouchEvent.touches.length
GetTouchByIndex SDL TouchEvent.touches[i]
GetTouchById SDL Touch.indentifer(ご自身で確認してください)

PPB_IMEInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP CompositionEvent
GetText GAP CompositionEvent.data
GetSegmentNumber GAP GAP - 直接的な同等サービスなし このデータは、CompositionEvent.data から取得できます。
GetSegmentOffset GAP GAP - 直接的な同等性なし
GetTargetSegment GAP GAP - 直接的な同等サービスなし
GetSelection GAP GAP - 直接的な同等サービスなし

PPB_Instance

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
BindGraphics SDL Canvas.getContext(バインディングが自動であるため無視)。
IsFullFrame GAP GAP - MIME タイプのハンドラに相当するものはありません。 NaCl アプリは、特定の MIME タイプを処理してドキュメント全体を所有するように登録できます。
DidCreate 該当なし <Element>[key] 一般的な DOM アクセスでは、タグ属性を取得できます。
DidDestroy 該当なし 該当なし NaCl ではトリガーされません
DidChangeView 該当なし 要素「resize」イベント
DidChangeFocus 該当なし 要素の「focus」、「focusin」、「focusout」イベント
HandleDocumentLoad 該当なし GAP - MIME タイプ ハンドラとして登録する方法がない アプリとマニフェスト エントリを介して NaCl モジュールを設定すると、特定の MIME タイプを処理できます。

PPB_MediaStreamAudioTrack

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
設定 GAP getUserMedia() getUserMedia() の制約により、MediaStreamTrack で使用する構成値を指定できます。
GetAttrib GAP MediaStreamTrack.getSettings()
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetBuffer GAP GAP - 該当なし
RecycleBuffer GAP GAP - 該当なし
閉じる GAP MediaStreamTrack.stop()

PPB_MediaStreamVideoTrack

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP キャンバスのキャプチャ Canvas Capture を使用すると、動画フレームをプログラムで導入できます。
設定 GAP applyConstraints(), getUserMedia() GAP(部分的)- Web API で利用可能な設定の範囲が PPAPI と異なる場合があります。
GetAttrib GAP MediaStreamSettings.width
GAP MediaStreamSettings.height
GAP GAP - PP_MEDIASTREAMVIDEOTrack_ATTRIB_BUFFERED_FRAMES に相当するものなし MediaStream はプリロードできないため、バッファリングされません。https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements
GAP GAP - PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT に相当するものなし
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetFrame GAP GAP - 同等のものなし
RecycleFrame GAP GAP - 該当なし
閉じる GAP MediaStreamTrack.stop()
GetEmptyFrame GAP GAP - 同等のものなし
PutFrame GAP GAP - 同等のものなし

PPB_MessageLoop

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを取得します。
GetForMainThread 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを受け取ります。
GetCurrent 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを受け取ります。
AttachToCurrentThread 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを受け取ります。
ランニング 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを取得します。
PostWork 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを取得します。
PostQuit 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを取得します。

PPB_Messaging

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
PostMessage 該当なし Window.postMessage
RegisterMessageHandler 該当なし Window.addEventListener
UnregisterMessageHandler 該当なし Window.removeEventListener

PPB_MouseCursor

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
SetCursor SDL Element.style.cursor 同じセットの標準カーソルがサポートされています。カスタム カーソルは url(..) で作成できます。動的カスタム カーソルはデータ URI で作成できます。CSS3 では、アクセス ポイントの指定がサポートされています。

PPB_MouseLock

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
LockMouse SDL Element.requestPointerLock
UnlockMouse SDL Element.exitPointerLock

PPB_OpenGLES2

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
いくつかの方法 OpenGLES 機能は WebGL 1.0 に近い。
x OffscreenCanvas

PPB_TextInputController

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
SetTextInputType GAP GAP - インプット メソッド エディタ API で補完される可能性あり 一部のデベロッパーは、この方法でヒントを提供できること、または可能であれば IME イベントや出力をキャンバス内にインラインでインターセプトして表示する機能を望んでいます。
UpdateCaretPosition GAP GAP - Input Method Editor API によって入力される可能性がある https://www.w3.org/TR/ime-api/
CancelCompositionText GAP GAP - Input Method Editor API によって入力される可能性がある https://www.w3.org/TR/ime-api/
UpdateSurroundingText GAP GAP - Input Method Editor API によって入力される可能性がある https://www.w3.org/TR/ime-api/

PPB_URLLoader

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 embind new XMLHttpRequest();
[ embind XMLHttpRequest.open
FollowRedirect embind Request.redirect
GAP GAP - 同等の XMLHTTPRequest なし
GetUploadProgress embind XMLHttpRequest 「progress」イベント
GAP FetchObserver まだ指定または実装されていません。https://github.com/whatwg/fetch/issues/607
GetDownloadProgress embind XMLHttpRequest 「progress」イベント
GAP FetchObserver まだ指定または実装されていません。https://github.com/whatwg/fetch/issues/607
GetResponseInfo embind XMLHttpRequest.getAllResponseHeaders
embind Fetch Response* を取得します。
ReadResponseBody embind XMLHttpRequest.response
embind 本文*(レスポンスは本文)
FinishStreamingToFile embind GAP - 直接的な同等性なし XMLHttpRequest と Fetch はどちらも、ストレージに直接ではなく、メモリにストリーミングすることを前提としています。
閉じる embind XMLHttpRequest.abort
GAP Fetch API: AbortSignal と AbortController

PPB_URLRequestInfo

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 embind XMLHttpRequest
embind 取得リクエスト
SetProperty GAP GAP - XMLHttpRequest に直接相当するものがない XMLHttpRequest には、リダイレクト、ファイルへのストリーミング、リファラーや認証情報ポリシーの設定など、リクエストごとの制限を直接行う手段は用意されていません。
embind Request.*
AppendDataToBody embind XMLHttpRequest.send GAP - どちらもチャンクではなく本文全体が必要です。
embind fetch(.., options:body)
AppendFileToBody GAP fetch() のアップロード ストリーミング https://www.chromestatus.com/features/5274139738767360
該当なし <form> FileReader で読み込んでアップロードすることもできますが、これは AppendDataToBody に似ています

PPB_URLResponseInfo

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetProperty embind XMLHttpRequest.getAllResponseHeaders など
embind Fetch Response*。
GetBodyAsFileRef embind フェッチ応答(本文).blob() ストレージ レイヤが転送を最適化することを前提としています。

PPB_Var

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
VarFromUtf8 embind TextDecoder.decode
VarToUtf8 embind TextEncoder.encode
VarFromResource 該当なし 該当なし
VarToResource 該当なし 該当なし

PPB_VarArray

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
Get embind Array[i]
Set embind 配列 [i] = x
GetLength embind Array.length
SetLength embind Array.length = n

PPB_VarArrayBuffer

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 embind new ArrayBuffer(n)(新しい ArrayBuffer(n)
ByteLength embind ArrayBuffer.byteLength
マップ GAP GAP - 直接的な同等性なし Asm.js / Wasm モジュールは、単一の線形メモリヒープ以外の ArrayBuffer の領域をマッピングできません。 今後、複数のメモリやメモリ マッピングが導入されると、この問題は改善される可能性があります。
マッピング解除 GAP GAP - 直接的な同等サービスなし

PPB_VarDictionary

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 embind {}
Get embind <Object>[i]
Set embind <Object>[i] = x
削除 embind delete <Object>[i]
HasKey embind <Object> 内の x
GetKeys embind for (<Object>) {} リテラルで同等のものはありませんが、ビルドできます。

PPB_VideoDecoder

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP GAP - VideoDecoder() を使用して、提案された WebCodecs API で処理されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Initialize GAP GAP - 提案された WebCodecs API で VideoDecoder() 初期化パラメータ(VideoDecoderInitParameters)を使用して処理されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
デコード GAP GAP - ReadableStream.pipeThrough(VideoDecoder) を使用して提案されている WebCodecs API で処理されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
GetPicture GAP GAP - 提案されている WebCodecs API で ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) を使用して処理されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
RecyclePicture GAP GAP - 提案されている WebCodecs API で処理されます。現在のデザインでは、画像が自動的にリサイクルされ、デコード処理が継続されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
フラッシュ GAP GAP - 提案されている WebCodecs API で処理されます。この API は Flush() と呼ばれますが、デコード呼び出しに関連してどのようにシーケンス化されるかについては、まだ議論中です。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Reset GAP GAP - 提案されている WebCodecs API で処理されます。VideoDecoder インスタンスを破棄して新しいインスタンスを作成します。これは専用のリセット方法ほど効率的ではありませんが、Reset() API のセマンティクスはまだ議論中です。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP GAP - VideoEncoder() を使用して、提案された WebCodecs API で処理されます。
GetSupportedProfiles GAP GAP(部分)- navigator.mediaCapabilities.encodingInfo() サポートされているプロファイルは 1 つずつ確認する必要があります。
初期化 GAP GAP - VideoEncoder() 初期化パラメータを使用して、提案されている WebCodecs API で処理されます。
GetFramesRequired GAP GAP - 同等のものなし Web Codecs API によって内部的に使用されるフレームプールが公開されることはありません。
GetFrameCodedSize GAP GAP - 同等のものなし Web Codecs API によって内部的に使用されるフレームプールが公開されることはありません。
GetVideoFrame GAP GAP - 提案されている WebCodecs API で ReadableStream.pipeThrough(VideoEncoder) を使用して処理されます。これにより、エンコード前にデータを入力するために 1 つのフレームを取得するのではなく、Readable ストリーム内のデータを直接エンコードします。
エンコード GAP GAP - ReadableStream.pipeThrough(VideoEncoder) を使用して、提案されている WebCodecs API で処理されます。
GetBitstreamBuffer GAP GAP - 提案されている WebCodecs API で処理されます。現在のデザインは、パイプスルーされるエンコードされたビットストリーム バッファを自動的に通過します。 現在、WebCodecs API では、ビットストリーム バッファをプールするのではなくコピーできるため、リサイクルする必要がないことを前提としています。
RecycleBitstreamBuffer GAP GAP - 提案されている WebCodecs API で処理されます。現在の設計では、エンコード プロセスを続行するためにバッファが自動的にリサイクルされます。 パフォーマンスへの影響が小さいため、今後変更される可能性は低いです。
RequestEncodingParametersChange GAP GAP - 提案された Web Codecs API で処理されます。パラメータには、その場で変更できるものもありますが、エンコーダを破棄する必要があるパラメータもあります。
閉じる GAP GAP - 提案されている WebCodecs API で VideoEncoder.Close() を使用して処理されます。

PPB_VideoFrame

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetTimestamp GAP GAP - 提案された WebCodecs API で処理されます。
SetTimestamp GAP GAP - 提案された WebCodecs API で処理されます。
GetFormat GAP GAP - 提案された WebCodecs API で処理されます。
GetSize GAP GAP - 提案された WebCodecs API で処理されます。
GetDataBuffer GAP GAP - 提案されている WebCodecs API で処理されます。
GetDataBufferSize GAP GAP - 提案された WebCodecs API で処理されます。

PPB_View

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetRect embind Element.getBoundingClientRect
IsFullscreen embind Document.fullScreenEnabled 単一の要素ではなくドキュメントに関連します。
IsVisible embind IntersectionObserver
IsPageVisible embind document.visibilityState
GetClipRect embind IntersectionObserver
GetDeviceScale embind window.devicePixelRatio
GetCSSScale embind <Element>.getBoundingClientRect().width / <Element>.offsetWidth
GetScrollOffset embind <要素>.scrollTop / <要素>.scrollLeft

PPB_WebSocket

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP WebSocket.WebSocket
接続 GAP WebSocket.WebSocket(url, ...) WebSocket の「open」イベント
閉じる GAP WebSocket.close
ReceiveMessage GAP WebSocket「メッセージ」イベント WebSocket「エラー」イベント WebSocket の「close」イベント
SendMessage GAP WebSocket.send
GetBufferedAmount GAP WebSocket.bufferedAmount
GetCloseCode GAP CloseEvent.code
GetCloseReason GAP CloseEvent.reason
GetCloseWasClean GAP CloseEvent.wasClean
GetExtensions GAP WebSocket.extensions
GetProtocol GAP WebSocket.protocol
GetReadyState GAP WebSocket.readyState
GetURL GAP WebSocket.url

PPP_Graphics3D

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
グラフィック 3D コンテキスト喪失 SDL キャンバス「webglcontextlost」イベント

PPP_InputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
HandleInputEvent SDL Element.addEventListener

PPP_Instance

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
DidCreate 該当なし &lt;Element&gt;[key] 一般的な DOM アクセスでは、タグ属性を取得できます。
DidDestroy 該当なし 該当なし NaCl ではトリガーされません
DidChangeView 該当なし 要素「resize」イベント
DidChangeFocus 該当なし 要素の「focus」、「focusin」、「focusout」イベント
HandleDocumentLoad 該当なし GAP - MIME タイプ ハンドラとして登録する方法がない アプリを介した NaCl モジュールとマニフェスト エントリは、特定の MIME タイプを処理するようにセットアップできます。

PPP_MessageHandler

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
HandleMessage embind MessagePort「メッセージ」イベント ウィンドウ「message」イベント
HandleBlockingMessage 該当なし GAP - 直接的な同等性なし Atomics.wait を使用して、メインスレッド以外でも同様の同期を実行できます。これは、同期プラグイン API のエミュレーションをサポートするために追加されました。

PPP_Messaging

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
HandleMessage embind MessagePort の「message」イベント Window の「message」イベント

PPP_MouseLock

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
MouseLockLost SDL 要素「pointerlockchange」、「pointerlockerror」イベント

IRT

PPB_Audio

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 x SDL(一部) GAP(部分)- AudioWorkletNode とほぼ同等 AudioWorkletSpec は作成済みですが、この API には AudioDeviceClient のほうが適している可能性があります。AudioDeviceClient は現在、コミュニティによって仕様が定められています。ワークレットは、この API とほぼ同等ではない場合があります。
GetCurrentConfig SDL AudioContext*。(渡された設定を取得します)
StartPlayback SDL AudioBufferSourceNode.start
StopPlayback SDL AudioBufferSourceNode.stop

PPB_AudioBuffer

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetTimestamp SDL AudioBufferSourceNode.start(パラメータ) バッファに接続されるのではなく、毎回渡されます。
SetTimestamp SDL AudioBufferSourceNode.start(パラメータ)
GetSampleRate SDL AudioBuffer.sampleRate
GetSampleSize GAP GAP - WebAudio は 32 ビットの浮動小数点数のみを使用し、PPAPI は 16 ビットの整数を使用します。 PPAPI は理論上、複数のサンプリング サイズをサポートしています。実際には、16 ビットのサンプルのみがサポートされています。残念なことに、メモリ使用量を節約するために 16 ビットのサンプルサイズをリクエストしているデベロッパーもいます。Web Audio 仕様の次期バージョンでは、16 ビット サンプルのサポートが実装されます。Firefox と同様に、decodeAudioData から取得したオーディオに 16 ビット バッファを使用すると、AudioBuffer の最適化を実装できます。
GetNumberOfChannels SDL AudioBuffer.numberOfChannels
GetDataBuffer SDL AudioBuffer.getChannelData
GetBufferSize SDL AudioBuffer.length

PPB_AudioConfig

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
CreateStereo16Bit GAP GAP - 32 ビットの浮動小数点サンプルのみがサポートされる 次のバージョンの Web Audio 仕様では、16 ビットサンプルのサポートが実装されます。
GetSampleRate SDL AudioContext.sampleRate
GetSampleFrameCount SDL AudioBuffer.length
RecommendSampleRate SDL AudioContext.sampleRate(デフォルトのコンストラクタから) AudioContext のデフォルトの優先サンプルレートは、ハードウェア オーディオ デバイスの実際のサンプルレートと一致します。
RecommendSampleFrameCount GAP GAP - 予定されている AudioDeviceClient で処理されます ユーザー指定のサイズを許可する問題は未解決ですが、現在定義中です。これは、特定のハードウェアに適したサイズを教えてくれる AudioDeviceClient で処理するのが最適です。

PPB_Console

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
ログ utime console.log/warn/error/...
LogWithSource GAP GAP LogWithSource が提供する機能について、デベロッパーから具体的なユースケースが提示されない限り、Console API は十分に完全な代替手段と見なされます。DevTools ソースマップを使用すると、変換された JavaScript を元のソース言語でデバッグできます。

PPB_Core

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
getTime utime new Date().getTime()
getTimeTicks Utime new Date().getTime()
IsMainThread GAP window.document !== undefined
CallOnMainThread GAP Worker.postMessage + Atomics.wait 同等の同期を構築できます。

PPB_FileIO

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 FS(一部) window.chooseFileSystemEntries() 「作成」と「開く」の使い方は異なりますが、それぞれの要素には同じ効果があります。
[ FS(一部) window.chooseFileSystemEntries()
クエリ FS(一部) Blob.size、FileSystemHandle.getFile()、FileSystemHandle.getDirectory()、File.lastModified GAP(部分) - Blob.type を使用して MIME タイプを確認することもできます。ファイル システムの種類、作成日時、最終アクセス日時は、Native File System API では判別できません。
アイコン FS(一部) FileSystemDirectoryHandle.getFile(&quot;name&quot;, {create: true})
読み取り FS(一部) Blob.slice().arrayBuffer()
書き込み FS(一部) FileSystemWriter.write()
SetLength FS(一部) FileSystemWriter.truncate()
フラッシュ GAP(部分) GAP(部分的)- FileSystemWrite.close() が呼び出されるとファイルがフラッシュされる これは、ネイティブ ファイル システム API ファイルが OS に公開されるため、データを OS に表示する前にセーフ ブラウジング チェックを行う必要があるという設計上のものです。
閉じる FS(一部) FileSystemWriter.close() 保留中のオペレーションはキャンセルされませんが、これまでに書き込まれたデータはすべてディスクにフラッシュされます。
ReadToArray GAP Blob.slice().arrayBuffer() または Blob.arrayBuffer() 複数のサブ範囲の読み取りを並列で実行できます。

PPB_FileRef

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 FS(一部) FileSystemDirectoryHandle.getFile(&quot;name&quot;, {create: true})
GetFileSystemType FS(一部) FileSystem.type
GetName FS(一部) File.name
GetPath FS(一部) GAP(部分的)- ネイティブ ファイル システム API では、FileSystemHandle.resolve(FileSystemHandle) を使用して、ファイルを含むディレクトリへの参照からファイルの相対パスを特定できます。 ファイルの絶対パスを特定できないため、ファイルを含むディレクトリへのアクセス権をユーザーが付与する必要があります。
GetParent FS(一部) GAP(部分)- ネイティブ ファイル システム API では、FileSystemHandle.resolve(FileSystemHandle) を使用して、ファイルを含むディレクトリへの参照からファイルの相対パスを特定できます。 ファイルを含むディレクトリへのアクセス権をユーザーが付与する必要があります。
MakeDirectory FS(一部) FileSystemHandle.getDirectory(..., {createIfNotExists: true})
アイコン FS(一部) FileSystemDirectoryHandle.getFile("name", {create: true}) 書き込みによって変更時間を延長できます。
削除 FS(一部) FileSystemDirectoryHandle.removeEntry() PPAPI とは異なり、ディレクトリを空にする必要はありません。
名前を変更 FS(一部) GAP(部分的)- ネイティブ ファイル システム API を使用すると、新しい名前の FileSystemFileHandle.getFile() と、古いファイルの内容を含む FileSystemFileHandle.createWriter().write() を組み合わせて、新しい名前でファイルを書き込むことができます。次に、FileSystemDirectoryHandle.removeEntry() を使用して古いファイルを削除します。 ネイティブ ファイル システム API には、これを 1 ステップで行う直接の API はありません。
クエリ GAP(部分) Blob.size、FileSystemHandle.getFile、FileSystemHandle.getDirectory、File.lastModified GAP(部分的)- Blob.type を使用して MIME タイプを確認することもできます。ファイル システムのタイプ、作成日時、最終アクセス日時は、Native File System API では特定できません。
ReadDirectoryEntries FS(一部) FileSystemDirectoryHandle.getEntries()

PPB_FileSystem

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 FS(一部) window.requestFileSystem JS API ではこの両方を 1 つのステップで実行できる
[ GAP window.requestFileSystem JS API ではこの両方を 1 つのステップで実行できる
GetType GAP FileSystem.type

PPB_Fullscreen

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
IsFullScreen html5.h Document.fullscreenEnabled
SetFullscreen html5.h Document.requestFullscreen
GetScreenSize html5.h Document.exitFullscreen

PPB_Gamepad

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
サンプル SDL ゲームパッド* Gamepad オブジェクトは、navigationStart を基準としたタイムスタンプを公開します。ハードウェアからデータが受信されると更新されます。https://www.w3.org/TR/gamepad/#gamepad-interface

PPB_Graphics2D

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL Canvas.getContext('2d')
説明 SDL Canvas.clientWidth + Canvas.clientHeight
PaintImageData SDL CanvasRenderingContext2D.putImageData
スクロール GAP CanvasRenderingContext2D.scrollIntoView、CanvasRenderingContext2D.drawImage GAP(部分)- drawImage を使用してキャンバスをオフセットで自身に描画し、残りを塗りつぶすことで実装できます。
ReplaceContents SDL CanvasRenderingContext2D.drawImage
フラッシュ GAP 同等のものはない GAP(部分)- 描画コードの最後には常に暗黙的なフラッシュがあります。これは変更される可能性は低いです。ただし、OffscreenCanvasImageBitmapRenderingContext を組み合わせると、同様の機能を提供できます。
SetScale SDL CanvasRenderingContext2D.scale
GetScale SDL CanvasRenderingContext2D.currentTransform
SetLayerTransform SDL CanvasRenderingContext2D.setTransform CanvasRenderingContext2D.scale CanvasRenderingContext2D.translate

PPB_Graphics3D

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetAttribMaxValue OpenGL ES 3.0 WebGL 2.0 GAP(部分的)- WebGL 2.0 と Emscripten の OpenGL ES 3.0 の公開により、ユーザー定義のマルチサンプリング フレームバッファがサポートされます。このフレームバッファでは、PPAPI を介して構成可能なすべてのパラメータを設定できます。
作成 SDL Canvas.getContext
GetAttribs SDL WebGLRenderingContext.getContextAttributes
SetAttribs SDL Canvas.getContext(.., OPTIONS)
GetError SDL WebGLRenderingContext.getError
ResizeBuffers SDL Canvas.width = w;Canvas.height = h;
SwapBuffers GAP 同等のものはない GAP(一部) - 描画コードの最後には、常に暗黙的なフラッシュがあります。可能性は低い できます。ただし、OffscreenCanvasImageBitmapRenderingContext を組み合わせると、同様の機能を提供できます。

PPB_ImageData

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetNativeImageDataFormat SDL ImageData で RGBA 順序が必須になる
IsImageDataFormatSupported SDL ImageData では RGBA の順序が必須
作成 SDL CanvasRenderingContext2d.createImageData
説明する SDL ImageData はストライドなし
マップ SDL ImageData.data
マッピング解除 SDL ImageData.data

PPB_InputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
RequestInputEvents SDL 同等のものはない JS / Wasm はメインスレッドで実行されるため、この機能がないことは問題にならないでしょう。また、クロスプロセス ラウンドトリップを発生させることなく、イベントをより安価にフィルタできます。
RequestFilteringInputEvents SDL マウス* キー* ホイール* タッチ* 合成* イベント
SDL Element.addEventListener
ClearInputEventRequest SDL Element.removeEventListener
GetType SDL イベントクラスの子孫
GetTimeStamp SDL Event.timeStamp
GetModifiers SDL *Event.altKey/shiftKey/metaKey/ctrlKey

PPB_MouseInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL MouseEvent
GetButton SDL MouseEvent.button
GetPosition SDL MouseEvent.client*/page*/offset*
GetClickCount SDL dblclick「mousedown」との比較イベント
GetMovement SDL MouseEvent.movement*

PPB_WheelInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL WheelEvent
GetDelta SDL WheelEvent.delta*
GetTicks GAP GAP - deltaMode にはこの情報が含まれていますが、不完全です。 WheelEvent.deltaMode API の実装に関する議論があります。https://github.com/w3c/uievents/issues/181#issuecomment-537811017
GetScrollByPage GAP GAP - deltaMode にはこの情報が含まれていますが、不完全です。 WheelEvent.deltaMode API の実装に関する議論があります。https://github.com/w3c/uievents/issues/181#issuecomment-537811017

PPB_KeyboardInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL KeyboardEvent
GetKeyCode SDL KeyboardEvent.keyCode
GetCharacterText SDL KeyboardEvent.key
GetCode SDL KeyboardEvent.code

PPB_TouchInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 SDL TouchEvent
AddTouchPoint SDL TouchEvent.touches.push
GetTouchCount SDL TouchEvent.touches.length
GetTouchByIndex SDL TouchEvent.touches[i]
GetTouchById SDL Touch.indentifer(ご自身で確認してください)

PPB_IMEInputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP CompositionEvent
GetText GAP CompositionEvent.data
GetSegmentNumber GAP GAP - 直接的な同等サービスなし このデータは、CompositionEvent.data から取得できます。
GetSegmentOffset GAP GAP - 直接的な同等性なし
GetTargetSegment GAP GAP - 直接的な同等サービスなし
GetSelection GAP GAP - 直接的な同等サービスなし

PPB_Instance

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
BindGraphics SDL Canvas.getContext(バインディングが自動であるため無視)。
IsFullFrame GAP GAP - MIME タイプのハンドラに相当するものはありません。 NaCl アプリは、特定の MIME タイプを処理してドキュメント全体を所有するように登録できます。
DidCreate 該当なし &lt;Element&gt;[key] 一般的な DOM アクセスでは、タグ属性を取得できます。
DidDestroy 該当なし 該当なし NaCl ではトリガーされません
DidChangeView 該当なし 要素「resize」イベント
DidChangeFocus 該当なし 要素の「focus」、「focusin」、「focusout」イベント
HandleDocumentLoad 該当なし GAP - MIME タイプ ハンドラとして登録する方法がない アプリとマニフェスト エントリを介して NaCl モジュールを設定すると、特定の MIME タイプを処理できます。

PPB_MediaStreamAudioTrack

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
設定 GAP getUserMedia() getUserMedia() の制約により、MediaStreamTrack で使用する構成値を指定できます。
GetAttrib GAP MediaStreamTrack.getSettings()
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetBuffer GAP GAP - 該当なし
RecycleBuffer GAP GAP - 該当なし
閉じる GAP MediaStreamTrack.stop()

PPB_MediaStreamVideoTrack

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP キャンバスのキャプチャ Canvas Capture を使用すると、動画フレームをプログラムで導入できます。
設定 GAP applyConstraints(), getUserMedia() GAP(部分的)- Web API で利用可能な設定の範囲が PPAPI と異なる場合があります。
GetAttrib GAP MediaStreamSettings.width
GAP MediaStreamSettings.height
GAP GAP - PP_MEDIASTREAMVIDEOTrack_ATTRIB_BUFFERED_FRAMES に相当するものなし MediaStream はプリロードできないため、バッファリングされません。https://www.w3.org/TR/mediacapture-streams/#mediastreams-in-media-elements
GAP GAP - PP_MEDIASTREAMVIDEOTRACK_ATTRIB_FORMAT に相当するものなし
GetId GAP MediaStreamTrack.id
HasEnded GAP MediaStreamTrack.readyState
GetFrame GAP GAP - 同等のものなし
RecycleFrame GAP GAP - 該当なし
閉じる GAP MediaStreamTrack.stop()
GetEmptyFrame GAP GAP - 同等のものなし
PutFrame GAP GAP - 同等のものなし

PPB_MessageLoop

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを取得します。
GetForMainThread 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを受け取ります。
GetCurrent 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを受け取ります。
AttachToCurrentThread 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを受け取ります。
ランニング 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを取得します。
PostWork 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを取得します。
PostQuit 該当なし ほとんどの場合、ワーカーは暗黙的なイベントループを取得します。

PPB_Messaging

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
PostMessage 該当なし Window.postMessage
RegisterMessageHandler 該当なし Window.addEventListener
UnregisterMessageHandler 該当なし Window.removeEventListener

PPB_MouseCursor

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
SetCursor SDL Element.style.cursor 同じセットの標準カーソルがサポートされています。カスタム カーソルは url(..) で作成できます。動的カスタム カーソルはデータ URI で作成できます。CSS3 では、アクセス ポイントの指定がサポートされています。

PPB_MouseLock

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
LockMouse SDL Element.requestPointerLock
UnlockMouse SDL Element.exitPointerLock

PPB_OpenGLES2

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
いくつかの方法 OpenGLES 機能は WebGL 1.0 に近い。
x OffscreenCanvas

PPB_TextInputController

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
SetTextInputType GAP GAP - インプット メソッド エディタ API で補完される可能性あり 一部のデベロッパーは、この方法でヒントを提供できること、または可能であれば IME イベントや出力をキャンバス内にインラインでインターセプトして表示する機能を望んでいます。
UpdateCaretPosition GAP GAP - Input Method Editor API によって入力される可能性がある https://www.w3.org/TR/ime-api/
CancelCompositionText GAP GAP - Input Method Editor API によって入力される可能性がある https://www.w3.org/TR/ime-api/
UpdateSurroundingText GAP GAP - Input Method Editor API によって入力される可能性がある https://www.w3.org/TR/ime-api/

PPB_URLLoader

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 embind new XMLHttpRequest();
[ embind XMLHttpRequest.open
FollowRedirect embind Request.redirect
GAP GAP - 同等の XMLHTTPRequest なし
GetUploadProgress embind XMLHttpRequest 「progress」イベント
GAP FetchObserver まだ指定または実装されていません。https://github.com/whatwg/fetch/issues/607
GetDownloadProgress embind XMLHttpRequest 「progress」イベント
GAP FetchObserver まだ指定または実装されていません。https://github.com/whatwg/fetch/issues/607
GetResponseInfo embind XMLHttpRequest.getAllResponseHeaders
embind Fetch Response* を取得します。
ReadResponseBody embind XMLHttpRequest.response
embind 本文*(レスポンスは本文)
FinishStreamingToFile embind GAP - 直接的な同等性なし XMLHttpRequest と Fetch はどちらも、ストレージに直接ではなく、メモリにストリーミングすることを前提としています。
閉じる embind XMLHttpRequest.abort
GAP Fetch API: AbortSignal と AbortController

PPB_URLRequestInfo

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 embind XMLHttpRequest
embind 取得リクエスト
SetProperty GAP GAP - XMLHttpRequest に直接相当するものがない XMLHttpRequest には、リダイレクト、ファイルへのストリーミング、リファラーや認証情報ポリシーの設定など、リクエストごとの制限を直接行う手段は用意されていません。
embind Request.*
AppendDataToBody embind XMLHttpRequest.send GAP - どちらもチャンクではなく本文全体が必要です。
embind fetch(.., options:body)
AppendFileToBody GAP fetch() のアップロード ストリーミング https://www.chromestatus.com/features/5274139738767360
該当なし &lt;form&gt; FileReader で読み込んでアップロードすることもできますが、これは AppendDataToBody に似ています

PPB_URLResponseInfo

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetProperty embind XMLHttpRequest.getAllResponseHeaders など
embind Fetch Response*。
GetBodyAsFileRef embind フェッチ応答(本文).blob() ストレージ レイヤが転送を最適化することを前提としています。

PPB_Var

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
VarFromUtf8 embind TextDecoder.decode
VarToUtf8 embind TextEncoder.encode
VarFromResource 該当なし 該当なし
VarToResource 該当なし 該当なし

PPB_VarArray

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
Get embind Array[i]
Set embind 配列 [i] = x
GetLength embind Array.length
SetLength embind Array.length = n

PPB_VarArrayBuffer

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 embind new ArrayBuffer(n)(新しい ArrayBuffer(n)
ByteLength embind ArrayBuffer.byteLength
マップ GAP GAP - 直接的な同等性なし Asm.js / Wasm モジュールは、単一の線形メモリヒープ以外の ArrayBuffer の領域をマッピングできません。 今後、複数のメモリやメモリ マッピングが導入されると、この問題は改善される可能性があります。
マッピング解除 GAP GAP - 直接的な同等サービスなし

PPB_VarDictionary

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 embind {}
Get embind &lt;Object&gt;[i]
Set embind <Object>[i] = x
削除 embind delete <Object>[i]
HasKey embind <Object> 内の x
GetKeys embind for (<Object>) {} リテラルで同等のものはありませんが、ビルドできます。

PPB_VideoDecoder

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP GAP - VideoDecoder() を使用して、提案された WebCodecs API で処理されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Initialize GAP GAP - 提案された WebCodecs API で VideoDecoder() 初期化パラメータ(VideoDecoderInitParameters)を使用して処理されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
デコード GAP GAP - ReadableStream.pipeThrough(VideoDecoder) を使用して提案されている WebCodecs API で処理されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
GetPicture GAP GAP - 提案されている WebCodecs API で ReadableStream.pipeThrough(VideoDecoder).pipeTo(VideoTrackWriter().writable) を使用して処理されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
RecyclePicture GAP GAP - 提案されている WebCodecs API で処理されます。現在のデザインでは、画像が自動的にリサイクルされ、デコード処理が継続されます。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
フラッシュ GAP GAP - 提案されている WebCodecs API で処理されます。この API は Flush() と呼ばれますが、デコード呼び出しに関連してどのようにシーケンス化されるかについては、まだ議論中です。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming
Reset GAP GAP - 提案されている WebCodecs API で処理されます。VideoDecoder インスタンスを破棄して新しいインスタンスを作成します。これは専用のリセット方法ほど効率的ではありませんが、Reset() API のセマンティクスはまだ議論中です。 https://github.com/WICG/web-codecs/blob/master/explainer.md#example-of-decode-for-low-latency-live-streaming-or-cloud-gaming

PPB_VideoEncoder

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP GAP - VideoEncoder() を使用して、提案された WebCodecs API で処理されます。
GetSupportedProfiles GAP GAP(部分)- navigator.mediaCapabilities.encodingInfo() サポートされているプロファイルは 1 つずつ確認する必要があります。
初期化 GAP GAP - VideoEncoder() 初期化パラメータを使用して、提案されている WebCodecs API で処理されます。
GetFramesRequired GAP GAP - 同等のものなし Web Codecs API によって内部的に使用されるフレームプールが公開されることはありません。
GetFrameCodedSize GAP GAP - 同等のものなし Web Codecs API によって内部的に使用されるフレームプールが公開されることはありません。
GetVideoFrame GAP GAP - 提案されている WebCodecs API で ReadableStream.pipeThrough(VideoEncoder) を使用して処理されます。これにより、エンコード前にデータを入力するために 1 つのフレームを取得するのではなく、Readable ストリーム内のデータを直接エンコードします。
エンコード GAP GAP - ReadableStream.pipeThrough(VideoEncoder) を使用して、提案されている WebCodecs API で処理されます。
GetBitstreamBuffer GAP GAP - 提案されている WebCodecs API で処理されます。現在のデザインは、パイプスルーされるエンコードされたビットストリーム バッファを自動的に通過します。 現在、WebCodecs API では、ビットストリーム バッファをプールするのではなくコピーできるため、リサイクルする必要がないことを前提としています。
RecycleBitstreamBuffer GAP GAP - 提案されている WebCodecs API で処理されます。現在の設計では、エンコード プロセスを続行するためにバッファが自動的にリサイクルされます。 パフォーマンスへの影響が小さいため、今後変更される可能性は低いです。
RequestEncodingParametersChange GAP GAP - 提案された Web Codecs API で処理されます。パラメータには、その場で変更できるものもありますが、エンコーダを破棄する必要があるパラメータもあります。
閉じる GAP GAP - 提案されている WebCodecs API で VideoEncoder.Close() を使用して処理されます。

PPB_VideoFrame

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetTimestamp GAP GAP - 提案された WebCodecs API で処理されます。
SetTimestamp GAP GAP - 提案された WebCodecs API で処理されます。
GetFormat GAP GAP - 提案された WebCodecs API で処理されます。
GetSize GAP GAP - 提案された WebCodecs API で処理されます。
GetDataBuffer GAP GAP - 提案されている WebCodecs API で処理されます。
GetDataBufferSize GAP GAP - 提案された WebCodecs API で処理されます。

PPB_View

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetRect embind Element.getBoundingClientRect
IsFullscreen embind Document.fullScreenEnabled 単一の要素ではなくドキュメントに関連します。
IsVisible embind IntersectionObserver
IsPageVisible embind document.visibilityState
GetClipRect embind IntersectionObserver
GetDeviceScale embind window.devicePixelRatio
GetCSSScale embind <Element>.getBoundingClientRect().width / <Element>.offsetWidth
GetScrollOffset embind <要素>.scrollTop / <要素>.scrollLeft

PPB_WebSocket

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 GAP WebSocket.WebSocket
接続 GAP WebSocket.WebSocket(url, ...) WebSocket の「open」イベント
閉じる GAP WebSocket.close
ReceiveMessage GAP WebSocket「メッセージ」イベント WebSocket「エラー」イベント WebSocket の「close」イベント
SendMessage GAP WebSocket.send
GetBufferedAmount GAP WebSocket.bufferedAmount
GetCloseCode GAP CloseEvent.code
GetCloseReason GAP CloseEvent.reason
GetCloseWasClean GAP CloseEvent.wasClean
GetExtensions GAP WebSocket.extensions
GetProtocol GAP WebSocket.protocol
GetReadyState GAP WebSocket.readyState
GetURL GAP WebSocket.url

PPP_Graphics3D

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
グラフィック 3D コンテキスト喪失 SDL キャンバス「webglcontextlost」イベント

PPP_InputEvent

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
HandleInputEvent SDL Element.addEventListener

PPP_Instance

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
DidCreate 該当なし &lt;Element&gt;[key] 一般的な DOM アクセスでは、タグ属性を取得できます。
DidDestroy 該当なし 該当なし NaCl ではトリガーされません
DidChangeView 該当なし 要素「resize」イベント
DidChangeFocus 該当なし 要素の「focus」、「focusin」、「focusout」イベント
HandleDocumentLoad 該当なし GAP - MIME タイプ ハンドラとして登録する方法がない アプリを介した NaCl モジュールとマニフェスト エントリは、特定の MIME タイプを処理するようにセットアップできます。

PPP_MessageHandler

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
HandleMessage embind MessagePort「メッセージ」イベント ウィンドウ「message」イベント
HandleBlockingMessage 該当なし GAP - 直接的な同等性なし Atomics.wait を使用して、メインスレッド以外でも同様の同期を実行できます。これは、同期プラグイン API のエミュレーションをサポートするために追加されました。

PPP_Messaging

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
HandleMessage embind MessagePort の「message」イベント Window の「message」イベント

PPP_MouseLock

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
MouseLockLost SDL 要素の「pointerlockchange」、「pointerlockerror」イベント

PPAPI(アプリ)

PPB_HostResolver

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 x GAP GAP(部分)- 直接的な同等性なし
解決 x GAP GAP(部分)- 直接的な同等性なし
GetCanonicalName x GAP GAP(部分)- 直接的な同等性なし
GetNetAddressCount x GAP GAP(部分)- 直接的な同等性なし
GetNetAddress x GAP GAP(一部)- 直接的な同等性なし

PPB_NetAddress

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
CreateFromIPv4Address x GAP GAP(部分)- 直接的な同等性なし
CreateFromIPv6Address x GAP GAP(部分)- 直接的な同等性なし
GetFamily x GAP GAP(部分)- 直接的な同等性なし
DescribeAsString x GAP GAP(部分的)- 直接的な同等性なし
DescribeAsIPv4Address x GAP GAP(部分)- 直接的な同等性なし
DescribeAsIPv6Address x GAP GAP(部分的)- 直接的な同等性なし

PPB_NetworkList

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetCount x GAP GAP - 直接的な同等サービスなし
GetName x GAP GAP - 直接的な同等性なし
GetType x GAP GAP - 直接的な同等性なし
GetState x GAP GAP - 直接的な同等サービスなし
GetIpAddress x GAP GAP - 直接的な同等性なし
GetDisplayName x GAP GAP - 直接的な同等サービスなし
GetMTU x GAP GAP - 直接的な同等性なし

PPB_NetworkMonitor

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
作成 x GAP GAP - 直接的な同等性なし
UpdateNetworkList x GAP GAP - 直接的な同等性なし

PPB_NetworkProxy

PPAPI メソッド Threads を前提としています エムスクリテン ウェブ API 制限事項
GetProxyForURL x GAP GAP - 直接的な同等サービスなし

PPB_TCPSocket と PPB_UDPSocket

移行には 1 対 1 の直接的なマッピングはありません。代わりに、以下のユーザー シナリオと推奨される移行パスについて説明します。

ユースケース 推奨事項
画面共有 getDisplayMediaWebRTC デモ
読み込み 使用すると、帯域幅の使用量が最小限に抑えられます。 XHR、フェッチ、ストリーム、Service Worker、Cache API
ウェブアプリのローカル インスタンスからの読み込み / ウェブアプリのローカル インスタンスへの接続 WebRTC
チャット WebSocket*
リアルタイム 音声/映像によるコミュニケーション WebRTC
コラボレーション WebSocket*
リアルタイム マルチプレーヤー ゲーム WebTransport** ただし P2P の場合は WebRTC(または RTCIceTransport を介した WebTransport を使用)
リアルタイム インタラクティブ ストリーミング WebTransport**
レガシー サーバーとの通信 プロトコル変換を行うプロキシ サーバーまたはミドルウェア。フィードバックの送信先 bit.ly/network-api-gaps

*: 将来的には WebTransport

**: 提供状況については、chromestatus をご覧ください