WebRTC 診断ログ API

コミュニティグループ報告書草案,

このバージョン:
https://wicg.github.io/webrtc-diagnostic-logging/
課題追跡:
GitHub
編集者:
Guido Urdaneta (Google)

概要

この仕様は、WebRTC の内部診断ログを管理するための API を定義します。

この文書の位置付け

この仕様は、Web Platform Incubator Community Group によって公開されました。 これは W3C 標準ではなく、W3C 標準化過程にもありません。 以下の W3C Community Contributor License Agreement (CLA) では、限定的なオプトアウトが認められており、その他の条件も適用されることに注意してください。 W3C Community and Business Groups について詳しく確認してください。

1. はじめに

WebRTC Diagnostic Logging API は、Web アプリケーションが、ユーザーエージェントによって実行される WebRTC 関連操作の内部診断 ログの収集を開始、終了、および破棄するためのプログラムインターフェイスを提供する。 これらの診断ログがアプリケーションに公開されることはない。代わりに、それらは ユーザーが管理する場所に保存され、ユーザー エージェントのベンダーと共有される場合がある。 診断ログの収集および保存にはユーザーによる明示的な 承認が必要であり、アプリケーションは診断ログ操作が 成功したか失敗したかを知ることはない。診断ログの内容も 実装の詳細である。 この API がサポートすることを意図しているユースケースは次のとおりである。

2. セキュリティとプライバシー

これらの診断ログは、WebRTC 関連機能を実装するために ユーザーエージェントによって実行される内部操作に関する情報を収集する。これらの診断ログには、 Web アプリケーションに公開されない情報が含まれる可能性があり、そのため API はいかなる方法でもこれらのログを Web アプリケーションに公開してはならない。ログは、 ユーザーの承認を条件として、(例えば帯域外アップロードを介して) ユーザーエージェントのベンダーと共有され、ユーザーエージェントのバグ修正や ユーザーエージェントに対するその他の改善の支援に使用される場合がある。

診断ログの収集、保存、およびアップロードにはユーザーによる明示的な 承認が必要である。この承認の具体的な仕組みは 実装定義である。承認を実装する選択肢には、 専用 UI、設定ファイル、エンタープライズポリシー、 プロンプト、またはそれらの組み合わせなどが含まれるが、これらに限定されない。承認は特定の オリジンに限定される場合がある。これらの承認の状態がアプリケーションに公開されることはない。 したがって、API は成功を保証しない。

3. RTCPeerConnection インターフェイスの拡張

API は、RTCPeerConnection インターフェイス上の一連の静的メソッドとして公開される。

[
  Exposed=Window
] partial interface RTCPeerConnection {
  static DOMString startDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {});
  static undefined stopDiagnosticLogging();
  static undefined cancelDiagnosticLogging();
};

3.1. 辞書

RTCDiagnosticLoggingOptions はログ セッションの設定を提供する。

dictionary RTCDiagnosticLoggingOptions {
  record<DOMString, DOMString> metadata;
};

3.2. 内部スロット

関連するグローバルオブジェクトが、 [[RTCDiagnosticLoggingSessionId]] 内部スロットを持つものとし、これは nullに初期化される。

3.3. メソッド

3.3.1. startDiagnosticLogging(options)

startDiagnosticLogging(options) メソッドは、 診断ログセッションの開始を試みる。

このメソッドが呼び出されたとき、ユーザーエージェントは次の手順を実行しなければならない。

  1. options をこのメソッドの最初の引数とする。

  2. metadata を options の metadata メンバーとする。

  3. metadata の サイズ が 5 より大きいか、または、いずれかの エントリー key → value(metadata 内)の 長さ が 100 より大きい場合、 次の例外で 拒否された プロミスを返す: TypeError。

  4. [[RTCDiagnosticLoggingSessionId]] 内部 スロットが null でない場合、次の例外を 送出する: "InvalidStateError" DOMException。

  5. sesssionId をランダムに生成された UUID [rfc4122] とする。フィンガープリンティングを 回避するため、実装は UUID の生成時に RFC 4122 の 4.4 節の形式を使用するべきである。

  6. [[RTCDiagnosticLoggingSessionId]] を sessionId に設定する。

  7. 並列に、内部の WebRTC アクティビティのログ記録セッションを開始し、 コンテキストとして metadata を使用する。ログ記録セッションを sessionId で識別する。

  8. sessionId を返す。

