Commit fe8a5e81 authored by Henrik Boström's avatar Henrik Boström Committed by Commit Bot

Unflag the stats selection algorithm.

This ships:
- RTCPeerConnection.getStats(optional MediaStreamTrack? selector = null)
- RTCRtpSender.getStats()
- RTCRtpReceiver.getStats()

Spec:
https://w3c.github.io/webrtc-pc/#dfn-stats-selection-algorithm

Design doc:
https://docs.google.com/document/d/18BywbtXgHCjsbR5nWBedpzqDjAfXrFSTJNiADnzoK0w/edit?usp=sharing

Intent to Ship:
https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/2mGY257k4-M

Bug: 680172
Change-Id: I63c7991270489434cf67c9ebf7794a2648ceb6b8
Reviewed-on: https://chromium-review.googlesource.com/997554
Commit-Queue: Henrik Boström <hbos@chromium.org>
Reviewed-by: default avatarPhilip Jägenstedt <foolip@chromium.org>
Cr-Commit-Position: refs/heads/master@{#549201}
parent e6f3548a
...@@ -4691,11 +4691,13 @@ interface RTCRtpReceiver ...@@ -4691,11 +4691,13 @@ interface RTCRtpReceiver
getter track getter track
method constructor method constructor
method getContributingSources method getContributingSources
method getStats
interface RTCRtpSender interface RTCRtpSender
attribute @@toStringTag attribute @@toStringTag
getter dtmf getter dtmf
getter track getter track
method constructor method constructor
method getStats
method replaceTrack method replaceTrack
interface RTCSessionDescription interface RTCSessionDescription
attribute @@toStringTag attribute @@toStringTag
......
...@@ -1295,33 +1295,25 @@ ScriptPromise RTCPeerConnection::getStats( ...@@ -1295,33 +1295,25 @@ ScriptPromise RTCPeerConnection::getStats(
if (argument->IsUndefined()) if (argument->IsUndefined())
return PromiseBasedGetStats(script_state, nullptr); return PromiseBasedGetStats(script_state, nullptr);
auto isolate = callback_or_selector.GetIsolate(); auto isolate = callback_or_selector.GetIsolate();
// Default type error message, as it would have been generated by V8 bindings.
const char* type_error_message =
"The callback provided as parameter 1 is not a function.";
// Custom binding for spec-compliant "getStats(MediaStreamTrack? selector)". // Custom binding for spec-compliant "getStats(MediaStreamTrack? selector)".
if (RuntimeEnabledFeatures::RTCPeerConnectionGetStatsSelectorEnabled()) { // null is a valid selector value, but value of wrong type isn't. |selector|
// null is a valid selector value, but value of wrong type isn't. |selector| // set to no value means type error.
// set to no value means type error. base::Optional<MediaStreamTrack*> selector;
base::Optional<MediaStreamTrack*> selector; if (argument->IsNull()) {
if (argument->IsNull()) { selector = base::Optional<MediaStreamTrack*>(nullptr);
selector = base::Optional<MediaStreamTrack*>(nullptr); } else {
} else { MediaStreamTrack* track =
MediaStreamTrack* track = V8MediaStreamTrack::ToImplWithTypeCheck(isolate, argument);
V8MediaStreamTrack::ToImplWithTypeCheck(isolate, argument); if (track)
if (track) selector = base::Optional<MediaStreamTrack*>(track);
selector = base::Optional<MediaStreamTrack*>(track);
}
if (selector.has_value())
return PromiseBasedGetStats(script_state, *selector);
// Override type error message to reflect that a selector is also a valid
// argument.
type_error_message =
"The argument provided as parameter 1 is neither a callback (function) "
"or selector (MediaStreamTrack or null).";
} }
if (selector.has_value())
return PromiseBasedGetStats(script_state, *selector);
ExceptionState exception_state(isolate, ExceptionState::kExecutionContext, ExceptionState exception_state(isolate, ExceptionState::kExecutionContext,
"RTCPeerConnection", "getStats"); "RTCPeerConnection", "getStats");
exception_state.ThrowTypeError(type_error_message); exception_state.ThrowTypeError(
"The argument provided as parameter 1 is neither a callback (function) "
"or selector (MediaStreamTrack or null).");
return exception_state.Reject(script_state); return exception_state.Reject(script_state);
} }
......
...@@ -126,9 +126,6 @@ enum RTCIceConnectionState { ...@@ -126,9 +126,6 @@ enum RTCIceConnectionState {
// List of implemented stats: // List of implemented stats:
// https://cs.chromium.org/chromium/src/third_party/webrtc/api/stats/rtcstats_objects.h // https://cs.chromium.org/chromium/src/third_party/webrtc/api/stats/rtcstats_objects.h
// See also RTCRtpSender.getStats() and RTCRtpReceiver.getStats(). // See also RTCRtpSender.getStats() and RTCRtpReceiver.getStats().
//
// Note: The version of 2) that takes a |selector| is behind flag
// RuntimeEnabled=RTCPeerConnectionGetStatsSelector.
[CallWith=ScriptState] Promise<any> getStats(optional any callbackOrSelector); [CallWith=ScriptState] Promise<any> getStats(optional any callbackOrSelector);
// RTP Media API // RTP Media API
......
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
interface RTCRtpReceiver { interface RTCRtpReceiver {
readonly attribute MediaStreamTrack track; readonly attribute MediaStreamTrack track;
sequence<RTCRtpContributingSource> getContributingSources(); sequence<RTCRtpContributingSource> getContributingSources();
[RuntimeEnabled=RTCPeerConnectionGetStatsSelector, CallWith=ScriptState] Promise<RTCStatsReport> getStats(); [CallWith=ScriptState] Promise<RTCStatsReport> getStats();
// TODO(hbos): Support every member of the spec. https://crbug.com/700916 // TODO(hbos): Support every member of the spec. https://crbug.com/700916
}; };
...@@ -10,6 +10,6 @@ interface RTCRtpSender { ...@@ -10,6 +10,6 @@ interface RTCRtpSender {
[RuntimeEnabled=RTCRtpSenderParameters] RTCRtpParameters getParameters(); [RuntimeEnabled=RTCRtpSenderParameters] RTCRtpParameters getParameters();
[Measure, CallWith=ScriptState] Promise<void> replaceTrack(MediaStreamTrack? withTrack); [Measure, CallWith=ScriptState] Promise<void> replaceTrack(MediaStreamTrack? withTrack);
[Measure] readonly attribute RTCDTMFSender? dtmf; [Measure] readonly attribute RTCDTMFSender? dtmf;
[RuntimeEnabled=RTCPeerConnectionGetStatsSelector, CallWith=ScriptState] Promise<RTCStatsReport> getStats(); [CallWith=ScriptState] Promise<RTCStatsReport> getStats();
// TODO(hbos): Implement the rest of RTCRtpSender, https://crbug.com/700916. // TODO(hbos): Implement the rest of RTCRtpSender, https://crbug.com/700916.
}; };
...@@ -1011,10 +1011,6 @@ ...@@ -1011,10 +1011,6 @@
name: "RootLayerScrolling", name: "RootLayerScrolling",
status: "stable", status: "stable",
}, },
{
name: "RTCPeerConnectionGetStatsSelector",
status: "experimental",
},
{ {
name: "RtcPeerConnectionId", name: "RtcPeerConnectionId",
origin_trial_feature_name: "RtcPeerConnectionId", origin_trial_feature_name: "RtcPeerConnectionId",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment