Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(164)

Unified Diff: third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html

Issue 2951713002: RTCPeerConnection.addTrack and removeTrack added (behind flag) (Closed)
Patch Set: Addressed deadbeef's comments Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html
diff --git a/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html
new file mode 100644
index 0000000000000000000000000000000000000000..2f4d0f7fcfdb44842758a91f67fce56ed57f6101
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>RTCPeerConnection.getSenders</title>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+</head>
+<body>
+<script>
+promise_test(function() {
+ let pc = new RTCPeerConnection();
+ return createStreams({audio:true, video:false}, 1)
+ .then(function(streams) {
+ let stream = streams[0];
+ let track = stream.getAudioTracks()[0];
+ let sender = pc.addTrack(track);
+ assert_equals(sender.track, track);
+ assert_array_equals(pc.getLocalStreams(), []);
+ });
+}, 'addTrack() for a single track.');
+
+promise_test(function() {
+ let pc = new RTCPeerConnection();
+ return createStreams({audio:true, video:false}, 1)
+ .then(function(streams) {
+ let stream = streams[0];
+ let track = stream.getAudioTracks()[0];
+ let sender = pc.addTrack(track, stream);
+ assert_equals(sender.track, track);
+ // TODO(hbos): |addTrack| does not add to the set of local streams. When
+ // |getLocalStreams| is updated to return the streams of all senders this
+ // would have an observable effect here. https://crbug.com/738918
+ assert_array_equals(pc.getLocalStreams(), []);
+ });
+}, 'addTrack() for a single track and its stream.');
+
+promise_test(function() {
+ let pc = new RTCPeerConnection();
+ return createStreams({audio:true, video:false}, 2)
+ .then(function(streams) {
+ let streamA = streams[0];
+ let trackA = streamA.getAudioTracks()[0];
+ let streamB = streams[1];
+ let sender = pc.addTrack(trackA, streamB);
+ assert_equals(sender.track, trackA);
+ // TODO(hbos): |addTrack| does not add to the set of local streams. When
+ // |getLocalStreams| is updated to return the streams of all senders this
+ // would have an observable effect here. https://crbug.com/738918
+ assert_array_equals(pc.getLocalStreams(), []);
+ });
+}, 'addTrack() for a single track and a different stream.');
+
+promise_test(function() {
+ let pc = new RTCPeerConnection();
+ return createStreams({audio:true, video:false}, 2)
+ .then(function(streams) {
+ let streamA = streams[0];
+ let streamB = streams[1];
+ let track = streamA.getAudioTracks()[0];
+ let exception = null;
+ try {
+ pc.addTrack(track, streamA, streamB);
+ } catch (e) {
+ exception = e;
+ }
+ // The spec supports multiple streams per track but our implementation
+ // doesn't. Fix test when resolving https://crbug.com/webrtc/7932.
+ assert_true(exception != null);
+ assert_equals('NotSupportedError', exception.name);
+ });
+}, 'addTrack() for a single track and two streams throws NotSupportedError.');
+
+promise_test(function() {
+ let pc = new RTCPeerConnection();
+ return createStreams({audio:true, video:false}, 1)
+ .then(function(streams) {
+ let stream = streams[0];
+ let track = stream.getAudioTracks()[0];
+ let sender = pc.addTrack(track);
+ assert_equals(sender.track, track);
+ let exception = null;
+ try {
+ pc.addTrack(track);
+ } catch (e) {
+ exception = e;
+ }
+ assert_equals('InvalidAccessError', exception.name);
+ });
+}, 'addTrack() when already added throws InvalidAccessError.');
+
+promise_test(function() {
+ let pc = new RTCPeerConnection();
+ return createStreams({audio:true, video:false}, 1)
+ .then(function(streams) {
+ let stream = streams[0];
+ let track = stream.getAudioTracks()[0];
+ pc.addStream(stream);
+ let exception = null;
+ try {
+ // The interaction between |addStream| and |addTrack| is not
+ // standardized (|addStream| is non-standard). Because |addStream|
+ // creates a sender for the track and |addTrack| throws if there already
+ // exists a sender for the track.
+ pc.addTrack(track);
+ } catch (e) {
+ exception = e;
+ }
+ assert_true(exception != null);
+ assert_equals('InvalidAccessError', exception.name);
+ });
+}, 'addTrack() after addStream() throws InvalidAccessError.');
+
+promise_test(function() {
+ let pc = new RTCPeerConnection();
+ return createStreams({audio:true, video:false}, 1)
+ .then(function(streams) {
+ let stream = streams[0];
+ let track = stream.getAudioTracks()[0];
+ let sender = pc.addTrack(track);
+ assert_equals(sender.track, track);
+ assert_array_equals(pc.getSenders(), [ sender ]);
+ assert_array_equals(pc.getLocalStreams(), []);
+ pc.addStream(stream);
+ assert_array_equals(pc.getLocalStreams(), [ stream ]);
+ // The interaction between |addStream| and |addTrack| is not standardized
+ // (|addStream| is non-standard). In our implementation, the existing
+ // sender is reused by |addStream|.
+ assert_array_equals(pc.getSenders(), [ sender ]);
+ });
+}, 'addTrack() before addStream() works.');
+
+/**
+ * Helper functions.
+ */
+
+function createStreams(constraints, numStreams, streamsSoFar = []) {
+ if (numStreams == 0) {
+ return Promise.resolve(streamsSoFar);;
+ }
+ return navigator.mediaDevices.getUserMedia(constraints)
+ .then(function(stream) {
+ return createStreams(constraints,
+ numStreams - 1,
+ streamsSoFar.concat([stream]));
+ });
+}
+</script>
+</body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698