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

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

Powered by Google App Engine
This is Rietveld 408576698