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..01a4d50d1205f7452575d5c76f5d7cf3b2c31094 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/peerconnection/RTCPeerConnection-AddRemoveTrack.html |
@@ -0,0 +1,143 @@ |
+<!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 { |
+ pc.addTrack(track); |
+ } catch (e) { |
+ exception = e; |
+ } |
+ assert_true(exception != null); |
+ assert_equals('InvalidAccessError', exception.name); |
+ }); |
+}, 'addTrack() after addStream() throws InvalidAccessError.'); |
Taylor_Brandstetter
2017/07/06 22:45:14
May be helpful to call out the fact that the inter
hbos_chromium
2017/07/07 12:07:48
Done.
|
+ |
+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 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> |