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

Side by Side Diff: media/blink/webmediaplayer_impl_unittest.cc

Issue 2445533002: Don't suspend the pipeline before HaveFutureData while decoding progressing (Closed)
Patch Set: fix compiler error from rebase Created 4 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
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "media/blink/webmediaplayer_impl.h" 5 #include "media/blink/webmediaplayer_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/callback_helpers.h" 12 #include "base/callback_helpers.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/memory/weak_ptr.h" 16 #include "base/memory/weak_ptr.h"
17 #include "base/message_loop/message_loop.h" 17 #include "base/message_loop/message_loop.h"
18 #include "base/run_loop.h" 18 #include "base/run_loop.h"
19 #include "base/test/simple_test_tick_clock.h"
19 #include "base/threading/thread.h" 20 #include "base/threading/thread.h"
20 #include "base/threading/thread_task_runner_handle.h" 21 #include "base/threading/thread_task_runner_handle.h"
21 #include "media/base/media_log.h" 22 #include "media/base/media_log.h"
22 #include "media/base/media_switches.h" 23 #include "media/base/media_switches.h"
23 #include "media/base/test_helpers.h" 24 #include "media/base/test_helpers.h"
24 #include "media/blink/webmediaplayer_delegate.h" 25 #include "media/blink/webmediaplayer_delegate.h"
25 #include "media/blink/webmediaplayer_params.h" 26 #include "media/blink/webmediaplayer_params.h"
26 #include "media/renderers/default_renderer_factory.h" 27 #include "media/renderers/default_renderer_factory.h"
27 #include "testing/gmock/include/gmock/gmock.h" 28 #include "testing/gmock/include/gmock/gmock.h"
28 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 blink::WebPageVisibilityStateVisible)), 121 blink::WebPageVisibilityStateVisible)),
121 web_local_frame_( 122 web_local_frame_(
122 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, 123 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document,
123 &web_frame_client_)), 124 &web_frame_client_)),
124 media_log_(new MediaLog()), 125 media_log_(new MediaLog()),
125 audio_parameters_(TestAudioParameters::Normal()) { 126 audio_parameters_(TestAudioParameters::Normal()) {
126 web_view_->setMainFrame(web_local_frame_); 127 web_view_->setMainFrame(web_local_frame_);
127 media_thread_.StartAndWaitForTesting(); 128 media_thread_.StartAndWaitForTesting();
128 } 129 }
129 130
130 void InitializeDefaultWebMediaPlayerImpl() { 131 void InitializeWebMediaPlayerImpl() {
131 InitializeWebMediaPlayerImpl(delegate_.AsWeakPtr());
132 }
133
134 void InitializeWebMediaPlayerImpl(
135 base::WeakPtr<MockWebMediaPlayerDelegate> delegate) {
136 wmpi_.reset(new WebMediaPlayerImpl( 132 wmpi_.reset(new WebMediaPlayerImpl(
137 web_local_frame_, &client_, nullptr, delegate, 133 web_local_frame_, &client_, nullptr, delegate_.AsWeakPtr(),
138 base::MakeUnique<DefaultRendererFactory>( 134 base::MakeUnique<DefaultRendererFactory>(
139 media_log_, nullptr, DefaultRendererFactory::GetGpuFactoriesCB()), 135 media_log_, nullptr, DefaultRendererFactory::GetGpuFactoriesCB()),
140 url_index_, 136 url_index_,
141 WebMediaPlayerParams( 137 WebMediaPlayerParams(
142 WebMediaPlayerParams::DeferLoadCB(), 138 WebMediaPlayerParams::DeferLoadCB(),
143 scoped_refptr<SwitchableAudioRendererSink>(), media_log_, 139 scoped_refptr<SwitchableAudioRendererSink>(), media_log_,
144 media_thread_.task_runner(), message_loop_.task_runner(), 140 media_thread_.task_runner(), message_loop_.task_runner(),
145 message_loop_.task_runner(), WebMediaPlayerParams::Context3DCB(), 141 message_loop_.task_runner(), WebMediaPlayerParams::Context3DCB(),
146 base::Bind(&OnAdjustAllocatedMemory), nullptr, nullptr, nullptr))); 142 base::Bind(&OnAdjustAllocatedMemory), nullptr, nullptr, nullptr)));
147 } 143 }
(...skipping 11 matching lines...) Expand all
159 } 155 }
160 156
161 protected: 157 protected:
162 void SetReadyState(blink::WebMediaPlayer::ReadyState state) { 158 void SetReadyState(blink::WebMediaPlayer::ReadyState state) {
163 wmpi_->SetReadyState(state); 159 wmpi_->SetReadyState(state);
164 } 160 }
165 161
166 void SetPaused(bool is_paused) { wmpi_->paused_ = is_paused; } 162 void SetPaused(bool is_paused) { wmpi_->paused_ = is_paused; }
167 void SetSeeking(bool is_seeking) { wmpi_->seeking_ = is_seeking; } 163 void SetSeeking(bool is_seeking) { wmpi_->seeking_ = is_seeking; }
168 void SetEnded(bool is_ended) { wmpi_->ended_ = is_ended; } 164 void SetEnded(bool is_ended) { wmpi_->ended_ = is_ended; }
165 void SetTickClock(base::TickClock* clock) { wmpi_->tick_clock_.reset(clock); }
169 166
170 void SetFullscreen(bool is_fullscreen) { 167 void SetFullscreen(bool is_fullscreen) {
171 wmpi_->overlay_enabled_ = is_fullscreen; 168 wmpi_->overlay_enabled_ = is_fullscreen;
172 } 169 }
173 170
174 void SetMetadata(bool has_audio, bool has_video) { 171 void SetMetadata(bool has_audio, bool has_video) {
175 wmpi_->SetNetworkState(blink::WebMediaPlayer::NetworkStateLoaded); 172 wmpi_->SetNetworkState(blink::WebMediaPlayer::NetworkStateLoaded);
176 wmpi_->SetReadyState(blink::WebMediaPlayer::ReadyStateHaveMetadata); 173 wmpi_->SetReadyState(blink::WebMediaPlayer::ReadyStateHaveMetadata);
177 wmpi_->pipeline_metadata_.has_audio = has_audio; 174 wmpi_->pipeline_metadata_.has_audio = has_audio;
178 wmpi_->pipeline_metadata_.has_video = has_video; 175 wmpi_->pipeline_metadata_.has_video = has_video;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 testing::NiceMock<MockWebMediaPlayerDelegate> delegate_; 264 testing::NiceMock<MockWebMediaPlayerDelegate> delegate_;
268 265
269 // The WebMediaPlayerImpl instance under test. 266 // The WebMediaPlayerImpl instance under test.
270 std::unique_ptr<WebMediaPlayerImpl> wmpi_; 267 std::unique_ptr<WebMediaPlayerImpl> wmpi_;
271 268
272 private: 269 private:
273 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest); 270 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest);
274 }; 271 };
275 272
276 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) { 273 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {
277 InitializeDefaultWebMediaPlayerImpl(); 274 InitializeWebMediaPlayerImpl();
278 } 275 }
279 276
280 TEST_F(WebMediaPlayerImplTest, DidLoadingProgressClearsIdle) { 277 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledBeforeLoadingBegins) {
281 testing::StrictMock<MockWebMediaPlayerDelegate> strict_delegate; 278 InitializeWebMediaPlayerImpl();
282 EXPECT_CALL(strict_delegate, AddObserver(_)); 279 wmpi_->OnSuspendRequested(false);
283 EXPECT_CALL(strict_delegate, IsPlayingBackgroundVideo()).Times(AnyNumber()); 280 base::RunLoop().RunUntilIdle();
284 InitializeWebMediaPlayerImpl(strict_delegate.AsWeakPtr()); 281 EXPECT_TRUE(IsSuspended());
282 }
283
284 TEST_F(WebMediaPlayerImplTest,
285 IdleSuspendIsDisabledIfLoadingProgressedRecently) {
286 InitializeWebMediaPlayerImpl();
287 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
288 clock->Advance(base::TimeDelta::FromSeconds(1));
289 SetTickClock(clock);
290 AddBufferedRanges();
291 wmpi_->didLoadingProgress();
292 // Advance less than the loading timeout.
293 clock->Advance(base::TimeDelta::FromSeconds(1));
294 wmpi_->OnSuspendRequested(false);
295 base::RunLoop().RunUntilIdle();
296 EXPECT_FALSE(IsSuspended());
297 }
298
299 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledIfLoadingHasStalled) {
300 InitializeWebMediaPlayerImpl();
301 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
302 clock->Advance(base::TimeDelta::FromSeconds(1));
303 SetTickClock(clock);
304 AddBufferedRanges();
305 wmpi_->didLoadingProgress();
306 // Advance more than the loading timeout.
307 clock->Advance(base::TimeDelta::FromSeconds(4));
308 wmpi_->OnSuspendRequested(false);
309 base::RunLoop().RunUntilIdle();
310 EXPECT_TRUE(IsSuspended());
311 }
312
313 TEST_F(WebMediaPlayerImplTest, DidLoadingProgressTriggersResume) {
314 InitializeWebMediaPlayerImpl();
285 EXPECT_FALSE(IsSuspended()); 315 EXPECT_FALSE(IsSuspended());
286 wmpi_->OnSuspendRequested(false); 316 wmpi_->OnSuspendRequested(false);
287 base::RunLoop().RunUntilIdle(); 317 base::RunLoop().RunUntilIdle();
288 EXPECT_TRUE(IsSuspended()); 318 EXPECT_TRUE(IsSuspended());
289 AddBufferedRanges(); 319 AddBufferedRanges();
290 wmpi_->didLoadingProgress(); 320 wmpi_->didLoadingProgress();
291 base::RunLoop().RunUntilIdle(); 321 base::RunLoop().RunUntilIdle();
292 EXPECT_FALSE(IsSuspended()); 322 EXPECT_FALSE(IsSuspended());
293 } 323 }
294 324
295 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) { 325 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) {
296 InitializeDefaultWebMediaPlayerImpl(); 326 InitializeWebMediaPlayerImpl();
297 WebMediaPlayerImpl::PlayState state; 327 WebMediaPlayerImpl::PlayState state;
298 328
299 state = ComputePlayState(); 329 state = ComputePlayState();
300 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 330 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
301 EXPECT_FALSE(state.is_memory_reporting_enabled); 331 EXPECT_FALSE(state.is_memory_reporting_enabled);
302 EXPECT_FALSE(state.is_suspended); 332 EXPECT_FALSE(state.is_suspended);
303 333
304 state = ComputeIdlePlayState(); 334 state = ComputeIdlePlayState();
305 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 335 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
306 EXPECT_FALSE(state.is_memory_reporting_enabled); 336 EXPECT_FALSE(state.is_memory_reporting_enabled);
307 EXPECT_TRUE(state.is_suspended); 337 EXPECT_TRUE(state.is_suspended);
308 338
309 state = ComputeBackgroundedPlayState(); 339 state = ComputeBackgroundedPlayState();
310 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 340 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
311 EXPECT_FALSE(state.is_memory_reporting_enabled); 341 EXPECT_FALSE(state.is_memory_reporting_enabled);
312 EXPECT_FALSE(state.is_suspended); 342 EXPECT_FALSE(state.is_suspended);
313 343
314 state = ComputeMustSuspendPlayState(); 344 state = ComputeMustSuspendPlayState();
315 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 345 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
316 EXPECT_FALSE(state.is_memory_reporting_enabled); 346 EXPECT_FALSE(state.is_memory_reporting_enabled);
317 EXPECT_TRUE(state.is_suspended); 347 EXPECT_TRUE(state.is_suspended);
318 } 348 }
319 349
320 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) { 350 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) {
321 InitializeDefaultWebMediaPlayerImpl(); 351 InitializeWebMediaPlayerImpl();
322 WebMediaPlayerImpl::PlayState state; 352 WebMediaPlayerImpl::PlayState state;
323 SetMetadata(true, true); 353 SetMetadata(true, true);
324 354
325 state = ComputePlayState(); 355 state = ComputePlayState();
326 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 356 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
327 EXPECT_FALSE(state.is_memory_reporting_enabled); 357 EXPECT_FALSE(state.is_memory_reporting_enabled);
328 EXPECT_FALSE(state.is_suspended); 358 EXPECT_FALSE(state.is_suspended);
329 359
330 state = ComputeIdlePlayState(); 360 state = ComputeIdlePlayState();
331 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 361 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
332 EXPECT_FALSE(state.is_memory_reporting_enabled); 362 EXPECT_FALSE(state.is_memory_reporting_enabled);
333 EXPECT_TRUE(state.is_suspended); 363 EXPECT_TRUE(state.is_suspended);
334 364
335 state = ComputeBackgroundedPlayState(); 365 state = ComputeBackgroundedPlayState();
336 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 366 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
337 EXPECT_FALSE(state.is_memory_reporting_enabled); 367 EXPECT_FALSE(state.is_memory_reporting_enabled);
338 EXPECT_TRUE(state.is_suspended); 368 EXPECT_TRUE(state.is_suspended);
339 369
340 state = ComputeMustSuspendPlayState(); 370 state = ComputeMustSuspendPlayState();
341 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 371 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
342 EXPECT_FALSE(state.is_memory_reporting_enabled); 372 EXPECT_FALSE(state.is_memory_reporting_enabled);
343 EXPECT_TRUE(state.is_suspended); 373 EXPECT_TRUE(state.is_suspended);
344 } 374 }
345 375
346 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) { 376 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) {
347 InitializeDefaultWebMediaPlayerImpl(); 377 InitializeWebMediaPlayerImpl();
348 WebMediaPlayerImpl::PlayState state; 378 WebMediaPlayerImpl::PlayState state;
349 SetMetadata(true, false); 379 SetMetadata(true, false);
350 380
351 state = ComputePlayState(); 381 state = ComputePlayState();
352 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 382 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
353 EXPECT_FALSE(state.is_memory_reporting_enabled); 383 EXPECT_FALSE(state.is_memory_reporting_enabled);
354 EXPECT_FALSE(state.is_suspended); 384 EXPECT_FALSE(state.is_suspended);
355 385
356 state = ComputeIdlePlayState(); 386 state = ComputeIdlePlayState();
357 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 387 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
358 EXPECT_FALSE(state.is_memory_reporting_enabled); 388 EXPECT_FALSE(state.is_memory_reporting_enabled);
359 EXPECT_TRUE(state.is_suspended); 389 EXPECT_TRUE(state.is_suspended);
360 390
361 SetPaused(false); 391 SetPaused(false);
362 state = ComputeBackgroundedPlayState(); 392 state = ComputeBackgroundedPlayState();
363 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 393 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
364 EXPECT_FALSE(state.is_memory_reporting_enabled); 394 EXPECT_FALSE(state.is_memory_reporting_enabled);
365 EXPECT_FALSE(state.is_suspended); 395 EXPECT_FALSE(state.is_suspended);
366 396
367 state = ComputeMustSuspendPlayState(); 397 state = ComputeMustSuspendPlayState();
368 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 398 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
369 EXPECT_FALSE(state.is_memory_reporting_enabled); 399 EXPECT_FALSE(state.is_memory_reporting_enabled);
370 EXPECT_TRUE(state.is_suspended); 400 EXPECT_TRUE(state.is_suspended);
371 } 401 }
372 402
373 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) { 403 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) {
374 InitializeDefaultWebMediaPlayerImpl(); 404 InitializeWebMediaPlayerImpl();
375 WebMediaPlayerImpl::PlayState state; 405 WebMediaPlayerImpl::PlayState state;
376 SetMetadata(true, true); 406 SetMetadata(true, true);
377 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 407 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
378 408
379 state = ComputePlayState(); 409 state = ComputePlayState();
380 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 410 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
381 EXPECT_FALSE(state.is_memory_reporting_enabled); 411 EXPECT_FALSE(state.is_memory_reporting_enabled);
382 EXPECT_FALSE(state.is_suspended); 412 EXPECT_FALSE(state.is_suspended);
383 413
384 state = ComputeBackgroundedPlayState(); 414 state = ComputeBackgroundedPlayState();
(...skipping 11 matching lines...) Expand all
396 EXPECT_FALSE(state.is_memory_reporting_enabled); 426 EXPECT_FALSE(state.is_memory_reporting_enabled);
397 EXPECT_TRUE(state.is_suspended); 427 EXPECT_TRUE(state.is_suspended);
398 428
399 state = ComputeMustSuspendPlayState(); 429 state = ComputeMustSuspendPlayState();
400 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 430 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
401 EXPECT_FALSE(state.is_memory_reporting_enabled); 431 EXPECT_FALSE(state.is_memory_reporting_enabled);
402 EXPECT_TRUE(state.is_suspended); 432 EXPECT_TRUE(state.is_suspended);
403 } 433 }
404 434
405 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) { 435 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
406 InitializeDefaultWebMediaPlayerImpl(); 436 InitializeWebMediaPlayerImpl();
407 WebMediaPlayerImpl::PlayState state; 437 WebMediaPlayerImpl::PlayState state;
408 SetMetadata(true, true); 438 SetMetadata(true, true);
409 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 439 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
410 SetPaused(false); 440 SetPaused(false);
411 441
412 state = ComputePlayState(); 442 state = ComputePlayState();
413 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 443 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
414 EXPECT_TRUE(state.is_memory_reporting_enabled); 444 EXPECT_TRUE(state.is_memory_reporting_enabled);
415 EXPECT_FALSE(state.is_suspended); 445 EXPECT_FALSE(state.is_suspended);
416 446
417 state = ComputeBackgroundedPlayState(); 447 state = ComputeBackgroundedPlayState();
418 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo)) 448 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo))
419 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 449 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
420 else 450 else
421 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 451 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
422 EXPECT_FALSE(state.is_memory_reporting_enabled); 452 EXPECT_FALSE(state.is_memory_reporting_enabled);
423 EXPECT_TRUE(state.is_suspended); 453 EXPECT_TRUE(state.is_suspended);
424 454
425 state = ComputeMustSuspendPlayState(); 455 state = ComputeMustSuspendPlayState();
426 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 456 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
427 EXPECT_FALSE(state.is_memory_reporting_enabled); 457 EXPECT_FALSE(state.is_memory_reporting_enabled);
428 EXPECT_TRUE(state.is_suspended); 458 EXPECT_TRUE(state.is_suspended);
429 } 459 }
430 460
431 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) { 461 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) {
432 InitializeDefaultWebMediaPlayerImpl(); 462 InitializeWebMediaPlayerImpl();
433 WebMediaPlayerImpl::PlayState state; 463 WebMediaPlayerImpl::PlayState state;
434 SetMetadata(true, true); 464 SetMetadata(true, true);
435 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 465 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
436 SetPaused(false); 466 SetPaused(false);
437 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData); 467 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData);
438 468
439 // Underflow should not trigger idle suspend. The user is still playing the 469 // Underflow should not trigger idle suspend. The user is still playing the
440 // the video, just waiting on the network. 470 // the video, just waiting on the network.
441 state = ComputePlayState(); 471 state = ComputePlayState();
442 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 472 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
(...skipping 10 matching lines...) Expand all
453 EXPECT_TRUE(state.is_suspended); 483 EXPECT_TRUE(state.is_suspended);
454 484
455 // Forced suspend should still be possible during underflow. 485 // Forced suspend should still be possible during underflow.
456 state = ComputeMustSuspendPlayState(); 486 state = ComputeMustSuspendPlayState();
457 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 487 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
458 EXPECT_FALSE(state.is_memory_reporting_enabled); 488 EXPECT_FALSE(state.is_memory_reporting_enabled);
459 EXPECT_TRUE(state.is_suspended); 489 EXPECT_TRUE(state.is_suspended);
460 } 490 }
461 491
462 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) { 492 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) {
463 InitializeDefaultWebMediaPlayerImpl(); 493 InitializeWebMediaPlayerImpl();
464 WebMediaPlayerImpl::PlayState state; 494 WebMediaPlayerImpl::PlayState state;
465 SetMetadata(true, false); 495 SetMetadata(true, false);
466 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 496 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
467 SetPaused(false); 497 SetPaused(false);
468 498
469 state = ComputePlayState(); 499 state = ComputePlayState();
470 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 500 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
471 EXPECT_TRUE(state.is_memory_reporting_enabled); 501 EXPECT_TRUE(state.is_memory_reporting_enabled);
472 EXPECT_FALSE(state.is_suspended); 502 EXPECT_FALSE(state.is_suspended);
473 503
(...skipping 11 matching lines...) Expand all
485 EXPECT_FALSE(state.is_memory_reporting_enabled); 515 EXPECT_FALSE(state.is_memory_reporting_enabled);
486 EXPECT_TRUE(state.is_suspended); 516 EXPECT_TRUE(state.is_suspended);
487 517
488 state = ComputeMustSuspendPlayState(); 518 state = ComputeMustSuspendPlayState();
489 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 519 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
490 EXPECT_FALSE(state.is_memory_reporting_enabled); 520 EXPECT_FALSE(state.is_memory_reporting_enabled);
491 EXPECT_TRUE(state.is_suspended); 521 EXPECT_TRUE(state.is_suspended);
492 } 522 }
493 523
494 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) { 524 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) {
495 InitializeDefaultWebMediaPlayerImpl(); 525 InitializeWebMediaPlayerImpl();
496 WebMediaPlayerImpl::PlayState state; 526 WebMediaPlayerImpl::PlayState state;
497 SetMetadata(true, true); 527 SetMetadata(true, true);
498 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 528 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
499 SetSeeking(true); 529 SetSeeking(true);
500 530
501 state = ComputePlayState(); 531 state = ComputePlayState();
502 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 532 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
503 EXPECT_FALSE(state.is_memory_reporting_enabled); 533 EXPECT_FALSE(state.is_memory_reporting_enabled);
504 EXPECT_FALSE(state.is_suspended); 534 EXPECT_FALSE(state.is_suspended);
505 } 535 }
506 536
507 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) { 537 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) {
508 InitializeDefaultWebMediaPlayerImpl(); 538 InitializeWebMediaPlayerImpl();
509 WebMediaPlayerImpl::PlayState state; 539 WebMediaPlayerImpl::PlayState state;
510 SetMetadata(true, true); 540 SetMetadata(true, true);
511 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 541 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
512 SetFullscreen(true); 542 SetFullscreen(true);
513 543
514 state = ComputePlayState(); 544 state = ComputePlayState();
515 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 545 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
516 EXPECT_FALSE(state.is_memory_reporting_enabled); 546 EXPECT_FALSE(state.is_memory_reporting_enabled);
517 EXPECT_FALSE(state.is_suspended); 547 EXPECT_FALSE(state.is_suspended);
518 } 548 }
519 549
520 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) { 550 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
521 InitializeDefaultWebMediaPlayerImpl(); 551 InitializeWebMediaPlayerImpl();
522 WebMediaPlayerImpl::PlayState state; 552 WebMediaPlayerImpl::PlayState state;
523 SetMetadata(true, true); 553 SetMetadata(true, true);
524 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 554 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
525 SetEnded(true); 555 SetEnded(true);
526 556
527 // The pipeline is not suspended immediately on ended. 557 // The pipeline is not suspended immediately on ended.
528 state = ComputePlayState(); 558 state = ComputePlayState();
529 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); 559 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
530 EXPECT_FALSE(state.is_memory_reporting_enabled); 560 EXPECT_FALSE(state.is_memory_reporting_enabled);
531 EXPECT_FALSE(state.is_suspended); 561 EXPECT_FALSE(state.is_suspended);
532 562
533 state = ComputeIdlePlayState(); 563 state = ComputeIdlePlayState();
534 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); 564 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
535 EXPECT_FALSE(state.is_memory_reporting_enabled); 565 EXPECT_FALSE(state.is_memory_reporting_enabled);
536 EXPECT_TRUE(state.is_suspended); 566 EXPECT_TRUE(state.is_suspended);
537 } 567 }
538 568
539 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) { 569 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
540 InitializeDefaultWebMediaPlayerImpl(); 570 InitializeWebMediaPlayerImpl();
541 WebMediaPlayerImpl::PlayState state; 571 WebMediaPlayerImpl::PlayState state;
542 SetMetadata(true, true); 572 SetMetadata(true, true);
543 573
544 // Suspended players should be resumed unless we have reached the appropriate 574 // Suspended players should be resumed unless we have reached the appropriate
545 // ready state and are not seeking. 575 // ready state and are not seeking.
546 SetPaused(true); 576 SetPaused(true);
547 state = ComputePlayStateSuspended(); 577 state = ComputePlayStateSuspended();
548 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 578 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
549 EXPECT_FALSE(state.is_memory_reporting_enabled); 579 EXPECT_FALSE(state.is_memory_reporting_enabled);
550 EXPECT_FALSE(state.is_suspended); 580 EXPECT_FALSE(state.is_suspended);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
588 EXPECT_FALSE(state.is_suspended); 618 EXPECT_FALSE(state.is_suspended);
589 619
590 SetPaused(false); 620 SetPaused(false);
591 state = ComputePlayStateSuspended(); 621 state = ComputePlayStateSuspended();
592 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 622 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
593 EXPECT_TRUE(state.is_memory_reporting_enabled); 623 EXPECT_TRUE(state.is_memory_reporting_enabled);
594 EXPECT_FALSE(state.is_suspended); 624 EXPECT_FALSE(state.is_suspended);
595 } 625 }
596 626
597 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) { 627 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) {
598 InitializeDefaultWebMediaPlayerImpl(); 628 InitializeWebMediaPlayerImpl();
599 PipelineMetadata metadata; 629 PipelineMetadata metadata;
600 metadata.has_video = true; 630 metadata.has_video = true;
601 metadata.natural_size = gfx::Size(320, 240); 631 metadata.natural_size = gfx::Size(320, 240);
602 632
603 OnMetadata(metadata); 633 OnMetadata(metadata);
604 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize()); 634 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize());
605 635
606 // TODO(sandersd): Verify that the client is notified of the size change? 636 // TODO(sandersd): Verify that the client is notified of the size change?
607 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); 637 OnVideoNaturalSizeChange(gfx::Size(1920, 1080));
608 ASSERT_EQ(blink::WebSize(1920, 1080), wmpi_->naturalSize()); 638 ASSERT_EQ(blink::WebSize(1920, 1080), wmpi_->naturalSize());
609 } 639 }
610 640
611 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) { 641 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) {
612 InitializeDefaultWebMediaPlayerImpl(); 642 InitializeWebMediaPlayerImpl();
613 PipelineMetadata metadata; 643 PipelineMetadata metadata;
614 metadata.has_video = true; 644 metadata.has_video = true;
615 metadata.natural_size = gfx::Size(320, 240); 645 metadata.natural_size = gfx::Size(320, 240);
616 metadata.video_rotation = VIDEO_ROTATION_90; 646 metadata.video_rotation = VIDEO_ROTATION_90;
617 647
618 // For 90/270deg rotations, the natural size should be transposed. 648 // For 90/270deg rotations, the natural size should be transposed.
619 OnMetadata(metadata); 649 OnMetadata(metadata);
620 ASSERT_EQ(blink::WebSize(240, 320), wmpi_->naturalSize()); 650 ASSERT_EQ(blink::WebSize(240, 320), wmpi_->naturalSize());
621 651
622 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); 652 OnVideoNaturalSizeChange(gfx::Size(1920, 1080));
623 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize()); 653 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize());
624 } 654 }
625 655
626 // Audible backgrounded videos are not suspended if delegate_ allows it. 656 // Audible backgrounded videos are not suspended if delegate_ allows it.
627 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) { 657 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) {
628 InitializeDefaultWebMediaPlayerImpl(); 658 InitializeWebMediaPlayerImpl();
629 WebMediaPlayerImpl::PlayState state; 659 WebMediaPlayerImpl::PlayState state;
630 SetMetadata(true, true); 660 SetMetadata(true, true);
631 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 661 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
632 662
633 SetupForResumingBackgroundVideo(); 663 SetupForResumingBackgroundVideo();
634 664
635 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()) 665 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo())
636 .WillRepeatedly(Return(true)); 666 .WillRepeatedly(Return(true));
637 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true)); 667 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true));
638 668
639 SetPaused(false); 669 SetPaused(false);
640 state = ComputeBackgroundedPlayState(); 670 state = ComputeBackgroundedPlayState();
641 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 671 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
642 EXPECT_TRUE(state.is_memory_reporting_enabled); 672 EXPECT_TRUE(state.is_memory_reporting_enabled);
643 EXPECT_FALSE(state.is_suspended); 673 EXPECT_FALSE(state.is_suspended);
644 } 674 }
645 675
646 // Backgrounding audible videos should suspend them and report as paused, not 676 // Backgrounding audible videos should suspend them and report as paused, not
647 // gone. 677 // gone.
648 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) { 678 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) {
649 InitializeDefaultWebMediaPlayerImpl(); 679 InitializeWebMediaPlayerImpl();
650 WebMediaPlayerImpl::PlayState state; 680 WebMediaPlayerImpl::PlayState state;
651 SetMetadata(true, true); 681 SetMetadata(true, true);
652 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 682 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
653 683
654 SetupForResumingBackgroundVideo(); 684 SetupForResumingBackgroundVideo();
655 685
656 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()).WillOnce(Return(false)); 686 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()).WillOnce(Return(false));
657 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true)); 687 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true));
658 688
659 state = ComputeBackgroundedPlayState(); 689 state = ComputeBackgroundedPlayState();
660 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 690 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
661 EXPECT_FALSE(state.is_memory_reporting_enabled); 691 EXPECT_FALSE(state.is_memory_reporting_enabled);
662 EXPECT_TRUE(state.is_suspended); 692 EXPECT_TRUE(state.is_suspended);
663 } 693 }
664 694
665 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) { 695 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) {
666 InitializeDefaultWebMediaPlayerImpl(); 696 InitializeWebMediaPlayerImpl();
667 SetMetadata(true, true); 697 SetMetadata(true, true);
668 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 698 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
669 SetPaused(false); 699 SetPaused(false);
670 700
671 EXPECT_CALL(delegate_, DidPlay(_, true, false, false, _)); 701 EXPECT_CALL(delegate_, DidPlay(_, true, false, false, _));
672 client_.set_is_autoplaying_muted(true); 702 client_.set_is_autoplaying_muted(true);
673 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING); 703 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
674 704
675 EXPECT_CALL(delegate_, DidPlay(_, true, true, false, _)); 705 EXPECT_CALL(delegate_, DidPlay(_, true, true, false, _));
676 client_.set_is_autoplaying_muted(false); 706 client_.set_is_autoplaying_muted(false);
677 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING); 707 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
678 } 708 }
679 709
680 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_SetVolume) { 710 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_SetVolume) {
681 InitializeDefaultWebMediaPlayerImpl(); 711 InitializeWebMediaPlayerImpl();
682 SetMetadata(true, true); 712 SetMetadata(true, true);
683 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 713 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
684 SetPaused(false); 714 SetPaused(false);
685 715
686 EXPECT_CALL(delegate_, DidPlay(_, true, false, false, _)); 716 EXPECT_CALL(delegate_, DidPlay(_, true, false, false, _));
687 client_.set_is_autoplaying_muted(true); 717 client_.set_is_autoplaying_muted(true);
688 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING); 718 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
689 719
690 EXPECT_CALL(delegate_, DidPlay(_, true, true, false, _)); 720 EXPECT_CALL(delegate_, DidPlay(_, true, true, false, _));
691 client_.set_is_autoplaying_muted(false); 721 client_.set_is_autoplaying_muted(false);
692 wmpi_->setVolume(1.0); 722 wmpi_->setVolume(1.0);
693 } 723 }
694 724
695 } // namespace media 725 } // namespace media
OLDNEW
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698