Commit aa87cb3c authored by Florent Castelli's avatar Florent Castelli Committed by Commit Bot

Import updated WebIDL for RTCRtpSendParameters and related types

Extracts RTCRtpSendParameters from RTCRtpParameters.
Extracts RTCRtpEncodingParameters from RTCRtpCodingParameters.
Adds required to many fields and update tests accordindly.

Bug: 803494
Change-Id: I416c0884abf15ab8d55ce5ae481f15ac8012c73d
Reviewed-on: https://chromium-review.googlesource.com/1114844Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarHenrik Boström <hbos@chromium.org>
Commit-Queue: Florent Castelli <orphis@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570820}
parent a22bb954
......@@ -4,65 +4,59 @@ FAIL setParameters() with large maxBitrate changes getParameters() returned valu
PASS setParameters() with multiple calls after single getParameters()
PASS setParameters() fails without getParameters()
PASS video setParameters() check for transactionId modification
PASS video setParameters() check for transactionId removed
PASS video setParameters() check for codecs remove one
PASS video setParameters() check for codecs add one
PASS video setParameters() check for codecs reorder
PASS video setParameters() check for codecs removed
PASS video setParameters() check for codecs.payloadtype modification
PASS video setParameters() check for codecs.payloadtype removed
PASS video setParameters() check for codecs.mimeType modification
PASS video setParameters() check for codecs.mimeType remove
PASS video setParameters() check for codecs.clockRate modification
PASS video setParameters() check for codecs.clockRate removed
PASS video setParameters() check for codecs.channels modification
PASS video setParameters() check for codecs.channels removed
PASS video setParameters() check for codecs.sdpFmtpLine modification
PASS video setParameters() check for codecs.sdpFmtpLine removed
PASS video setParameters() check for encodings removed
PASS video setParameters() check for encodings remove one
PASS video setParameters() check for encodings add one
FAIL video setParameters() check for encodings.rid modification assert_unreached: Should have rejected: undefined Reached unreachable code
PASS video setParameters() check for headerExtensions remove one
PASS video setParameters() check for headerExtensions add one
PASS video setParameters() check for headerExtensions.uri modification
PASS video setParameters() check for headerExtensions.uri removed
PASS video setParameters() check for headerExtensions.id modification
PASS video setParameters() check for headerExtensions.id removed
PASS video setParameters() check for headerExtensions.encrypted modification
PASS video setParameters() check for headerExtensions.encrypted removed
PASS video setParameters() check for rtcp.cname modification
PASS video setParameters() check for rtcp.reducedSize modification
PASS audio setParameters() check for transactionId modification
PASS audio setParameters() check for transactionId removed
PASS audio setParameters() check for codecs remove one
PASS audio setParameters() check for codecs add one
PASS audio setParameters() check for codecs reorder
PASS audio setParameters() check for codecs removed
PASS audio setParameters() check for codecs.payloadtype modification
PASS audio setParameters() check for codecs.payloadtype removed
PASS audio setParameters() check for codecs.mimeType modification
PASS audio setParameters() check for codecs.mimeType remove
PASS audio setParameters() check for codecs.clockRate modification
PASS audio setParameters() check for codecs.clockRate removed
PASS audio setParameters() check for codecs.channels modification
PASS audio setParameters() check for codecs.channels removed
PASS audio setParameters() check for codecs.sdpFmtpLine modification
PASS audio setParameters() check for codecs.sdpFmtpLine removed
PASS audio setParameters() check for encodings removed
PASS audio setParameters() check for encodings remove one
PASS audio setParameters() check for encodings add one
FAIL audio setParameters() check for encodings.rid modification assert_unreached: Should have rejected: undefined Reached unreachable code
PASS audio setParameters() check for headerExtensions remove one
PASS audio setParameters() check for headerExtensions add one
PASS audio setParameters() check for headerExtensions.uri modification
PASS audio setParameters() check for headerExtensions.uri removed
PASS audio setParameters() check for headerExtensions.id modification
PASS audio setParameters() check for headerExtensions.id removed
PASS audio setParameters() check for headerExtensions.encrypted modification
PASS audio setParameters() check for headerExtensions.encrypted removed
PASS audio setParameters() check for rtcp.cname modification
PASS audio setParameters() check for rtcp.reducedSize modification
PASS video setParameters() check for transactionId is required
PASS video setParameters() check for codecs is required
PASS video setParameters() check for codecs.payloadType is required
PASS video setParameters() check for codecs.mimeType is required
PASS video setParameters() check for codecs.clockRate is required
PASS video setParameters() check for encodings is required
PASS video setParameters() check for headerExtensions is required
PASS video setParameters() check for headerExtensions.uri is required
PASS video setParameters() check for headerExtensions.id is required
PASS video setParameters() check for rtcp is required
PASS setParameters() set low maxBitrate value
Harness: the test ran to completion.
......@@ -81,7 +81,13 @@ promise_test(async (t) => {
new DOMException(
"getParameters() needs to be called before setParameters().",
"InvalidStateError"),
videoSender.setParameters({ rtcp: {}, headerExtensions: []}));
videoSender.setParameters({
transactionId: "",
codecs: [],
encodings: [],
rtcp: {},
headerExtensions: []
}));
}, 'setParameters() fails without getParameters()');
/**
......@@ -97,10 +103,6 @@ var readOnlyParameters = [
name: "transactionId modification",
transform: (p) => { p.transactionId = "foo"; },
},
{
name: "transactionId removed",
transform: (p) => { delete p.transactionId; },
},
{
name: "codecs remove one",
transform: (p) => { p.codecs.pop(); },
......@@ -119,36 +121,20 @@ var readOnlyParameters = [
},
{
name: "codecs reorder",
transform: (p) => { p.codecs.push(p.codecs.splice(-1, 1)); },
},
{
name: "codecs removed",
transform: (p) => { delete p.codecs; },
transform: (p) => { p.codecs.concat(p.codecs.splice(0, 1)); },
},
{
name: "codecs.payloadtype modification",
transform: (p) => { p.codecs[0].payloadType = 1337; },
},
{
name: "codecs.payloadtype removed",
transform: (p) => { delete p.codecs[0].payloadType; },
},
{
name: "codecs.mimeType modification",
transform: (p) => { p.codecs[0].mimeType = "mime"; },
},
{
name: "codecs.mimeType remove",
transform: (p) => { delete p.codecs[0].mimeType; },
},
{
name: "codecs.clockRate modification",
transform: (p) => { p.codecs[0].clockRate = 42; },
},
{
name: "codecs.clockRate removed",
transform: (p) => { delete p.codecs[0].clockRate; },
},
{
name: "codecs.channels modification",
transform: (p) => { p.codecs[0].channels = 16; },
......@@ -167,10 +153,6 @@ var readOnlyParameters = [
transform: (p) => { delete p.codecs[0].sdpFmtpLine; },
check: (p) => { return p.codecs[0].sdpFmtpLine !== undefined; },
},
{
name: "encodings removed",
transform: (p) => { delete p.encodings; },
},
{
name: "encodings remove one",
transform: (p) => { p.encodings.pop(); },
......@@ -203,11 +185,6 @@ var readOnlyParameters = [
transform: (p) => { p.headerExtensions[0].uri = "uri"; },
check: (p) => { return p.headerExtensions.length != 0; },
},
{
name: "headerExtensions.uri removed",
transform: (p) => { delete p.headerExtensions[0].uri; },
check: (p) => { return p.headerExtensions.length != 0; },
},
{
name: "headerExtensions.id modification",
transform: (p) => {
......@@ -217,11 +194,6 @@ var readOnlyParameters = [
return p.headerExtensions.length != 0;
},
},
{
name: "headerExtensions.id removed",
transform: (p) => { delete p.headerExtensions[0].id; },
check: (p) => { return p.headerExtensions.length != 0; },
},
{
name: "headerExtensions.encrypted modification",
transform: (p) => {
......@@ -293,6 +265,67 @@ for (testCase of readOnlyParameters) {
'audio setParameters() check for ' + testCase.name);
}
var requiredParameters = [
{
name: "transactionId is required",
transform: (p) => { delete p.transactionId; },
},
{
name: "codecs is required",
transform: (p) => { delete p.codecs; },
},
{
name: "codecs.payloadType is required",
transform: (p) => { delete p.codecs[0].payloadType; },
},
{
name: "codecs.mimeType is required",
transform: (p) => { delete p.codecs[0].mimeType; },
},
{
name: "codecs.clockRate is required",
transform: (p) => { delete p.codecs[0].clockRate; },
},
{
name: "encodings is required",
transform: (p) => { delete p.encodings; },
},
{
name: "headerExtensions is required",
transform: (p) => { delete p.headerExtensions; },
},
{
name: "headerExtensions.uri is required",
transform: (p) => { delete p.headerExtensions[0].uri; },
},
{
name: "headerExtensions.id is required",
transform: (p) => { delete p.headerExtensions[0].id; },
},
{
name: "rtcp is required",
transform: (p) => { delete p.rtcp; },
},
];
for (testCase of requiredParameters) {
promise_test((async (name, transform, check, t) => {
let pc1 = new RTCPeerConnection();
let pc2 = new RTCPeerConnection();
let stream = await navigator.mediaDevices.getUserMedia({ video: true }, 1);
let videoSender = pc1.addTrack(stream.getVideoTracks()[0], stream);
await doSignalingHandshake(pc1, pc2);
let videoParameters = videoSender.getParameters();
transform(videoParameters);
return promise_rejects(t,
new TypeError(),
videoSender.setParameters(videoParameters));
}).bind(undefined, testCase.name, testCase.transform, testCase.check),
'video setParameters() check for ' + testCase.name);
}
promise_test(async function() {
let pc1 = new RTCPeerConnection();
let pc2 = new RTCPeerConnection();
......
......@@ -581,9 +581,11 @@ modules_dictionary_idl_files =
"peerconnection/rtc_peer_connection_ice_event_init.idl",
"peerconnection/rtc_rtcp_parameters.idl",
"peerconnection/rtc_rtp_codec_parameters.idl",
"peerconnection/rtc_rtp_coding_parameters.idl",
"peerconnection/rtc_rtp_encoding_parameters.idl",
"peerconnection/rtc_rtp_header_extension_parameters.idl",
"peerconnection/rtc_rtp_parameters.idl",
"peerconnection/rtc_rtp_send_parameters.idl",
"peerconnection/rtc_session_description_init.idl",
"peerconnection/rtc_track_event_init.idl",
"permissions/clipboard_permission_descriptor.idl",
......
......@@ -4,9 +4,9 @@
// https://w3c.github.io/webrtc-pc/#rtcrtpcodecparameters*
dictionary RTCRtpCodecParameters {
octet payloadType;
DOMString mimeType;
unsigned long clockRate;
unsigned short channels;
DOMString sdpFmtpLine;
required octet payloadType;
required DOMString mimeType;
required unsigned long clockRate;
unsigned short channels;
DOMString sdpFmtpLine;
};
\ No newline at end of file
// Copyright 2018 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.
// https://w3c.github.io/webrtc-pc/#rtcrtpcodingparameters
dictionary RTCRtpCodingParameters {
//TODO(orphis): Missing rid. https://crbug.com/857034
};
\ No newline at end of file
......@@ -11,8 +11,13 @@ enum RTCPriorityType {
};
// https://w3c.github.io/webrtc-pc/#rtcrtpencodingparameters*
dictionary RTCRtpEncodingParameters {
dictionary RTCRtpEncodingParameters : RTCRtpCodingParameters {
//TODO(orphis): Missing codecPayloadType. https://crbug.com/857042
//TODO(orphis): Missing dtx. https://crbug.com/857044
boolean active = true;
RTCPriorityType priority = "low";
//TODO(orphis): Missing ptime. https://crbug.com/857046
unsigned long maxBitrate;
//TODO(orphis): Missing maxFramerate. https://crbug.com/857047
//TODO(orphis): Missing scaleResolutionDownBy. https://crbug.com/857048
};
\ No newline at end of file
......@@ -4,7 +4,7 @@
// https://w3c.github.io/webrtc-pc/#rtcrtpheaderextensionparameters*
dictionary RTCRtpHeaderExtensionParameters {
DOMString uri;
unsigned short id;
boolean encrypted;
required DOMString uri;
required unsigned short id;
boolean encrypted = false;
};
\ No newline at end of file
......@@ -4,9 +4,7 @@
// https://w3c.github.io/webrtc-pc/#rtcrtpparameters*
dictionary RTCRtpParameters {
DOMString transactionId;
sequence<RTCRtpEncodingParameters> encodings;
required sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
required RTCRtcpParameters rtcp;
sequence<RTCRtpCodecParameters> codecs;
required RTCRtcpParameters rtcp;
required sequence<RTCRtpCodecParameters> codecs;
};
\ No newline at end of file
// Copyright 2018 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.
// https://w3c.github.io/webrtc-pc/#rtcsendrtpparameters
dictionary RTCRtpSendParameters : RTCRtpParameters {
required DOMString transactionId;
required sequence<RTCRtpEncodingParameters> encodings;
//TODO(orphis): Missing degradationPrerence. https://crbug.com/857041
};
\ No newline at end of file
......@@ -82,8 +82,8 @@ class SetParametersRequest : public RTCVoidRequestScriptPromiseResolverImpl {
Member<RTCRtpSender> sender_;
};
bool HasInvalidModification(const RTCRtpParameters& parameters,
const RTCRtpParameters& new_parameters) {
bool HasInvalidModification(const RTCRtpSendParameters& parameters,
const RTCRtpSendParameters& new_parameters) {
if (parameters.hasTransactionId() != new_parameters.hasTransactionId() ||
(parameters.hasTransactionId() &&
parameters.transactionId() != new_parameters.transactionId())) {
......@@ -215,7 +215,7 @@ double PriorityToDouble(const WTF::String& priority) {
std::tuple<std::vector<webrtc::RtpEncodingParameters>,
webrtc::DegradationPreference>
ToRtpParameters(const RTCRtpParameters& parameters) {
ToRtpParameters(const RTCRtpSendParameters& parameters) {
std::vector<webrtc::RtpEncodingParameters> encodings;
if (parameters.hasEncodings()) {
encodings.reserve(parameters.encodings().size());
......@@ -275,9 +275,9 @@ ScriptPromise RTCRtpSender::replaceTrack(ScriptState* script_state,
return promise;
}
void RTCRtpSender::getParameters(RTCRtpParameters& parameters) {
void RTCRtpSender::getParameters(RTCRtpSendParameters& parameters) {
// TODO(orphis): Forward missing fields from the WebRTC library:
// rtcp, headerExtensions, degradationPreference
// degradationPreference
std::unique_ptr<webrtc::RtpParameters> webrtc_parameters =
sender_->GetParameters();
......@@ -340,8 +340,9 @@ void RTCRtpSender::getParameters(RTCRtpParameters& parameters) {
last_returned_parameters_ = parameters;
}
ScriptPromise RTCRtpSender::setParameters(ScriptState* script_state,
const RTCRtpParameters& parameters) {
ScriptPromise RTCRtpSender::setParameters(
ScriptState* script_state,
const RTCRtpSendParameters& parameters) {
ScriptPromiseResolver* resolver = ScriptPromiseResolver::Create(script_state);
ScriptPromise promise = resolver->Promise();
......
......@@ -8,7 +8,7 @@
#include "third_party/blink/public/platform/web_rtc_rtp_sender.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
#include "third_party/blink/renderer/modules/mediastream/media_stream.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_parameters.h"
#include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_send_parameters.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/heap/member.h"
......@@ -20,7 +20,6 @@ namespace blink {
class MediaStreamTrack;
class RTCDTMFSender;
class RTCPeerConnection;
class RTCRtpParameters;
// https://w3c.github.io/webrtc-pc/#rtcrtpsender-interface
class RTCRtpSender final : public ScriptWrappable {
......@@ -37,8 +36,8 @@ class RTCRtpSender final : public ScriptWrappable {
MediaStreamTrack* track();
ScriptPromise replaceTrack(ScriptState*, MediaStreamTrack*);
RTCDTMFSender* dtmf();
void getParameters(RTCRtpParameters&);
ScriptPromise setParameters(ScriptState*, const RTCRtpParameters&);
void getParameters(RTCRtpSendParameters&);
ScriptPromise setParameters(ScriptState*, const RTCRtpSendParameters&);
ScriptPromise getStats(ScriptState*);
WebRTCRtpSender* web_sender();
......@@ -59,7 +58,7 @@ class RTCRtpSender final : public ScriptWrappable {
String kind_;
Member<RTCDTMFSender> dtmf_;
MediaStreamVector streams_;
base::Optional<RTCRtpParameters> last_returned_parameters_;
base::Optional<RTCRtpSendParameters> last_returned_parameters_;
};
} // namespace blink
......
......@@ -6,8 +6,8 @@
[Exposed=Window]
interface RTCRtpSender {
readonly attribute MediaStreamTrack? track;
[RuntimeEnabled=RTCRtpSenderParameters, CallWith=ScriptState] Promise<void> setParameters(optional RTCRtpParameters parameters);
[RuntimeEnabled=RTCRtpSenderParameters] RTCRtpParameters getParameters();
[RuntimeEnabled=RTCRtpSenderParameters, CallWith=ScriptState] Promise<void> setParameters(optional RTCRtpSendParameters parameters);
[RuntimeEnabled=RTCRtpSenderParameters] RTCRtpSendParameters getParameters();
[Measure, CallWith=ScriptState] Promise<void> replaceTrack(MediaStreamTrack? withTrack);
[Measure] readonly attribute RTCDTMFSender? dtmf;
[CallWith=ScriptState] Promise<RTCStatsReport> getStats();
......
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