Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(279)

Side by Side Diff: content/renderer/media/peer_connection_handler_jsep_unittest.cc

Issue 10383151: Refactor MediaStreamImpl and PeerConnection glue implementation after WebKit changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <string> 5 #include <string>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop.h"
9 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "content/renderer/media/media_stream_extra_data.h"
10 #include "content/renderer/media/mock_media_stream_dependency_factory.h" 10 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
11 #include "content/renderer/media/mock_media_stream_impl.h"
12 #include "content/renderer/media/mock_web_peer_connection_00_handler_client.h" 11 #include "content/renderer/media/mock_web_peer_connection_00_handler_client.h"
13 #include "content/renderer/media/mock_peer_connection_impl.h" 12 #include "content/renderer/media/mock_peer_connection_impl.h"
14 #include "content/renderer/media/peer_connection_handler_jsep.h" 13 #include "content/renderer/media/peer_connection_handler_jsep.h"
15 #include "content/renderer/media/rtc_video_decoder.h"
16 #include "jingle/glue/thread_wrapper.h"
17 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
18 #include "third_party/libjingle/source/talk/app/webrtc/peerconnection.h" 15 #include "third_party/libjingle/source/talk/app/webrtc/peerconnection.h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebICECandid ateDescriptor.h" 16 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebICECandid ateDescriptor.h"
20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebICEOption s.h" 17 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebICEOption s.h"
21 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaHint s.h" 18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaHint s.h"
22 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amDescriptor.h" 19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amDescriptor.h"
23 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amSource.h" 20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebMediaStre amSource.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSessionDe scriptionDescriptor.h" 21 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSessionDe scriptionDescriptor.h"
25 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" 22 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
26 23
27 namespace webrtc {
28
29 class MockVideoRendererWrapper : public VideoRendererWrapperInterface {
30 public:
31 virtual cricket::VideoRenderer* renderer() OVERRIDE { return NULL; }
32
33 protected:
34 virtual ~MockVideoRendererWrapper() {}
35 };
36
37 } // namespace webrtc
38
39 class PeerConnectionHandlerJsepUnderTest : public PeerConnectionHandlerJsep { 24 class PeerConnectionHandlerJsepUnderTest : public PeerConnectionHandlerJsep {
40 public: 25 public:
41 PeerConnectionHandlerJsepUnderTest( 26 PeerConnectionHandlerJsepUnderTest(
42 WebKit::WebPeerConnection00HandlerClient* client, 27 WebKit::WebPeerConnection00HandlerClient* client,
43 MediaStreamImpl* msi,
44 MediaStreamDependencyFactory* dependency_factory) 28 MediaStreamDependencyFactory* dependency_factory)
45 : PeerConnectionHandlerJsep(client, msi, dependency_factory) { 29 : PeerConnectionHandlerJsep(client, dependency_factory) {
46 } 30 }
47 31
48 webrtc::MockPeerConnectionImpl* native_peer_connection() { 32 webrtc::MockPeerConnectionImpl* native_peer_connection() {
49 return static_cast<webrtc::MockPeerConnectionImpl*>( 33 return static_cast<webrtc::MockPeerConnectionImpl*>(
50 native_peer_connection_.get()); 34 native_peer_connection_.get());
51 } 35 }
52 }; 36 };
53 37
54 class PeerConnectionHandlerJsepTest : public ::testing::Test { 38 class PeerConnectionHandlerJsepTest : public ::testing::Test {
55 public: 39 public:
56 PeerConnectionHandlerJsepTest() : mock_peer_connection_(NULL) { 40 PeerConnectionHandlerJsepTest() : mock_peer_connection_(NULL) {
57 } 41 }
58 42
59 void SetUp() { 43 void SetUp() {
60 mock_client_.reset(new WebKit::MockWebPeerConnection00HandlerClient()); 44 mock_client_.reset(new WebKit::MockWebPeerConnection00HandlerClient());
61 mock_ms_impl_.reset(new MockMediaStreamImpl());
62 mock_dependency_factory_.reset( 45 mock_dependency_factory_.reset(
63 new MockMediaStreamDependencyFactory(NULL)); 46 new MockMediaStreamDependencyFactory(NULL));
64 mock_dependency_factory_->CreatePeerConnectionFactory(NULL, 47 mock_dependency_factory_->CreatePeerConnectionFactory(NULL,
65 NULL, 48 NULL,
66 NULL, 49 NULL,
67 NULL, 50 NULL,
68 NULL); 51 NULL);
69 pc_handler_.reset( 52 pc_handler_.reset(
70 new PeerConnectionHandlerJsepUnderTest( 53 new PeerConnectionHandlerJsepUnderTest(mock_client_.get(),
71 mock_client_.get(), mock_ms_impl_.get(), 54 mock_dependency_factory_.get()));
72 mock_dependency_factory_.get()));
73 55
74 WebKit::WebString server_config( 56 WebKit::WebString server_config(
75 WebKit::WebString::fromUTF8("STUN stun.l.google.com:19302")); 57 WebKit::WebString::fromUTF8("STUN stun.l.google.com:19302"));
76 WebKit::WebString username; 58 WebKit::WebString username;
77 pc_handler_->initialize(server_config, username); 59 pc_handler_->initialize(server_config, username);
78 60
79 mock_peer_connection_ = pc_handler_->native_peer_connection(); 61 mock_peer_connection_ = pc_handler_->native_peer_connection();
80 ASSERT_TRUE(mock_peer_connection_); 62 ASSERT_TRUE(mock_peer_connection_);
81 } 63 }
82 64
65 // Creates a WebKit local MediaStream.
66 WebKit::WebMediaStreamDescriptor CreateLocalMediaStream(
67 const std::string& stream_label) {
68 std::string video_track_label("video-label");
69 std::string audio_track_label("audio-label");
70
71 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> native_stream(
72 mock_dependency_factory_->CreateLocalMediaStream(stream_label));
73 talk_base::scoped_refptr<webrtc::LocalAudioTrackInterface> audio_track(
74 mock_dependency_factory_->CreateLocalAudioTrack(audio_track_label,
75 NULL));
76 native_stream->AddTrack(audio_track);
77 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
78 mock_dependency_factory_->CreateLocalVideoTrack(video_track_label, 0));
79 native_stream->AddTrack(video_track);
80
81 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources(
82 static_cast<size_t>(1));
83 audio_sources[0].initialize(WebKit::WebString::fromUTF8(video_track_label),
84 WebKit::WebMediaStreamSource::TypeAudio,
85 WebKit::WebString::fromUTF8("audio_track"));
86 WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources(
87 static_cast<size_t>(1));
88 video_sources[0].initialize(WebKit::WebString::fromUTF8(video_track_label),
89 WebKit::WebMediaStreamSource::TypeVideo,
90 WebKit::WebString::fromUTF8("video_track"));
91 WebKit::WebMediaStreamDescriptor local_stream;
92 local_stream.initialize(UTF8ToUTF16(stream_label), audio_sources,
93 video_sources);
94 local_stream.setExtraData(new MediaStreamExtraData(native_stream));
95 return local_stream;
96 }
97
83 // Creates a remote MediaStream and adds it to the mocked native 98 // Creates a remote MediaStream and adds it to the mocked native
84 // peer connection. 99 // peer connection.
85 talk_base::scoped_refptr<webrtc::MediaStreamInterface> 100 talk_base::scoped_refptr<webrtc::MediaStreamInterface>
86 AddRemoteMockMediaStream(const std::string& stream_label, 101 AddRemoteMockMediaStream(const std::string& stream_label,
87 const std::string& video_track_label, 102 const std::string& video_track_label,
88 const std::string& audio_track_label) { 103 const std::string& audio_track_label) {
89 // We use a local stream as a remote since for testing purposes we really 104 // We use a local stream as a remote since for testing purposes we really
90 // only need the MediaStreamInterface. 105 // only need the MediaStreamInterface.
91 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> stream( 106 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> stream(
92 mock_dependency_factory_->CreateLocalMediaStream(stream_label)); 107 mock_dependency_factory_->CreateLocalMediaStream(stream_label));
93 if (!video_track_label.empty()) { 108 if (!video_track_label.empty()) {
94 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track( 109 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> video_track(
95 mock_dependency_factory_->CreateLocalVideoTrack(video_track_label, 110 mock_dependency_factory_->CreateLocalVideoTrack(video_track_label,
96 0)); 111 0));
97 stream->AddTrack(video_track); 112 stream->AddTrack(video_track);
98 } 113 }
99 if (!audio_track_label.empty()) { 114 if (!audio_track_label.empty()) {
100 talk_base::scoped_refptr<webrtc::LocalAudioTrackInterface> audio_track( 115 talk_base::scoped_refptr<webrtc::LocalAudioTrackInterface> audio_track(
101 mock_dependency_factory_->CreateLocalAudioTrack(audio_track_label, 116 mock_dependency_factory_->CreateLocalAudioTrack(audio_track_label,
102 NULL)); 117 NULL));
103 stream->AddTrack(audio_track); 118 stream->AddTrack(audio_track);
104 } 119 }
105 mock_peer_connection_->AddRemoteStream(stream); 120 mock_peer_connection_->AddRemoteStream(stream);
106 return stream; 121 return stream;
107 } 122 }
108 123
109 scoped_ptr<WebKit::MockWebPeerConnection00HandlerClient> mock_client_; 124 scoped_ptr<WebKit::MockWebPeerConnection00HandlerClient> mock_client_;
110 scoped_ptr<MockMediaStreamImpl> mock_ms_impl_;
111 scoped_ptr<MockMediaStreamDependencyFactory> mock_dependency_factory_; 125 scoped_ptr<MockMediaStreamDependencyFactory> mock_dependency_factory_;
112 scoped_ptr<PeerConnectionHandlerJsepUnderTest> pc_handler_; 126 scoped_ptr<PeerConnectionHandlerJsepUnderTest> pc_handler_;
113 127
114 // Weak reference to the mocked native peer connection implementation. 128 // Weak reference to the mocked native peer connection implementation.
115 webrtc::MockPeerConnectionImpl* mock_peer_connection_; 129 webrtc::MockPeerConnectionImpl* mock_peer_connection_;
116 }; 130 };
117 131
118 TEST_F(PeerConnectionHandlerJsepTest, Basic) { 132 TEST_F(PeerConnectionHandlerJsepTest, Basic) {
119 // Create offer. 133 // Create offer.
120 WebKit::WebMediaHints hints; 134 WebKit::WebMediaHints hints;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 // Process ICE message. 197 // Process ICE message.
184 WebKit::WebICECandidateDescriptor candidate; 198 WebKit::WebICECandidateDescriptor candidate;
185 WebKit::WebString label = "test label"; 199 WebKit::WebString label = "test label";
186 sdp = "test sdp"; 200 sdp = "test sdp";
187 candidate.initialize(label, sdp); 201 candidate.initialize(label, sdp);
188 EXPECT_TRUE(pc_handler_->processIceMessage(candidate)); 202 EXPECT_TRUE(pc_handler_->processIceMessage(candidate));
189 EXPECT_EQ(UTF16ToUTF8(label), mock_peer_connection_->ice_label()); 203 EXPECT_EQ(UTF16ToUTF8(label), mock_peer_connection_->ice_label());
190 EXPECT_EQ(UTF16ToUTF8(sdp), mock_peer_connection_->ice_sdp()); 204 EXPECT_EQ(UTF16ToUTF8(sdp), mock_peer_connection_->ice_sdp());
191 205
192 // Add stream. 206 // Add stream.
193 // TODO(grunell): Add an audio track as well. 207 std::string stream_label = "local_stream";
194 std::string stream_label("stream-label"); 208 WebKit::WebMediaStreamDescriptor local_stream(
195 std::string video_track_label("video-label"); 209 CreateLocalMediaStream(stream_label));
196 210
197 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> native_stream(
198 mock_dependency_factory_->CreateLocalMediaStream(stream_label));
199 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> local_video_track(
200 mock_dependency_factory_->CreateLocalVideoTrack(video_track_label, 0));
201 native_stream->AddTrack(local_video_track);
202 mock_ms_impl_->AddLocalStream(native_stream);
203 WebKit::WebVector<WebKit::WebMediaStreamSource> source_vector(
204 static_cast<size_t>(1));
205 source_vector[0].initialize(WebKit::WebString::fromUTF8(video_track_label),
206 WebKit::WebMediaStreamSource::TypeVideo,
207 WebKit::WebString::fromUTF8("RemoteVideo"));
208 WebKit::WebMediaStreamDescriptor local_stream;
209 local_stream.initialize(UTF8ToUTF16(stream_label), source_vector);
210 pc_handler_->addStream(local_stream); 211 pc_handler_->addStream(local_stream);
211 EXPECT_EQ(stream_label, mock_peer_connection_->stream_label()); 212 EXPECT_EQ(stream_label, mock_peer_connection_->stream_label());
212 EXPECT_TRUE(mock_peer_connection_->stream_changes_committed()); 213 EXPECT_TRUE(mock_peer_connection_->stream_changes_committed());
213 214
214 // On add stream. 215 // On add stream. ( Remote stream received)
215 std::string remote_stream_label(stream_label); 216 std::string remote_stream_label("remote_stream");
216 remote_stream_label += "-remote"; 217 talk_base::scoped_refptr<webrtc::MediaStreamInterface> remote_stream(
217 std::string remote_video_track_label(video_track_label); 218 AddRemoteMockMediaStream(remote_stream_label, "video", "audio"));
218 remote_video_track_label += "-remote";
219 // We use a local stream as a remote since for testing purposes we really
220 // only need the MediaStreamInterface.
221 talk_base::scoped_refptr<webrtc::LocalMediaStreamInterface> remote_stream(
222 mock_dependency_factory_->CreateLocalMediaStream(remote_stream_label));
223 talk_base::scoped_refptr<webrtc::LocalVideoTrackInterface> remote_video_track(
224 mock_dependency_factory_->CreateLocalVideoTrack(remote_video_track_label,
225 0));
226 remote_video_track->set_enabled(true);
227 remote_stream->AddTrack(remote_video_track);
228 mock_peer_connection_->AddRemoteStream(remote_stream);
229 pc_handler_->OnAddStream(remote_stream); 219 pc_handler_->OnAddStream(remote_stream);
230 EXPECT_EQ(remote_stream_label, mock_client_->stream_label()); 220 EXPECT_EQ(remote_stream_label, mock_client_->stream_label());
231 221
232 // Set renderer.
233 talk_base::scoped_refptr<webrtc::MockVideoRendererWrapper> renderer(
234 new talk_base::RefCountedObject<webrtc::MockVideoRendererWrapper>());
235 pc_handler_->SetRemoteVideoRenderer(remote_video_track_label, renderer);
236 EXPECT_EQ(renderer, remote_video_track->GetRenderer());
237
238 // Remove stream. 222 // Remove stream.
239 WebKit::WebVector<WebKit::WebMediaStreamDescriptor> empty_streams( 223 WebKit::WebVector<WebKit::WebMediaStreamDescriptor> empty_streams(
240 static_cast<size_t>(0)); 224 static_cast<size_t>(0));
241 pc_handler_->removeStream(local_stream); 225 pc_handler_->removeStream(local_stream);
242 EXPECT_EQ("", mock_peer_connection_->stream_label()); 226 EXPECT_EQ("", mock_peer_connection_->stream_label());
243 mock_peer_connection_->ClearStreamChangesCommitted(); 227 mock_peer_connection_->ClearStreamChangesCommitted();
244 EXPECT_TRUE(!mock_peer_connection_->stream_changes_committed()); 228 EXPECT_TRUE(!mock_peer_connection_->stream_changes_committed());
245 229
246 // On remove stream. 230 // On remove stream.
247 pc_handler_->OnRemoveStream(remote_stream); 231 pc_handler_->OnRemoveStream(remote_stream);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 std::string audio_track_label_2 = "remote_audio_track_2"; 286 std::string audio_track_label_2 = "remote_audio_track_2";
303 talk_base::scoped_refptr<webrtc::MediaStreamInterface> stream_2( 287 talk_base::scoped_refptr<webrtc::MediaStreamInterface> stream_2(
304 AddRemoteMockMediaStream(stream_label_2, video_track_label_2, 288 AddRemoteMockMediaStream(stream_label_2, video_track_label_2,
305 audio_track_label_2)); 289 audio_track_label_2));
306 290
307 pc_handler_->OnAddStream(stream_1); 291 pc_handler_->OnAddStream(stream_1);
308 EXPECT_EQ(stream_label_1, mock_client_->stream_label()); 292 EXPECT_EQ(stream_label_1, mock_client_->stream_label());
309 293
310 pc_handler_->OnAddStream(stream_2); 294 pc_handler_->OnAddStream(stream_2);
311 EXPECT_EQ(stream_label_2, mock_client_->stream_label()); 295 EXPECT_EQ(stream_label_2, mock_client_->stream_label());
312
313 // Set renderer.
314 talk_base::scoped_refptr<webrtc::MockVideoRendererWrapper> renderer1(
315 new talk_base::RefCountedObject<webrtc::MockVideoRendererWrapper>());
316 pc_handler_->SetRemoteVideoRenderer(video_track_label_1, renderer1);
317 EXPECT_EQ(renderer1, stream_1->video_tracks()->at(0)->GetRenderer());
318
319 talk_base::scoped_refptr<webrtc::MockVideoRendererWrapper> renderer2(
320 new talk_base::RefCountedObject<webrtc::MockVideoRendererWrapper>());
321 pc_handler_->SetRemoteVideoRenderer(video_track_label_2, renderer2);
322 EXPECT_EQ(renderer2, stream_2->video_tracks()->at(0)->GetRenderer());
323 } 296 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698