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

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

Issue 13496009: Hookup the MediaStream glue for Adding and Removing tracks to an existing MediaStream. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add workaround when there are no microphones on bots. Created 7 years, 8 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_extra_data.h" 7 #include "content/renderer/media/media_stream_extra_data.h"
8 #include "content/renderer/media/media_stream_source_extra_data.h" 8 #include "content/renderer/media/media_stream_source_extra_data.h"
9 #include "content/renderer/media/mock_media_stream_dependency_factory.h" 9 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
10 #include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h" 10 #include "content/renderer/media/mock_web_rtc_peer_connection_handler_client.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 bool result_; 42 bool result_;
43 WebKit::WebMediaStream* description_; 43 WebKit::WebMediaStream* description_;
44 }; 44 };
45 45
46 class MediaStreamDependencyFactoryTest : public ::testing::Test { 46 class MediaStreamDependencyFactoryTest : public ::testing::Test {
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 WebKit::WebMediaStream CreateWebKitMediaStream(bool audio, 52 WebKit::WebMediaStream CreateWebKitMediaStream(bool audio, bool video) {
53 bool video) {
54 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources( 53 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources(
55 audio ? static_cast<size_t>(1) : 0); 54 audio ? static_cast<size_t>(1) : 0);
56 WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources( 55 WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources(
57 video ? static_cast<size_t>(1) : 0); 56 video ? static_cast<size_t>(1) : 0);
58 57
59 if (audio) { 58 if (audio) {
60 StreamDeviceInfo info; 59 StreamDeviceInfo info;
61 info.device.type = content::MEDIA_DEVICE_AUDIO_CAPTURE; 60 info.device.type = content::MEDIA_DEVICE_AUDIO_CAPTURE;
62 info.device.name = "audio"; 61 info.device.name = "audio";
63 info.device.sample_rate = 0; 62 info.device.sample_rate = 0;
64 info.device.channel_layout = 0; 63 info.device.channel_layout = 0;
65 info.session_id = 99; 64 info.session_id = 99;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 // Change the state of the created source to live. This should trigger 100 // Change the state of the created source to live. This should trigger
102 // MediaSourceCreatedObserver::OnCreateNativeSourcesComplete 101 // MediaSourceCreatedObserver::OnCreateNativeSourcesComplete
103 if (dependency_factory_->last_video_source()) { 102 if (dependency_factory_->last_video_source()) {
104 dependency_factory_->last_audio_source()->SetLive(); 103 dependency_factory_->last_audio_source()->SetLive();
105 dependency_factory_->last_video_source()->SetLive(); 104 dependency_factory_->last_video_source()->SetLive();
106 } 105 }
107 EXPECT_TRUE(observer.result()); 106 EXPECT_TRUE(observer.result());
108 EXPECT_TRUE(observer.description() == descriptor); 107 EXPECT_TRUE(observer.description() == descriptor);
109 } 108 }
110 109
110 void VerifyMediaStream(const WebKit::WebMediaStream& stream_desc,
111 size_t num_audio_tracks,
112 size_t num_video_tracks) {
113 content::MediaStreamExtraData* extra_data =
114 static_cast<content::MediaStreamExtraData*>(stream_desc.extraData());
115 ASSERT_TRUE(extra_data && extra_data->stream());
116 EXPECT_TRUE(extra_data->is_local());
117 EXPECT_EQ(num_audio_tracks, extra_data->stream()->GetAudioTracks().size());
118 EXPECT_EQ(num_video_tracks, extra_data->stream()->GetVideoTracks().size());
119 }
120
111 protected: 121 protected:
112 scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_; 122 scoped_ptr<MockMediaStreamDependencyFactory> dependency_factory_;
113 }; 123 };
114 124
115 TEST_F(MediaStreamDependencyFactoryTest, CreateRTCPeerConnectionHandler) { 125 TEST_F(MediaStreamDependencyFactoryTest, CreateRTCPeerConnectionHandler) {
116 MockWebRTCPeerConnectionHandlerClient client_jsep; 126 MockWebRTCPeerConnectionHandlerClient client_jsep;
117 scoped_ptr<WebKit::WebRTCPeerConnectionHandler> pc_handler( 127 scoped_ptr<WebKit::WebRTCPeerConnectionHandler> pc_handler(
118 dependency_factory_->CreateRTCPeerConnectionHandler(&client_jsep)); 128 dependency_factory_->CreateRTCPeerConnectionHandler(&client_jsep));
119 EXPECT_TRUE(pc_handler.get() != NULL); 129 EXPECT_TRUE(pc_handler.get() != NULL);
120 } 130 }
121 131
122 TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStream) { 132 TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStream) {
123 WebKit::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true); 133 WebKit::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true);
124 CreateNativeSources(&stream_desc); 134 CreateNativeSources(&stream_desc);
125 135
126 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc); 136 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc);
127 137 VerifyMediaStream(stream_desc, 1, 1);
128 content::MediaStreamExtraData* extra_data =
129 static_cast<content::MediaStreamExtraData*>(stream_desc.extraData());
130 ASSERT_TRUE(extra_data && extra_data->stream());
131 EXPECT_TRUE(extra_data->is_local());
132 EXPECT_EQ(1u, extra_data->stream()->GetAudioTracks().size());
133 EXPECT_EQ(1u, extra_data->stream()->GetVideoTracks().size());
134 } 138 }
135 139
136 // Test that we don't crash if a MediaStream is created in WebKit with unknown 140 // Test that we don't crash if a MediaStream is created in WebKit with unknown
137 // sources. This can for example happen if a MediaStream is created with 141 // sources. This can for example happen if a MediaStream is created with
138 // remote tracks. 142 // remote tracks.
139 TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStreamWithoutSource) { 143 TEST_F(MediaStreamDependencyFactoryTest, CreateNativeMediaStreamWithoutSource) {
140 // Create a WebKit MediaStream description. 144 // Create a WebKit MediaStream description.
141 WebKit::WebMediaStream stream_desc; 145 WebKit::WebMediaStream stream_desc;
142 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources( 146 WebKit::WebVector<WebKit::WebMediaStreamSource> audio_sources(
143 static_cast<size_t>(1)); 147 static_cast<size_t>(1));
144 audio_sources[0].initialize("audio source", 148 audio_sources[0].initialize("audio source",
145 WebKit::WebMediaStreamSource::TypeAudio, 149 WebKit::WebMediaStreamSource::TypeAudio,
146 "something"); 150 "something");
147 WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources( 151 WebKit::WebVector<WebKit::WebMediaStreamSource> video_sources(
148 static_cast<size_t>(1)); 152 static_cast<size_t>(1));
149 video_sources[0].initialize("video source", 153 video_sources[0].initialize("video source",
150 WebKit::WebMediaStreamSource::TypeVideo, 154 WebKit::WebMediaStreamSource::TypeVideo,
151 "something"); 155 "something");
152 stream_desc.initialize("new stream", audio_sources, video_sources); 156 stream_desc.initialize("new stream", audio_sources, video_sources);
153 157
154 EXPECT_TRUE(dependency_factory_->EnsurePeerConnectionFactory()); 158 EXPECT_TRUE(dependency_factory_->EnsurePeerConnectionFactory());
155 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc); 159 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc);
156 MediaStreamExtraData* extra_data = static_cast<MediaStreamExtraData*>( 160 VerifyMediaStream(stream_desc, 0, 0);
157 stream_desc.extraData()); 161 }
158 ASSERT_TRUE(extra_data && extra_data->stream()); 162
159 EXPECT_TRUE(extra_data->is_local()); 163 TEST_F(MediaStreamDependencyFactoryTest, AddAndRemoveNativeTrack) {
160 EXPECT_EQ(0u, extra_data->stream()->GetVideoTracks().size()); 164 WebKit::WebMediaStream stream_desc = CreateWebKitMediaStream(true, true);
161 EXPECT_EQ(0u, extra_data->stream()->GetAudioTracks().size()); 165 CreateNativeSources(&stream_desc);
166
167 dependency_factory_->CreateNativeLocalMediaStream(&stream_desc);
168 VerifyMediaStream(stream_desc, 1, 1);
169
170 WebKit::WebVector<WebKit::WebMediaStreamTrack> audio_tracks;
171 stream_desc.audioTracks(audio_tracks);
172 EXPECT_TRUE(dependency_factory_->RemoveNativeMediaStreamTrack(
173 stream_desc, audio_tracks[0]));
174 VerifyMediaStream(stream_desc, 0, 1);
175
176 EXPECT_TRUE(dependency_factory_->AddNativeMediaStreamTrack(
177 stream_desc, audio_tracks[0]));
178 VerifyMediaStream(stream_desc, 1, 1);
179
180 WebKit::WebVector<WebKit::WebMediaStreamTrack> video_tracks;
181 stream_desc.videoTracks(video_tracks);
182 EXPECT_TRUE(dependency_factory_->RemoveNativeMediaStreamTrack(
183 stream_desc, video_tracks[0]));
184 VerifyMediaStream(stream_desc, 1, 0);
185
186 EXPECT_TRUE(dependency_factory_->AddNativeMediaStreamTrack(
187 stream_desc, video_tracks[0]));
188 VerifyMediaStream(stream_desc, 1, 1);
162 } 189 }
163 190
164 } // namespace content 191 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698