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

Side by Side Diff: content/browser/renderer_host/media/audio_output_delegate_unittest.cc

Issue 2578983003: Add AudioStreamRegistry. Move stream counting logic (Closed)
Patch Set: Thread checking. Created 4 years 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/browser/renderer_host/media/audio_output_delegate.h" 5 #include "content/browser/renderer_host/media/audio_output_delegate.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <utility> 10 #include <utility>
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 int page_request_id, 69 int page_request_id,
70 MediaStreamType stream_type, 70 MediaStreamType stream_type,
71 bool is_secure) override {} 71 bool is_secure) override {}
72 72
73 MOCK_METHOD2(OnCreatingAudioStream, 73 MOCK_METHOD2(OnCreatingAudioStream,
74 void(int render_process_id, int render_frame_id)); 74 void(int render_process_id, int render_frame_id));
75 }; 75 };
76 76
77 class MockEventHandler : public AudioOutputDelegate::EventHandler { 77 class MockEventHandler : public AudioOutputDelegate::EventHandler {
78 public: 78 public:
79 MOCK_METHOD1(OnStreamStateChanged, void(bool playing));
80 MOCK_METHOD3(OnStreamCreated, 79 MOCK_METHOD3(OnStreamCreated,
81 void(int stream_id, 80 void(int stream_id,
82 base::SharedMemory* shared_memory, 81 base::SharedMemory* shared_memory,
83 base::CancelableSyncSocket* socket)); 82 base::CancelableSyncSocket* socket));
84 MOCK_METHOD1(OnStreamError, void(int stream_id)); 83 MOCK_METHOD1(OnStreamError, void(int stream_id));
85 }; 84 };
86 85
87 class DummyAudioOutputStream : public media::AudioOutputStream { 86 class DummyAudioOutputStream : public media::AudioOutputStream {
88 public: 87 public:
89 // AudioOutputSteam implementation: 88 // AudioOutputSteam implementation:
90 bool Open() override { return true; } 89 bool Open() override { return true; }
91 void Start(AudioSourceCallback* cb) override {} 90 void Start(AudioSourceCallback* cb) override {}
92 void Stop() override {} 91 void Stop() override {}
93 void SetVolume(double volume) override {} 92 void SetVolume(double volume) override {}
94 void GetVolume(double* volume) override { *volume = 1; } 93 void GetVolume(double* volume) override { *volume = 1; }
95 void Close() override {} 94 void Close() override {}
96 }; 95 };
97 96
97 class MockAudioStreamRegistry : public AudioStreamRegistry {
98 public:
99 MockAudioStreamRegistry() {}
100 ~MockAudioStreamRegistry() {}
101 MOCK_METHOD1(RegisterOutputStream, void(Stream* stream));
102 MOCK_METHOD1(DeregisterOutputStream, void(Stream* stream));
103 MOCK_METHOD1(OutputStreamStateChanged, void(bool playing));
104 };
105
98 } // namespace 106 } // namespace
99 107
100 class AudioOutputDelegateTest : public testing::Test { 108 class AudioOutputDelegateTest : public testing::Test {
101 public: 109 public:
102 AudioOutputDelegateTest() { 110 AudioOutputDelegateTest() : stream_registry_() {
103 base::CommandLine::ForCurrentProcess()->AppendSwitch( 111 base::CommandLine::ForCurrentProcess()->AppendSwitch(
104 switches::kUseFakeDeviceForMediaStream); 112 switches::kUseFakeDeviceForMediaStream);
105 113
106 // This test uses real UI, IO and audio threads. 114 // This test uses real UI, IO and audio threads.
107 // AudioOutputDelegate mainly interacts with the IO and audio threads, 115 // AudioOutputDelegate mainly interacts with the IO and audio threads,
108 // but interacts with UI for bad messages, so using these threads should 116 // but interacts with UI for bad messages, so using these threads should
109 // approximate the real conditions of AudioOutputDelegate well. 117 // approximate the real conditions of AudioOutputDelegate well.
110 thread_bundle_ = base::MakeUnique<TestBrowserThreadBundle>( 118 thread_bundle_ = base::MakeUnique<TestBrowserThreadBundle>(
111 TestBrowserThreadBundle::Options::REAL_IO_THREAD); 119 TestBrowserThreadBundle::Options::REAL_IO_THREAD);
112 audio_thread_ = base::MakeUnique<AudioManagerThread>(); 120 audio_thread_ = base::MakeUnique<AudioManagerThread>();
113 121
114 audio_manager_.reset(new media::FakeAudioManager( 122 audio_manager_.reset(new media::FakeAudioManager(
115 audio_thread_->task_runner(), audio_thread_->worker_task_runner(), 123 audio_thread_->task_runner(), audio_thread_->worker_task_runner(),
116 &log_factory_)); 124 &log_factory_));
117 media_stream_manager_ = 125 media_stream_manager_ =
118 base::MakeUnique<MediaStreamManager>(audio_manager_.get()); 126 base::MakeUnique<MediaStreamManager>(audio_manager_.get());
119 } 127 }
120 128
129 ~AudioOutputDelegateTest() override {}
130
121 // Test bodies are here, so that we can run them on the IO thread. 131 // Test bodies are here, so that we can run them on the IO thread.
122 void CreateTest(base::Closure done) { 132 void CreateTest(base::Closure done) {
123 EXPECT_CALL(media_observer_, 133 EXPECT_CALL(media_observer_,
124 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 134 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
125 EXPECT_CALL(event_handler_, 135 EXPECT_CALL(event_handler_,
126 OnStreamCreated(kStreamId, NotNull(), NotNull())); 136 OnStreamCreated(kStreamId, NotNull(), NotNull()));
127 EXPECT_CALL(mirroring_manager_, 137 EXPECT_CALL(mirroring_manager_,
128 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 138 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
129 139
130 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 140 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
131 &event_handler_, audio_manager_.get(), 141 &event_handler_, &stream_registry_, audio_manager_.get(),
132 log_factory_.CreateAudioLog( 142 log_factory_.CreateAudioLog(
133 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 143 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
134 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 144 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
135 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 145 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
136 kDefaultDeviceId); 146 kDefaultDeviceId);
137 147
138 SyncWithAllThreads(); 148 SyncWithAllThreads();
139 149
140 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 150 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
141 delegate.reset(); 151 delegate.reset();
142 SyncWithAllThreads(); 152 SyncWithAllThreads();
143 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 153 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
144 } 154 }
145 155
146 void PlayTest(base::Closure done) { 156 void PlayTest(base::Closure done) {
147 EXPECT_CALL(media_observer_, 157 EXPECT_CALL(media_observer_,
148 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 158 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
149 EXPECT_CALL(event_handler_, 159 EXPECT_CALL(event_handler_,
150 OnStreamCreated(kStreamId, NotNull(), NotNull())); 160 OnStreamCreated(kStreamId, NotNull(), NotNull()));
151 EXPECT_CALL(mirroring_manager_, 161 EXPECT_CALL(mirroring_manager_,
152 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 162 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
153 { 163 {
154 InSequence s; 164 InSequence s;
155 EXPECT_CALL(event_handler_, OnStreamStateChanged(true)); 165 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(true));
156 EXPECT_CALL(event_handler_, OnStreamStateChanged(false)); 166 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(false));
157 } 167 }
158 168
159 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 169 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
160 &event_handler_, audio_manager_.get(), 170 &event_handler_, &stream_registry_, audio_manager_.get(),
161 log_factory_.CreateAudioLog( 171 log_factory_.CreateAudioLog(
162 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 172 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
163 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 173 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
164 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 174 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
165 kDefaultDeviceId); 175 kDefaultDeviceId);
166 176
167 delegate->OnPlayStream(); 177 delegate->OnPlayStream();
168 178
169 SyncWithAllThreads(); 179 SyncWithAllThreads();
170 180
171 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 181 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
172 delegate.reset(); 182 delegate.reset();
173 SyncWithAllThreads(); 183 SyncWithAllThreads();
174 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 184 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
175 } 185 }
176 186
177 void PauseTest(base::Closure done) { 187 void PauseTest(base::Closure done) {
178 EXPECT_CALL(media_observer_, 188 EXPECT_CALL(media_observer_,
179 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 189 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
180 EXPECT_CALL(event_handler_, 190 EXPECT_CALL(event_handler_,
181 OnStreamCreated(kStreamId, NotNull(), NotNull())); 191 OnStreamCreated(kStreamId, NotNull(), NotNull()));
182 EXPECT_CALL(mirroring_manager_, 192 EXPECT_CALL(mirroring_manager_,
183 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 193 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
184 194
185 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 195 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
186 &event_handler_, audio_manager_.get(), 196 &event_handler_, &stream_registry_, audio_manager_.get(),
187 log_factory_.CreateAudioLog( 197 log_factory_.CreateAudioLog(
188 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 198 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
189 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 199 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
190 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 200 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
191 kDefaultDeviceId); 201 kDefaultDeviceId);
192 202
193 delegate->OnPauseStream(); 203 delegate->OnPauseStream();
194 204
195 SyncWithAllThreads(); 205 SyncWithAllThreads();
196 206
197 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 207 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
198 delegate.reset(); 208 delegate.reset();
199 SyncWithAllThreads(); 209 SyncWithAllThreads();
200 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 210 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
201 } 211 }
202 212
203 void PlayPausePlayTest(base::Closure done) { 213 void PlayPausePlayTest(base::Closure done) {
204 EXPECT_CALL(media_observer_, 214 EXPECT_CALL(media_observer_,
205 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 215 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
206 EXPECT_CALL(event_handler_, 216 EXPECT_CALL(event_handler_,
207 OnStreamCreated(kStreamId, NotNull(), NotNull())); 217 OnStreamCreated(kStreamId, NotNull(), NotNull()));
208 EXPECT_CALL(mirroring_manager_, 218 EXPECT_CALL(mirroring_manager_,
209 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 219 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
210 { 220 {
211 InSequence s; 221 InSequence s;
212 EXPECT_CALL(event_handler_, OnStreamStateChanged(true)); 222 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(true));
213 EXPECT_CALL(event_handler_, OnStreamStateChanged(false)); 223 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(false));
214 EXPECT_CALL(event_handler_, OnStreamStateChanged(true)); 224 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(true));
215 EXPECT_CALL(event_handler_, OnStreamStateChanged(false)); 225 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(false));
216 } 226 }
217 227
218 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 228 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
219 &event_handler_, audio_manager_.get(), 229 &event_handler_, &stream_registry_, audio_manager_.get(),
220 log_factory_.CreateAudioLog( 230 log_factory_.CreateAudioLog(
221 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 231 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
222 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 232 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
223 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 233 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
224 kDefaultDeviceId); 234 kDefaultDeviceId);
225 235
226 delegate->OnPlayStream(); 236 delegate->OnPlayStream();
227 delegate->OnPauseStream(); 237 delegate->OnPauseStream();
228 delegate->OnPlayStream(); 238 delegate->OnPlayStream();
229 239
230 SyncWithAllThreads(); 240 SyncWithAllThreads();
231 241
232 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 242 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
233 delegate.reset(); 243 delegate.reset();
234 SyncWithAllThreads(); 244 SyncWithAllThreads();
235 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 245 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
236 } 246 }
237 247
238 void PlayPlayTest(base::Closure done) { 248 void PlayPlayTest(base::Closure done) {
239 EXPECT_CALL(media_observer_, 249 EXPECT_CALL(media_observer_,
240 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 250 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
241 EXPECT_CALL(event_handler_, 251 EXPECT_CALL(event_handler_,
242 OnStreamCreated(kStreamId, NotNull(), NotNull())); 252 OnStreamCreated(kStreamId, NotNull(), NotNull()));
243 EXPECT_CALL(mirroring_manager_, 253 EXPECT_CALL(mirroring_manager_,
244 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 254 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
245 { 255 {
246 InSequence s; 256 InSequence s;
247 EXPECT_CALL(event_handler_, OnStreamStateChanged(true)); 257 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(true));
248 EXPECT_CALL(event_handler_, OnStreamStateChanged(false)); 258 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(false));
249 } 259 }
250 260
251 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 261 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
252 &event_handler_, audio_manager_.get(), 262 &event_handler_, &stream_registry_, audio_manager_.get(),
253 log_factory_.CreateAudioLog( 263 log_factory_.CreateAudioLog(
254 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 264 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
255 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 265 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
256 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 266 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
257 kDefaultDeviceId); 267 kDefaultDeviceId);
258 268
259 delegate->OnPlayStream(); 269 delegate->OnPlayStream();
260 delegate->OnPlayStream(); 270 delegate->OnPlayStream();
261 271
262 SyncWithAllThreads(); 272 SyncWithAllThreads();
263 273
264 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 274 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
265 delegate.reset(); 275 delegate.reset();
266 SyncWithAllThreads(); 276 SyncWithAllThreads();
267 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 277 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
268 } 278 }
269 279
270 void CreateDivertTest(base::Closure done) { 280 void CreateDivertTest(base::Closure done) {
271 EXPECT_CALL(media_observer_, 281 EXPECT_CALL(media_observer_,
272 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 282 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
273 EXPECT_CALL(event_handler_, 283 EXPECT_CALL(event_handler_,
274 OnStreamCreated(kStreamId, NotNull(), NotNull())); 284 OnStreamCreated(kStreamId, NotNull(), NotNull()));
275 EXPECT_CALL(mirroring_manager_, 285 EXPECT_CALL(mirroring_manager_,
276 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 286 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
277 287
278 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 288 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
279 &event_handler_, audio_manager_.get(), 289 &event_handler_, &stream_registry_, audio_manager_.get(),
280 log_factory_.CreateAudioLog( 290 log_factory_.CreateAudioLog(
281 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 291 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
282 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 292 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
283 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 293 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
284 kDefaultDeviceId); 294 kDefaultDeviceId);
285 295
286 DummyAudioOutputStream stream; 296 DummyAudioOutputStream stream;
287 delegate->controller()->StartDiverting(&stream); 297 delegate->controller()->StartDiverting(&stream);
288 298
289 SyncWithAllThreads(); 299 SyncWithAllThreads();
290 300
291 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 301 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
292 delegate.reset(); 302 delegate.reset();
293 SyncWithAllThreads(); 303 SyncWithAllThreads();
294 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 304 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
295 } 305 }
296 306
297 void CreateDivertPauseTest(base::Closure done) { 307 void CreateDivertPauseTest(base::Closure done) {
298 EXPECT_CALL(media_observer_, 308 EXPECT_CALL(media_observer_,
299 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 309 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
300 EXPECT_CALL(event_handler_, 310 EXPECT_CALL(event_handler_,
301 OnStreamCreated(kStreamId, NotNull(), NotNull())); 311 OnStreamCreated(kStreamId, NotNull(), NotNull()));
302 EXPECT_CALL(mirroring_manager_, 312 EXPECT_CALL(mirroring_manager_,
303 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 313 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
304 314
305 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 315 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
306 &event_handler_, audio_manager_.get(), 316 &event_handler_, &stream_registry_, audio_manager_.get(),
307 log_factory_.CreateAudioLog( 317 log_factory_.CreateAudioLog(
308 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 318 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
309 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 319 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
310 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 320 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
311 kDefaultDeviceId); 321 kDefaultDeviceId);
312 322
313 DummyAudioOutputStream stream; 323 DummyAudioOutputStream stream;
314 delegate->controller()->StartDiverting(&stream); 324 delegate->controller()->StartDiverting(&stream);
315 325
316 SyncWithAllThreads(); 326 SyncWithAllThreads();
317 delegate->OnPauseStream(); 327 delegate->OnPauseStream();
318 328
319 SyncWithAllThreads(); 329 SyncWithAllThreads();
320 330
321 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 331 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
322 delegate.reset(); 332 delegate.reset();
323 SyncWithAllThreads(); 333 SyncWithAllThreads();
324 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 334 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
325 } 335 }
326 336
327 void PlayDivertTest(base::Closure done) { 337 void PlayDivertTest(base::Closure done) {
328 EXPECT_CALL(media_observer_, 338 EXPECT_CALL(media_observer_,
329 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 339 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
330 EXPECT_CALL(event_handler_, 340 EXPECT_CALL(event_handler_,
331 OnStreamCreated(kStreamId, NotNull(), NotNull())); 341 OnStreamCreated(kStreamId, NotNull(), NotNull()));
332 EXPECT_CALL(mirroring_manager_, 342 EXPECT_CALL(mirroring_manager_,
333 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 343 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
334 { 344 {
335 InSequence s; 345 InSequence s;
336 EXPECT_CALL(event_handler_, OnStreamStateChanged(true)); 346 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(true));
337 EXPECT_CALL(event_handler_, OnStreamStateChanged(false)); 347 EXPECT_CALL(stream_registry_, OutputStreamStateChanged(false));
338 } 348 }
339 349
340 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 350 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
341 &event_handler_, audio_manager_.get(), 351 &event_handler_, &stream_registry_, audio_manager_.get(),
342 log_factory_.CreateAudioLog( 352 log_factory_.CreateAudioLog(
343 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 353 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
344 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 354 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
345 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 355 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
346 kDefaultDeviceId); 356 kDefaultDeviceId);
347 357
348 DummyAudioOutputStream stream; 358 DummyAudioOutputStream stream;
349 delegate->OnPlayStream(); 359 delegate->OnPlayStream();
350 delegate->controller()->StartDiverting(&stream); 360 delegate->controller()->StartDiverting(&stream);
351 361
352 SyncWithAllThreads(); 362 SyncWithAllThreads();
353 363
354 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 364 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
355 delegate.reset(); 365 delegate.reset();
356 SyncWithAllThreads(); 366 SyncWithAllThreads();
357 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 367 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
358 } 368 }
359 369
360 void ErrorTest(base::Closure done) { 370 void ErrorTest(base::Closure done) {
361 EXPECT_CALL(media_observer_, 371 EXPECT_CALL(media_observer_,
362 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 372 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
363 EXPECT_CALL(event_handler_, 373 EXPECT_CALL(event_handler_,
364 OnStreamCreated(kStreamId, NotNull(), NotNull())); 374 OnStreamCreated(kStreamId, NotNull(), NotNull()));
365 EXPECT_CALL(event_handler_, OnStreamError(kStreamId)); 375 EXPECT_CALL(event_handler_, OnStreamError(kStreamId));
366 EXPECT_CALL(mirroring_manager_, 376 EXPECT_CALL(mirroring_manager_,
367 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 377 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
368 378
369 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 379 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
370 &event_handler_, audio_manager_.get(), 380 &event_handler_, &stream_registry_, audio_manager_.get(),
371 log_factory_.CreateAudioLog( 381 log_factory_.CreateAudioLog(
372 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 382 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
373 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 383 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
374 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 384 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
375 kDefaultDeviceId); 385 kDefaultDeviceId);
376 386
377 delegate->controller()->OnError(nullptr); 387 delegate->controller()->OnError(nullptr);
378 388
379 SyncWithAllThreads(); 389 SyncWithAllThreads();
380 390
381 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 391 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
382 delegate.reset(); 392 delegate.reset();
383 SyncWithAllThreads(); 393 SyncWithAllThreads();
384 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 394 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
385 } 395 }
386 396
387 void CreateAndDestroyTest(base::Closure done) { 397 void CreateAndDestroyTest(base::Closure done) {
388 EXPECT_CALL(media_observer_, 398 EXPECT_CALL(media_observer_,
389 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 399 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
390 EXPECT_CALL(mirroring_manager_, 400 EXPECT_CALL(mirroring_manager_,
391 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 401 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
392 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 402 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
393 403
394 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 404 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
395 &event_handler_, audio_manager_.get(), 405 &event_handler_, &stream_registry_, audio_manager_.get(),
396 log_factory_.CreateAudioLog( 406 log_factory_.CreateAudioLog(
397 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 407 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
398 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 408 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
399 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 409 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
400 kDefaultDeviceId); 410 kDefaultDeviceId);
401 411
402 delegate.reset(); 412 delegate.reset();
403 SyncWithAllThreads(); 413 SyncWithAllThreads();
404 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 414 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
405 } 415 }
406 416
407 void PlayAndDestroyTest(base::Closure done) { 417 void PlayAndDestroyTest(base::Closure done) {
408 EXPECT_CALL(media_observer_, 418 EXPECT_CALL(media_observer_,
409 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 419 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
410 EXPECT_CALL(event_handler_, 420 EXPECT_CALL(event_handler_,
411 OnStreamCreated(kStreamId, NotNull(), NotNull())); 421 OnStreamCreated(kStreamId, NotNull(), NotNull()));
412 EXPECT_CALL(mirroring_manager_, 422 EXPECT_CALL(mirroring_manager_,
413 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 423 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
414 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 424 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
415 425
416 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 426 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
417 &event_handler_, audio_manager_.get(), 427 &event_handler_, &stream_registry_, audio_manager_.get(),
418 log_factory_.CreateAudioLog( 428 log_factory_.CreateAudioLog(
419 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 429 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
420 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 430 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
421 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 431 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
422 kDefaultDeviceId); 432 kDefaultDeviceId);
423 433
424 SyncWithAllThreads(); 434 SyncWithAllThreads();
425 435
426 delegate->OnPlayStream(); 436 delegate->OnPlayStream();
427 delegate.reset(); 437 delegate.reset();
428 SyncWithAllThreads(); 438 SyncWithAllThreads();
429 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 439 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
430 } 440 }
431 441
432 void ErrorAndDestroyTest(base::Closure done) { 442 void ErrorAndDestroyTest(base::Closure done) {
433 EXPECT_CALL(media_observer_, 443 EXPECT_CALL(media_observer_,
434 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId)); 444 OnCreatingAudioStream(kRenderProcessId, kRenderFrameId));
435 EXPECT_CALL(event_handler_, 445 EXPECT_CALL(event_handler_,
436 OnStreamCreated(kStreamId, NotNull(), NotNull())); 446 OnStreamCreated(kStreamId, NotNull(), NotNull()));
437 EXPECT_CALL(mirroring_manager_, 447 EXPECT_CALL(mirroring_manager_,
438 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull())); 448 AddDiverter(kRenderProcessId, kRenderFrameId, NotNull()));
439 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull())); 449 EXPECT_CALL(mirroring_manager_, RemoveDiverter(NotNull()));
440 450
441 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create( 451 AudioOutputDelegate::UniquePtr delegate = AudioOutputDelegate::Create(
442 &event_handler_, audio_manager_.get(), 452 &event_handler_, &stream_registry_, audio_manager_.get(),
443 log_factory_.CreateAudioLog( 453 log_factory_.CreateAudioLog(
444 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER), 454 media::AudioLogFactory::AUDIO_OUTPUT_CONTROLLER),
445 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId, 455 &mirroring_manager_, &media_observer_, kStreamId, kRenderFrameId,
446 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(), 456 kRenderProcessId, audio_manager_->GetDefaultOutputStreamParameters(),
447 kDefaultDeviceId); 457 kDefaultDeviceId);
448 SyncWithAllThreads(); 458 SyncWithAllThreads();
449 459
450 delegate->controller()->OnError(nullptr); 460 delegate->controller()->OnError(nullptr);
451 delegate.reset(); 461 delegate.reset();
452 SyncWithAllThreads(); 462 SyncWithAllThreads();
453 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done); 463 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, done);
454 } 464 }
455 465
456 protected: 466 protected:
457 // MediaStreamManager uses a DestructionObserver, so it must outlive the 467 // MediaStreamManager uses a DestructionObserver, so it must outlive the
458 // TestBrowserThreadBundle. 468 // TestBrowserThreadBundle.
459 std::unique_ptr<MediaStreamManager> media_stream_manager_; 469 std::unique_ptr<MediaStreamManager> media_stream_manager_;
460 std::unique_ptr<TestBrowserThreadBundle> thread_bundle_; 470 std::unique_ptr<TestBrowserThreadBundle> thread_bundle_;
461 std::unique_ptr<AudioManagerThread> audio_thread_; 471 std::unique_ptr<AudioManagerThread> audio_thread_;
462 media::ScopedAudioManagerPtr audio_manager_; 472 media::ScopedAudioManagerPtr audio_manager_;
463 StrictMock<MockAudioMirroringManager> mirroring_manager_; 473 StrictMock<MockAudioMirroringManager> mirroring_manager_;
464 StrictMock<MockEventHandler> event_handler_; 474 StrictMock<MockEventHandler> event_handler_;
465 StrictMock<MockObserver> media_observer_; 475 StrictMock<MockObserver> media_observer_;
476 MockAudioStreamRegistry stream_registry_;
466 media::FakeAudioLogFactory log_factory_; 477 media::FakeAudioLogFactory log_factory_;
467 478
468 private: 479 private:
469 void SyncWithAllThreads() { 480 void SyncWithAllThreads() {
470 DCHECK_CURRENTLY_ON(BrowserThread::IO); 481 DCHECK_CURRENTLY_ON(BrowserThread::IO);
471 // New tasks might be posted while we are syncing, but in every iteration at 482 // New tasks might be posted while we are syncing, but in every iteration at
472 // least one task will be run. 20 iterations should be enough for our code. 483 // least one task will be run. 20 iterations should be enough for our code.
473 for (int i = 0; i < 20; ++i) { 484 for (int i = 0; i < 20; ++i) {
474 { 485 {
475 base::MessageLoop::ScopedNestableTaskAllower allower( 486 base::MessageLoop::ScopedNestableTaskAllower allower(
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
580 TEST_F(AudioOutputDelegateTest, ErrorAndDestroy) { 591 TEST_F(AudioOutputDelegateTest, ErrorAndDestroy) {
581 base::RunLoop l; 592 base::RunLoop l;
582 BrowserThread::PostTask( 593 BrowserThread::PostTask(
583 BrowserThread::IO, FROM_HERE, 594 BrowserThread::IO, FROM_HERE,
584 base::Bind(&AudioOutputDelegateTest::PlayAndDestroyTest, 595 base::Bind(&AudioOutputDelegateTest::PlayAndDestroyTest,
585 base::Unretained(this), l.QuitClosure())); 596 base::Unretained(this), l.QuitClosure()));
586 l.Run(); 597 l.Run();
587 } 598 }
588 599
589 } // namespace content 600 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698