ログ記録セッションが開始されると、ユーザーエージェント は任意の WebRTC 関連の アクティビティを記録してもよい。ログ記録セッションは sessionId で識別され、これは ログの参照に使用できる(例:バグ報告内)。

3.3.2. stopDiagnosticLogging()

stopDiagnosticLogging() メソッドは、 進行中の診断ログ記録セッションを終了する。

このメソッドが呼び出されたとき、ユーザーエージェント は次の手順を実行しなければならない:

  1. [[RTCDiagnosticLoggingSessionId]] 内部 スロットが null の場合、次の例外を 送出する: "InvalidStateError" DOMException。

  2. sessionId を [[RTCDiagnosticLoggingSessionId]] とする。

  3. [[RTCDiagnosticLoggingSessionId]] を null に設定する。

  4. 並列に、次の識別子で識別されるログ記録セッションを停止する: [[RTCDiagnosticLoggingSessionId]]。

ログ記録セッションが停止したら、ユーザーエージェントは WebRTC 関連のアクティビティを 一切記録してはならない。

3.3.3. discardDiagnosticLogging()

discardDiagnosticLogging() メソッドは、 進行中の診断ログ記録セッションをキャンセルし、そのセッションに関連する すべての記録済みデータを削除する。

このメソッドが呼び出されたとき、ユーザーエージェント は次の手順を実行しなければならない:

  1. [[RTCDiagnosticLoggingSessionId]] 内部 スロットが null の場合、次の例外を 送出する: "InvalidStateError" DOMException。

  2. sessionId を [[RTCDiagnosticLoggingSessionId]] とする。

  3. [[RTCDiagnosticLoggingSessionId]] を null に設定する。

  4. 並列に、次の識別子で識別されるログ記録セッションをキャンセルする: [[RTCDiagnosticLoggingSessionId]]。

ログ記録セッションがキャンセルされたら、ユーザーエージェント は WebRTC 関連のアクティビティを一切記録してはならず、ユーザーエージェント は、 キャンセルされたログ記録セッションに関連する記録済みデータを すべて削除済みでなければならない。

適合性

文書の 規約

適合性要件は、 記述的な表明と RFC 2119 の用語を組み合わせて表現される。 この文書の規範的な部分におけるキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、 「MAY」、および「OPTIONAL」は、 RFC 2119 に記載されているとおりに解釈されるものとする。 ただし、可読性のため、 この仕様ではこれらの語はすべて大文字では表記されない。

この仕様のすべてのテキストは規範的である。 ただし、非規範的であると明示的に示された節、例、および注記を除く。 [RFC2119]

この仕様の例は「例えば」という語で導入されるか、 または規範的なテキストから class="example"によって、 次のように区別される。

これは参考情報としての例の一例である。

参考情報としての注記は「注記」という語で始まり、 規範的なテキストから class="note"によって、 次のように区別される。

注記:これは参考情報としての注記である。

索引

この仕様で定義される 用語

参照により定義される 用語

参考文献

規範的参考文献

[HTML]
Anne van Kesteren; et al. HTML 標準. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra 標準. 現行標準. URL: https://infra.spec.whatwg.org/
[RFC2119]
S. Bradner. RFC で要件レベルを 示すために使用するキーワード. 1997年3月. 現行のベストプラクティス. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 標準. 現行 標準. URL: https://webidl.spec.whatwg.org/
[WEBRTC]
Cullen Jennings; et al. WebRTC:ブラウザーにおけるリアルタイム通信 . URL: https://w3c.github.io/webrtc-pc/

非規範的参考文献

[RFC4122]
K. Davis; B. Peabody; P. Leach. 汎用一意 識別子(UUID). 2024年5月. 標準化提案. URL: https://www.rfc-editor.org/info/rfc9562/

IDL 索引

[
  Exposed=Window
] partial interface RTCPeerConnection {
  static DOMString startDiagnosticLogging(optional RTCDiagnosticLoggingOptions options = {});
  static undefined stopDiagnosticLogging();
  static undefined cancelDiagnosticLogging();
};

dictionary RTCDiagnosticLoggingOptions {
  record<DOMString, DOMString> metadata;
};