Index: chrome/test/data/webrtc/peerconnection_rtp.js |
diff --git a/chrome/test/data/webrtc/peerconnection_rtp.js b/chrome/test/data/webrtc/peerconnection_rtp.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..efffd8cce07203e3a09b86f19a7d17a5cb7dd55d |
--- /dev/null |
+++ b/chrome/test/data/webrtc/peerconnection_rtp.js |
@@ -0,0 +1,106 @@ |
+/** |
+ * Copyright 2017 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. |
+ */ |
+ |
+// Public interface to tests. These are expected to be called with |
+// ExecuteJavascript invocations from the browser tests and will return answers |
+// through the DOM automation controller. |
+ |
+/** |
+ * Adds |count| streams to the peer connection, with one audio and one video |
+ * track per stream. |
+ * |
+ * Returns "ok-streams-created-and-added" on success. |
+ */ |
+function createAndAddStreams(count) { |
+ if (count > 0) { |
+ getUserMedia({ audio: true, video: true }, |
+ function(stream) { |
+ peerConnection_().addStream(stream); |
+ createAndAddStreams(count - 1); |
+ }, |
+ function(error) { |
+ throw failTest('getUserMedia failed: ' + error); |
+ }); |
+ } else { |
+ returnToTest('ok-streams-created-and-added'); |
+ } |
+} |
+ |
+/** |
+ * Verifies that the peer connection's getReceivers() returns one receiver per |
+ * remote track, that there are no duplicates and that object identity is |
+ * preserved. |
+ * |
+ * Returns "ok-receivers-verified" on success. |
+ */ |
+function verifyRtpReceivers(expectedNumTracks = null) { |
+ if (peerConnection_().getReceivers() == null) |
+ throw failTest('getReceivers() returns null or undefined.'); |
+ if (expectedNumTracks != null && |
+ peerConnection_().getReceivers().length != expectedNumTracks) { |
+ throw failTest('getReceivers().length != expectedNumTracks'); |
+ } |
+ if (!arrayEquals_(peerConnection_().getReceivers(), |
+ peerConnection_().getReceivers())) { |
+ throw failTest('One getReceivers() call is not equal to the next.'); |
+ } |
+ |
+ let remoteTracks = new Set(); |
+ peerConnection_().getRemoteStreams().forEach(function(stream) { |
+ stream.getTracks().forEach(function(track) { |
+ remoteTracks.add(track); |
+ }); |
+ }); |
+ if (peerConnection_().getReceivers().length != remoteTracks.size) |
+ throw failTest('The number of receivers and tracks are not the same.'); |
+ |
+ let receivers = new Set(); |
+ let receiverTracks = new Set(); |
+ peerConnection_().getReceivers().forEach(function(receiver) { |
+ if (receiver == null) |
+ throw failTest('receiver is null or undefined.'); |
+ if (receiver.track == null) |
+ throw failTest('receiver.track is null or undefined.'); |
+ receivers.add(receiver); |
+ receiverTracks.add(receiver.track); |
+ }); |
+ if (receiverTracks.size != receivers.size) |
+ throw failTest('receiverTracks.size != receivers.size'); |
+ |
+ if (!setEquals_(receiverTracks, remoteTracks)) { |
+ throw failTest('The set of receiver tracks is not equal to the set of ' + |
+ 'stream tracks.'); |
+ } |
+ returnToTest('ok-receivers-verified'); |
+} |
+ |
+// Internals. |
+ |
+/** @private */ |
+function arrayEquals_(a, b) { |
+ if (a == null) |
+ return b == null; |
+ if (a.length != b.length) |
+ return false; |
+ for (let i = 0; i < a.length; ++i) { |
+ if (a[i] !== b[i]) |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+/** @private */ |
+function setEquals_(a, b) { |
+ if (a == null) |
+ return b == null; |
+ if (a.size != b.size) |
+ return false; |
+ a.forEach(function(value) { |
+ if (!b.has(value)) |
+ return false; |
+ }); |
+ return true; |
+} |