Index: content/shell/test_runner/mock_webrtc_peer_connection_handler.cc |
diff --git a/content/shell/test_runner/mock_webrtc_peer_connection_handler.cc b/content/shell/test_runner/mock_webrtc_peer_connection_handler.cc |
index c8add5d4b1e997546f6072862e72a5f192831657..32d2ca600cc4e79bc22aedcd40ce997c96c5db2d 100644 |
--- a/content/shell/test_runner/mock_webrtc_peer_connection_handler.cc |
+++ b/content/shell/test_runner/mock_webrtc_peer_connection_handler.cc |
@@ -12,6 +12,7 @@ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
+#include "base/memory/ptr_util.h" |
#include "content/shell/test_runner/mock_webrtc_data_channel_handler.h" |
#include "content/shell/test_runner/mock_webrtc_dtmf_sender_handler.h" |
#include "content/shell/test_runner/test_interfaces.h" |
@@ -23,6 +24,7 @@ |
#include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" |
#include "third_party/WebKit/public/platform/WebRTCOfferOptions.h" |
#include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h" |
+#include "third_party/WebKit/public/platform/WebRTCRtpContributingSource.h" |
#include "third_party/WebKit/public/platform/WebRTCRtpReceiver.h" |
#include "third_party/WebKit/public/platform/WebRTCStatsResponse.h" |
#include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" |
@@ -237,18 +239,81 @@ |
size_t i_; |
}; |
+class MockWebRTCRtpContributingSource |
+ : public blink::WebRTCRtpContributingSource { |
+ public: |
+ MockWebRTCRtpContributingSource( |
+ blink::WebRTCRtpContributingSourceType source_type, |
+ double timestamp_ms, |
+ uint32_t source) |
+ : source_type_(source_type), |
+ timestamp_ms_(timestamp_ms), |
+ source_(source) {} |
+ ~MockWebRTCRtpContributingSource() override {} |
+ |
+ blink::WebRTCRtpContributingSourceType SourceType() const override { |
+ return source_type_; |
+ } |
+ double TimestampMs() const override { return timestamp_ms_; } |
+ uint32_t Source() const override { return source_; } |
+ |
+ private: |
+ blink::WebRTCRtpContributingSourceType source_type_; |
+ double timestamp_ms_; |
+ uint32_t source_; |
+}; |
+ |
class MockWebRTCRtpReceiver : public blink::WebRTCRtpReceiver { |
public: |
MockWebRTCRtpReceiver(uintptr_t id, const blink::WebMediaStreamTrack& track) |
- : id_(id), track_(track) {} |
+ : id_(id), track_(track), num_packets_(0) {} |
~MockWebRTCRtpReceiver() override {} |
uintptr_t Id() const override { return id_; } |
const blink::WebMediaStreamTrack& Track() const override { return track_; } |
+ // Every time called, mocks that a new packet has arrived updating the i-th |
+ // CSRC such that the |kNumCSRCsActive| latest updated CSRCs are returned. "i" |
+ // is the sequence number modulo number of CSRCs. Also returns an SSRC with |
+ // the latest timestamp. For example, if 2 out of 3 CSRCs should be active, |
+ // this will return the following "(type, source, timestamp)": |
+ // - 1st call: { (CSRC, 0, 0), (SSRC, 0, 0) } |
+ // - 2nd call: { (CSRC, 0, 0000), (CSRC, 1, 5000), (SSRC, 0, 5000) } |
+ // - 3rd call: { (CSRC, 1, 5000), (CSRC, 2, 10000), (SSRC, 0, 10000) } |
+ // - 4th call: { (CSRC, 2, 10000), (CSRC, 0, 15000), (SSRC, 0, 15000) } |
+ // RTCPeerConnection-getReceivers.html depends on this behavior. |
+ blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> |
+ GetSources() override { |
+ ++num_packets_; |
+ size_t num_csrcs = std::min(kNumCSRCsActive, num_packets_); |
+ blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> |
+ contributing_sources(num_csrcs + 1); |
+ for (size_t i = 0; i < num_csrcs; ++i) { |
+ size_t sequence_number = num_packets_ - num_csrcs + i; |
+ contributing_sources[i] = |
+ base::MakeUnique<MockWebRTCRtpContributingSource>( |
+ blink::WebRTCRtpContributingSourceType::CSRC, |
+ // Return value should include timestamps for the last 10 seconds, |
+ // we pretend |10000.0 / kNumCSRCsActive| milliseconds have passed |
+ // per packet in the sequence, starting from 0. This is not |
+ // relative to any real clock. |
+ sequence_number * 10000.0 / kNumCSRCsActive, |
+ sequence_number % kNumCSRCs); |
+ } |
+ contributing_sources[num_csrcs] = |
+ base::MakeUnique<MockWebRTCRtpContributingSource>( |
+ blink::WebRTCRtpContributingSourceType::SSRC, |
+ contributing_sources[num_csrcs - 1]->TimestampMs(), 0); |
+ return contributing_sources; |
+ } |
+ |
private: |
+ const size_t kNumCSRCs = 3; |
+ const size_t kNumCSRCsActive = 2; |
+ |
uintptr_t id_; |
blink::WebMediaStreamTrack track_; |
+ size_t num_packets_; |
}; |
} // namespace |