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

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

Issue 131763002: Adds MediaStreamSource, MediaStreamAudioSource and MediaStreamVideoCaptureDeviceSource (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 6 years, 10 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "content/common/media/media_stream_options.h" 6 #include "content/common/media/media_stream_options.h"
7 #include "content/renderer/media/media_stream_audio_source.h"
7 #include "content/renderer/media/media_stream_extra_data.h" 8 #include "content/renderer/media/media_stream_extra_data.h"
8 #include "content/renderer/media/media_stream_source_extra_data.h" 9 #include "content/renderer/media/media_stream_video_source.h"
9 #include "content/renderer/media/mock_media_stream_dependency_factory.h" 10 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
10 #include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h" 11 #include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" 13 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
13 #include "third_party/WebKit/public/platform/WebMediaStream.h" 14 #include "third_party/WebKit/public/platform/WebMediaStream.h"
14 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 15 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
15 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 16 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
16 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandler.h" 17 #include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandler.h"
17 #include "third_party/WebKit/public/platform/WebVector.h" 18 #include "third_party/WebKit/public/platform/WebVector.h"
18 #include "third_party/libjingle/source/talk/app/webrtc/videosourceinterface.h"
19 19
20 namespace content { 20 namespace content {
21 21
22 class MediaSourceCreatedObserver { 22 class MediaSourceCreatedObserver {
23 public: 23 public:
24 MediaSourceCreatedObserver() 24 MediaSourceCreatedObserver()
25 : result_(false), 25 : result_(false),
26 description_(NULL) { 26 description_(NULL) {
27 } 27 }
28 28
(...skipping 18 matching lines...) Expand all
47 public: 47 public:
48 virtual void SetUp() { 48 virtual void SetUp() {
49 dependency_factory_.reset(new MockMediaStreamDependencyFactory()); 49 dependency_factory_.reset(new MockMediaStreamDependencyFactory());
50 } 50 }
51 51
52 blink::WebMediaStream CreateWebKitMediaStream(bool audio, bool video) { 52 blink::WebMediaStream CreateWebKitMediaStream(bool audio, bool video) {
53 blink::WebVector<blink::WebMediaStreamSource> audio_sources( 53 blink::WebVector<blink::WebMediaStreamSource> audio_sources(
54 audio ? static_cast<size_t>(1) : 0); 54 audio ? static_cast<size_t>(1) : 0);
55 blink::WebVector<blink::WebMediaStreamSource> video_sources( 55 blink::WebVector<blink::WebMediaStreamSource> video_sources(
56 video ? static_cast<size_t>(1) : 0); 56 video ? static_cast<size_t>(1) : 0);
57 MediaStreamSourceExtraData::SourceStopCallback dummy_callback; 57 MediaStreamSource::SourceStoppedCallback dummy_callback;
58 58
59 if (audio) { 59 if (audio) {
60 StreamDeviceInfo info; 60 StreamDeviceInfo info;
61 info.device.type = content::MEDIA_DEVICE_AUDIO_CAPTURE; 61 info.device.type = content::MEDIA_DEVICE_AUDIO_CAPTURE;
62 info.device.name = "audio"; 62 info.device.name = "audio";
63 info.session_id = 99; 63 info.session_id = 99;
64 audio_sources[0].initialize("audio", 64 audio_sources[0].initialize("audio",
65 blink::WebMediaStreamSource::TypeAudio, 65 blink::WebMediaStreamSource::TypeAudio,
66 "audio"); 66 "audio");
67 audio_sources[0].setExtraData( 67 audio_sources[0].setExtraData(
68 new MediaStreamSourceExtraData(info, dummy_callback)); 68 new MediaStreamAudioSource());
69 audio_sources_.assign(audio_sources); 69 audio_sources_.assign(audio_sources);
70 } 70 }
71 if (video) { 71 if (video) {
72 StreamDeviceInfo info; 72 StreamDeviceInfo info;
73 info.device.type = content::MEDIA_DEVICE_VIDEO_CAPTURE; 73 info.device.type = content::MEDIA_DEVICE_VIDEO_CAPTURE;
74 info.device.name = "video"; 74 info.device.name = "video";
75 info.session_id = 98; 75 info.session_id = 98;
76 video_sources[0].initialize("video", 76 video_sources[0].initialize("video",
77 blink::WebMediaStreamSource::TypeVideo, 77 blink::WebMediaStreamSource::TypeVideo,
78 "video"); 78 "video");
79 video_sources[0].setExtraData( 79 video_sources[0].setExtraData(
80 new MediaStreamSourceExtraData(info, dummy_callback)); 80 new MediaStreamVideoSource(dependency_factory_.get()));
81 video_sources_.assign(video_sources); 81 video_sources_.assign(video_sources);
82 } 82 }
83 blink::WebMediaStream stream_desc; 83 blink::WebMediaStream stream_desc;
84 blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector( 84 blink::WebVector<blink::WebMediaStreamTrack> audio_track_vector(
85 audio_sources.size()); 85 audio_sources.size());
86 for (size_t i = 0; i < audio_track_vector.size(); ++i) { 86 for (size_t i = 0; i < audio_track_vector.size(); ++i) {
87 audio_track_vector[i].initialize(audio_sources[i].id(), 87 audio_track_vector[i].initialize(audio_sources[i].id(),
88 audio_sources[i]); 88 audio_sources[i]);
89 } 89 }
90 90
91 blink::WebVector<blink::WebMediaStreamTrack> video_track_vector( 91 blink::WebVector<blink::WebMediaStreamTrack> video_track_vector(
92 video_sources.size()); 92 video_sources.size());
93 for (size_t i = 0; i < video_track_vector.size(); ++i) { 93 for (size_t i = 0; i < video_track_vector.size(); ++i) {
94 video_track_vector[i].initialize(video_sources[i].id(), 94 video_track_vector[i].initialize(video_sources[i].id(),
95 video_sources[i]); 95 video_sources[i]);
96 } 96 }
97 97
98 stream_desc.initialize("media stream", audio_track_vector, 98 stream_desc.initialize("media stream", audio_track_vector,
99 video_track_vector); 99 video_track_vector);
100 return stream_desc; 100 return stream_desc;
101 } 101 }
102 102
103 void CreateNativeSources(blink::WebMediaStream* descriptor) {
104 static const int kRenderViewId = 1;
105
106 MediaSourceCreatedObserver observer;
107 blink::WebMediaConstraints audio_constraints;
108 dependency_factory_->CreateNativeMediaSources(
109 kRenderViewId,
110 blink::WebMediaConstraints(),
111 blink::WebMediaConstraints(),
112 descriptor,
113 base::Bind(
114 &MediaSourceCreatedObserver::OnCreateNativeSourcesComplete,
115 base::Unretained(&observer)));
116
117 EXPECT_FALSE(observer.result());
118 // Change the state of the created source to live. This should trigger
119 // MediaSourceCreatedObserver::OnCreateNativeSourcesComplete
120 if (dependency_factory_->last_video_source()) {
121 dependency_factory_->last_audio_source()->SetLive();
122 dependency_factory_->last_video_source()->SetLive();
123 }
124 EXPECT_TRUE(observer.result());
125 EXPECT_TRUE(observer.description() == descriptor);
126 }
127
128 void VerifyMediaStream(const blink::WebMediaStream& stream_desc, 103 void VerifyMediaStream(const blink::WebMediaStream& stream_desc,
129 size_t num_audio_tracks, 104 size_t num_audio_tracks,
130 size_t num_video_tracks) { 105 size_t num_video_tracks) {
131 content::MediaStreamExtraData* extra_data = 106 content::MediaStreamExtraData* extra_data =
132 static_cast<content::MediaStreamExtraData*>(stream_desc.extraData()); 107 static_cast<content::MediaStreamExtraData*>(stream_desc.extraData());
133 ASSERT_TRUE(extra_data && extra_data->stream().get()); 108 ASSERT_TRUE(extra_data && extra_data->stream().get());
134 EXPECT_TRUE(extra_data->is_local()); 109 EXPECT_TRUE(extra_data->is_local());
135 EXPECT_EQ(num_audio_tracks, extra_data->stream()->GetAudioTracks().size()); 110 EXPECT_EQ(num_audio_tracks, extra_data->stream()->GetAudioTracks().size());
136 EXPECT_EQ(num_video_tracks, extra_data->stream()->GetVideoTracks().size()); 111 EXPECT_EQ(num_video_tracks, extra_data->stream()->GetVideoTracks().size());
137 } 112 }
138 113
139 protected: 114 protected:
140 scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_; 115 scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_;
141 blink::WebVector<blink::WebMediaStreamSource> audio_sources_; 116 blink::WebVector<blink::WebMediaStreamSource> audio_sources_;
142 blink::WebVector<blink::WebMediaStreamSource> video_sources_; 117 blink::WebVector<blink::WebMediaStreamSource> video_sources_;
143 }; 118 };
144 119
145 TEST_F(MediaStreamDependencyFactoryTest, CreateRTCPeerConnectionHandler) { 120 TEST_F(MediaStreamDependencyFactoryTest, CreateRTCPeerConnectionHandler) {
146 MockWebRTCPeerConnectionHandlerClient client_jsep; 121 MockWebRTCPeerConnectionHandlerClient client_jsep;
147 scoped_ptr<blink::WebRTCPeerConnectionHandler> pc_handler( 122 scoped_ptr<blink::WebRTCPeerConnectionHandler> pc_handler(
148 dependency_factory_->CreateRTCPeerConnectionHandler(&client_jsep)); 123 dependency_factory_->CreateRTCPeerConnectionHandler(&client_jsep));
149 EXPECT_TRUE(pc_handler.get() != NULL); 124 EXPECT_TRUE(pc_handler.get() != NULL);
150 } 125 }
151 126
152 TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStream) { 127 TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStream) {
153 blink::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true); 128 blink::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true);
154 CreateNativeSources(&stream_desc);
155 129
156 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc); 130 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc);
157 VerifyMediaStream(stream_desc, 1, 1); 131 VerifyMediaStream(stream_desc, 1, 1);
158 } 132 }
159 133
160 // Test that we don't crash if a MediaStream is created in WebKit with unknown 134 // Test that we don't crash if a MediaStream is created in WebKit with unknown
161 // sources. This can for example happen if a MediaStream is created with 135 // sources. This can for example happen if a MediaStream is created with
162 // remote tracks. 136 // remote tracks.
163 TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStreamWithoutSource) { 137 TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStreamWithoutSource) {
164 // Create a WebKit MediaStream description. 138 // Create a WebKit MediaStream description.
165 blink::WebMediaStreamSource audio_source; 139 blink::WebMediaStreamSource audio_source;
166 audio_source.initialize("audio source", 140 audio_source.initialize("audio source",
167 blink::WebMediaStreamSource::TypeAudio, 141 blink::WebMediaStreamSource::TypeAudio,
168 "something"); 142 "something");
169 blink::WebMediaStreamSource video_source; 143 blink::WebMediaStreamSource video_source;
170 video_source.initialize("video source", 144 video_source.initialize("video source",
171 blink::WebMediaStreamSource::TypeVideo, 145 blink::WebMediaStreamSource::TypeVideo,
172 "something"); 146 "something");
173 147
174 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks( 148 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks(
175 static_cast<size_t>(1)); 149 static_cast<size_t>(1));
176 audio_tracks[0].initialize(audio_source.id(), audio_source); 150 audio_tracks[0].initialize(audio_source.id(), audio_source);
177 blink::WebVector<blink::WebMediaStreamTrack> video_tracks( 151 blink::WebVector<blink::WebMediaStreamTrack> video_tracks(
178 static_cast<size_t>(1)); 152 static_cast<size_t>(1));
179 video_tracks[0].initialize(video_source.id(), video_source); 153 video_tracks[0].initialize(video_source.id(), video_source);
180 154
181 blink::WebMediaStream stream_desc; 155 blink::WebMediaStream stream_desc;
182 stream_desc.initialize("new stream", audio_tracks, video_tracks); 156 stream_desc.initialize("new stream", audio_tracks, video_tracks);
183 157
184 EXPECT_TRUE(dependency_factory_->EnsurePeerConnectionFactory());
185 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc); 158 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc);
186 VerifyMediaStream(stream_desc, 0, 0); 159 VerifyMediaStream(stream_desc, 0, 0);
187 } 160 }
188 161
189 TEST_F(MediaStreamDependencyFactoryTest, AddAndRemoveNativeTrack) { 162 TEST_F(MediaStreamDependencyFactoryTest, AddAndRemoveNativeTrack) {
190 blink::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true); 163 blink::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true);
191 CreateNativeSources(&stream_desc);
192 164
193 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc); 165 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc);
194 VerifyMediaStream(stream_desc, 1, 1); 166 VerifyMediaStream(stream_desc, 1, 1);
195 167
196 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks; 168 blink::WebVector<blink::WebMediaStreamTrack> audio_tracks;
197 stream_desc.audioTracks(audio_tracks); 169 stream_desc.audioTracks(audio_tracks);
198 EXPECT_TRUE(dependency_factory_->RemoveNativeMediaStreamTrack( 170 EXPECT_TRUE(dependency_factory_->RemoveNativeMediaStreamTrack(
199 stream_desc, audio_tracks[0])); 171 stream_desc, audio_tracks[0]));
200 VerifyMediaStream(stream_desc, 0, 1); 172 VerifyMediaStream(stream_desc, 0, 1);
201 173
202 EXPECT_TRUE(dependency_factory_->AddNativeMediaStreamTrack( 174 EXPECT_TRUE(dependency_factory_->AddNativeMediaStreamTrack(
203 stream_desc, audio_tracks[0])); 175 stream_desc, audio_tracks[0]));
204 VerifyMediaStream(stream_desc, 1, 1); 176 VerifyMediaStream(stream_desc, 1, 1);
205 177
206 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; 178 blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
207 stream_desc.videoTracks(video_tracks); 179 stream_desc.videoTracks(video_tracks);
208 EXPECT_TRUE(dependency_factory_->RemoveNativeMediaStreamTrack( 180 EXPECT_TRUE(dependency_factory_->RemoveNativeMediaStreamTrack(
209 stream_desc, video_tracks[0])); 181 stream_desc, video_tracks[0]));
210 VerifyMediaStream(stream_desc, 1, 0); 182 VerifyMediaStream(stream_desc, 1, 0);
211 183
212 EXPECT_TRUE(dependency_factory_->AddNativeMediaStreamTrack( 184 EXPECT_TRUE(dependency_factory_->AddNativeMediaStreamTrack(
213 stream_desc, video_tracks[0])); 185 stream_desc, video_tracks[0]));
214 VerifyMediaStream(stream_desc, 1, 1); 186 VerifyMediaStream(stream_desc, 1, 1);
215 } 187 }
216 188
217 } // namespace content 189 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_dependency_factory.cc ('k') | content/renderer/media/media_stream_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698