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

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: Use loading progress instead of decoding progress 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
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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
OLDNEW
« media/blink/webmediaplayer_impl.cc ('K') | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698