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 |