| OLD | NEW |
| 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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 blink::WebPageVisibilityStateVisible)), | 116 blink::WebPageVisibilityStateVisible)), |
| 116 web_local_frame_( | 117 web_local_frame_( |
| 117 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, | 118 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, |
| 118 &web_frame_client_)), | 119 &web_frame_client_)), |
| 119 media_log_(new MediaLog()), | 120 media_log_(new MediaLog()), |
| 120 audio_parameters_(TestAudioParameters::Normal()) { | 121 audio_parameters_(TestAudioParameters::Normal()) { |
| 121 web_view_->setMainFrame(web_local_frame_); | 122 web_view_->setMainFrame(web_local_frame_); |
| 122 media_thread_.StartAndWaitForTesting(); | 123 media_thread_.StartAndWaitForTesting(); |
| 123 } | 124 } |
| 124 | 125 |
| 125 void InitializeDefaultWebMediaPlayerImpl() { | 126 void InitializeWebMediaPlayerImpl() { |
| 126 InitializeWebMediaPlayerImpl(delegate_.AsWeakPtr()); | |
| 127 } | |
| 128 | |
| 129 void InitializeWebMediaPlayerImpl( | |
| 130 base::WeakPtr<MockWebMediaPlayerDelegate> delegate) { | |
| 131 wmpi_.reset(new WebMediaPlayerImpl( | 127 wmpi_.reset(new WebMediaPlayerImpl( |
| 132 web_local_frame_, &client_, nullptr, delegate, | 128 web_local_frame_, &client_, nullptr, delegate_.AsWeakPtr(), |
| 133 base::MakeUnique<DefaultRendererFactory>( | 129 base::MakeUnique<DefaultRendererFactory>( |
| 134 media_log_, nullptr, DefaultRendererFactory::GetGpuFactoriesCB()), | 130 media_log_, nullptr, DefaultRendererFactory::GetGpuFactoriesCB()), |
| 135 url_index_, | 131 url_index_, |
| 136 WebMediaPlayerParams( | 132 WebMediaPlayerParams( |
| 137 WebMediaPlayerParams::DeferLoadCB(), | 133 WebMediaPlayerParams::DeferLoadCB(), |
| 138 scoped_refptr<SwitchableAudioRendererSink>(), media_log_, | 134 scoped_refptr<SwitchableAudioRendererSink>(), media_log_, |
| 139 media_thread_.task_runner(), message_loop_.task_runner(), | 135 media_thread_.task_runner(), message_loop_.task_runner(), |
| 140 message_loop_.task_runner(), WebMediaPlayerParams::Context3DCB(), | 136 message_loop_.task_runner(), WebMediaPlayerParams::Context3DCB(), |
| 141 base::Bind(&OnAdjustAllocatedMemory), nullptr, nullptr, nullptr))); | 137 base::Bind(&OnAdjustAllocatedMemory), nullptr, nullptr, nullptr))); |
| 142 } | 138 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 154 } | 150 } |
| 155 | 151 |
| 156 protected: | 152 protected: |
| 157 void SetReadyState(blink::WebMediaPlayer::ReadyState state) { | 153 void SetReadyState(blink::WebMediaPlayer::ReadyState state) { |
| 158 wmpi_->SetReadyState(state); | 154 wmpi_->SetReadyState(state); |
| 159 } | 155 } |
| 160 | 156 |
| 161 void SetPaused(bool is_paused) { wmpi_->paused_ = is_paused; } | 157 void SetPaused(bool is_paused) { wmpi_->paused_ = is_paused; } |
| 162 void SetSeeking(bool is_seeking) { wmpi_->seeking_ = is_seeking; } | 158 void SetSeeking(bool is_seeking) { wmpi_->seeking_ = is_seeking; } |
| 163 void SetEnded(bool is_ended) { wmpi_->ended_ = is_ended; } | 159 void SetEnded(bool is_ended) { wmpi_->ended_ = is_ended; } |
| 160 void SetTickClock(base::TickClock* clock) { wmpi_->tick_clock_ = clock; } |
| 164 | 161 |
| 165 void SetFullscreen(bool is_fullscreen) { | 162 void SetFullscreen(bool is_fullscreen) { |
| 166 wmpi_->overlay_enabled_ = is_fullscreen; | 163 wmpi_->overlay_enabled_ = is_fullscreen; |
| 167 } | 164 } |
| 168 | 165 |
| 169 void SetMetadata(bool has_audio, bool has_video) { | 166 void SetMetadata(bool has_audio, bool has_video) { |
| 170 wmpi_->SetNetworkState(blink::WebMediaPlayer::NetworkStateLoaded); | 167 wmpi_->SetNetworkState(blink::WebMediaPlayer::NetworkStateLoaded); |
| 171 wmpi_->SetReadyState(blink::WebMediaPlayer::ReadyStateHaveMetadata); | 168 wmpi_->SetReadyState(blink::WebMediaPlayer::ReadyStateHaveMetadata); |
| 172 wmpi_->pipeline_metadata_.has_audio = has_audio; | 169 wmpi_->pipeline_metadata_.has_audio = has_audio; |
| 173 wmpi_->pipeline_metadata_.has_video = has_video; | 170 wmpi_->pipeline_metadata_.has_video = has_video; |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 testing::NiceMock<MockWebMediaPlayerDelegate> delegate_; | 255 testing::NiceMock<MockWebMediaPlayerDelegate> delegate_; |
| 259 | 256 |
| 260 // The WebMediaPlayerImpl instance under test. | 257 // The WebMediaPlayerImpl instance under test. |
| 261 std::unique_ptr<WebMediaPlayerImpl> wmpi_; | 258 std::unique_ptr<WebMediaPlayerImpl> wmpi_; |
| 262 | 259 |
| 263 private: | 260 private: |
| 264 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest); | 261 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest); |
| 265 }; | 262 }; |
| 266 | 263 |
| 267 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) { | 264 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) { |
| 268 InitializeDefaultWebMediaPlayerImpl(); | 265 InitializeWebMediaPlayerImpl(); |
| 269 } | 266 } |
| 270 | 267 |
| 271 TEST_F(WebMediaPlayerImplTest, DidLoadingProgressClearsIdle) { | 268 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledBeforeLoadingBegins) { |
| 272 testing::StrictMock<MockWebMediaPlayerDelegate> strict_delegate; | 269 InitializeWebMediaPlayerImpl(); |
| 273 EXPECT_CALL(strict_delegate, AddObserver(_)); | 270 wmpi_->OnSuspendRequested(false); |
| 274 EXPECT_CALL(strict_delegate, IsPlayingBackgroundVideo()).Times(AnyNumber()); | 271 base::RunLoop().RunUntilIdle(); |
| 275 InitializeWebMediaPlayerImpl(strict_delegate.AsWeakPtr()); | 272 EXPECT_TRUE(IsSuspended()); |
| 273 } |
| 274 |
| 275 TEST_F(WebMediaPlayerImplTest, |
| 276 IdleSuspendIsDisabledIfLoadingProgressedRecently) { |
| 277 InitializeWebMediaPlayerImpl(); |
| 278 base::SimpleTestTickClock clock; |
| 279 // Don't start the clock at 0 because WMPI uses 0 as uninitialized. |
| 280 clock.Advance(base::TimeDelta::FromSeconds(1)); |
| 281 SetTickClock(&clock); |
| 282 AddBufferedRanges(); |
| 283 wmpi_->didLoadingProgress(); |
| 284 clock.Advance(base::TimeDelta::FromSeconds(1)); |
| 285 wmpi_->OnSuspendRequested(false); |
| 286 base::RunLoop().RunUntilIdle(); |
| 287 EXPECT_FALSE(IsSuspended()); |
| 288 } |
| 289 |
| 290 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledIfLoadingHasStalled) { |
| 291 InitializeWebMediaPlayerImpl(); |
| 292 base::SimpleTestTickClock clock; |
| 293 // Don't start the clock at 0 because WMPI uses 0 as uninitialized. |
| 294 clock.Advance(base::TimeDelta::FromSeconds(1)); |
| 295 SetTickClock(&clock); |
| 296 AddBufferedRanges(); |
| 297 wmpi_->didLoadingProgress(); |
| 298 clock.Advance(base::TimeDelta::FromSeconds(4)); |
| 299 wmpi_->OnSuspendRequested(false); |
| 300 base::RunLoop().RunUntilIdle(); |
| 301 EXPECT_TRUE(IsSuspended()); |
| 302 } |
| 303 |
| 304 TEST_F(WebMediaPlayerImplTest, DidLoadingProgressTriggersResume) { |
| 305 InitializeWebMediaPlayerImpl(); |
| 276 EXPECT_FALSE(IsSuspended()); | 306 EXPECT_FALSE(IsSuspended()); |
| 277 wmpi_->OnSuspendRequested(false); | 307 wmpi_->OnSuspendRequested(false); |
| 278 base::RunLoop().RunUntilIdle(); | 308 base::RunLoop().RunUntilIdle(); |
| 279 EXPECT_TRUE(IsSuspended()); | 309 EXPECT_TRUE(IsSuspended()); |
| 280 AddBufferedRanges(); | 310 AddBufferedRanges(); |
| 281 wmpi_->didLoadingProgress(); | 311 wmpi_->didLoadingProgress(); |
| 282 base::RunLoop().RunUntilIdle(); | 312 base::RunLoop().RunUntilIdle(); |
| 283 EXPECT_FALSE(IsSuspended()); | 313 EXPECT_FALSE(IsSuspended()); |
| 284 } | 314 } |
| 285 | 315 |
| 286 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) { | 316 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) { |
| 287 InitializeDefaultWebMediaPlayerImpl(); | 317 InitializeWebMediaPlayerImpl(); |
| 288 WebMediaPlayerImpl::PlayState state; | 318 WebMediaPlayerImpl::PlayState state; |
| 289 | 319 |
| 290 state = ComputePlayState(); | 320 state = ComputePlayState(); |
| 291 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 321 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 292 EXPECT_FALSE(state.is_memory_reporting_enabled); | 322 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 293 EXPECT_FALSE(state.is_suspended); | 323 EXPECT_FALSE(state.is_suspended); |
| 294 | 324 |
| 295 state = ComputeIdlePlayState(); | 325 state = ComputeIdlePlayState(); |
| 296 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 326 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 297 EXPECT_FALSE(state.is_memory_reporting_enabled); | 327 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 298 EXPECT_TRUE(state.is_suspended); | 328 EXPECT_TRUE(state.is_suspended); |
| 299 | 329 |
| 300 state = ComputeBackgroundedPlayState(); | 330 state = ComputeBackgroundedPlayState(); |
| 301 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 331 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 302 EXPECT_FALSE(state.is_memory_reporting_enabled); | 332 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 303 EXPECT_FALSE(state.is_suspended); | 333 EXPECT_FALSE(state.is_suspended); |
| 304 | 334 |
| 305 state = ComputeMustSuspendPlayState(); | 335 state = ComputeMustSuspendPlayState(); |
| 306 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 336 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 307 EXPECT_FALSE(state.is_memory_reporting_enabled); | 337 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 308 EXPECT_TRUE(state.is_suspended); | 338 EXPECT_TRUE(state.is_suspended); |
| 309 } | 339 } |
| 310 | 340 |
| 311 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) { | 341 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) { |
| 312 InitializeDefaultWebMediaPlayerImpl(); | 342 InitializeWebMediaPlayerImpl(); |
| 313 WebMediaPlayerImpl::PlayState state; | 343 WebMediaPlayerImpl::PlayState state; |
| 314 SetMetadata(true, true); | 344 SetMetadata(true, true); |
| 315 | 345 |
| 316 state = ComputePlayState(); | 346 state = ComputePlayState(); |
| 317 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 347 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 318 EXPECT_FALSE(state.is_memory_reporting_enabled); | 348 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 319 EXPECT_FALSE(state.is_suspended); | 349 EXPECT_FALSE(state.is_suspended); |
| 320 | 350 |
| 321 state = ComputeIdlePlayState(); | 351 state = ComputeIdlePlayState(); |
| 322 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 352 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 323 EXPECT_FALSE(state.is_memory_reporting_enabled); | 353 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 324 EXPECT_TRUE(state.is_suspended); | 354 EXPECT_TRUE(state.is_suspended); |
| 325 | 355 |
| 326 state = ComputeBackgroundedPlayState(); | 356 state = ComputeBackgroundedPlayState(); |
| 327 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 357 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 328 EXPECT_FALSE(state.is_memory_reporting_enabled); | 358 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 329 EXPECT_TRUE(state.is_suspended); | 359 EXPECT_TRUE(state.is_suspended); |
| 330 | 360 |
| 331 state = ComputeMustSuspendPlayState(); | 361 state = ComputeMustSuspendPlayState(); |
| 332 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 362 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 333 EXPECT_FALSE(state.is_memory_reporting_enabled); | 363 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 334 EXPECT_TRUE(state.is_suspended); | 364 EXPECT_TRUE(state.is_suspended); |
| 335 } | 365 } |
| 336 | 366 |
| 337 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) { | 367 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) { |
| 338 InitializeDefaultWebMediaPlayerImpl(); | 368 InitializeWebMediaPlayerImpl(); |
| 339 WebMediaPlayerImpl::PlayState state; | 369 WebMediaPlayerImpl::PlayState state; |
| 340 SetMetadata(true, false); | 370 SetMetadata(true, false); |
| 341 | 371 |
| 342 state = ComputePlayState(); | 372 state = ComputePlayState(); |
| 343 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 373 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 344 EXPECT_FALSE(state.is_memory_reporting_enabled); | 374 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 345 EXPECT_FALSE(state.is_suspended); | 375 EXPECT_FALSE(state.is_suspended); |
| 346 | 376 |
| 347 state = ComputeIdlePlayState(); | 377 state = ComputeIdlePlayState(); |
| 348 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 378 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 349 EXPECT_FALSE(state.is_memory_reporting_enabled); | 379 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 350 EXPECT_TRUE(state.is_suspended); | 380 EXPECT_TRUE(state.is_suspended); |
| 351 | 381 |
| 352 SetPaused(false); | 382 SetPaused(false); |
| 353 state = ComputeBackgroundedPlayState(); | 383 state = ComputeBackgroundedPlayState(); |
| 354 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 384 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 355 EXPECT_FALSE(state.is_memory_reporting_enabled); | 385 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 356 EXPECT_FALSE(state.is_suspended); | 386 EXPECT_FALSE(state.is_suspended); |
| 357 | 387 |
| 358 state = ComputeMustSuspendPlayState(); | 388 state = ComputeMustSuspendPlayState(); |
| 359 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 389 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 360 EXPECT_FALSE(state.is_memory_reporting_enabled); | 390 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 361 EXPECT_TRUE(state.is_suspended); | 391 EXPECT_TRUE(state.is_suspended); |
| 362 } | 392 } |
| 363 | 393 |
| 364 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) { | 394 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) { |
| 365 InitializeDefaultWebMediaPlayerImpl(); | 395 InitializeWebMediaPlayerImpl(); |
| 366 WebMediaPlayerImpl::PlayState state; | 396 WebMediaPlayerImpl::PlayState state; |
| 367 SetMetadata(true, true); | 397 SetMetadata(true, true); |
| 368 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 398 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 369 | 399 |
| 370 state = ComputePlayState(); | 400 state = ComputePlayState(); |
| 371 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); | 401 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); |
| 372 EXPECT_FALSE(state.is_memory_reporting_enabled); | 402 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 373 EXPECT_FALSE(state.is_suspended); | 403 EXPECT_FALSE(state.is_suspended); |
| 374 | 404 |
| 375 state = ComputeBackgroundedPlayState(); | 405 state = ComputeBackgroundedPlayState(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 387 EXPECT_FALSE(state.is_memory_reporting_enabled); | 417 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 388 EXPECT_TRUE(state.is_suspended); | 418 EXPECT_TRUE(state.is_suspended); |
| 389 | 419 |
| 390 state = ComputeMustSuspendPlayState(); | 420 state = ComputeMustSuspendPlayState(); |
| 391 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 421 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 392 EXPECT_FALSE(state.is_memory_reporting_enabled); | 422 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 393 EXPECT_TRUE(state.is_suspended); | 423 EXPECT_TRUE(state.is_suspended); |
| 394 } | 424 } |
| 395 | 425 |
| 396 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) { | 426 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) { |
| 397 InitializeDefaultWebMediaPlayerImpl(); | 427 InitializeWebMediaPlayerImpl(); |
| 398 WebMediaPlayerImpl::PlayState state; | 428 WebMediaPlayerImpl::PlayState state; |
| 399 SetMetadata(true, true); | 429 SetMetadata(true, true); |
| 400 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 430 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 401 SetPaused(false); | 431 SetPaused(false); |
| 402 | 432 |
| 403 state = ComputePlayState(); | 433 state = ComputePlayState(); |
| 404 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); | 434 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); |
| 405 EXPECT_TRUE(state.is_memory_reporting_enabled); | 435 EXPECT_TRUE(state.is_memory_reporting_enabled); |
| 406 EXPECT_FALSE(state.is_suspended); | 436 EXPECT_FALSE(state.is_suspended); |
| 407 | 437 |
| 408 state = ComputeBackgroundedPlayState(); | 438 state = ComputeBackgroundedPlayState(); |
| 409 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo)) | 439 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo)) |
| 410 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); | 440 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); |
| 411 else | 441 else |
| 412 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 442 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 413 EXPECT_FALSE(state.is_memory_reporting_enabled); | 443 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 414 EXPECT_TRUE(state.is_suspended); | 444 EXPECT_TRUE(state.is_suspended); |
| 415 | 445 |
| 416 state = ComputeMustSuspendPlayState(); | 446 state = ComputeMustSuspendPlayState(); |
| 417 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 447 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 418 EXPECT_FALSE(state.is_memory_reporting_enabled); | 448 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 419 EXPECT_TRUE(state.is_suspended); | 449 EXPECT_TRUE(state.is_suspended); |
| 420 } | 450 } |
| 421 | 451 |
| 422 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) { | 452 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) { |
| 423 InitializeDefaultWebMediaPlayerImpl(); | 453 InitializeWebMediaPlayerImpl(); |
| 424 WebMediaPlayerImpl::PlayState state; | 454 WebMediaPlayerImpl::PlayState state; |
| 425 SetMetadata(true, true); | 455 SetMetadata(true, true); |
| 426 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 456 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 427 SetPaused(false); | 457 SetPaused(false); |
| 428 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData); | 458 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData); |
| 429 | 459 |
| 430 // Underflow should not trigger idle suspend. The user is still playing the | 460 // Underflow should not trigger idle suspend. The user is still playing the |
| 431 // the video, just waiting on the network. | 461 // the video, just waiting on the network. |
| 432 state = ComputePlayState(); | 462 state = ComputePlayState(); |
| 433 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); | 463 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 444 EXPECT_TRUE(state.is_suspended); | 474 EXPECT_TRUE(state.is_suspended); |
| 445 | 475 |
| 446 // Forced suspend should still be possible during underflow. | 476 // Forced suspend should still be possible during underflow. |
| 447 state = ComputeMustSuspendPlayState(); | 477 state = ComputeMustSuspendPlayState(); |
| 448 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 478 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 449 EXPECT_FALSE(state.is_memory_reporting_enabled); | 479 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 450 EXPECT_TRUE(state.is_suspended); | 480 EXPECT_TRUE(state.is_suspended); |
| 451 } | 481 } |
| 452 | 482 |
| 453 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) { | 483 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) { |
| 454 InitializeDefaultWebMediaPlayerImpl(); | 484 InitializeWebMediaPlayerImpl(); |
| 455 WebMediaPlayerImpl::PlayState state; | 485 WebMediaPlayerImpl::PlayState state; |
| 456 SetMetadata(true, false); | 486 SetMetadata(true, false); |
| 457 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 487 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 458 SetPaused(false); | 488 SetPaused(false); |
| 459 | 489 |
| 460 state = ComputePlayState(); | 490 state = ComputePlayState(); |
| 461 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); | 491 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); |
| 462 EXPECT_TRUE(state.is_memory_reporting_enabled); | 492 EXPECT_TRUE(state.is_memory_reporting_enabled); |
| 463 EXPECT_FALSE(state.is_suspended); | 493 EXPECT_FALSE(state.is_suspended); |
| 464 | 494 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 476 EXPECT_FALSE(state.is_memory_reporting_enabled); | 506 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 477 EXPECT_TRUE(state.is_suspended); | 507 EXPECT_TRUE(state.is_suspended); |
| 478 | 508 |
| 479 state = ComputeMustSuspendPlayState(); | 509 state = ComputeMustSuspendPlayState(); |
| 480 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 510 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 481 EXPECT_FALSE(state.is_memory_reporting_enabled); | 511 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 482 EXPECT_TRUE(state.is_suspended); | 512 EXPECT_TRUE(state.is_suspended); |
| 483 } | 513 } |
| 484 | 514 |
| 485 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) { | 515 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) { |
| 486 InitializeDefaultWebMediaPlayerImpl(); | 516 InitializeWebMediaPlayerImpl(); |
| 487 WebMediaPlayerImpl::PlayState state; | 517 WebMediaPlayerImpl::PlayState state; |
| 488 SetMetadata(true, true); | 518 SetMetadata(true, true); |
| 489 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 519 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 490 SetSeeking(true); | 520 SetSeeking(true); |
| 491 | 521 |
| 492 state = ComputePlayState(); | 522 state = ComputePlayState(); |
| 493 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); | 523 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); |
| 494 EXPECT_FALSE(state.is_memory_reporting_enabled); | 524 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 495 EXPECT_FALSE(state.is_suspended); | 525 EXPECT_FALSE(state.is_suspended); |
| 496 } | 526 } |
| 497 | 527 |
| 498 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) { | 528 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) { |
| 499 InitializeDefaultWebMediaPlayerImpl(); | 529 InitializeWebMediaPlayerImpl(); |
| 500 WebMediaPlayerImpl::PlayState state; | 530 WebMediaPlayerImpl::PlayState state; |
| 501 SetMetadata(true, true); | 531 SetMetadata(true, true); |
| 502 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 532 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 503 SetFullscreen(true); | 533 SetFullscreen(true); |
| 504 | 534 |
| 505 state = ComputePlayState(); | 535 state = ComputePlayState(); |
| 506 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); | 536 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); |
| 507 EXPECT_FALSE(state.is_memory_reporting_enabled); | 537 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 508 EXPECT_FALSE(state.is_suspended); | 538 EXPECT_FALSE(state.is_suspended); |
| 509 } | 539 } |
| 510 | 540 |
| 511 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) { | 541 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) { |
| 512 InitializeDefaultWebMediaPlayerImpl(); | 542 InitializeWebMediaPlayerImpl(); |
| 513 WebMediaPlayerImpl::PlayState state; | 543 WebMediaPlayerImpl::PlayState state; |
| 514 SetMetadata(true, true); | 544 SetMetadata(true, true); |
| 515 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 545 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 516 SetEnded(true); | 546 SetEnded(true); |
| 517 | 547 |
| 518 // The pipeline is not suspended immediately on ended. | 548 // The pipeline is not suspended immediately on ended. |
| 519 state = ComputePlayState(); | 549 state = ComputePlayState(); |
| 520 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); | 550 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); |
| 521 EXPECT_FALSE(state.is_memory_reporting_enabled); | 551 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 522 EXPECT_FALSE(state.is_suspended); | 552 EXPECT_FALSE(state.is_suspended); |
| 523 | 553 |
| 524 state = ComputeIdlePlayState(); | 554 state = ComputeIdlePlayState(); |
| 525 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); | 555 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); |
| 526 EXPECT_FALSE(state.is_memory_reporting_enabled); | 556 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 527 EXPECT_TRUE(state.is_suspended); | 557 EXPECT_TRUE(state.is_suspended); |
| 528 } | 558 } |
| 529 | 559 |
| 530 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) { | 560 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) { |
| 531 InitializeDefaultWebMediaPlayerImpl(); | 561 InitializeWebMediaPlayerImpl(); |
| 532 WebMediaPlayerImpl::PlayState state; | 562 WebMediaPlayerImpl::PlayState state; |
| 533 SetMetadata(true, true); | 563 SetMetadata(true, true); |
| 534 | 564 |
| 535 // Suspended players should be resumed unless we have reached the appropriate | 565 // Suspended players should be resumed unless we have reached the appropriate |
| 536 // ready state and are not seeking. | 566 // ready state and are not seeking. |
| 537 SetPaused(true); | 567 SetPaused(true); |
| 538 state = ComputePlayStateSuspended(); | 568 state = ComputePlayStateSuspended(); |
| 539 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); | 569 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); |
| 540 EXPECT_FALSE(state.is_memory_reporting_enabled); | 570 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 541 EXPECT_FALSE(state.is_suspended); | 571 EXPECT_FALSE(state.is_suspended); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 EXPECT_FALSE(state.is_suspended); | 609 EXPECT_FALSE(state.is_suspended); |
| 580 | 610 |
| 581 SetPaused(false); | 611 SetPaused(false); |
| 582 state = ComputePlayStateSuspended(); | 612 state = ComputePlayStateSuspended(); |
| 583 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); | 613 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); |
| 584 EXPECT_TRUE(state.is_memory_reporting_enabled); | 614 EXPECT_TRUE(state.is_memory_reporting_enabled); |
| 585 EXPECT_FALSE(state.is_suspended); | 615 EXPECT_FALSE(state.is_suspended); |
| 586 } | 616 } |
| 587 | 617 |
| 588 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) { | 618 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) { |
| 589 InitializeDefaultWebMediaPlayerImpl(); | 619 InitializeWebMediaPlayerImpl(); |
| 590 PipelineMetadata metadata; | 620 PipelineMetadata metadata; |
| 591 metadata.has_video = true; | 621 metadata.has_video = true; |
| 592 metadata.natural_size = gfx::Size(320, 240); | 622 metadata.natural_size = gfx::Size(320, 240); |
| 593 | 623 |
| 594 OnMetadata(metadata); | 624 OnMetadata(metadata); |
| 595 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize()); | 625 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize()); |
| 596 | 626 |
| 597 // TODO(sandersd): Verify that the client is notified of the size change? | 627 // TODO(sandersd): Verify that the client is notified of the size change? |
| 598 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); | 628 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); |
| 599 ASSERT_EQ(blink::WebSize(1920, 1080), wmpi_->naturalSize()); | 629 ASSERT_EQ(blink::WebSize(1920, 1080), wmpi_->naturalSize()); |
| 600 } | 630 } |
| 601 | 631 |
| 602 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) { | 632 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange_Rotated) { |
| 603 InitializeDefaultWebMediaPlayerImpl(); | 633 InitializeWebMediaPlayerImpl(); |
| 604 PipelineMetadata metadata; | 634 PipelineMetadata metadata; |
| 605 metadata.has_video = true; | 635 metadata.has_video = true; |
| 606 metadata.natural_size = gfx::Size(320, 240); | 636 metadata.natural_size = gfx::Size(320, 240); |
| 607 metadata.video_rotation = VIDEO_ROTATION_90; | 637 metadata.video_rotation = VIDEO_ROTATION_90; |
| 608 | 638 |
| 609 // For 90/270deg rotations, the natural size should be transposed. | 639 // For 90/270deg rotations, the natural size should be transposed. |
| 610 OnMetadata(metadata); | 640 OnMetadata(metadata); |
| 611 ASSERT_EQ(blink::WebSize(240, 320), wmpi_->naturalSize()); | 641 ASSERT_EQ(blink::WebSize(240, 320), wmpi_->naturalSize()); |
| 612 | 642 |
| 613 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); | 643 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); |
| 614 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize()); | 644 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize()); |
| 615 } | 645 } |
| 616 | 646 |
| 617 // Audible backgrounded videos are not suspended if delegate_ allows it. | 647 // Audible backgrounded videos are not suspended if delegate_ allows it. |
| 618 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) { | 648 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) { |
| 619 InitializeDefaultWebMediaPlayerImpl(); | 649 InitializeWebMediaPlayerImpl(); |
| 620 WebMediaPlayerImpl::PlayState state; | 650 WebMediaPlayerImpl::PlayState state; |
| 621 SetMetadata(true, true); | 651 SetMetadata(true, true); |
| 622 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 652 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 623 | 653 |
| 624 SetupForResumingBackgroundVideo(); | 654 SetupForResumingBackgroundVideo(); |
| 625 | 655 |
| 626 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()) | 656 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()) |
| 627 .WillRepeatedly(Return(true)); | 657 .WillRepeatedly(Return(true)); |
| 628 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true)); | 658 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true)); |
| 629 | 659 |
| 630 SetPaused(false); | 660 SetPaused(false); |
| 631 state = ComputeBackgroundedPlayState(); | 661 state = ComputeBackgroundedPlayState(); |
| 632 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); | 662 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); |
| 633 EXPECT_TRUE(state.is_memory_reporting_enabled); | 663 EXPECT_TRUE(state.is_memory_reporting_enabled); |
| 634 EXPECT_FALSE(state.is_suspended); | 664 EXPECT_FALSE(state.is_suspended); |
| 635 } | 665 } |
| 636 | 666 |
| 637 // Backgrounding audible videos should suspend them and report as paused, not | 667 // Backgrounding audible videos should suspend them and report as paused, not |
| 638 // gone. | 668 // gone. |
| 639 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) { | 669 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) { |
| 640 InitializeDefaultWebMediaPlayerImpl(); | 670 InitializeWebMediaPlayerImpl(); |
| 641 WebMediaPlayerImpl::PlayState state; | 671 WebMediaPlayerImpl::PlayState state; |
| 642 SetMetadata(true, true); | 672 SetMetadata(true, true); |
| 643 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); | 673 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); |
| 644 | 674 |
| 645 SetupForResumingBackgroundVideo(); | 675 SetupForResumingBackgroundVideo(); |
| 646 | 676 |
| 647 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()).WillOnce(Return(false)); | 677 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()).WillOnce(Return(false)); |
| 648 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true)); | 678 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true)); |
| 649 | 679 |
| 650 state = ComputeBackgroundedPlayState(); | 680 state = ComputeBackgroundedPlayState(); |
| 651 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); | 681 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); |
| 652 EXPECT_FALSE(state.is_memory_reporting_enabled); | 682 EXPECT_FALSE(state.is_memory_reporting_enabled); |
| 653 EXPECT_TRUE(state.is_suspended); | 683 EXPECT_TRUE(state.is_suspended); |
| 654 } | 684 } |
| 655 | 685 |
| 656 } // namespace media | 686 } // namespace media |
| OLD | NEW |