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 |