WebRTC 진단 로깅 API

비공식 제안 초안,

이 버전:
https://github.com/guidou/webrtc-diagnostic-logging/
이슈 추적:
GitHub
편집자:
Guido Urdaneta (Google)

초록

이 명세는 내부 WebRTC 진단 로그를 관리하는 API를 정의한다.

이 문서의 상태

이 명세는 웹 플랫폼 인큐베이터 커뮤니티 그룹에서 발행했다. 이 문서는 W3C 표준이 아니며 W3C 표준화 절차에 포함되지도 않는다. 다음 W3C 커뮤니티 기여자 라이선스 계약 (CLA)에 따라 제한적인 참여 철회가 가능하며 기타 조건이 적용된다는 점에 유의한다. W3C 커뮤니티 및 비즈니스 그룹에 대해 자세히 알아본다.

1. 소개

WebRTC 진단 로깅 API는 웹 애플리케이션이 사용자 에이전트가 수행하는 WebRTC 관련 작업의 내부 진단 로그 수집을 시작하고, 완료하고, 취소하기 위한 프로그래밍 인터페이스를 제공한다. 이러한 진단 로그는 애플리케이션에 절대 노출되지 않는다. 대신 사용자 에이전트가 로컬에 저장하며 사용자가 이를 제어한다. 사용자 에이전트는 사용자 에이전트가 결정한 엔드포인트로 진단 로그를 업로드할 수도 있다. 진단 로그의 수집, 저장 및 업로드에는 사용자의 명시적인 승인이 필요하며 애플리케이션은 이러한 작업의 성공 여부를 절대 알 수 없다. 진단 로그의 내용 또한 구현 세부 사항이다. 이 API가 지원하려는 사용 사례는 다음과 같다.

2. 보안 및 개인정보 보호

이러한 진단 로그는 WebRTC 관련 기능을 구현하기 위해 사용자 에이전트가 수행한 내부 작업에 관한 정보를 수집한다. 이러한 진단 로그에는 웹 애플리케이션에 노출되지 않는 정보가 포함될 수 있으므로 API는 어떠한 방식으로도 이 로그를 웹 애플리케이션에 노출할 수 없다. 로그는 사용자의 승인을 조건으로 사용자 에이전트의 버그 수정이나 사용자 에이전트의 기타 개선에 활용할 수 있도록 사용자 에이전트 공급자와 공유할 수 있다(예를 들어 대역 외 업로드를 통해).

진단 로그의 수집, 저장 및 업로드에는 사용자의 명시적인 승인이 필요하다. 이 승인을 위한 구체적인 메커니즘은 구현 세부 사항이다. 승인을 구현하는 방법에는 전용 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. 딕셔너리

RTCStartDiagnosticLoggingOptionsRTCFinishDiagnosticLoggingOptions는 로깅 세션을 위한 구성을 제공한다.

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

3.2. 내부 슬롯

관련 전역 객체null로 초기화되는 [[RTCDiagnosticLoggingSessionId]] 내부 슬롯이 있다고 하자.

3.3. 메서드

3.3.1. startDiagnosticLogging(options)

startDiagnosticLogging(options) 메서드는 다음 단계를 실행해야 한다.

  1. allowUploadoptionsallowUpload 멤버로 설정한다.

  2. metadataoptionsmetadata 멤버로 설정한다.

  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. metadataoptionsmetadata 멤버로 설정한다.

  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; 외. 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; 외. 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 {
};