WebRTC 診断ログ API

非公式提案草案

このバージョン:
https://github.com/guidou/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 診断ログ API は、Web アプリケーションが、ユーザーエージェントによって実行される WebRTC 関連の処理に関する内部診断ログの収集を開始、終了、および取り消すための プログラムインターフェイスを提供します。 これらの診断ログがアプリケーションに公開されることはありません。代わりに、 ユーザーエージェントによってローカルに保存され、ユーザーの管理下に置かれます。 ユーザーエージェントは、ユーザーエージェントが決定したエンドポイントに 診断ログをアップロードすることもできます。 診断ログの収集、保存、およびアップロードには、ユーザーによる明示的な 許可が必要であり、アプリケーションはこれらの処理が成功したかどうかを認識しません。 診断ログの内容も実装の詳細です。 この API が対応することを意図しているユースケースは次のとおりです。

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

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

診断ログの収集、保存、およびアップロードには、ユーザーによる明示的な 許可が必要です。この許可の具体的な仕組みは実装の詳細です。許可を実装するための 選択肢には、専用 UI、設定、企業ポリシー、プロンプト、またはそれらの組み合わせが 含まれますが、これらに限定されません。許可は特定のオリジンに限定される場合があります。 これらの許可の状態がアプリケーションに公開されることはありません。したがって、 API は成功を保証しません。

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

この API は、RTCPeerConnection インターフェイスの静的メソッドの集合として公開されます。

[
  Exposed=Window,
  SecureContext
] partial interface RTCPeerConnection {
  static Promise<DOMString> startDiagnosticLogging(optional RTCStartDiagnosticLoggingOptions options = {});
  static Promise<undefined> finishDiagnosticLogging(optional RTCFinishDiagnosticLoggingOptions options = {});
  static Promise<undefined> cancelDiagnosticLogging();
};

3.1. 辞書

RTCStartDiagnosticLoggingOptions および RTCFinishDiagnosticLoggingOptions は、ログ記録セッションの設定を 提供します。

dictionary RTCDiagnosticLoggingOptions {
  record<DOMString, DOMString> metadata;
};
dictionary RTCStartDiagnosticLoggingOptions : RTCDiagnosticLoggingOptions {
  boolean allowUpload = false;
};
dictionary RTCFinishDiagnosticLoggingOptions : RTCDiagnosticLoggingOptions {
};

3.2. 内部スロット

関連する大域オブジェクトが、 [[RTCDiagnosticLoggingSessionId]] 内部スロットを持ち、初期値が null であるものとします。

3.3. メソッド

3.3.1. startDiagnosticLogging(options)

startDiagnosticLogging(options) メソッドは、 次の手順を 実行しなければなりません。

  1. allowUpload を、optionsallowUpload メンバーとします。

  2. metadata を、optionsmetadata メンバーとします。

  3. metadata のサイズが 5 エントリーを超える場合、または metadata 内のキーか値のいずれかが 100 文字を超える場合は、TypeError拒否されたプロミスを返します。

  4. p を新しいプロミスとします。

  5. 並列に、次の手順を実行します。

    1. uuid を汎用一意 ID とします。

    2. doc を、関連する大域オブジェクトに関連付けられた文書とします。

    3. doc閲覧コンテキストトップレベル閲覧コンテキストでない場合は、puuid解決し、これらの手順を 中止します。

    4. [[RTCDiagnosticLoggingSessionId]] 内部スロットが null でない場合は、puuid解決し、 これらの手順を中止します。

    5. uuid[[DiagnosticLoggingSessionId]] 内部スロットに保存します。

    6. puuid解決します

    7. uuid によって識別される内部 WebRTC アクティビティのログ記録セッションを開始します

  6. p を返します。

ログ記録セッションが開始されると、ユーザーエージェントは p が解決された後に、doc または その子孫文書によって生成された WebRTC 関連のアクティビティをログに記録してもかまいません。 ログには、metadata またはそこから派生した情報が含まれてもかまいません。 allowUploadtrue の場合、ユーザーが許可しており、ログ記録セッションが cancelDiagnosticLogging メソッドによって取り消されていない限り、ログに記録されたデータは、実装定義の仕組みを介して ユーザーエージェントのベンダーと共有される場合があります。ログ記録セッションは uuid によって識別されます。これは、ログに記録されたすべてのデータを uuid を使用して内部的に参照できることを意味します。

3.3.2. finishDiagnosticLogging(options)

cancelDiagnosticLogging(options) メソッドは、次の手順を 実行しなければなりません。

  1. metadata を、optionsmetadata メンバーとします。

  2. metadata のサイズが 5 エントリーを超える場合、または metadata 内のキーか値のいずれかが 100 文字を超える場合は、TypeError拒否されたプロミスを返します。

  3. p を新しいプロミスとします。

  4. 並列に、次の手順を実行します。

    1. [[RTCDiagnosticLoggingSessionId]] 内部スロットが null の場合は、pundefined解決し、 これらの手順を中止します。

    2. [[RTCDiagnosticLoggingSessionId]] によって識別されるログ記録セッションを停止します。

    3. [[RTCDiagnosticLoggingSessionId]]null に設定します。

    4. pundefined解決します

  5. p を返します。

ユーザーエージェントは、p が解決された後、doc または その子孫文書によって生成された WebRTC 関連のアクティビティをログに記録してはなりません。 ログには、metadata またはそこから派生した情報が 含まれてもかまいません。ログ記録セッションが allowUploadtrue に設定して初期化され、ユーザーが許可している限り、ユーザーエージェントは、 実装定義の仕組みを使用して、ログに記録されたデータを帯域外でユーザーエージェントの ベンダーと共有してもかまいません。

3.3.3. cancelDiagnosticLogging()

cancelDiagnosticLogging() メソッドは、次の 手順を実行しなければなりません。

  1. p を新しいプロミスとします。

  2. 並列に、次の手順を実行します。

    1. uuid を、[[RTCDiagnosticLoggingSessionId]] 内部スロットの値とします。

    2. [[RTCDiagnosticLoggingSessionId]] によって識別されるログ記録セッションを取り消します。

    3. [[RTCDiagnosticLoggingSessionId]]null に設定します。

    4. pundefined解決します

  3. p を返します。

p が解決された後は、次のようになります。

適合性

文書の 規約

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

この仕様のすべての文章は、明示的に非規範的と記された節、例、および注記を除き、 規範的です。[RFC2119]

この仕様の例は、「たとえば」という語で導入されるか、 class="example" を使用して 規範的な文章から分離されます。 次に例を示します。

これは参考例の一例です。

参考注記は「注記」という語で始まり、 class="note" を使用して 規範的な文章から分離されます。 次に例を示します。

注記: これは参考注記です。

索引

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

参照によって定義される 用語

参考文献

規範的参考文献

[DOM]
Anne van Kesteren. DOM 標準. 現行標準. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML 標準. 現行標準. URL: https://html.spec.whatwg.org/multipage/
[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/

IDL 索引

[
  Exposed=Window,
  SecureContext
] partial interface RTCPeerConnection {
  static Promise<DOMString> startDiagnosticLogging(optional RTCStartDiagnosticLoggingOptions options = {});
  static Promise<undefined> finishDiagnosticLogging(optional RTCFinishDiagnosticLoggingOptions options = {});
  static Promise<undefined> cancelDiagnosticLogging();
};

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

dictionary RTCStartDiagnosticLoggingOptions : RTCDiagnosticLoggingOptions {
  boolean allowUpload = false;
};

dictionary RTCFinishDiagnosticLoggingOptions : RTCDiagnosticLoggingOptions {
};