Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/rtc_peer_connection_handler.h" | 5 #include "content/renderer/media/rtc_peer_connection_handler.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" | 43 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" |
| 44 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h" | 44 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h" |
| 45 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h " | 45 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h " |
| 46 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h" | 46 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h" |
| 47 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h" | 47 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h" |
| 48 #include "third_party/WebKit/public/platform/WebRTCStatsRequest.h" | 48 #include "third_party/WebKit/public/platform/WebRTCStatsRequest.h" |
| 49 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" | 49 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" |
| 50 #include "third_party/WebKit/public/platform/WebURL.h" | 50 #include "third_party/WebKit/public/platform/WebURL.h" |
| 51 #include "third_party/WebKit/public/web/WebHeap.h" | 51 #include "third_party/WebKit/public/web/WebHeap.h" |
| 52 #include "third_party/webrtc/api/peerconnectioninterface.h" | 52 #include "third_party/webrtc/api/peerconnectioninterface.h" |
| 53 #include "third_party/webrtc/stats/test/rtcteststats.h" | |
| 53 | 54 |
| 54 static const char kDummySdp[] = "dummy sdp"; | 55 static const char kDummySdp[] = "dummy sdp"; |
| 55 static const char kDummySdpType[] = "dummy type"; | 56 static const char kDummySdpType[] = "dummy type"; |
| 56 | 57 |
| 57 using blink::WebRTCPeerConnectionHandlerClient; | 58 using blink::WebRTCPeerConnectionHandlerClient; |
| 58 using testing::NiceMock; | 59 using testing::NiceMock; |
| 59 using testing::_; | 60 using testing::_; |
| 60 using testing::Ref; | 61 using testing::Ref; |
| 61 using testing::SaveArg; | 62 using testing::SaveArg; |
| 62 | 63 |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 181 TrackIceGatheringStateChange, | 182 TrackIceGatheringStateChange, |
| 182 void(RTCPeerConnectionHandler* pc_handler, | 183 void(RTCPeerConnectionHandler* pc_handler, |
| 183 WebRTCPeerConnectionHandlerClient::ICEGatheringState state)); | 184 WebRTCPeerConnectionHandlerClient::ICEGatheringState state)); |
| 184 MOCK_METHOD1(TrackOnRenegotiationNeeded, | 185 MOCK_METHOD1(TrackOnRenegotiationNeeded, |
| 185 void(RTCPeerConnectionHandler* pc_handler)); | 186 void(RTCPeerConnectionHandler* pc_handler)); |
| 186 MOCK_METHOD2(TrackCreateDTMFSender, | 187 MOCK_METHOD2(TrackCreateDTMFSender, |
| 187 void(RTCPeerConnectionHandler* pc_handler, | 188 void(RTCPeerConnectionHandler* pc_handler, |
| 188 const blink::WebMediaStreamTrack& track)); | 189 const blink::WebMediaStreamTrack& track)); |
| 189 }; | 190 }; |
| 190 | 191 |
| 192 class MockRTCStatsReportCallback : public blink::WebRTCStatsReportCallback { | |
| 193 public: | |
| 194 MockRTCStatsReportCallback(std::unique_ptr<blink::WebRTCStatsReport>* result) | |
| 195 : main_thread_(base::ThreadTaskRunnerHandle::Get()), | |
| 196 result_(result) { | |
| 197 DCHECK(result_); | |
| 198 } | |
| 199 | |
| 200 void OnStatsDelivered( | |
| 201 std::unique_ptr<blink::WebRTCStatsReport> report) override { | |
| 202 EXPECT_TRUE(main_thread_->BelongsToCurrentThread()); | |
| 203 EXPECT_TRUE(report); | |
| 204 result_->reset(report.release()); | |
| 205 } | |
| 206 | |
| 207 private: | |
| 208 scoped_refptr<base::SingleThreadTaskRunner> main_thread_; | |
| 209 std::unique_ptr<blink::WebRTCStatsReport>* result_; | |
| 210 }; | |
| 211 | |
| 212 template<typename T> | |
| 213 std::vector<T> ToSequence(T value) { | |
| 214 std::vector<T> vec; | |
| 215 vec.push_back(value); | |
| 216 return vec; | |
| 217 } | |
| 218 | |
| 219 template<typename T> | |
| 220 void ExpectSequenceEquals(const blink::WebVector<T>& sequence, T value) { | |
| 221 EXPECT_EQ(sequence.size(), static_cast<size_t>(1)); | |
| 222 EXPECT_EQ(sequence[0], value); | |
| 223 } | |
| 224 | |
| 191 class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler { | 225 class RTCPeerConnectionHandlerUnderTest : public RTCPeerConnectionHandler { |
| 192 public: | 226 public: |
| 193 RTCPeerConnectionHandlerUnderTest( | 227 RTCPeerConnectionHandlerUnderTest( |
| 194 WebRTCPeerConnectionHandlerClient* client, | 228 WebRTCPeerConnectionHandlerClient* client, |
| 195 PeerConnectionDependencyFactory* dependency_factory) | 229 PeerConnectionDependencyFactory* dependency_factory) |
| 196 : RTCPeerConnectionHandler(client, dependency_factory) { | 230 : RTCPeerConnectionHandler(client, dependency_factory) { |
| 197 } | 231 } |
| 198 | 232 |
| 199 MockPeerConnectionImpl* native_peer_connection() { | 233 MockPeerConnectionImpl* native_peer_connection() { |
| 200 return static_cast<MockPeerConnectionImpl*>( | 234 return static_cast<MockPeerConnectionImpl*>( |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 629 scoped_refptr<MockRTCStatsRequest> request( | 663 scoped_refptr<MockRTCStatsRequest> request( |
| 630 new rtc::RefCountedObject<MockRTCStatsRequest>()); | 664 new rtc::RefCountedObject<MockRTCStatsRequest>()); |
| 631 request->setSelector(component); | 665 request->setSelector(component); |
| 632 pc_handler_->getStats(request.get()); | 666 pc_handler_->getStats(request.get()); |
| 633 base::RunLoop().RunUntilIdle(); | 667 base::RunLoop().RunUntilIdle(); |
| 634 EXPECT_EQ(0, request->result()->report_count()); | 668 EXPECT_EQ(0, request->result()->report_count()); |
| 635 | 669 |
| 636 StopAllTracks(local_stream); | 670 StopAllTracks(local_stream); |
| 637 } | 671 } |
| 638 | 672 |
| 673 TEST_F(RTCPeerConnectionHandlerTest, GetRTCStats) { | |
| 674 rtc::scoped_refptr<webrtc::RTCStatsReport> report = | |
| 675 webrtc::RTCStatsReport::Create(); | |
| 676 | |
| 677 report->AddStats(std::unique_ptr<const webrtc::RTCStats>( | |
| 678 new webrtc::RTCTestStats("RTCUndefinedStats", 1000))); | |
| 679 | |
| 680 std::unique_ptr<webrtc::RTCTestStats> stats_defined_members( | |
| 681 new webrtc::RTCTestStats("RTCDefinedStats", 2000)); | |
| 682 stats_defined_members->m_int32 = 42; | |
| 683 stats_defined_members->m_uint32 = 42; | |
| 684 stats_defined_members->m_int64 = 42; | |
| 685 stats_defined_members->m_uint64 = 42; | |
| 686 stats_defined_members->m_double = 42.0; | |
| 687 stats_defined_members->m_string = "42"; | |
| 688 stats_defined_members->m_sequence_int32 = ToSequence<int32_t>(42); | |
| 689 stats_defined_members->m_sequence_uint32 = ToSequence<uint32_t>(42); | |
| 690 stats_defined_members->m_sequence_int64 = ToSequence<int64_t>(42); | |
| 691 stats_defined_members->m_sequence_uint64 = ToSequence<uint64_t>(42); | |
| 692 stats_defined_members->m_sequence_double = ToSequence<double>(42); | |
| 693 stats_defined_members->m_sequence_string = ToSequence<std::string>("42"); | |
| 694 report->AddStats(std::unique_ptr<const webrtc::RTCStats>( | |
| 695 stats_defined_members.release())); | |
| 696 | |
| 697 pc_handler_->native_peer_connection()->SetGetStatsReport(report); | |
| 698 std::unique_ptr<blink::WebRTCStatsReport> result; | |
| 699 pc_handler_->getStats(std::unique_ptr<blink::WebRTCStatsReportCallback>( | |
| 700 new MockRTCStatsReportCallback(&result))); | |
| 701 base::RunLoop().RunUntilIdle(); | |
| 702 EXPECT_TRUE(result); | |
| 703 | |
| 704 int undefined_stats_count = 0; | |
| 705 int defined_stats_count = 0; | |
| 706 for (std::unique_ptr<blink::WebRTCStats> stats = result->next(); stats; | |
| 707 stats.reset(result->next().release())) { | |
| 708 EXPECT_EQ(stats->type().utf8(), webrtc::RTCTestStats::kType); | |
| 709 if (stats->id().utf8() == "RTCUndefinedStats") { | |
| 710 ++undefined_stats_count; | |
| 711 EXPECT_EQ(stats->timestamp(), 1.0); | |
| 712 for (size_t i = 0; i < stats->membersCount(); ++i) { | |
| 713 EXPECT_FALSE(stats->getMember(i)->isDefined()); | |
| 714 } | |
| 715 } else if (stats->id().utf8() == "RTCDefinedStats") { | |
| 716 ++defined_stats_count; | |
| 717 EXPECT_EQ(stats->timestamp(), 2.0); | |
| 718 uint32_t members_bitmap = 0x0; | |
|
hta - Chromium
2016/09/20 16:26:46
This is a test, so readability is more important t
hbos_chromium
2016/09/20 20:18:39
Good idea! Done.
| |
| 719 for (size_t i = 0; i < stats->membersCount(); ++i) { | |
| 720 std::unique_ptr<blink::WebRTCStatsMember> member = | |
| 721 stats->getMember(i); | |
| 722 EXPECT_TRUE(member->isDefined()); | |
| 723 switch (member->type()) { | |
| 724 case blink::WebRTCStatsMemberTypeInt32: | |
| 725 EXPECT_EQ(member->valueInt32(), static_cast<int32_t>(42)); | |
| 726 members_bitmap |= (1 << 0); | |
| 727 break; | |
| 728 case blink::WebRTCStatsMemberTypeUint32: | |
| 729 EXPECT_EQ(member->valueUint32(), static_cast<uint32_t>(42)); | |
| 730 members_bitmap |= (1 << 1); | |
| 731 break; | |
| 732 case blink::WebRTCStatsMemberTypeInt64: | |
| 733 EXPECT_EQ(member->valueInt64(), static_cast<int64_t>(42)); | |
| 734 members_bitmap |= (1 << 2); | |
| 735 break; | |
| 736 case blink::WebRTCStatsMemberTypeUint64: | |
| 737 EXPECT_EQ(member->valueUint64(), static_cast<uint64_t>(42)); | |
| 738 members_bitmap |= (1 << 3); | |
| 739 break; | |
| 740 case blink::WebRTCStatsMemberTypeDouble: | |
| 741 EXPECT_EQ(member->valueDouble(), 42.0); | |
| 742 members_bitmap |= (1 << 4); | |
| 743 break; | |
| 744 case blink::WebRTCStatsMemberTypeString: | |
| 745 EXPECT_EQ(member->valueString(), blink::WebString::fromUTF8("42")); | |
| 746 members_bitmap |= (1 << 5); | |
| 747 break; | |
| 748 case blink::WebRTCStatsMemberTypeSequenceInt32: | |
| 749 ExpectSequenceEquals(member->valueSequenceInt32(), | |
| 750 static_cast<int32_t>(42)); | |
| 751 members_bitmap |= (1 << 6); | |
| 752 break; | |
| 753 case blink::WebRTCStatsMemberTypeSequenceUint32: | |
| 754 ExpectSequenceEquals(member->valueSequenceUint32(), | |
| 755 static_cast<uint32_t>(42)); | |
| 756 members_bitmap |= (1 << 7); | |
| 757 break; | |
| 758 case blink::WebRTCStatsMemberTypeSequenceInt64: | |
| 759 ExpectSequenceEquals(member->valueSequenceInt64(), | |
| 760 static_cast<int64_t>(42)); | |
| 761 members_bitmap |= (1 << 8); | |
| 762 break; | |
| 763 case blink::WebRTCStatsMemberTypeSequenceUint64: | |
| 764 ExpectSequenceEquals(member->valueSequenceUint64(), | |
| 765 static_cast<uint64_t>(42)); | |
| 766 members_bitmap |= (1 << 9); | |
| 767 break; | |
| 768 case blink::WebRTCStatsMemberTypeSequenceDouble: | |
| 769 ExpectSequenceEquals(member->valueSequenceDouble(), 42.0); | |
| 770 members_bitmap |= (1 << 10); | |
| 771 break; | |
| 772 case blink::WebRTCStatsMemberTypeSequenceString: | |
| 773 ExpectSequenceEquals(member->valueSequenceString(), | |
| 774 blink::WebString::fromUTF8("42")); | |
| 775 members_bitmap |= (1 << 11); | |
| 776 break; | |
| 777 default: | |
| 778 NOTREACHED(); | |
| 779 } | |
| 780 } | |
| 781 EXPECT_EQ(members_bitmap, static_cast<uint32_t>(0xFFF)); | |
|
hta - Chromium
2016/09/20 16:26:45
With a set, you can just expect the number of memb
hbos_chromium
2016/09/20 20:18:39
Done.
| |
| 782 } else { | |
| 783 NOTREACHED(); | |
| 784 } | |
| 785 } | |
| 786 EXPECT_EQ(undefined_stats_count, 1); | |
| 787 EXPECT_EQ(defined_stats_count, 1); | |
| 788 } | |
| 789 | |
| 639 TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) { | 790 TEST_F(RTCPeerConnectionHandlerTest, OnSignalingChange) { |
| 640 testing::InSequence sequence; | 791 testing::InSequence sequence; |
| 641 | 792 |
| 642 webrtc::PeerConnectionInterface::SignalingState new_state = | 793 webrtc::PeerConnectionInterface::SignalingState new_state = |
| 643 webrtc::PeerConnectionInterface::kHaveRemoteOffer; | 794 webrtc::PeerConnectionInterface::kHaveRemoteOffer; |
| 644 EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange( | 795 EXPECT_CALL(*mock_tracker_.get(), TrackSignalingStateChange( |
| 645 pc_handler_.get(), | 796 pc_handler_.get(), |
| 646 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); | 797 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); |
| 647 EXPECT_CALL(*mock_client_.get(), didChangeSignalingState( | 798 EXPECT_CALL(*mock_client_.get(), didChangeSignalingState( |
| 648 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); | 799 WebRTCPeerConnectionHandlerClient::SignalingStateHaveRemoteOffer)); |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1058 testing::Ref(tracks[0]))); | 1209 testing::Ref(tracks[0]))); |
| 1059 | 1210 |
| 1060 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( | 1211 std::unique_ptr<blink::WebRTCDTMFSenderHandler> sender( |
| 1061 pc_handler_->createDTMFSender(tracks[0])); | 1212 pc_handler_->createDTMFSender(tracks[0])); |
| 1062 EXPECT_TRUE(sender.get()); | 1213 EXPECT_TRUE(sender.get()); |
| 1063 | 1214 |
| 1064 StopAllTracks(local_stream); | 1215 StopAllTracks(local_stream); |
| 1065 } | 1216 } |
| 1066 | 1217 |
| 1067 } // namespace content | 1218 } // namespace content |
| OLD | NEW |