Skip to content

Commit

Permalink
Instrument RTCRtp[Sender/Receiver] for the identifiability study.
Browse files Browse the repository at this point in the history
Bug: 973801
Change-Id: Ia1b993bbbde328442bf041c25de912f14be06d0d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2485677
Commit-Queue: Caleb Raitto <caraitto@chromium.org>
Reviewed-by: Florent Castelli <orphis@chromium.org>
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Reviewed-by: Asanka Herath <asanka@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821873}
  • Loading branch information
caraitto authored and Commit Bot committed Oct 28, 2020
1 parent 0a12c7e commit c27e8b5
Show file tree
Hide file tree
Showing 12 changed files with 142 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,14 @@ class IdentifiableSurface {
// Represents loading a font locally. Input is the PostScript name.
kLocalFontLoadPostScriptName = 29,

// Getting supported codecs, etc. for WebRTC sender -- key is hash of kind
// (audio or video).
kRtcRtpSenderGetCapabilities = 31,

// Getting supported codecs, etc. for WebRTC receiver -- key is hash of kind
// (audio or video).
kRtcRtpReceiverGetCapabilities = 32,

// We can use values up to and including |kMax|.
kMax = (1 << kTypeBits) - 1
};
Expand Down
4 changes: 2 additions & 2 deletions third_party/blink/public/mojom/web_feature/web_feature.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -2835,8 +2835,8 @@ enum WebFeature {
kIdentifiabilityStudyReserved3506 = 3506,
kV8PushManager_SupportedContentEncodings_AttributeGetter = 3507,
kIdentifiabilityStudyReserved3508 = 3508,
kIdentifiabilityStudyReserved3509 = 3509,
kIdentifiabilityStudyReserved3510 = 3510,
kV8RTCRtpReceiver_GetCapabilities_Method = 3509,
kV8RTCRtpSender_GetCapabilities_Method = 3510,
kIdentifiabilityStudyReserved3511 = 3511,
kIdentifiabilityStudyReserved3512 = 3512,
kIdentifiabilityStudyReserved3513 = 3513,
Expand Down
2 changes: 2 additions & 0 deletions third_party/blink/renderer/modules/peerconnection/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ blink_modules_sources("peerconnection") {
"byte_buffer_queue.h",
"call_setup_state_tracker.cc",
"call_setup_state_tracker.h",
"identifiability_metrics.cc",
"identifiability_metrics.h",
"media_stream_remote_video_source.cc",
"media_stream_remote_video_source.h",
"media_stream_track_metrics.cc",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "third_party/blink/renderer/modules/peerconnection/identifiability_metrics.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_codec_capability.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_header_extension_capability.h"
#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"

namespace blink {

void IdentifiabilityAddRTCRtpCapabilitiesToBuilder(
IdentifiableTokenBuilder& builder,
const RTCRtpCapabilities& capabilities) {
if (capabilities.hasCodecs()) {
for (const auto& codec : capabilities.codecs()) {
if (codec->hasMimeType()) {
builder.AddToken(
IdentifiabilitySensitiveStringToken(codec->mimeType()));
} else {
builder.AddToken(IdentifiableToken());
}
if (codec->hasClockRate()) {
builder.AddValue(codec->clockRate());
} else {
builder.AddToken(IdentifiableToken());
}
if (codec->hasChannels()) {
builder.AddValue(codec->channels());
} else {
builder.AddToken(IdentifiableToken());
}
if (codec->hasSdpFmtpLine()) {
builder.AddToken(
IdentifiabilitySensitiveStringToken(codec->sdpFmtpLine()));
} else {
builder.AddToken(IdentifiableToken());
}
if (codec->hasScalabilityModes()) {
for (const auto& mode : codec->scalabilityModes()) {
builder.AddToken(IdentifiabilitySensitiveStringToken(mode));
}
} else {
builder.AddToken(IdentifiableToken());
}
}
} else {
builder.AddToken(IdentifiableToken());
}
if (capabilities.hasHeaderExtensions()) {
for (const auto& header_extension : capabilities.headerExtensions()) {
if (header_extension->hasUri()) {
builder.AddToken(
IdentifiabilitySensitiveStringToken(header_extension->uri()));
} else {
builder.AddToken(IdentifiableToken());
}
}
} else {
builder.AddToken(IdentifiableToken());
}
}

} // namespace blink
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_IDENTIFIABILITY_METRICS_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_IDENTIFIABILITY_METRICS_H_

#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_capabilities.h"

namespace blink {

void IdentifiabilityAddRTCRtpCapabilitiesToBuilder(
IdentifiableTokenBuilder& builder,
const RTCRtpCapabilities& capabilities);

} // namespace blink

#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_PEERCONNECTION_IDENTIFIABILITY_METRICS_H_
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

#include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h"

#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtcp_parameters.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtp_capabilities.h"
Expand All @@ -15,6 +19,7 @@
#include "third_party/blink/renderer/core/loader/document_loader.h"
#include "third_party/blink/renderer/core/streams/readable_stream.h"
#include "third_party/blink/renderer/core/streams/writable_stream.h"
#include "third_party/blink/renderer/modules/peerconnection/identifiability_metrics.h"
#include "third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_sink.h"
Expand All @@ -30,6 +35,7 @@
#include "third_party/blink/renderer/platform/peerconnection/rtc_encoded_audio_stream_transformer.h"
#include "third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.h"
#include "third_party/blink/renderer/platform/peerconnection/rtc_stats.h"
#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/webrtc/api/rtp_parameters.h"
Expand Down Expand Up @@ -274,7 +280,8 @@ void RTCRtpReceiver::Trace(Visitor* visitor) const {
ScriptWrappable::Trace(visitor);
}

RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(const String& kind) {
RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(ScriptState* state,
const String& kind) {
if (kind != "audio" && kind != "video")
return nullptr;

Expand Down Expand Up @@ -320,6 +327,17 @@ RTCRtpCapabilities* RTCRtpReceiver::getCapabilities(const String& kind) {
}
capabilities->setHeaderExtensions(header_extensions);

if (IdentifiabilityStudySettings::Get()->IsTypeAllowed(
IdentifiableSurface::Type::kRtcRtpReceiverGetCapabilities)) {
IdentifiableTokenBuilder builder;
IdentifiabilityAddRTCRtpCapabilitiesToBuilder(builder, *capabilities);
IdentifiabilityMetricBuilder(ExecutionContext::From(state)->UkmSourceID())
.Set(IdentifiableSurface::FromTypeAndToken(
IdentifiableSurface::Type::kRtcRtpReceiverGetCapabilities,
IdentifiabilityBenignStringToken(kind)),
builder.GetToken())
.Record(ExecutionContext::From(state)->UkmRecorder());
}
return capabilities;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ class RTCRtpReceiver final : public ScriptWrappable {
bool force_encoded_audio_insertable_streams,
bool force_encoded_video_insertable_streams);

static RTCRtpCapabilities* getCapabilities(const String& kind);
static RTCRtpCapabilities* getCapabilities(ScriptState* state,
const String& kind);

MediaStreamTrack* track() const;
RTCDtlsTransport* transport();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ interface RTCRtpReceiver {
readonly attribute RTCDtlsTransport? rtcpTransport;
// https://henbos.github.io/webrtc-extensions/#dom-rtcrtpreceiver-playoutdelayhint
[RaisesException=Setter, Measure] attribute double? playoutDelayHint;
static RTCRtpCapabilities? getCapabilities(DOMString kind);
[CallWith=ScriptState, HighEntropy, Measure] static RTCRtpCapabilities? getCapabilities(DOMString kind);
RTCRtpReceiveParameters getParameters();
[CallWith=ScriptState, RaisesException] sequence<RTCRtpSynchronizationSource> getSynchronizationSources();
[CallWith=ScriptState, RaisesException] sequence<RTCRtpContributingSource> getContributingSources();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
#include <tuple>
#include <utility>

#include "third_party/blink/public/common/privacy_budget/identifiability_metric_builder.h"
#include "third_party/blink/public/common/privacy_budget/identifiability_study_settings.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_surface.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise_resolver.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_insertable_streams.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_rtc_rtcp_parameters.h"
Expand All @@ -22,6 +26,7 @@
#include "third_party/blink/renderer/core/streams/readable_stream.h"
#include "third_party/blink/renderer/core/streams/writable_stream.h"
#include "third_party/blink/renderer/modules/mediastream/media_stream_track.h"
#include "third_party/blink/renderer/modules/peerconnection/identifiability_metrics.h"
#include "third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_dtmf_sender.h"
Expand All @@ -43,6 +48,7 @@
#include "third_party/blink/renderer/platform/peerconnection/rtc_encoded_video_stream_transformer.h"
#include "third_party/blink/renderer/platform/peerconnection/rtc_stats.h"
#include "third_party/blink/renderer/platform/peerconnection/rtc_void_request.h"
#include "third_party/blink/renderer/platform/privacy_budget/identifiability_digest_helpers.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
#include "third_party/blink/renderer/platform/wtf/math_extras.h"
#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
Expand Down Expand Up @@ -719,7 +725,8 @@ void RTCRtpSender::Trace(Visitor* visitor) const {
ScriptWrappable::Trace(visitor);
}

RTCRtpCapabilities* RTCRtpSender::getCapabilities(const String& kind) {
RTCRtpCapabilities* RTCRtpSender::getCapabilities(ScriptState* state,
const String& kind) {
if (kind != "audio" && kind != "video")
return nullptr;

Expand All @@ -740,6 +747,7 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(const String& kind) {
codec->setMimeType(WTF::String::FromUTF8(rtc_codec.mime_type()));
if (rtc_codec.clock_rate)
codec->setClockRate(rtc_codec.clock_rate.value());

if (rtc_codec.num_channels)
codec->setChannels(rtc_codec.num_channels.value());
if (!rtc_codec.parameters.empty()) {
Expand Down Expand Up @@ -772,6 +780,17 @@ RTCRtpCapabilities* RTCRtpSender::getCapabilities(const String& kind) {
}
capabilities->setHeaderExtensions(header_extensions);

if (IdentifiabilityStudySettings::Get()->IsTypeAllowed(
IdentifiableSurface::Type::kRtcRtpSenderGetCapabilities)) {
IdentifiableTokenBuilder builder;
IdentifiabilityAddRTCRtpCapabilitiesToBuilder(builder, *capabilities);
IdentifiabilityMetricBuilder(ExecutionContext::From(state)->UkmSourceID())
.Set(IdentifiableSurface::FromTypeAndToken(
IdentifiableSurface::Type::kRtcRtpSenderGetCapabilities,
IdentifiabilityBenignStringToken(kind)),
builder.GetToken())
.Record(ExecutionContext::From(state)->UkmRecorder());
}
return capabilities;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,8 @@ class RTCRtpSender final : public ScriptWrappable {
RTCDtlsTransport* rtcpTransport();
ScriptPromise replaceTrack(ScriptState*, MediaStreamTrack*);
RTCDTMFSender* dtmf();
static RTCRtpCapabilities* getCapabilities(const String& kind);
static RTCRtpCapabilities* getCapabilities(ScriptState* state,
const String& kind);
RTCRtpSendParameters* getParameters();
ScriptPromise setParameters(ScriptState*, const RTCRtpSendParameters*);
ScriptPromise getStats(ScriptState*);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ interface RTCRtpSender {
readonly attribute MediaStreamTrack? track;
readonly attribute RTCDtlsTransport? transport;
readonly attribute RTCDtlsTransport? rtcpTransport;
static RTCRtpCapabilities? getCapabilities(DOMString kind);
[CallWith=ScriptState, HighEntropy, Measure] static RTCRtpCapabilities? getCapabilities(DOMString kind);
[CallWith=ScriptState] Promise<void> setParameters(RTCRtpSendParameters parameters);
RTCRtpSendParameters getParameters();
[Measure, CallWith=ScriptState] Promise<void> replaceTrack(MediaStreamTrack? withTrack);
Expand Down
4 changes: 2 additions & 2 deletions tools/metrics/histograms/enums.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29854,8 +29854,8 @@ Called by update_use_counter_feature_enum.py.-->
<int value="3507"
label="V8PushManager_SupportedContentEncodings_AttributeGetter"/>
<int value="3508" label="IdentifiabilityStudyReserved3508"/>
<int value="3509" label="IdentifiabilityStudyReserved3509"/>
<int value="3510" label="IdentifiabilityStudyReserved3510"/>
<int value="3509" label="V8RTCRtpReceiver_GetCapabilities_Method"/>
<int value="3510" label="V8RTCRtpSender_GetCapabilities_Method"/>
<int value="3511" label="IdentifiabilityStudyReserved3511"/>
<int value="3512" label="IdentifiabilityStudyReserved3512"/>
<int value="3513" label="IdentifiabilityStudyReserved3513"/>
Expand Down

0 comments on commit c27e8b5

Please sign in to comment.