| Index: content/renderer/media/rtc_peer_connection_handler_unittest.cc
|
| diff --git a/content/renderer/media/rtc_peer_connection_handler_unittest.cc b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
|
| index ac55922d2ca8c90e12d41119b5857dfc76bd5fac..3e0ecf8e86e397284f9efd2e13ff226564d81ad6 100644
|
| --- a/content/renderer/media/rtc_peer_connection_handler_unittest.cc
|
| +++ b/content/renderer/media/rtc_peer_connection_handler_unittest.cc
|
| @@ -7,6 +7,7 @@
|
| #include <stddef.h>
|
|
|
| #include <memory>
|
| +#include <set>
|
| #include <string>
|
| #include <vector>
|
|
|
| @@ -50,6 +51,7 @@
|
| #include "third_party/WebKit/public/platform/WebURL.h"
|
| #include "third_party/WebKit/public/web/WebHeap.h"
|
| #include "third_party/webrtc/api/peerconnectioninterface.h"
|
| +#include "third_party/webrtc/stats/test/rtcteststats.h"
|
|
|
| static const char kDummySdp[] = "dummy sdp";
|
| static const char kDummySdpType[] = "dummy type";
|
| @@ -188,6 +190,39 @@ class MockPeerConnectionTracker : public PeerConnectionTracker {
|
| const blink::WebMediaStreamTrack& track));
|
| };
|
|
|
| +class MockRTCStatsReportCallback : public blink::WebRTCStatsReportCallback {
|
| + public:
|
| + MockRTCStatsReportCallback(std::unique_ptr<blink::WebRTCStatsReport>* result)
|
| + : main_thread_(base::ThreadTaskRunnerHandle::Get()),
|
| + result_(result) {
|
| + DCHECK(result_);
|
| + }
|
| +
|
| + void OnStatsDelivered(
|
| + std::unique_ptr<blink::WebRTCStatsReport> report) override {
|
| + EXPECT_TRUE(main_thread_->BelongsToCurrentThread());
|
| + EXPECT_TRUE(report);
|
| + result_->reset(report.release());
|
| + }
|
| +
|
| + private:
|
| + scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
|
| + std::unique_ptr<blink::WebRTCStatsReport>* result_;
|
| +};
|
| +
|
| +template<typename T>
|
| +std::vector<T> ToSequence(T value) {
|
| + std::vector<T> vec;
|
| + vec.push_back(value);
|
| + return vec;
|
| +}
|
| +
|
| +template<typename T>
|
| +void ExpectSequenceEquals(const blink::WebVector<T>& sequence, T value) {
|
| + EXPECT_EQ(sequence.size(), static_cast<size_t>(1));
|
| + EXPECT_EQ(sequence[0], value);
|
| +}
|
| +
|
| class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler {
|
| public:
|
| RTCPeerConnectionHandlerUnderTest(
|
| @@ -636,6 +671,112 @@ TEST_F(RTCPeerConnectionHandlerTest, GetStatsWithBadSelector) {
|
| StopAllTracks(local_stream);
|
| }
|
|
|
| +TEST_F(RTCPeerConnectionHandlerTest, GetRTCStats) {
|
| + rtc::scoped_refptr<webrtc::RTCStatsReport> report =
|
| + webrtc::RTCStatsReport::Create();
|
| +
|
| + report->AddStats(std::unique_ptr<const webrtc::RTCStats>(
|
| + new webrtc::RTCTestStats("RTCUndefinedStats", 1000)));
|
| +
|
| + std::unique_ptr<webrtc::RTCTestStats> stats_defined_members(
|
| + new webrtc::RTCTestStats("RTCDefinedStats", 2000));
|
| + stats_defined_members->m_int32 = 42;
|
| + stats_defined_members->m_uint32 = 42;
|
| + stats_defined_members->m_int64 = 42;
|
| + stats_defined_members->m_uint64 = 42;
|
| + stats_defined_members->m_double = 42.0;
|
| + stats_defined_members->m_string = "42";
|
| + stats_defined_members->m_sequence_int32 = ToSequence<int32_t>(42);
|
| + stats_defined_members->m_sequence_uint32 = ToSequence<uint32_t>(42);
|
| + stats_defined_members->m_sequence_int64 = ToSequence<int64_t>(42);
|
| + stats_defined_members->m_sequence_uint64 = ToSequence<uint64_t>(42);
|
| + stats_defined_members->m_sequence_double = ToSequence<double>(42);
|
| + stats_defined_members->m_sequence_string = ToSequence<std::string>("42");
|
| + report->AddStats(std::unique_ptr<const webrtc::RTCStats>(
|
| + stats_defined_members.release()));
|
| +
|
| + pc_handler_->native_peer_connection()->SetGetStatsReport(report);
|
| + std::unique_ptr<blink::WebRTCStatsReport> result;
|
| + pc_handler_->getStats(std::unique_ptr<blink::WebRTCStatsReportCallback>(
|
| + new MockRTCStatsReportCallback(&result)));
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(result);
|
| +
|
| + int undefined_stats_count = 0;
|
| + int defined_stats_count = 0;
|
| + for (std::unique_ptr<blink::WebRTCStats> stats = result->next(); stats;
|
| + stats.reset(result->next().release())) {
|
| + EXPECT_EQ(stats->type().utf8(), webrtc::RTCTestStats::kType);
|
| + if (stats->id().utf8() == "RTCUndefinedStats") {
|
| + ++undefined_stats_count;
|
| + EXPECT_EQ(stats->timestamp(), 1.0);
|
| + for (size_t i = 0; i < stats->membersCount(); ++i) {
|
| + EXPECT_FALSE(stats->getMember(i)->isDefined());
|
| + }
|
| + } else if (stats->id().utf8() == "RTCDefinedStats") {
|
| + ++defined_stats_count;
|
| + EXPECT_EQ(stats->timestamp(), 2.0);
|
| + std::set<blink::WebRTCStatsMemberType> members;
|
| + for (size_t i = 0; i < stats->membersCount(); ++i) {
|
| + std::unique_ptr<blink::WebRTCStatsMember> member =
|
| + stats->getMember(i);
|
| + EXPECT_TRUE(member->isDefined());
|
| + members.insert(member->type());
|
| + switch (member->type()) {
|
| + case blink::WebRTCStatsMemberTypeInt32:
|
| + EXPECT_EQ(member->valueInt32(), static_cast<int32_t>(42));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeUint32:
|
| + EXPECT_EQ(member->valueUint32(), static_cast<uint32_t>(42));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeInt64:
|
| + EXPECT_EQ(member->valueInt64(), static_cast<int64_t>(42));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeUint64:
|
| + EXPECT_EQ(member->valueUint64(), static_cast<uint64_t>(42));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeDouble:
|
| + EXPECT_EQ(member->valueDouble(), 42.0);
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeString:
|
| + EXPECT_EQ(member->valueString(), blink::WebString::fromUTF8("42"));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeSequenceInt32:
|
| + ExpectSequenceEquals(member->valueSequenceInt32(),
|
| + static_cast<int32_t>(42));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeSequenceUint32:
|
| + ExpectSequenceEquals(member->valueSequenceUint32(),
|
| + static_cast<uint32_t>(42));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeSequenceInt64:
|
| + ExpectSequenceEquals(member->valueSequenceInt64(),
|
| + static_cast<int64_t>(42));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeSequenceUint64:
|
| + ExpectSequenceEquals(member->valueSequenceUint64(),
|
| + static_cast<uint64_t>(42));
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeSequenceDouble:
|
| + ExpectSequenceEquals(member->valueSequenceDouble(), 42.0);
|
| + break;
|
| + case blink::WebRTCStatsMemberTypeSequenceString:
|
| + ExpectSequenceEquals(member->valueSequenceString(),
|
| + blink::WebString::fromUTF8("42"));
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| + }
|
| + EXPECT_EQ(members.size(), static_cast<size_t>(12));
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| + }
|
| + EXPECT_EQ(undefined_stats_count, 1);
|
| + EXPECT_EQ(defined_stats_count, 1);
|
| +}
|
| +
|
| TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) {
|
| testing::InSequence sequence;
|
|
|
|
|