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

Side by Side Diff: media/base/pipeline_unittest.cc

Issue 11359100: Add RunCallback to invoke a callback parameter in unittests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rename Created 8 years, 1 month 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
« no previous file with comments | « media/base/mock_filters.h ('k') | media/filters/audio_renderer_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <vector> 5 #include <vector>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/threading/simple_thread.h" 10 #include "base/threading/simple_thread.h"
11 #include "media/base/clock.h" 11 #include "media/base/clock.h"
12 #include "media/base/gmock_callback_support.h"
12 #include "media/base/media_log.h" 13 #include "media/base/media_log.h"
13 #include "media/base/pipeline.h"
14 #include "media/base/mock_callback.h" 14 #include "media/base/mock_callback.h"
15 #include "media/base/mock_filters.h" 15 #include "media/base/mock_filters.h"
16 #include "media/base/pipeline.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 #include "ui/gfx/size.h" 18 #include "ui/gfx/size.h"
18 19
19 using ::testing::_; 20 using ::testing::_;
20 using ::testing::DeleteArg; 21 using ::testing::DeleteArg;
21 using ::testing::DoAll; 22 using ::testing::DoAll;
22 // TODO(scherkus): Remove InSequence after refactoring Pipeline. 23 // TODO(scherkus): Remove InSequence after refactoring Pipeline.
23 using ::testing::InSequence; 24 using ::testing::InSequence;
24 using ::testing::Invoke; 25 using ::testing::Invoke;
25 using ::testing::InvokeWithoutArgs; 26 using ::testing::InvokeWithoutArgs;
(...skipping 17 matching lines...) Expand all
43 } 44 }
44 45
45 ACTION_P2(Stop, pipeline, stop_cb) { 46 ACTION_P2(Stop, pipeline, stop_cb) {
46 pipeline->Stop(stop_cb); 47 pipeline->Stop(stop_cb);
47 } 48 }
48 49
49 ACTION_P2(SetError, pipeline, status) { 50 ACTION_P2(SetError, pipeline, status) {
50 pipeline->SetErrorForTesting(status); 51 pipeline->SetErrorForTesting(status);
51 } 52 }
52 53
53 ACTION(RunPipelineStatusCB) {
54 arg1.Run(PIPELINE_OK);
55 }
56
57 ACTION(RunPipelineStatusCB2) {
58 arg2.Run(PIPELINE_OK);
59 }
60
61 ACTION_P(RunPipelineStatusCBWithStatus, status) {
62 arg1.Run(status);
63 }
64
65 ACTION_P(RunPipelineStatusCB2WithStatus, status) {
66 arg2.Run(status);
67 }
68
69 // Used for setting expectations on pipeline callbacks. Using a StrictMock 54 // Used for setting expectations on pipeline callbacks. Using a StrictMock
70 // also lets us test for missing callbacks. 55 // also lets us test for missing callbacks.
71 class CallbackHelper { 56 class CallbackHelper {
72 public: 57 public:
73 CallbackHelper() {} 58 CallbackHelper() {}
74 virtual ~CallbackHelper() {} 59 virtual ~CallbackHelper() {}
75 60
76 MOCK_METHOD1(OnStart, void(PipelineStatus)); 61 MOCK_METHOD1(OnStart, void(PipelineStatus));
77 MOCK_METHOD1(OnSeek, void(PipelineStatus)); 62 MOCK_METHOD1(OnSeek, void(PipelineStatus));
78 MOCK_METHOD0(OnStop, void()); 63 MOCK_METHOD0(OnStop, void());
(...skipping 25 matching lines...) Expand all
104 .WillRepeatedly(Return(null_pointer)); 89 .WillRepeatedly(Return(null_pointer));
105 90
106 EXPECT_CALL(*mocks_->demuxer(), GetStartTime()) 91 EXPECT_CALL(*mocks_->demuxer(), GetStartTime())
107 .WillRepeatedly(Return(base::TimeDelta())); 92 .WillRepeatedly(Return(base::TimeDelta()));
108 } 93 }
109 94
110 virtual ~PipelineTest() { 95 virtual ~PipelineTest() {
111 // Shutdown sequence. 96 // Shutdown sequence.
112 if (pipeline_->IsRunning()) { 97 if (pipeline_->IsRunning()) {
113 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 98 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
114 .WillOnce(RunClosure()); 99 .WillOnce(RunClosure<0>());
115 100
116 if (audio_stream_) 101 if (audio_stream_)
117 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure()); 102 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
103 .WillOnce(RunClosure<0>());
118 104
119 if (video_stream_) 105 if (video_stream_)
120 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)).WillOnce(RunClosure()); 106 EXPECT_CALL(*mocks_->video_renderer(), Stop(_))
107 .WillOnce(RunClosure<0>());
121 } 108 }
122 109
123 // Expect a stop callback if we were started. 110 // Expect a stop callback if we were started.
124 EXPECT_CALL(callbacks_, OnStop()); 111 EXPECT_CALL(callbacks_, OnStop());
125 pipeline_->Stop(base::Bind(&CallbackHelper::OnStop, 112 pipeline_->Stop(base::Bind(&CallbackHelper::OnStop,
126 base::Unretained(&callbacks_))); 113 base::Unretained(&callbacks_)));
127 message_loop_.RunAllPending(); 114 message_loop_.RunAllPending();
128 115
129 pipeline_ = NULL; 116 pipeline_ = NULL;
130 mocks_.reset(); 117 mocks_.reset();
131 } 118 }
132 119
133 protected: 120 protected:
134 // Sets up expectations to allow the demuxer to initialize. 121 // Sets up expectations to allow the demuxer to initialize.
135 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector; 122 typedef std::vector<MockDemuxerStream*> MockDemuxerStreamVector;
136 void InitializeDemuxer(MockDemuxerStreamVector* streams, 123 void InitializeDemuxer(MockDemuxerStreamVector* streams,
137 const base::TimeDelta& duration) { 124 const base::TimeDelta& duration) {
138 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) 125 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
139 .WillOnce(DoAll(SetDemuxerProperties(duration), 126 .WillOnce(DoAll(SetDemuxerProperties(duration),
140 RunPipelineStatusCB())); 127 RunCallback<1>(PIPELINE_OK)));
141 128
142 // Configure the demuxer to return the streams. 129 // Configure the demuxer to return the streams.
143 for (size_t i = 0; i < streams->size(); ++i) { 130 for (size_t i = 0; i < streams->size(); ++i) {
144 scoped_refptr<DemuxerStream> stream((*streams)[i]); 131 scoped_refptr<DemuxerStream> stream((*streams)[i]);
145 EXPECT_CALL(*mocks_->demuxer(), GetStream(stream->type())) 132 EXPECT_CALL(*mocks_->demuxer(), GetStream(stream->type()))
146 .WillRepeatedly(Return(stream)); 133 .WillRepeatedly(Return(stream));
147 } 134 }
148 } 135 }
149 136
150 void InitializeDemuxer(MockDemuxerStreamVector* streams) { 137 void InitializeDemuxer(MockDemuxerStreamVector* streams) {
151 // Initialize with a default non-zero duration. 138 // Initialize with a default non-zero duration.
152 InitializeDemuxer(streams, base::TimeDelta::FromSeconds(10)); 139 InitializeDemuxer(streams, base::TimeDelta::FromSeconds(10));
153 } 140 }
154 141
155 StrictMock<MockDemuxerStream>* CreateStream(DemuxerStream::Type type) { 142 StrictMock<MockDemuxerStream>* CreateStream(DemuxerStream::Type type) {
156 StrictMock<MockDemuxerStream>* stream = 143 StrictMock<MockDemuxerStream>* stream =
157 new StrictMock<MockDemuxerStream>(); 144 new StrictMock<MockDemuxerStream>();
158 EXPECT_CALL(*stream, type()) 145 EXPECT_CALL(*stream, type())
159 .WillRepeatedly(Return(type)); 146 .WillRepeatedly(Return(type));
160 return stream; 147 return stream;
161 } 148 }
162 149
163 // Sets up expectations to allow the video renderer to initialize. 150 // Sets up expectations to allow the video renderer to initialize.
164 void InitializeVideoRenderer(const scoped_refptr<DemuxerStream>& stream) { 151 void InitializeVideoRenderer(const scoped_refptr<DemuxerStream>& stream) {
165 EXPECT_CALL(*mocks_->video_renderer(), 152 EXPECT_CALL(*mocks_->video_renderer(),
166 Initialize(stream, _, _, _, _, _, _, _, _, _)) 153 Initialize(stream, _, _, _, _, _, _, _, _, _))
167 .WillOnce(RunPipelineStatusCB2()); 154 .WillOnce(RunCallback<2>(PIPELINE_OK));
168 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f)); 155 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f));
169 156
170 // Startup sequence. 157 // Startup sequence.
171 EXPECT_CALL(*mocks_->video_renderer(), 158 EXPECT_CALL(*mocks_->video_renderer(),
172 Preroll(mocks_->demuxer()->GetStartTime(), _)) 159 Preroll(mocks_->demuxer()->GetStartTime(), _))
173 .WillOnce(RunPipelineStatusCB()); 160 .WillOnce(RunCallback<1>(PIPELINE_OK));
174 EXPECT_CALL(*mocks_->video_renderer(), Play(_)) 161 EXPECT_CALL(*mocks_->video_renderer(), Play(_))
175 .WillOnce(RunClosure()); 162 .WillOnce(RunClosure<0>());
176 } 163 }
177 164
178 // Sets up expectations to allow the audio renderer to initialize. 165 // Sets up expectations to allow the audio renderer to initialize.
179 void InitializeAudioRenderer(const scoped_refptr<DemuxerStream>& stream, 166 void InitializeAudioRenderer(const scoped_refptr<DemuxerStream>& stream,
180 bool disable_after_init_cb) { 167 bool disable_after_init_cb) {
181 if (disable_after_init_cb) { 168 if (disable_after_init_cb) {
182 EXPECT_CALL(*mocks_->audio_renderer(), 169 EXPECT_CALL(*mocks_->audio_renderer(),
183 Initialize(stream, _, _, _, _, _, _, _, _)) 170 Initialize(stream, _, _, _, _, _, _, _, _))
184 .WillOnce(DoAll(RunPipelineStatusCB2(), 171 .WillOnce(DoAll(RunCallback<2>(PIPELINE_OK),
185 WithArg<7>(RunClosure()))); // |disabled_cb|. 172 WithArg<7>(RunClosure<0>()))); // |disabled_cb|.
186 } else { 173 } else {
187 EXPECT_CALL(*mocks_->audio_renderer(), 174 EXPECT_CALL(*mocks_->audio_renderer(),
188 Initialize(stream, _, _, _, _, _, _, _, _)) 175 Initialize(stream, _, _, _, _, _, _, _, _))
189 .WillOnce(DoAll(SaveArg<5>(&audio_time_cb_), 176 .WillOnce(DoAll(SaveArg<5>(&audio_time_cb_),
190 RunPipelineStatusCB2())); 177 RunCallback<2>(PIPELINE_OK)));
191 } 178 }
192 } 179 }
193 180
194 // Sets up expectations on the callback and initializes the pipeline. Called 181 // Sets up expectations on the callback and initializes the pipeline. Called
195 // after tests have set expectations any filters they wish to use. 182 // after tests have set expectations any filters they wish to use.
196 void InitializePipeline(PipelineStatus start_status) { 183 void InitializePipeline(PipelineStatus start_status) {
197 EXPECT_CALL(callbacks_, OnStart(start_status)); 184 EXPECT_CALL(callbacks_, OnStart(start_status));
198 185
199 if (start_status == PIPELINE_OK) { 186 if (start_status == PIPELINE_OK) {
200 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kHaveMetadata)); 187 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kHaveMetadata));
201 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); 188 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
202 189
203 if (audio_stream_) { 190 if (audio_stream_) {
204 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f)); 191 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f));
205 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f)); 192 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f));
206 193
207 // Startup sequence. 194 // Startup sequence.
208 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(base::TimeDelta(), _)) 195 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(base::TimeDelta(), _))
209 .WillOnce(RunPipelineStatusCB()); 196 .WillOnce(RunCallback<1>(PIPELINE_OK));
210 EXPECT_CALL(*mocks_->audio_renderer(), Play(_)) 197 EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
211 .WillOnce(RunClosure()); 198 .WillOnce(RunClosure<0>());
212 } 199 }
213 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted)); 200 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted));
214 } 201 }
215 202
216 pipeline_->Start( 203 pipeline_->Start(
217 mocks_->Create().Pass(), 204 mocks_->Create().Pass(),
218 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)), 205 base::Bind(&CallbackHelper::OnEnded, base::Unretained(&callbacks_)),
219 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)), 206 base::Bind(&CallbackHelper::OnError, base::Unretained(&callbacks_)),
220 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)), 207 base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)),
221 base::Bind(&CallbackHelper::OnBufferingState, 208 base::Bind(&CallbackHelper::OnBufferingState,
(...skipping 15 matching lines...) Expand all
237 return audio_stream_; 224 return audio_stream_;
238 } 225 }
239 226
240 MockDemuxerStream* video_stream() { 227 MockDemuxerStream* video_stream() {
241 return video_stream_; 228 return video_stream_;
242 } 229 }
243 230
244 void ExpectSeek(const base::TimeDelta& seek_time) { 231 void ExpectSeek(const base::TimeDelta& seek_time) {
245 // Every filter should receive a call to Seek(). 232 // Every filter should receive a call to Seek().
246 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _)) 233 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _))
247 .WillOnce(RunPipelineStatusCB()); 234 .WillOnce(RunCallback<1>(PIPELINE_OK));
248 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(_)); 235 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(_));
249 236
250 if (audio_stream_) { 237 if (audio_stream_) {
251 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)) 238 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_))
252 .WillOnce(RunClosure()); 239 .WillOnce(RunClosure<0>());
253 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)) 240 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_))
254 .WillOnce(RunClosure()); 241 .WillOnce(RunClosure<0>());
255 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(seek_time, _)) 242 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(seek_time, _))
256 .WillOnce(RunPipelineStatusCB()); 243 .WillOnce(RunCallback<1>(PIPELINE_OK));
257 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(_)); 244 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(_));
258 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(_)); 245 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(_));
259 EXPECT_CALL(*mocks_->audio_renderer(), Play(_)) 246 EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
260 .WillOnce(RunClosure()); 247 .WillOnce(RunClosure<0>());
261 } 248 }
262 249
263 if (video_stream_) { 250 if (video_stream_) {
264 EXPECT_CALL(*mocks_->video_renderer(), Pause(_)) 251 EXPECT_CALL(*mocks_->video_renderer(), Pause(_))
265 .WillOnce(RunClosure()); 252 .WillOnce(RunClosure<0>());
266 EXPECT_CALL(*mocks_->video_renderer(), Flush(_)) 253 EXPECT_CALL(*mocks_->video_renderer(), Flush(_))
267 .WillOnce(RunClosure()); 254 .WillOnce(RunClosure<0>());
268 EXPECT_CALL(*mocks_->video_renderer(), Preroll(seek_time, _)) 255 EXPECT_CALL(*mocks_->video_renderer(), Preroll(seek_time, _))
269 .WillOnce(RunPipelineStatusCB()); 256 .WillOnce(RunCallback<1>(PIPELINE_OK));
270 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(_)); 257 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(_));
271 EXPECT_CALL(*mocks_->video_renderer(), Play(_)) 258 EXPECT_CALL(*mocks_->video_renderer(), Play(_))
272 .WillOnce(RunClosure()); 259 .WillOnce(RunClosure<0>());
273 } 260 }
274 261
275 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted)); 262 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted));
276 263
277 // We expect a successful seek callback. 264 // We expect a successful seek callback.
278 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_OK)); 265 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_OK));
279 } 266 }
280 267
281 void DoSeek(const base::TimeDelta& seek_time) { 268 void DoSeek(const base::TimeDelta& seek_time) {
282 pipeline_->Seek(seek_time, 269 pipeline_->Seek(seek_time,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 345
359 // Because our callback will get executed when the test tears down, we'll 346 // Because our callback will get executed when the test tears down, we'll
360 // verify that nothing has been called, then set our expectation for the call 347 // verify that nothing has been called, then set our expectation for the call
361 // made during tear down. 348 // made during tear down.
362 Mock::VerifyAndClear(&callbacks_); 349 Mock::VerifyAndClear(&callbacks_);
363 EXPECT_CALL(callbacks_, OnStart(PIPELINE_OK)); 350 EXPECT_CALL(callbacks_, OnStart(PIPELINE_OK));
364 } 351 }
365 352
366 TEST_F(PipelineTest, URLNotFound) { 353 TEST_F(PipelineTest, URLNotFound) {
367 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) 354 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
368 .WillOnce(RunPipelineStatusCBWithStatus(PIPELINE_ERROR_URL_NOT_FOUND)); 355 .WillOnce(RunCallback<1>(PIPELINE_ERROR_URL_NOT_FOUND));
369 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 356 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
370 .WillOnce(RunClosure()); 357 .WillOnce(RunClosure<0>());
371 358
372 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND); 359 InitializePipeline(PIPELINE_ERROR_URL_NOT_FOUND);
373 } 360 }
374 361
375 TEST_F(PipelineTest, NoStreams) { 362 TEST_F(PipelineTest, NoStreams) {
376 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) 363 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
377 .WillOnce(RunPipelineStatusCB()); 364 .WillOnce(RunCallback<1>(PIPELINE_OK));
378 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 365 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
379 .WillOnce(RunClosure()); 366 .WillOnce(RunClosure<0>());
380 367
381 InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER); 368 InitializePipeline(PIPELINE_ERROR_COULD_NOT_RENDER);
382 } 369 }
383 370
384 TEST_F(PipelineTest, AudioStream) { 371 TEST_F(PipelineTest, AudioStream) {
385 CreateAudioStream(); 372 CreateAudioStream();
386 MockDemuxerStreamVector streams; 373 MockDemuxerStreamVector streams;
387 streams.push_back(audio_stream()); 374 streams.push_back(audio_stream());
388 375
389 InitializeDemuxer(&streams); 376 InitializeDemuxer(&streams);
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 float playback_rate = 1.0f; 650 float playback_rate = 1.0f;
664 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(playback_rate)); 651 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(playback_rate));
665 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(playback_rate)); 652 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(playback_rate));
666 pipeline_->SetPlaybackRate(playback_rate); 653 pipeline_->SetPlaybackRate(playback_rate);
667 message_loop_.RunAllPending(); 654 message_loop_.RunAllPending();
668 655
669 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); 656 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5);
670 657
671 // Preroll() isn't called as the demuxer errors out first. 658 // Preroll() isn't called as the demuxer errors out first.
672 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)) 659 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_))
673 .WillOnce(RunClosure()); 660 .WillOnce(RunClosure<0>());
674 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)) 661 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_))
675 .WillOnce(RunClosure()); 662 .WillOnce(RunClosure<0>());
676 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) 663 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
677 .WillOnce(RunClosure()); 664 .WillOnce(RunClosure<0>());
678 665
679 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _)) 666 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _))
680 .WillOnce(RunPipelineStatusCBWithStatus(PIPELINE_ERROR_READ)); 667 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ));
681 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 668 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
682 .WillOnce(RunClosure()); 669 .WillOnce(RunClosure<0>());
683 670
684 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, 671 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek,
685 base::Unretained(&callbacks_))); 672 base::Unretained(&callbacks_)));
686 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); 673 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ));
687 message_loop_.RunAllPending(); 674 message_loop_.RunAllPending();
688 } 675 }
689 676
690 // Invoked function OnError. This asserts that the pipeline does not enqueue 677 // Invoked function OnError. This asserts that the pipeline does not enqueue
691 // non-teardown related tasks while tearing down. 678 // non-teardown related tasks while tearing down.
692 static void TestNoCallsAfterError( 679 static void TestNoCallsAfterError(
(...skipping 25 matching lines...) Expand all
718 // Trigger additional requests on the pipeline during tear down from error. 705 // Trigger additional requests on the pipeline during tear down from error.
719 base::Callback<void(PipelineStatus)> cb = base::Bind( 706 base::Callback<void(PipelineStatus)> cb = base::Bind(
720 &TestNoCallsAfterError, pipeline_, &message_loop_); 707 &TestNoCallsAfterError, pipeline_, &message_loop_);
721 ON_CALL(callbacks_, OnError(_)) 708 ON_CALL(callbacks_, OnError(_))
722 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run)); 709 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run));
723 710
724 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); 711 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5);
725 712
726 // Seek() isn't called as the demuxer errors out first. 713 // Seek() isn't called as the demuxer errors out first.
727 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)) 714 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_))
728 .WillOnce(RunClosure()); 715 .WillOnce(RunClosure<0>());
729 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)) 716 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_))
730 .WillOnce(RunClosure()); 717 .WillOnce(RunClosure<0>());
731 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)) 718 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_))
732 .WillOnce(RunClosure()); 719 .WillOnce(RunClosure<0>());
733 720
734 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _)) 721 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _))
735 .WillOnce(RunPipelineStatusCBWithStatus(PIPELINE_ERROR_READ)); 722 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ));
736 EXPECT_CALL(*mocks_->demuxer(), Stop(_)) 723 EXPECT_CALL(*mocks_->demuxer(), Stop(_))
737 .WillOnce(RunClosure()); 724 .WillOnce(RunClosure<0>());
738 725
739 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, 726 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek,
740 base::Unretained(&callbacks_))); 727 base::Unretained(&callbacks_)));
741 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); 728 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ));
742 message_loop_.RunAllPending(); 729 message_loop_.RunAllPending();
743 } 730 }
744 731
745 TEST_F(PipelineTest, StartTimeIsZero) { 732 TEST_F(PipelineTest, StartTimeIsZero) {
746 CreateVideoStream(); 733 CreateVideoStream();
747 MockDemuxerStreamVector streams; 734 MockDemuxerStreamVector streams;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 base::TimeDelta::FromMilliseconds(500)); 794 base::TimeDelta::FromMilliseconds(500));
808 795
809 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); 796 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5);
810 797
811 // Arrange to trigger a time update while the demuxer is in the middle of 798 // Arrange to trigger a time update while the demuxer is in the middle of
812 // seeking. This update should be ignored by the pipeline and the clock should 799 // seeking. This update should be ignored by the pipeline and the clock should
813 // not get updated. 800 // not get updated.
814 base::Closure closure = base::Bind(&RunTimeCB, audio_time_cb_, 300, 700); 801 base::Closure closure = base::Bind(&RunTimeCB, audio_time_cb_, 300, 700);
815 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _)) 802 EXPECT_CALL(*mocks_->demuxer(), Seek(seek_time, _))
816 .WillOnce(DoAll(InvokeWithoutArgs(&closure, &base::Closure::Run), 803 .WillOnce(DoAll(InvokeWithoutArgs(&closure, &base::Closure::Run),
817 RunPipelineStatusCB())); 804 RunCallback<1>(PIPELINE_OK)));
818 805
819 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)) 806 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_))
820 .WillOnce(RunClosure()); 807 .WillOnce(RunClosure<0>());
821 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)) 808 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_))
822 .WillOnce(RunClosure()); 809 .WillOnce(RunClosure<0>());
823 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(seek_time, _)) 810 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(seek_time, _))
824 .WillOnce(RunPipelineStatusCB()); 811 .WillOnce(RunCallback<1>(PIPELINE_OK));
825 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(_)); 812 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(_));
826 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(_)); 813 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(_));
827 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(_)); 814 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(_));
828 EXPECT_CALL(*mocks_->audio_renderer(), Play(_)) 815 EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
829 .WillOnce(RunClosure()); 816 .WillOnce(RunClosure<0>());
830 817
831 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted)); 818 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted));
832 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_OK)); 819 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_OK));
833 DoSeek(seek_time); 820 DoSeek(seek_time);
834 821
835 EXPECT_EQ(pipeline_->GetMediaTime(), seek_time); 822 EXPECT_EQ(pipeline_->GetMediaTime(), seek_time);
836 823
837 // Now that the seek is complete, verify that time updates advance the current 824 // Now that the seek is complete, verify that time updates advance the current
838 // time. 825 // time.
839 base::TimeDelta new_time = seek_time + base::TimeDelta::FromMilliseconds(100); 826 base::TimeDelta new_time = seek_time + base::TimeDelta::FromMilliseconds(100);
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 949
963 PipelineStatus SetInitializeExpectations(TeardownState state, 950 PipelineStatus SetInitializeExpectations(TeardownState state,
964 StopOrError stop_or_error) { 951 StopOrError stop_or_error) {
965 PipelineStatus status = PIPELINE_OK; 952 PipelineStatus status = PIPELINE_OK;
966 base::Closure stop_cb = base::Bind( 953 base::Closure stop_cb = base::Bind(
967 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); 954 &CallbackHelper::OnStop, base::Unretained(&callbacks_));
968 955
969 if (state == kInitDemuxer) { 956 if (state == kInitDemuxer) {
970 if (stop_or_error == kStop) { 957 if (stop_or_error == kStop) {
971 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) 958 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
972 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB())); 959 .WillOnce(DoAll(Stop(pipeline_, stop_cb),
960 RunCallback<1>(PIPELINE_OK)));
973 EXPECT_CALL(callbacks_, OnStop()); 961 EXPECT_CALL(callbacks_, OnStop());
974 } else { 962 } else {
975 status = DEMUXER_ERROR_COULD_NOT_OPEN; 963 status = DEMUXER_ERROR_COULD_NOT_OPEN;
976 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _)) 964 EXPECT_CALL(*mocks_->demuxer(), Initialize(_, _))
977 .WillOnce(RunPipelineStatusCBWithStatus(status)); 965 .WillOnce(RunCallback<1>(status));
978 } 966 }
979 967
980 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure()); 968 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure<0>());
981 return status; 969 return status;
982 } 970 }
983 971
984 CreateAudioStream(); 972 CreateAudioStream();
985 CreateVideoStream(); 973 CreateVideoStream();
986 MockDemuxerStreamVector streams; 974 MockDemuxerStreamVector streams;
987 streams.push_back(audio_stream()); 975 streams.push_back(audio_stream());
988 streams.push_back(video_stream()); 976 streams.push_back(video_stream());
989 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000)); 977 InitializeDemuxer(&streams, base::TimeDelta::FromSeconds(3000));
990 978
991 if (state == kInitAudioRenderer) { 979 if (state == kInitAudioRenderer) {
992 if (stop_or_error == kStop) { 980 if (stop_or_error == kStop) {
993 EXPECT_CALL(*mocks_->audio_renderer(), 981 EXPECT_CALL(*mocks_->audio_renderer(),
994 Initialize(_, _, _, _, _, _, _, _, _)) 982 Initialize(_, _, _, _, _, _, _, _, _))
995 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB2())); 983 .WillOnce(DoAll(Stop(pipeline_, stop_cb),
984 RunCallback<2>(PIPELINE_OK)));
996 EXPECT_CALL(callbacks_, OnStop()); 985 EXPECT_CALL(callbacks_, OnStop());
997 } else { 986 } else {
998 status = PIPELINE_ERROR_INITIALIZATION_FAILED; 987 status = PIPELINE_ERROR_INITIALIZATION_FAILED;
999 EXPECT_CALL(*mocks_->audio_renderer(), 988 EXPECT_CALL(*mocks_->audio_renderer(),
1000 Initialize(_, _, _, _, _, _, _, _, _)) 989 Initialize(_, _, _, _, _, _, _, _, _))
1001 .WillOnce(RunPipelineStatusCB2WithStatus(status)); 990 .WillOnce(RunCallback<2>(status));
1002 } 991 }
1003 992
1004 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure()); 993 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure<0>());
1005 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure()); 994 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure<0>());
1006 return status; 995 return status;
1007 } 996 }
1008 997
1009 EXPECT_CALL(*mocks_->audio_renderer(), 998 EXPECT_CALL(*mocks_->audio_renderer(),
1010 Initialize(_, _, _, _, _, _, _, _, _)) 999 Initialize(_, _, _, _, _, _, _, _, _))
1011 .WillOnce(RunPipelineStatusCB2()); 1000 .WillOnce(RunCallback<2>(PIPELINE_OK));
1012 1001
1013 if (state == kInitVideoRenderer) { 1002 if (state == kInitVideoRenderer) {
1014 if (stop_or_error == kStop) { 1003 if (stop_or_error == kStop) {
1015 EXPECT_CALL(*mocks_->video_renderer(), 1004 EXPECT_CALL(*mocks_->video_renderer(),
1016 Initialize(_, _, _, _, _, _, _, _, _, _)) 1005 Initialize(_, _, _, _, _, _, _, _, _, _))
1017 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB2())); 1006 .WillOnce(DoAll(Stop(pipeline_, stop_cb),
1007 RunCallback<2>(PIPELINE_OK)));
1018 EXPECT_CALL(callbacks_, OnStop()); 1008 EXPECT_CALL(callbacks_, OnStop());
1019 } else { 1009 } else {
1020 status = PIPELINE_ERROR_INITIALIZATION_FAILED; 1010 status = PIPELINE_ERROR_INITIALIZATION_FAILED;
1021 EXPECT_CALL(*mocks_->video_renderer(), 1011 EXPECT_CALL(*mocks_->video_renderer(),
1022 Initialize(_, _, _, _, _, _, _, _, _, _)) 1012 Initialize(_, _, _, _, _, _, _, _, _, _))
1023 .WillOnce(RunPipelineStatusCB2WithStatus(status)); 1013 .WillOnce(RunCallback<2>(status));
1024 } 1014 }
1025 1015
1026 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure()); 1016 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure<0>());
1027 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure()); 1017 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure<0>());
1028 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)).WillOnce(RunClosure()); 1018 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)).WillOnce(RunClosure<0>());
1029 return status; 1019 return status;
1030 } 1020 }
1031 1021
1032 EXPECT_CALL(*mocks_->video_renderer(), 1022 EXPECT_CALL(*mocks_->video_renderer(),
1033 Initialize(_, _, _, _, _, _, _, _, _, _)) 1023 Initialize(_, _, _, _, _, _, _, _, _, _))
1034 .WillOnce(RunPipelineStatusCB2()); 1024 .WillOnce(RunCallback<2>(PIPELINE_OK));
1035 1025
1036 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kHaveMetadata)); 1026 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kHaveMetadata));
1037 1027
1038 // If we get here it's a successful initialization. 1028 // If we get here it's a successful initialization.
1039 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(base::TimeDelta(), _)) 1029 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(base::TimeDelta(), _))
1040 .WillOnce(RunPipelineStatusCB()); 1030 .WillOnce(RunCallback<1>(PIPELINE_OK));
1041 EXPECT_CALL(*mocks_->video_renderer(), Preroll(base::TimeDelta(), _)) 1031 EXPECT_CALL(*mocks_->video_renderer(), Preroll(base::TimeDelta(), _))
1042 .WillOnce(RunPipelineStatusCB()); 1032 .WillOnce(RunCallback<1>(PIPELINE_OK));
1043 1033
1044 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); 1034 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
1045 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f)); 1035 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f));
1046 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f)); 1036 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f));
1047 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f)); 1037 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f));
1048 1038
1049 EXPECT_CALL(*mocks_->audio_renderer(), Play(_)) 1039 EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
1050 .WillOnce(RunClosure()); 1040 .WillOnce(RunClosure<0>());
1051 EXPECT_CALL(*mocks_->video_renderer(), Play(_)) 1041 EXPECT_CALL(*mocks_->video_renderer(), Play(_))
1052 .WillOnce(RunClosure()); 1042 .WillOnce(RunClosure<0>());
1053 1043
1054 if (status == PIPELINE_OK) 1044 if (status == PIPELINE_OK)
1055 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted)); 1045 EXPECT_CALL(callbacks_, OnBufferingState(Pipeline::kPrerollCompleted));
1056 1046
1057 return status; 1047 return status;
1058 } 1048 }
1059 1049
1060 void DoSeek(TeardownState state, StopOrError stop_or_error) { 1050 void DoSeek(TeardownState state, StopOrError stop_or_error) {
1061 InSequence s; 1051 InSequence s;
1062 PipelineStatus status = SetSeekExpectations(state, stop_or_error); 1052 PipelineStatus status = SetSeekExpectations(state, stop_or_error);
1063 1053
1064 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure()); 1054 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure<0>());
1065 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure()); 1055 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure<0>());
1066 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)).WillOnce(RunClosure()); 1056 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)).WillOnce(RunClosure<0>());
1067 EXPECT_CALL(callbacks_, OnSeek(status)); 1057 EXPECT_CALL(callbacks_, OnSeek(status));
1068 1058
1069 if (status == PIPELINE_OK) { 1059 if (status == PIPELINE_OK) {
1070 EXPECT_CALL(callbacks_, OnStop()); 1060 EXPECT_CALL(callbacks_, OnStop());
1071 } 1061 }
1072 1062
1073 pipeline_->Seek(base::TimeDelta::FromSeconds(10), base::Bind( 1063 pipeline_->Seek(base::TimeDelta::FromSeconds(10), base::Bind(
1074 &CallbackHelper::OnSeek, base::Unretained(&callbacks_))); 1064 &CallbackHelper::OnSeek, base::Unretained(&callbacks_)));
1075 message_loop_.RunAllPending(); 1065 message_loop_.RunAllPending();
1076 } 1066 }
1077 1067
1078 PipelineStatus SetSeekExpectations(TeardownState state, 1068 PipelineStatus SetSeekExpectations(TeardownState state,
1079 StopOrError stop_or_error) { 1069 StopOrError stop_or_error) {
1080 PipelineStatus status = PIPELINE_OK; 1070 PipelineStatus status = PIPELINE_OK;
1081 base::Closure stop_cb = base::Bind( 1071 base::Closure stop_cb = base::Bind(
1082 &CallbackHelper::OnStop, base::Unretained(&callbacks_)); 1072 &CallbackHelper::OnStop, base::Unretained(&callbacks_));
1083 1073
1084 if (state == kPausing) { 1074 if (state == kPausing) {
1085 if (stop_or_error == kStop) { 1075 if (stop_or_error == kStop) {
1086 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)) 1076 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_))
1087 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunClosure())); 1077 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunClosure<0>()));
1088 } else { 1078 } else {
1089 status = PIPELINE_ERROR_READ; 1079 status = PIPELINE_ERROR_READ;
1090 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)) 1080 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_))
1091 .WillOnce(DoAll(SetError(pipeline_, status), RunClosure())); 1081 .WillOnce(DoAll(SetError(pipeline_, status), RunClosure<0>()));
1092 } 1082 }
1093 1083
1094 return status; 1084 return status;
1095 } 1085 }
1096 1086
1097 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)).WillOnce(RunClosure()); 1087 EXPECT_CALL(*mocks_->audio_renderer(), Pause(_)).WillOnce(RunClosure<0>());
1098 EXPECT_CALL(*mocks_->video_renderer(), Pause(_)).WillOnce(RunClosure()); 1088 EXPECT_CALL(*mocks_->video_renderer(), Pause(_)).WillOnce(RunClosure<0>());
1099 1089
1100 if (state == kFlushing) { 1090 if (state == kFlushing) {
1101 if (stop_or_error == kStop) { 1091 if (stop_or_error == kStop) {
1102 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)) 1092 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_))
1103 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunClosure())); 1093 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunClosure<0>()));
1104 } else { 1094 } else {
1105 status = PIPELINE_ERROR_READ; 1095 status = PIPELINE_ERROR_READ;
1106 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)) 1096 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_))
1107 .WillOnce(DoAll(SetError(pipeline_, status), RunClosure())); 1097 .WillOnce(DoAll(SetError(pipeline_, status), RunClosure<0>()));
1108 } 1098 }
1109 1099
1110 return status; 1100 return status;
1111 } 1101 }
1112 1102
1113 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)).WillOnce(RunClosure()); 1103 EXPECT_CALL(*mocks_->audio_renderer(), Flush(_)).WillOnce(RunClosure<0>());
1114 EXPECT_CALL(*mocks_->video_renderer(), Flush(_)).WillOnce(RunClosure()); 1104 EXPECT_CALL(*mocks_->video_renderer(), Flush(_)).WillOnce(RunClosure<0>());
1115 1105
1116 if (state == kSeeking) { 1106 if (state == kSeeking) {
1117 if (stop_or_error == kStop) { 1107 if (stop_or_error == kStop) {
1118 EXPECT_CALL(*mocks_->demuxer(), Seek(_, _)) 1108 EXPECT_CALL(*mocks_->demuxer(), Seek(_, _))
1119 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB())); 1109 .WillOnce(DoAll(Stop(pipeline_, stop_cb),
1110 RunCallback<1>(PIPELINE_OK)));
1120 } else { 1111 } else {
1121 status = PIPELINE_ERROR_READ; 1112 status = PIPELINE_ERROR_READ;
1122 EXPECT_CALL(*mocks_->demuxer(), Seek(_, _)) 1113 EXPECT_CALL(*mocks_->demuxer(), Seek(_, _))
1123 .WillOnce(RunPipelineStatusCBWithStatus(status)); 1114 .WillOnce(RunCallback<1>(status));
1124 } 1115 }
1125 1116
1126 return status; 1117 return status;
1127 } 1118 }
1128 1119
1129 EXPECT_CALL(*mocks_->demuxer(), Seek(_, _)) 1120 EXPECT_CALL(*mocks_->demuxer(), Seek(_, _))
1130 .WillOnce(RunPipelineStatusCB()); 1121 .WillOnce(RunCallback<1>(PIPELINE_OK));
1131 1122
1132 if (state == kPrerolling) { 1123 if (state == kPrerolling) {
1133 if (stop_or_error == kStop) { 1124 if (stop_or_error == kStop) {
1134 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(_, _)) 1125 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(_, _))
1135 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunPipelineStatusCB())); 1126 .WillOnce(DoAll(Stop(pipeline_, stop_cb),
1127 RunCallback<1>(PIPELINE_OK)));
1136 } else { 1128 } else {
1137 status = PIPELINE_ERROR_READ; 1129 status = PIPELINE_ERROR_READ;
1138 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(_, _)) 1130 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(_, _))
1139 .WillOnce(RunPipelineStatusCBWithStatus(status)); 1131 .WillOnce(RunCallback<1>(status));
1140 } 1132 }
1141 1133
1142 return status; 1134 return status;
1143 } 1135 }
1144 1136
1145 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(_, _)) 1137 EXPECT_CALL(*mocks_->audio_renderer(), Preroll(_, _))
1146 .WillOnce(RunPipelineStatusCB()); 1138 .WillOnce(RunCallback<1>(PIPELINE_OK));
1147 EXPECT_CALL(*mocks_->video_renderer(), Preroll(_, _)) 1139 EXPECT_CALL(*mocks_->video_renderer(), Preroll(_, _))
1148 .WillOnce(RunPipelineStatusCB()); 1140 .WillOnce(RunCallback<1>(PIPELINE_OK));
1149 1141
1150 // Playback rate and volume are updated prior to starting. 1142 // Playback rate and volume are updated prior to starting.
1151 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f)); 1143 EXPECT_CALL(*mocks_->demuxer(), SetPlaybackRate(0.0f));
1152 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f)); 1144 EXPECT_CALL(*mocks_->audio_renderer(), SetPlaybackRate(0.0f));
1153 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f)); 1145 EXPECT_CALL(*mocks_->video_renderer(), SetPlaybackRate(0.0f));
1154 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f)); 1146 EXPECT_CALL(*mocks_->audio_renderer(), SetVolume(1.0f));
1155 1147
1156 if (state == kStarting) { 1148 if (state == kStarting) {
1157 if (stop_or_error == kStop) { 1149 if (stop_or_error == kStop) {
1158 EXPECT_CALL(*mocks_->audio_renderer(), Play(_)) 1150 EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
1159 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunClosure())); 1151 .WillOnce(DoAll(Stop(pipeline_, stop_cb), RunClosure<0>()));
1160 } else { 1152 } else {
1161 status = PIPELINE_ERROR_READ; 1153 status = PIPELINE_ERROR_READ;
1162 EXPECT_CALL(*mocks_->audio_renderer(), Play(_)) 1154 EXPECT_CALL(*mocks_->audio_renderer(), Play(_))
1163 .WillOnce(DoAll(SetError(pipeline_, status), RunClosure())); 1155 .WillOnce(DoAll(SetError(pipeline_, status), RunClosure<0>()));
1164 } 1156 }
1165 return status; 1157 return status;
1166 } 1158 }
1167 1159
1168 NOTREACHED() << "State not supported: " << state; 1160 NOTREACHED() << "State not supported: " << state;
1169 return status; 1161 return status;
1170 } 1162 }
1171 1163
1172 void DoStopOrError(StopOrError stop_or_error) { 1164 void DoStopOrError(StopOrError stop_or_error) {
1173 InSequence s; 1165 InSequence s;
1174 1166
1175 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure()); 1167 EXPECT_CALL(*mocks_->demuxer(), Stop(_)).WillOnce(RunClosure<0>());
1176 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure()); 1168 EXPECT_CALL(*mocks_->audio_renderer(), Stop(_)).WillOnce(RunClosure<0>());
1177 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)).WillOnce(RunClosure()); 1169 EXPECT_CALL(*mocks_->video_renderer(), Stop(_)).WillOnce(RunClosure<0>());
1178 1170
1179 if (stop_or_error == kStop) { 1171 if (stop_or_error == kStop) {
1180 EXPECT_CALL(callbacks_, OnStop()); 1172 EXPECT_CALL(callbacks_, OnStop());
1181 pipeline_->Stop(base::Bind( 1173 pipeline_->Stop(base::Bind(
1182 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); 1174 &CallbackHelper::OnStop, base::Unretained(&callbacks_)));
1183 } else { 1175 } else {
1184 EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_READ)); 1176 EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_READ));
1185 pipeline_->SetErrorForTesting(PIPELINE_ERROR_READ); 1177 pipeline_->SetErrorForTesting(PIPELINE_ERROR_READ);
1186 } 1178 }
1187 1179
(...skipping 22 matching lines...) Expand all
1210 INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer); 1202 INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer);
1211 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); 1203 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer);
1212 INSTANTIATE_TEARDOWN_TEST(Error, Pausing); 1204 INSTANTIATE_TEARDOWN_TEST(Error, Pausing);
1213 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); 1205 INSTANTIATE_TEARDOWN_TEST(Error, Flushing);
1214 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); 1206 INSTANTIATE_TEARDOWN_TEST(Error, Seeking);
1215 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling); 1207 INSTANTIATE_TEARDOWN_TEST(Error, Prerolling);
1216 INSTANTIATE_TEARDOWN_TEST(Error, Starting); 1208 INSTANTIATE_TEARDOWN_TEST(Error, Starting);
1217 INSTANTIATE_TEARDOWN_TEST(Error, Playing); 1209 INSTANTIATE_TEARDOWN_TEST(Error, Playing);
1218 1210
1219 } // namespace media 1211 } // namespace media
OLDNEW
« no previous file with comments | « media/base/mock_filters.h ('k') | media/filters/audio_renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698