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

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

Issue 1769933002: Looking up device id by session id for AudioRendererMixerInput (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/renderer/media/webrtc_audio_renderer.h" 5 #include "content/renderer/media/webrtc_audio_renderer.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "build/build_config.h" 13 #include "build/build_config.h"
14 #include "content/public/renderer/media_stream_audio_renderer.h" 14 #include "content/public/renderer/media_stream_audio_renderer.h"
15 #include "content/renderer/media/audio_device_factory.h" 15 #include "content/renderer/media/audio_device_factory.h"
16 #include "content/renderer/media/webrtc_audio_device_impl.h" 16 #include "content/renderer/media/webrtc_audio_device_impl.h"
17 #include "media/base/audio_renderer_sink.h" 17 #include "media/base/mock_audio_renderer_sink.h"
18 #include "media/base/output_device.h"
19 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gmock/include/gmock/gmock.h"
20 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
21 #include "third_party/WebKit/public/platform/WebMediaStream.h" 20 #include "third_party/WebKit/public/platform/WebMediaStream.h"
22 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" 21 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
23 #include "third_party/WebKit/public/web/WebHeap.h" 22 #include "third_party/WebKit/public/web/WebHeap.h"
24 #include "third_party/webrtc/api/mediastreaminterface.h" 23 #include "third_party/webrtc/api/mediastreaminterface.h"
25 24
26 using testing::Return; 25 using testing::Return;
27 using testing::_; 26 using testing::_;
28 27
29 namespace content { 28 namespace content {
30 29
31 namespace { 30 namespace {
32 31
33 const int kHardwareSampleRate = 44100; 32 const int kHardwareSampleRate = 44100;
34 const int kHardwareBufferSize = 512; 33 const int kHardwareBufferSize = 512;
35 const char kDefaultOutputDeviceId[] = ""; 34 const char kDefaultOutputDeviceId[] = "";
36 const char kOtherOutputDeviceId[] = "other-output-device"; 35 const char kOtherOutputDeviceId[] = "other-output-device";
37 const char kInvalidOutputDeviceId[] = "invalid-device"; 36 const char kInvalidOutputDeviceId[] = "invalid-device";
38 37
39 class FakeAudioOutputDevice
40 : NON_EXPORTED_BASE(public media::AudioRendererSink),
41 NON_EXPORTED_BASE(public media::OutputDevice) {
42 public:
43 FakeAudioOutputDevice(const std::string& device_id) : device_id_(device_id) {}
44 MOCK_METHOD2(Initialize,
45 void(const media::AudioParameters&, RenderCallback*));
46 MOCK_METHOD0(Start, void());
47 MOCK_METHOD0(Stop, void());
48 MOCK_METHOD0(Pause, void());
49 MOCK_METHOD0(Play, void());
50 MOCK_METHOD1(SetVolume, bool(double volume));
51 OutputDevice* GetOutputDevice() { return this; }
52 MOCK_METHOD3(SwitchOutputDevice,
53 void(const std::string&,
54 const url::Origin&,
55 const media::SwitchOutputDeviceCB&));
56
57 media::OutputDeviceStatus GetDeviceStatus() override {
58 return device_id_ == kInvalidOutputDeviceId
59 ? media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL
60 : media::OUTPUT_DEVICE_STATUS_OK;
61 }
62
63 std::string GetDeviceId() const { return device_id_; }
64
65 media::AudioParameters GetOutputParameters() override {
66 return media::AudioParameters(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
67 media::CHANNEL_LAYOUT_STEREO,
68 kHardwareSampleRate, 16, kHardwareBufferSize);
69 }
70
71 protected:
72 virtual ~FakeAudioOutputDevice() {}
73
74 private:
75 const std::string device_id_;
76 };
77
78 class MockAudioRendererSource : public WebRtcAudioRendererSource { 38 class MockAudioRendererSource : public WebRtcAudioRendererSource {
79 public: 39 public:
80 MockAudioRendererSource() {} 40 MockAudioRendererSource() {}
81 virtual ~MockAudioRendererSource() {} 41 virtual ~MockAudioRendererSource() {}
82 MOCK_METHOD4(RenderData, void(media::AudioBus* audio_bus, 42 MOCK_METHOD4(RenderData, void(media::AudioBus* audio_bus,
83 int sample_rate, 43 int sample_rate,
84 int audio_delay_milliseconds, 44 int audio_delay_milliseconds,
85 base::TimeDelta* current_time)); 45 base::TimeDelta* current_time));
86 MOCK_METHOD1(RemoveAudioRenderer, void(WebRtcAudioRenderer* renderer)); 46 MOCK_METHOD1(RemoveAudioRenderer, void(WebRtcAudioRenderer* renderer));
87 MOCK_METHOD0(AudioRendererThreadStopped, void()); 47 MOCK_METHOD0(AudioRendererThreadStopped, void());
(...skipping 23 matching lines...) Expand all
111 renderer_ = new WebRtcAudioRenderer(message_loop_->task_runner(), stream_, 71 renderer_ = new WebRtcAudioRenderer(message_loop_->task_runner(), stream_,
112 1, 1, device_id, url::Origin()); 72 1, 1, device_id, url::Origin());
113 EXPECT_CALL( 73 EXPECT_CALL(
114 *this, MockCreateAudioRendererSink(AudioDeviceFactory::kSourceWebRtc, _, 74 *this, MockCreateAudioRendererSink(AudioDeviceFactory::kSourceWebRtc, _,
115 _, device_id, _)); 75 _, device_id, _));
116 EXPECT_TRUE(renderer_->Initialize(source_.get())); 76 EXPECT_TRUE(renderer_->Initialize(source_.get()));
117 77
118 renderer_proxy_ = renderer_->CreateSharedAudioRendererProxy(stream_); 78 renderer_proxy_ = renderer_->CreateSharedAudioRendererProxy(stream_);
119 } 79 }
120 MOCK_METHOD1(CreateInputDevice, media::AudioInputDevice*(int)); 80 MOCK_METHOD1(CreateInputDevice, media::AudioInputDevice*(int));
121 MOCK_METHOD4(CreateOutputDevice, 81 MOCK_METHOD4(CreateAudioRendererMixerSink,
122 media::AudioOutputDevice*(int, 82 media::AudioRendererMixerSink*(int,
123 int, 83 int,
124 const std::string&, 84 const std::string&,
125 const url::Origin&)); 85 const url::Origin&));
126 MOCK_METHOD5(CreateRestartableAudioRendererSink, 86 MOCK_METHOD5(CreateRestartableAudioRendererSink,
127 media::RestartableAudioRendererSink*(SourceType, 87 media::RestartableAudioRendererSink*(SourceType,
128 int, 88 int,
129 int, 89 int,
130 const std::string&, 90 const std::string&,
131 const url::Origin&)); 91 const url::Origin&));
132 MOCK_METHOD5(MockCreateAudioRendererSink, 92 MOCK_METHOD5(MockCreateAudioRendererSink,
133 media::AudioRendererSink*(SourceType, 93 media::AudioRendererSink*(SourceType,
134 int, 94 int,
135 int, 95 int,
136 const std::string&, 96 const std::string&,
137 const url::Origin&)); 97 const url::Origin&));
98
138 media::AudioRendererSink* CreateAudioRendererSink( 99 media::AudioRendererSink* CreateAudioRendererSink(
139 SourceType source_type, 100 SourceType source_type,
140 int render_frame_id, 101 int render_frame_id,
141 int session_id, 102 int session_id,
142 const std::string& device_id, 103 const std::string& device_id,
143 const url::Origin& security_origin) { 104 const url::Origin& security_origin) {
144 FakeAudioOutputDevice* fake_device = new FakeAudioOutputDevice(device_id); 105 media::MockAudioRendererMixerSink* fake_sink =
106 new media::MockAudioRendererMixerSink(
107 device_id, device_id == kInvalidOutputDeviceId
108 ? media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL
109 : media::OUTPUT_DEVICE_STATUS_OK,
110 media::AudioParameters(
111 media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
112 media::CHANNEL_LAYOUT_STEREO, kHardwareSampleRate, 16,
113 kHardwareBufferSize));
145 if (device_id != kInvalidOutputDeviceId) { 114 if (device_id != kInvalidOutputDeviceId) {
146 mock_output_device_ = fake_device; 115 mock_sink_ = fake_sink;
147 EXPECT_CALL(*mock_output_device_.get(), Start()); 116 EXPECT_CALL(*mock_sink_.get(), Start());
148 } 117 }
149 118
150 MockCreateAudioRendererSink(source_type, render_frame_id, session_id, 119 MockCreateAudioRendererSink(source_type, render_frame_id, session_id,
151 device_id, security_origin); 120 device_id, security_origin);
152 return fake_device; 121 return fake_sink;
153 } 122 }
154 123
155 void TearDown() override { 124 void TearDown() override {
156 renderer_proxy_ = nullptr; 125 renderer_proxy_ = nullptr;
157 renderer_ = nullptr; 126 renderer_ = nullptr;
158 stream_.reset(); 127 stream_.reset();
159 source_.reset(); 128 source_.reset();
160 mock_output_device_ = nullptr; 129 mock_sink_ = nullptr;
161 blink::WebHeap::collectAllGarbageForTesting(); 130 blink::WebHeap::collectAllGarbageForTesting();
162 } 131 }
163 132
164 scoped_ptr<base::MessageLoopForIO> message_loop_; 133 scoped_ptr<base::MessageLoopForIO> message_loop_;
165 scoped_refptr<FakeAudioOutputDevice> mock_output_device_; 134 scoped_refptr<media::MockAudioRendererMixerSink> mock_sink_;
166 scoped_ptr<MockAudioRendererSource> source_; 135 scoped_ptr<MockAudioRendererSource> source_;
167 blink::WebMediaStream stream_; 136 blink::WebMediaStream stream_;
168 scoped_refptr<WebRtcAudioRenderer> renderer_; 137 scoped_refptr<WebRtcAudioRenderer> renderer_;
169 scoped_refptr<MediaStreamAudioRenderer> renderer_proxy_; 138 scoped_refptr<MediaStreamAudioRenderer> renderer_proxy_;
170 }; 139 };
171 140
172 // Verify that the renderer will be stopped if the only proxy is stopped. 141 // Verify that the renderer will be stopped if the only proxy is stopped.
173 TEST_F(WebRtcAudioRendererTest, StopRenderer) { 142 TEST_F(WebRtcAudioRendererTest, StopRenderer) {
174 SetupRenderer(kDefaultOutputDeviceId); 143 SetupRenderer(kDefaultOutputDeviceId);
175 renderer_proxy_->Start(); 144 renderer_proxy_->Start();
176 145
177 // |renderer_| has only one proxy, stopping the proxy should stop the sink of 146 // |renderer_| has only one proxy, stopping the proxy should stop the sink of
178 // |renderer_|. 147 // |renderer_|.
179 EXPECT_CALL(*mock_output_device_.get(), Stop()); 148 EXPECT_CALL(*mock_sink_.get(), Stop());
180 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get())); 149 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get()));
181 renderer_proxy_->Stop(); 150 renderer_proxy_->Stop();
182 } 151 }
183 152
184 // Verify that the renderer will not be stopped unless the last proxy is 153 // Verify that the renderer will not be stopped unless the last proxy is
185 // stopped. 154 // stopped.
186 TEST_F(WebRtcAudioRendererTest, MultipleRenderers) { 155 TEST_F(WebRtcAudioRendererTest, MultipleRenderers) {
187 SetupRenderer(kDefaultOutputDeviceId); 156 SetupRenderer(kDefaultOutputDeviceId);
188 renderer_proxy_->Start(); 157 renderer_proxy_->Start();
189 158
190 // Create a vector of renderer proxies from the |renderer_|. 159 // Create a vector of renderer proxies from the |renderer_|.
191 std::vector<scoped_refptr<MediaStreamAudioRenderer> > renderer_proxies_; 160 std::vector<scoped_refptr<MediaStreamAudioRenderer> > renderer_proxies_;
192 static const int kNumberOfRendererProxy = 5; 161 static const int kNumberOfRendererProxy = 5;
193 for (int i = 0; i < kNumberOfRendererProxy; ++i) { 162 for (int i = 0; i < kNumberOfRendererProxy; ++i) {
194 scoped_refptr<MediaStreamAudioRenderer> renderer_proxy( 163 scoped_refptr<MediaStreamAudioRenderer> renderer_proxy(
195 renderer_->CreateSharedAudioRendererProxy(stream_)); 164 renderer_->CreateSharedAudioRendererProxy(stream_));
196 renderer_proxy->Start(); 165 renderer_proxy->Start();
197 renderer_proxies_.push_back(renderer_proxy); 166 renderer_proxies_.push_back(renderer_proxy);
198 } 167 }
199 168
200 // Stop the |renderer_proxy_| should not stop the sink since it is used by 169 // Stop the |renderer_proxy_| should not stop the sink since it is used by
201 // other proxies. 170 // other proxies.
202 EXPECT_CALL(*mock_output_device_.get(), Stop()).Times(0); 171 EXPECT_CALL(*mock_sink_.get(), Stop()).Times(0);
203 renderer_proxy_->Stop(); 172 renderer_proxy_->Stop();
204 173
205 for (int i = 0; i < kNumberOfRendererProxy; ++i) { 174 for (int i = 0; i < kNumberOfRendererProxy; ++i) {
206 if (i != kNumberOfRendererProxy -1) { 175 if (i != kNumberOfRendererProxy -1) {
207 EXPECT_CALL(*mock_output_device_.get(), Stop()).Times(0); 176 EXPECT_CALL(*mock_sink_.get(), Stop()).Times(0);
208 } else { 177 } else {
209 // When the last proxy is stopped, the sink will stop. 178 // When the last proxy is stopped, the sink will stop.
210 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get())); 179 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get()));
211 EXPECT_CALL(*mock_output_device_.get(), Stop()); 180 EXPECT_CALL(*mock_sink_.get(), Stop());
212 } 181 }
213 renderer_proxies_[i]->Stop(); 182 renderer_proxies_[i]->Stop();
214 } 183 }
215 } 184 }
216 185
217 // Verify that the sink of the renderer is using the expected sample rate and 186 // Verify that the sink of the renderer is using the expected sample rate and
218 // buffer size. 187 // buffer size.
219 TEST_F(WebRtcAudioRendererTest, VerifySinkParameters) { 188 TEST_F(WebRtcAudioRendererTest, VerifySinkParameters) {
220 SetupRenderer(kDefaultOutputDeviceId); 189 SetupRenderer(kDefaultOutputDeviceId);
221 renderer_proxy_->Start(); 190 renderer_proxy_->Start();
222 #if defined(OS_LINUX) || defined(OS_MACOSX) 191 #if defined(OS_LINUX) || defined(OS_MACOSX)
223 static const int kExpectedBufferSize = kHardwareSampleRate / 100; 192 static const int kExpectedBufferSize = kHardwareSampleRate / 100;
224 #elif defined(OS_ANDROID) 193 #elif defined(OS_ANDROID)
225 static const int kExpectedBufferSize = 2 * kHardwareSampleRate / 100; 194 static const int kExpectedBufferSize = 2 * kHardwareSampleRate / 100;
226 #else 195 #else
227 // Windows. 196 // Windows.
228 static const int kExpectedBufferSize = kHardwareBufferSize; 197 static const int kExpectedBufferSize = kHardwareBufferSize;
229 #endif 198 #endif
230 EXPECT_EQ(kExpectedBufferSize, renderer_->frames_per_buffer()); 199 EXPECT_EQ(kExpectedBufferSize, renderer_->frames_per_buffer());
231 EXPECT_EQ(kHardwareSampleRate, renderer_->sample_rate()); 200 EXPECT_EQ(kHardwareSampleRate, renderer_->sample_rate());
232 EXPECT_EQ(2, renderer_->channels()); 201 EXPECT_EQ(2, renderer_->channels());
233 202
234 EXPECT_CALL(*mock_output_device_.get(), Stop()); 203 EXPECT_CALL(*mock_sink_.get(), Stop());
235 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get())); 204 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get()));
236 renderer_proxy_->Stop(); 205 renderer_proxy_->Stop();
237 } 206 }
238 207
239 TEST_F(WebRtcAudioRendererTest, NonDefaultDevice) { 208 TEST_F(WebRtcAudioRendererTest, NonDefaultDevice) {
240 SetupRenderer(kDefaultOutputDeviceId); 209 SetupRenderer(kDefaultOutputDeviceId);
241 EXPECT_EQ(mock_output_device_->GetDeviceId(), kDefaultOutputDeviceId); 210 EXPECT_EQ(mock_sink_->GetDeviceId(), kDefaultOutputDeviceId);
242 renderer_proxy_->Start(); 211 renderer_proxy_->Start();
243 212
244 EXPECT_CALL(*mock_output_device_.get(), Stop()); 213 EXPECT_CALL(*mock_sink_.get(), Stop());
245 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get())); 214 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get()));
246 renderer_proxy_->Stop(); 215 renderer_proxy_->Stop();
247 216
248 SetupRenderer(kOtherOutputDeviceId); 217 SetupRenderer(kOtherOutputDeviceId);
249 EXPECT_EQ(mock_output_device_->GetDeviceId(), kOtherOutputDeviceId); 218 EXPECT_EQ(mock_sink_->GetDeviceId(), kOtherOutputDeviceId);
250 renderer_proxy_->Start(); 219 renderer_proxy_->Start();
251 220
252 EXPECT_CALL(*mock_output_device_.get(), Stop()); 221 EXPECT_CALL(*mock_sink_.get(), Stop());
253 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get())); 222 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get()));
254 renderer_proxy_->Stop(); 223 renderer_proxy_->Stop();
255 } 224 }
256 225
257 TEST_F(WebRtcAudioRendererTest, SwitchOutputDevice) { 226 TEST_F(WebRtcAudioRendererTest, SwitchOutputDevice) {
258 SetupRenderer(kDefaultOutputDeviceId); 227 SetupRenderer(kDefaultOutputDeviceId);
259 EXPECT_EQ(kDefaultOutputDeviceId, mock_output_device_->GetDeviceId()); 228 EXPECT_EQ(kDefaultOutputDeviceId, mock_sink_->GetDeviceId());
260 renderer_proxy_->Start(); 229 renderer_proxy_->Start();
261 230
262 EXPECT_CALL(*mock_output_device_.get(), Stop()); 231 EXPECT_CALL(*mock_sink_.get(), Stop());
263 EXPECT_CALL(*this, 232 EXPECT_CALL(*this,
264 MockCreateAudioRendererSink(AudioDeviceFactory::kSourceWebRtc, _, 233 MockCreateAudioRendererSink(AudioDeviceFactory::kSourceWebRtc, _,
265 _, kOtherOutputDeviceId, _)); 234 _, kOtherOutputDeviceId, _));
266 EXPECT_CALL(*source_.get(), AudioRendererThreadStopped()); 235 EXPECT_CALL(*source_.get(), AudioRendererThreadStopped());
267 EXPECT_CALL(*this, MockSwitchDeviceCallback(media::OUTPUT_DEVICE_STATUS_OK)); 236 EXPECT_CALL(*this, MockSwitchDeviceCallback(media::OUTPUT_DEVICE_STATUS_OK));
268 base::RunLoop loop; 237 base::RunLoop loop;
269 renderer_proxy_->GetOutputDevice()->SwitchOutputDevice( 238 renderer_proxy_->GetOutputDevice()->SwitchOutputDevice(
270 kOtherOutputDeviceId, url::Origin(), 239 kOtherOutputDeviceId, url::Origin(),
271 base::Bind(&WebRtcAudioRendererTest::SwitchDeviceCallback, 240 base::Bind(&WebRtcAudioRendererTest::SwitchDeviceCallback,
272 base::Unretained(this), &loop)); 241 base::Unretained(this), &loop));
273 loop.Run(); 242 loop.Run();
274 EXPECT_EQ(kOtherOutputDeviceId, mock_output_device_->GetDeviceId()); 243 EXPECT_EQ(kOtherOutputDeviceId, mock_sink_->GetDeviceId());
275 244
276 EXPECT_CALL(*mock_output_device_.get(), Stop()); 245 EXPECT_CALL(*mock_sink_.get(), Stop());
277 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get())); 246 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get()));
278 renderer_proxy_->Stop(); 247 renderer_proxy_->Stop();
279 } 248 }
280 249
281 TEST_F(WebRtcAudioRendererTest, SwitchOutputDeviceInvalidDevice) { 250 TEST_F(WebRtcAudioRendererTest, SwitchOutputDeviceInvalidDevice) {
282 SetupRenderer(kDefaultOutputDeviceId); 251 SetupRenderer(kDefaultOutputDeviceId);
283 EXPECT_EQ(kDefaultOutputDeviceId, mock_output_device_->GetDeviceId()); 252 EXPECT_EQ(kDefaultOutputDeviceId, mock_sink_->GetDeviceId());
284 renderer_proxy_->Start(); 253 renderer_proxy_->Start();
285 254
286 EXPECT_CALL(*this, 255 EXPECT_CALL(*this,
287 MockCreateAudioRendererSink(AudioDeviceFactory::kSourceWebRtc, _, 256 MockCreateAudioRendererSink(AudioDeviceFactory::kSourceWebRtc, _,
288 _, kInvalidOutputDeviceId, _)); 257 _, kInvalidOutputDeviceId, _));
289 EXPECT_CALL(*this, MockSwitchDeviceCallback( 258 EXPECT_CALL(*this, MockSwitchDeviceCallback(
290 media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL)); 259 media::OUTPUT_DEVICE_STATUS_ERROR_INTERNAL));
291 base::RunLoop loop; 260 base::RunLoop loop;
292 renderer_proxy_->GetOutputDevice()->SwitchOutputDevice( 261 renderer_proxy_->GetOutputDevice()->SwitchOutputDevice(
293 kInvalidOutputDeviceId, url::Origin(), 262 kInvalidOutputDeviceId, url::Origin(),
294 base::Bind(&WebRtcAudioRendererTest::SwitchDeviceCallback, 263 base::Bind(&WebRtcAudioRendererTest::SwitchDeviceCallback,
295 base::Unretained(this), &loop)); 264 base::Unretained(this), &loop));
296 loop.Run(); 265 loop.Run();
297 EXPECT_EQ(kDefaultOutputDeviceId, mock_output_device_->GetDeviceId()); 266 EXPECT_EQ(kDefaultOutputDeviceId, mock_sink_->GetDeviceId());
298 267
299 EXPECT_CALL(*mock_output_device_.get(), Stop()); 268 EXPECT_CALL(*mock_sink_.get(), Stop());
300 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get())); 269 EXPECT_CALL(*source_.get(), RemoveAudioRenderer(renderer_.get()));
301 renderer_proxy_->Stop(); 270 renderer_proxy_->Stop();
302 } 271 }
303 272
304 } // namespace content 273 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698