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

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

Issue 2490783002: Refactor WebMediaPlayerDelegate interface. (Closed)
Patch Set: Fix did_play_ to only be set once per play. Created 3 years, 11 months 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
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 }; 104 };
105 105
106 class MockWebMediaPlayerDelegate 106 class MockWebMediaPlayerDelegate
107 : public WebMediaPlayerDelegate, 107 : public WebMediaPlayerDelegate,
108 public base::SupportsWeakPtr<MockWebMediaPlayerDelegate> { 108 public base::SupportsWeakPtr<MockWebMediaPlayerDelegate> {
109 public: 109 public:
110 MockWebMediaPlayerDelegate() = default; 110 MockWebMediaPlayerDelegate() = default;
111 ~MockWebMediaPlayerDelegate() = default; 111 ~MockWebMediaPlayerDelegate() = default;
112 112
113 // WebMediaPlayerDelegate implementation. 113 // WebMediaPlayerDelegate implementation.
114 MOCK_METHOD1(AddObserver, int(Observer*)); 114 int AddObserver(Observer* observer) override {
115 MOCK_METHOD1(RemoveObserver, void(int)); 115 DCHECK_EQ(nullptr, observer_);
116 MOCK_METHOD5(DidPlay, void(int, bool, bool, bool, MediaContentType)); 116 observer_ = observer;
117 MOCK_METHOD2(DidPause, void(int, bool)); 117 return player_id_;
118 }
119
120 void RemoveObserver(int player_id) override {
121 DCHECK_EQ(player_id_, player_id);
122 observer_ = nullptr;
123 }
124
125 MOCK_METHOD4(DidPlay, void(int, bool, bool, MediaContentType));
126 MOCK_METHOD1(DidPause, void(int));
118 MOCK_METHOD1(PlayerGone, void(int)); 127 MOCK_METHOD1(PlayerGone, void(int));
119 MOCK_METHOD0(IsHidden, bool()); 128 MOCK_METHOD0(IsBackgroundVideoPlaybackAllowed, bool());
120 MOCK_METHOD0(IsPlayingBackgroundVideo, bool()); 129
130 void SetIdle(int player_id, bool is_idle) override {
131 DCHECK_EQ(player_id_, player_id);
132 is_idle_ = is_idle;
133 is_stale_ &= is_idle;
134 }
135
136 bool IsIdle(int player_id) override {
137 DCHECK_EQ(player_id_, player_id);
138 return is_idle_;
139 }
140
141 void ClearStaleFlag(int player_id) override {
142 DCHECK_EQ(player_id_, player_id);
143 is_stale_ = false;
144 }
145
146 bool IsStale(int player_id) override {
147 DCHECK_EQ(player_id_, player_id);
148 return is_stale_;
149 }
150
151 // Currently |is_backgrounded| overrides this completely, so no explicit
152 // control is needed.
153 bool IsFrameHidden() override { return is_closed_; }
154
155 bool IsFrameClosed() override { return is_closed_; }
156
157 void SetIdleForTesting(bool is_idle) { is_idle_ = is_idle; }
158
159 void SetStaleForTesting(bool is_stale) {
160 is_idle_ |= is_stale;
161 is_stale_ = is_stale;
162 }
163
164 // Returns true if the player does in fact expire.
165 bool ExpireForTesting() {
166 if (is_idle_ && !is_stale_) {
167 is_stale_ = true;
168 observer_->OnIdleTimeout();
169 }
170
171 return is_stale_;
172 }
173
174 void SetFrameClosedForTesting(bool is_closed) { is_closed_ = is_closed; }
175
176 private:
177 Observer* observer_ = nullptr;
178 int player_id_ = 1234;
179 bool is_idle_ = false;
180 bool is_stale_ = false;
181 bool is_closed_ = false;
121 }; 182 };
122 183
123 class WebMediaPlayerImplTest : public testing::Test { 184 class WebMediaPlayerImplTest : public testing::Test {
124 public: 185 public:
125 WebMediaPlayerImplTest() 186 WebMediaPlayerImplTest()
126 : media_thread_("MediaThreadForTest"), 187 : media_thread_("MediaThreadForTest"),
127 web_view_(blink::WebView::create(nullptr, 188 web_view_(blink::WebView::create(nullptr,
128 blink::WebPageVisibilityStateVisible)), 189 blink::WebPageVisibilityStateVisible)),
129 web_local_frame_( 190 web_local_frame_(
130 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, 191 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 wmpi_->pipeline_metadata_.has_video = has_video; 243 wmpi_->pipeline_metadata_.has_video = has_video;
183 } 244 }
184 245
185 void OnMetadata(PipelineMetadata metadata) { wmpi_->OnMetadata(metadata); } 246 void OnMetadata(PipelineMetadata metadata) { wmpi_->OnMetadata(metadata); }
186 247
187 void OnVideoNaturalSizeChange(const gfx::Size& size) { 248 void OnVideoNaturalSizeChange(const gfx::Size& size) {
188 wmpi_->OnVideoNaturalSizeChange(size); 249 wmpi_->OnVideoNaturalSizeChange(size);
189 } 250 }
190 251
191 WebMediaPlayerImpl::PlayState ComputePlayState() { 252 WebMediaPlayerImpl::PlayState ComputePlayState() {
192 wmpi_->is_idle_ = false;
193 wmpi_->must_suspend_ = false;
194 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false); 253 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false);
195 } 254 }
196 255
197 WebMediaPlayerImpl::PlayState ComputePlayStateSuspended() { 256 WebMediaPlayerImpl::PlayState ComputePlayState_FrameHidden() {
198 wmpi_->is_idle_ = false; 257 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, true);
199 wmpi_->must_suspend_ = false; 258 }
259
260 WebMediaPlayerImpl::PlayState ComputePlayState_Suspended() {
200 return wmpi_->UpdatePlayState_ComputePlayState(false, false, true, false); 261 return wmpi_->UpdatePlayState_ComputePlayState(false, false, true, false);
201 } 262 }
202 263
203 WebMediaPlayerImpl::PlayState ComputeBackgroundedPlayState() { 264 WebMediaPlayerImpl::PlayState ComputePlayState_Remote() {
204 wmpi_->is_idle_ = false; 265 return wmpi_->UpdatePlayState_ComputePlayState(true, false, false, false);
205 wmpi_->must_suspend_ = false;
206 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, true);
207 } 266 }
208 267
209 WebMediaPlayerImpl::PlayState ComputeIdlePlayState() { 268 WebMediaPlayerImpl::PlayState ComputePlayState_BackgroundedStreaming() {
210 wmpi_->is_idle_ = true;
211 wmpi_->must_suspend_ = false;
212 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false);
213 }
214
215 WebMediaPlayerImpl::PlayState ComputeIdleSuspendedPlayState() {
216 wmpi_->is_idle_ = true;
217 wmpi_->must_suspend_ = false;
218 return wmpi_->UpdatePlayState_ComputePlayState(false, false, true, false);
219 }
220
221 WebMediaPlayerImpl::PlayState ComputeMustSuspendPlayState() {
222 wmpi_->is_idle_ = false;
223 wmpi_->must_suspend_ = true;
224 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false);
225 }
226
227 WebMediaPlayerImpl::PlayState ComputeStreamingPlayState(bool must_suspend) {
228 wmpi_->is_idle_ = true;
229 wmpi_->must_suspend_ = must_suspend;
230 return wmpi_->UpdatePlayState_ComputePlayState(false, true, false, true); 269 return wmpi_->UpdatePlayState_ComputePlayState(false, true, false, true);
231 } 270 }
232 271
233 void SetDelegateState(WebMediaPlayerImpl::DelegateState state) {
234 wmpi_->SetDelegateState(state);
235 }
236
237 bool IsSuspended() { return wmpi_->pipeline_controller_.IsSuspended(); } 272 bool IsSuspended() { return wmpi_->pipeline_controller_.IsSuspended(); }
238 273
239 void AddBufferedRanges() { 274 void AddBufferedRanges() {
240 wmpi_->buffered_data_source_host_.AddBufferedByteRange(0, 1); 275 wmpi_->buffered_data_source_host_.AddBufferedByteRange(0, 1);
241 } 276 }
242 277
243 void SetupForResumingBackgroundVideo() { 278 void SetDelegateState(WebMediaPlayerImpl::DelegateState state) {
244 #if !defined(OS_ANDROID) 279 wmpi_->SetDelegateState(state, false);
245 // Need to enable media suspend to test resuming background videos.
246 base::CommandLine::ForCurrentProcess()->AppendSwitch(
247 switches::kEnableMediaSuspend);
248 #endif // !defined(OS_ANDROID)
249 scoped_feature_list_.InitAndEnableFeature(kResumeBackgroundVideo);
250 } 280 }
251 281
252 // "Renderer" thread. 282 // "Renderer" thread.
253 base::MessageLoop message_loop_; 283 base::MessageLoop message_loop_;
254 284
255 // "Media" thread. This is necessary because WMPI destruction waits on a 285 // "Media" thread. This is necessary because WMPI destruction waits on a
256 // WaitableEvent. 286 // WaitableEvent.
257 base::Thread media_thread_; 287 base::Thread media_thread_;
258 288
259 // Blink state. 289 // Blink state.
260 blink::WebFrameClient web_frame_client_; 290 blink::WebFrameClient web_frame_client_;
261 blink::WebView* web_view_; 291 blink::WebView* web_view_;
262 blink::WebLocalFrame* web_local_frame_; 292 blink::WebLocalFrame* web_local_frame_;
263 293
264 scoped_refptr<MediaLog> media_log_; 294 scoped_refptr<MediaLog> media_log_;
265 linked_ptr<media::UrlIndex> url_index_; 295 linked_ptr<media::UrlIndex> url_index_;
266 296
267 // Audio hardware configuration. 297 // Audio hardware configuration.
268 AudioParameters audio_parameters_; 298 AudioParameters audio_parameters_;
269 299
270 // The client interface used by |wmpi_|. Just a dummy for now, but later we 300 // The client interface used by |wmpi_|. Just a dummy for now, but later we
271 // may want a mock or intelligent fake. 301 // may want a mock or intelligent fake.
272 DummyWebMediaPlayerClient client_; 302 DummyWebMediaPlayerClient client_;
273 303
274 testing::NiceMock<MockWebMediaPlayerDelegate> delegate_; 304 testing::NiceMock<MockWebMediaPlayerDelegate> delegate_;
275 305
276 // The WebMediaPlayerImpl instance under test. 306 // The WebMediaPlayerImpl instance under test.
277 std::unique_ptr<WebMediaPlayerImpl> wmpi_; 307 std::unique_ptr<WebMediaPlayerImpl> wmpi_;
278 308
279 private:
280 base::test::ScopedFeatureList scoped_feature_list_;
281
282 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest); 309 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest);
283 }; 310 };
284 311
285 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) { 312 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {
286 InitializeWebMediaPlayerImpl(); 313 InitializeWebMediaPlayerImpl();
314 EXPECT_FALSE(IsSuspended());
287 } 315 }
288 316
289 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledBeforeLoadingBegins) { 317 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledBeforeLoadingBegins) {
290 InitializeWebMediaPlayerImpl(); 318 InitializeWebMediaPlayerImpl();
291 wmpi_->OnSuspendRequested(false); 319 EXPECT_TRUE(delegate_.ExpireForTesting());
292 base::RunLoop().RunUntilIdle(); 320 base::RunLoop().RunUntilIdle();
293 EXPECT_TRUE(IsSuspended()); 321 EXPECT_TRUE(IsSuspended());
294 } 322 }
295 323
296 TEST_F(WebMediaPlayerImplTest, 324 TEST_F(WebMediaPlayerImplTest,
297 IdleSuspendIsDisabledIfLoadingProgressedRecently) { 325 IdleSuspendIsDisabledIfLoadingProgressedRecently) {
298 InitializeWebMediaPlayerImpl(); 326 InitializeWebMediaPlayerImpl();
299 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 327 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
300 clock->Advance(base::TimeDelta::FromSeconds(1)); 328 clock->Advance(base::TimeDelta::FromSeconds(1));
301 SetTickClock(clock); 329 SetTickClock(clock);
302 AddBufferedRanges(); 330 AddBufferedRanges();
303 wmpi_->didLoadingProgress(); 331 wmpi_->didLoadingProgress();
304 // Advance less than the loading timeout. 332 // Advance less than the loading timeout.
305 clock->Advance(base::TimeDelta::FromSeconds(1)); 333 clock->Advance(base::TimeDelta::FromSeconds(1));
306 wmpi_->OnSuspendRequested(false); 334 EXPECT_FALSE(delegate_.ExpireForTesting());
307 base::RunLoop().RunUntilIdle(); 335 base::RunLoop().RunUntilIdle();
308 EXPECT_FALSE(IsSuspended()); 336 EXPECT_FALSE(IsSuspended());
309 } 337 }
310 338
311 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledIfLoadingHasStalled) { 339 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledIfLoadingHasStalled) {
312 InitializeWebMediaPlayerImpl(); 340 InitializeWebMediaPlayerImpl();
313 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 341 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
314 clock->Advance(base::TimeDelta::FromSeconds(1)); 342 clock->Advance(base::TimeDelta::FromSeconds(1));
315 SetTickClock(clock); 343 SetTickClock(clock);
316 AddBufferedRanges(); 344 AddBufferedRanges();
317 wmpi_->didLoadingProgress(); 345 wmpi_->didLoadingProgress();
318 // Advance more than the loading timeout. 346 // Advance more than the loading timeout.
319 clock->Advance(base::TimeDelta::FromSeconds(4)); 347 clock->Advance(base::TimeDelta::FromSeconds(4));
320 wmpi_->OnSuspendRequested(false); 348 EXPECT_TRUE(delegate_.ExpireForTesting());
321 base::RunLoop().RunUntilIdle(); 349 base::RunLoop().RunUntilIdle();
322 EXPECT_TRUE(IsSuspended()); 350 EXPECT_TRUE(IsSuspended());
323 } 351 }
324 352
325 TEST_F(WebMediaPlayerImplTest, DidLoadingProgressTriggersResume) { 353 TEST_F(WebMediaPlayerImplTest, DidLoadingProgressTriggersResume) {
326 InitializeWebMediaPlayerImpl(); 354 // Same setup as IdleSuspendIsEnabledBeforeLoadingBegins.
327 EXPECT_FALSE(IsSuspended()); 355 InitializeWebMediaPlayerImpl();
328 wmpi_->OnSuspendRequested(false); 356 EXPECT_TRUE(delegate_.ExpireForTesting());
329 base::RunLoop().RunUntilIdle(); 357 base::RunLoop().RunUntilIdle();
330 EXPECT_TRUE(IsSuspended()); 358 EXPECT_TRUE(IsSuspended());
359
360 // Like IdleSuspendIsDisabledIfLoadingProgressedRecently, the idle timeout
361 // should be rejected if it hasn't been long enough.
331 AddBufferedRanges(); 362 AddBufferedRanges();
332 wmpi_->didLoadingProgress(); 363 wmpi_->didLoadingProgress();
364 EXPECT_FALSE(delegate_.ExpireForTesting());
333 base::RunLoop().RunUntilIdle(); 365 base::RunLoop().RunUntilIdle();
334 EXPECT_FALSE(IsSuspended()); 366 EXPECT_FALSE(IsSuspended());
335 } 367 }
336 368
337 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) { 369 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Constructed) {
338 InitializeWebMediaPlayerImpl(); 370 InitializeWebMediaPlayerImpl();
371 WebMediaPlayerImpl::PlayState state = ComputePlayState();
372 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
373 EXPECT_TRUE(state.is_idle);
374 EXPECT_FALSE(state.is_suspended);
375 EXPECT_FALSE(state.is_memory_reporting_enabled);
376 }
377
378 TEST_F(WebMediaPlayerImplTest, ComputePlayState_HaveMetadata) {
379 InitializeWebMediaPlayerImpl();
380 SetMetadata(true, true);
381 WebMediaPlayerImpl::PlayState state = ComputePlayState();
382 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
383 EXPECT_TRUE(state.is_idle);
384 EXPECT_FALSE(state.is_suspended);
385 EXPECT_FALSE(state.is_memory_reporting_enabled);
386 }
387
388 TEST_F(WebMediaPlayerImplTest, ComputePlayState_HaveFutureData) {
389 InitializeWebMediaPlayerImpl();
390 SetMetadata(true, true);
391 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
392 WebMediaPlayerImpl::PlayState state = ComputePlayState();
393 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
394 EXPECT_TRUE(state.is_idle);
395 EXPECT_FALSE(state.is_suspended);
396 EXPECT_FALSE(state.is_memory_reporting_enabled);
397 }
398
399 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
400 InitializeWebMediaPlayerImpl();
401 SetMetadata(true, true);
402 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
403 SetPaused(false);
404 WebMediaPlayerImpl::PlayState state = ComputePlayState();
405 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
406 EXPECT_FALSE(state.is_idle);
407 EXPECT_FALSE(state.is_suspended);
408 EXPECT_TRUE(state.is_memory_reporting_enabled);
409 }
410
411 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Underflow) {
412 InitializeWebMediaPlayerImpl();
413 SetMetadata(true, true);
414 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
415 SetPaused(false);
416 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData);
417 WebMediaPlayerImpl::PlayState state = ComputePlayState();
418 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
419 EXPECT_FALSE(state.is_idle);
420 EXPECT_FALSE(state.is_suspended);
421 EXPECT_TRUE(state.is_memory_reporting_enabled);
422 }
423
424 TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameHidden) {
425 InitializeWebMediaPlayerImpl();
426 SetMetadata(true, true);
427 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
428 SetPaused(false);
429
430 {
431 base::test::ScopedFeatureList scoped_feature_list;
432 scoped_feature_list.InitAndEnableFeature(kResumeBackgroundVideo);
433
434 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
435 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
436 EXPECT_TRUE(state.is_idle);
437 EXPECT_TRUE(state.is_suspended);
438 EXPECT_FALSE(state.is_memory_reporting_enabled);
439 }
440
441 {
442 base::test::ScopedFeatureList scoped_feature_list;
443 scoped_feature_list.InitAndDisableFeature(kResumeBackgroundVideo);
444
445 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
446 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
447 EXPECT_TRUE(state.is_idle);
448 EXPECT_TRUE(state.is_suspended);
449 EXPECT_FALSE(state.is_memory_reporting_enabled);
450 }
451 }
452
453 TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameClosed) {
454 InitializeWebMediaPlayerImpl();
455 SetMetadata(true, true);
456 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
457 SetPaused(false);
458 delegate_.SetFrameClosedForTesting(true);
459 WebMediaPlayerImpl::PlayState state = ComputePlayState();
460 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
461 EXPECT_TRUE(state.is_idle);
462 EXPECT_TRUE(state.is_suspended);
463 EXPECT_FALSE(state.is_memory_reporting_enabled);
464 }
465
466 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PausedSeek) {
467 InitializeWebMediaPlayerImpl();
468 SetMetadata(true, true);
469 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
470 SetSeeking(true);
471 WebMediaPlayerImpl::PlayState state = ComputePlayState();
472 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
473 EXPECT_FALSE(state.is_idle);
474 EXPECT_FALSE(state.is_suspended);
475 EXPECT_TRUE(state.is_memory_reporting_enabled);
476 }
477
478 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
479 InitializeWebMediaPlayerImpl();
480 SetMetadata(true, true);
481 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
482 SetPaused(false);
483 SetEnded(true);
484
485 // Before Blink pauses us (or seeks for looping content), the media session
486 // should be preserved.
339 WebMediaPlayerImpl::PlayState state; 487 WebMediaPlayerImpl::PlayState state;
340
341 state = ComputePlayState(); 488 state = ComputePlayState();
342 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 489 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
343 EXPECT_FALSE(state.is_memory_reporting_enabled); 490 EXPECT_FALSE(state.is_idle);
344 EXPECT_FALSE(state.is_suspended); 491 EXPECT_FALSE(state.is_suspended);
345 492 EXPECT_TRUE(state.is_memory_reporting_enabled);
346 state = ComputeIdlePlayState(); 493
347 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 494 SetPaused(true);
348 EXPECT_FALSE(state.is_memory_reporting_enabled); 495 state = ComputePlayState();
349 EXPECT_TRUE(state.is_suspended); 496 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
350 497 EXPECT_TRUE(state.is_idle);
351 state = ComputeBackgroundedPlayState(); 498 EXPECT_FALSE(state.is_suspended);
352 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 499 EXPECT_FALSE(state.is_memory_reporting_enabled);
353 EXPECT_FALSE(state.is_memory_reporting_enabled); 500 }
354 EXPECT_FALSE(state.is_suspended); 501
355 502 TEST_F(WebMediaPlayerImplTest, ComputePlayState_StaysSuspended) {
356 state = ComputeMustSuspendPlayState(); 503 InitializeWebMediaPlayerImpl();
357 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 504 SetMetadata(true, true);
358 EXPECT_FALSE(state.is_memory_reporting_enabled); 505 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
359 EXPECT_TRUE(state.is_suspended); 506
360 } 507 // Should stay suspended even though not stale or backgrounded.
361 508 WebMediaPlayerImpl::PlayState state = ComputePlayState_Suspended();
362 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) { 509 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
363 InitializeWebMediaPlayerImpl(); 510 EXPECT_TRUE(state.is_idle);
511 EXPECT_TRUE(state.is_suspended);
512 EXPECT_FALSE(state.is_memory_reporting_enabled);
513 }
514
515 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Remote) {
516 InitializeWebMediaPlayerImpl();
517 SetMetadata(true, true);
518 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
519
520 // Remote media is always suspended.
521 // TODO(sandersd): Decide whether this should count as idle or not.
522 WebMediaPlayerImpl::PlayState state = ComputePlayState_Remote();
523 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
524 EXPECT_TRUE(state.is_suspended);
525 EXPECT_FALSE(state.is_memory_reporting_enabled);
526 }
527
528 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Fullscreen) {
529 InitializeWebMediaPlayerImpl();
530 SetMetadata(true, true);
531 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
532 SetFullscreen(true);
533 SetPaused(true);
534 delegate_.SetStaleForTesting(true);
535
536 // Fullscreen media is never suspended (Android only behavior).
537 WebMediaPlayerImpl::PlayState state = ComputePlayState();
538 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
539 EXPECT_TRUE(state.is_idle);
540 EXPECT_FALSE(state.is_suspended);
541 EXPECT_FALSE(state.is_memory_reporting_enabled);
542 }
543
544 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Streaming) {
545 InitializeWebMediaPlayerImpl();
546 SetMetadata(true, true);
547 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
548 SetPaused(true);
549 delegate_.SetStaleForTesting(true);
550
551 // Streaming media should not suspend, even if paused, stale, and
552 // backgrounded.
364 WebMediaPlayerImpl::PlayState state; 553 WebMediaPlayerImpl::PlayState state;
365 SetMetadata(true, true); 554 state = ComputePlayState_BackgroundedStreaming();
366 555 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
367 state = ComputePlayState(); 556 EXPECT_TRUE(state.is_idle);
368 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 557 EXPECT_FALSE(state.is_suspended);
369 EXPECT_FALSE(state.is_memory_reporting_enabled); 558 EXPECT_FALSE(state.is_memory_reporting_enabled);
370 EXPECT_FALSE(state.is_suspended); 559
371 560 // Streaming media should suspend when the tab is closed, regardless.
372 state = ComputeIdlePlayState(); 561 delegate_.SetFrameClosedForTesting(true);
373 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 562 state = ComputePlayState_BackgroundedStreaming();
374 EXPECT_FALSE(state.is_memory_reporting_enabled); 563 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
375 EXPECT_TRUE(state.is_suspended); 564 EXPECT_TRUE(state.is_idle);
376 565 EXPECT_TRUE(state.is_suspended);
377 state = ComputeBackgroundedPlayState(); 566 EXPECT_FALSE(state.is_memory_reporting_enabled);
378 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 567 }
379 EXPECT_FALSE(state.is_memory_reporting_enabled); 568
380 EXPECT_TRUE(state.is_suspended); 569 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingBackgroundedVideo) {
381 570 base::test::ScopedFeatureList scoped_feature_list;
382 state = ComputeMustSuspendPlayState(); 571 scoped_feature_list.InitAndEnableFeature(kResumeBackgroundVideo);
383 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 572
384 EXPECT_FALSE(state.is_memory_reporting_enabled); 573 InitializeWebMediaPlayerImpl();
385 EXPECT_TRUE(state.is_suspended); 574 SetMetadata(true, true);
386 } 575 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
387 576 SetPaused(false);
388 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) { 577 EXPECT_CALL(delegate_, IsBackgroundVideoPlaybackAllowed())
389 InitializeWebMediaPlayerImpl(); 578 .WillRepeatedly(Return(true));
390 WebMediaPlayerImpl::PlayState state; 579
580 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
581 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
582 EXPECT_FALSE(state.is_idle);
583 EXPECT_FALSE(state.is_suspended);
584 EXPECT_TRUE(state.is_memory_reporting_enabled);
585 }
586
587 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AudioOnly) {
588 InitializeWebMediaPlayerImpl();
391 SetMetadata(true, false); 589 SetMetadata(true, false);
392 590 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
393 state = ComputePlayState(); 591 SetPaused(false);
394 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 592
395 EXPECT_FALSE(state.is_memory_reporting_enabled); 593 // Backgrounded audio-only playback stays playing.
396 EXPECT_FALSE(state.is_suspended); 594 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
397 595 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
398 state = ComputeIdlePlayState(); 596 EXPECT_FALSE(state.is_idle);
399 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 597 EXPECT_FALSE(state.is_suspended);
400 EXPECT_FALSE(state.is_memory_reporting_enabled); 598 EXPECT_TRUE(state.is_memory_reporting_enabled);
401 EXPECT_TRUE(state.is_suspended); 599 }
402 600
403 SetPaused(false); 601 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) {
404 state = ComputeBackgroundedPlayState(); 602 InitializeWebMediaPlayerImpl();
405 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 603 SetMetadata(true, true);
406 EXPECT_FALSE(state.is_memory_reporting_enabled); 604 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
407 EXPECT_FALSE(state.is_suspended); 605 SetPaused(false);
408 606 client_.set_is_autoplaying_muted(true);
409 state = ComputeMustSuspendPlayState(); 607
410 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 608 EXPECT_CALL(delegate_, DidPlay(_, false, true, _));
411 EXPECT_FALSE(state.is_memory_reporting_enabled); 609 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
412 EXPECT_TRUE(state.is_suspended); 610
413 } 611 client_.set_is_autoplaying_muted(false);
414 612 EXPECT_CALL(delegate_, DidPlay(_, true, true, _));
415 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) { 613 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
416 InitializeWebMediaPlayerImpl(); 614 }
417 WebMediaPlayerImpl::PlayState state; 615
418 SetMetadata(true, true); 616 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_SetVolume) {
419 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 617 InitializeWebMediaPlayerImpl();
420 618 SetMetadata(true, true);
421 state = ComputePlayState(); 619 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
422 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 620 SetPaused(false);
423 EXPECT_FALSE(state.is_memory_reporting_enabled); 621 client_.set_is_autoplaying_muted(true);
424 EXPECT_FALSE(state.is_suspended); 622
425 623 EXPECT_CALL(delegate_, DidPlay(_, false, true, _));
426 state = ComputeBackgroundedPlayState(); 624 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
427 625
428 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo)) 626 client_.set_is_autoplaying_muted(false);
429 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 627 EXPECT_CALL(delegate_, DidPlay(_, true, true, _));
430 else 628 wmpi_->setVolume(1.0);
431 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
432 EXPECT_FALSE(state.is_memory_reporting_enabled);
433 EXPECT_TRUE(state.is_suspended);
434
435 // Idle suspension is possible after HaveFutureData.
436 state = ComputeIdlePlayState();
437 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
438 EXPECT_FALSE(state.is_memory_reporting_enabled);
439 EXPECT_TRUE(state.is_suspended);
440
441 state = ComputeMustSuspendPlayState();
442 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
443 EXPECT_FALSE(state.is_memory_reporting_enabled);
444 EXPECT_TRUE(state.is_suspended);
445 }
446
447 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
448 InitializeWebMediaPlayerImpl();
449 WebMediaPlayerImpl::PlayState state;
450 SetMetadata(true, true);
451 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
452 SetPaused(false);
453
454 state = ComputePlayState();
455 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
456 EXPECT_TRUE(state.is_memory_reporting_enabled);
457 EXPECT_FALSE(state.is_suspended);
458
459 state = ComputeBackgroundedPlayState();
460 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo))
461 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
462 else
463 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
464 EXPECT_FALSE(state.is_memory_reporting_enabled);
465 EXPECT_TRUE(state.is_suspended);
466
467 state = ComputeMustSuspendPlayState();
468 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
469 EXPECT_FALSE(state.is_memory_reporting_enabled);
470 EXPECT_TRUE(state.is_suspended);
471 }
472
473 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) {
474 InitializeWebMediaPlayerImpl();
475 WebMediaPlayerImpl::PlayState state;
476 SetMetadata(true, true);
477 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
478 SetPaused(false);
479 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData);
480
481 // Underflow should not trigger idle suspend. The user is still playing the
482 // the video, just waiting on the network.
483 state = ComputePlayState();
484 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
485 EXPECT_TRUE(state.is_memory_reporting_enabled);
486 EXPECT_FALSE(state.is_suspended);
487
488 // Background suspend should still be possible during underflow.
489 state = ComputeBackgroundedPlayState();
490 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo))
491 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
492 else
493 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
494 EXPECT_FALSE(state.is_memory_reporting_enabled);
495 EXPECT_TRUE(state.is_suspended);
496
497 // Forced suspend should still be possible during underflow.
498 state = ComputeMustSuspendPlayState();
499 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
500 EXPECT_FALSE(state.is_memory_reporting_enabled);
501 EXPECT_TRUE(state.is_suspended);
502 }
503
504 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) {
505 InitializeWebMediaPlayerImpl();
506 WebMediaPlayerImpl::PlayState state;
507 SetMetadata(true, false);
508 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
509 SetPaused(false);
510
511 state = ComputePlayState();
512 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
513 EXPECT_TRUE(state.is_memory_reporting_enabled);
514 EXPECT_FALSE(state.is_suspended);
515
516 // Audio-only stays playing in the background.
517 state = ComputeBackgroundedPlayState();
518 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
519 EXPECT_TRUE(state.is_memory_reporting_enabled);
520 EXPECT_FALSE(state.is_suspended);
521
522 // Backgrounding a paused audio only player should suspend, but keep the
523 // session alive for user interactions.
524 SetPaused(true);
525 state = ComputeBackgroundedPlayState();
526 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
527 EXPECT_FALSE(state.is_memory_reporting_enabled);
528 EXPECT_TRUE(state.is_suspended);
529
530 state = ComputeMustSuspendPlayState();
531 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
532 EXPECT_FALSE(state.is_memory_reporting_enabled);
533 EXPECT_TRUE(state.is_suspended);
534 }
535
536 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) {
537 InitializeWebMediaPlayerImpl();
538 WebMediaPlayerImpl::PlayState state;
539 SetMetadata(true, true);
540 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
541 SetSeeking(true);
542
543 state = ComputePlayState();
544 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
545 EXPECT_FALSE(state.is_memory_reporting_enabled);
546 EXPECT_FALSE(state.is_suspended);
547 }
548
549 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Fullscreen) {
550 InitializeWebMediaPlayerImpl();
551 WebMediaPlayerImpl::PlayState state;
552 SetMetadata(true, true);
553 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
554 SetFullscreen(true);
555
556 state = ComputePlayState();
557 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
558 EXPECT_FALSE(state.is_memory_reporting_enabled);
559 EXPECT_FALSE(state.is_suspended);
560 }
561
562 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Ended) {
563 InitializeWebMediaPlayerImpl();
564 WebMediaPlayerImpl::PlayState state;
565 SetMetadata(true, true);
566 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
567 SetEnded(true);
568
569 // The pipeline is not suspended immediately on ended.
570 state = ComputePlayState();
571 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
572 EXPECT_FALSE(state.is_memory_reporting_enabled);
573 EXPECT_FALSE(state.is_suspended);
574
575 state = ComputeIdlePlayState();
576 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
577 EXPECT_FALSE(state.is_memory_reporting_enabled);
578 EXPECT_TRUE(state.is_suspended);
579 }
580
581 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Streaming) {
582 InitializeWebMediaPlayerImpl();
583 WebMediaPlayerImpl::PlayState state;
584 SetMetadata(true, true);
585
586 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
587 SetPaused(true);
588
589 // Streaming media should not suspend, even if paused, idle, and backgrounded.
590 state = ComputeStreamingPlayState(false);
591 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
592 EXPECT_FALSE(state.is_memory_reporting_enabled);
593 EXPECT_FALSE(state.is_suspended);
594
595 // Streaming media should suspend when the tab is closed, regardless.
596 state = ComputeStreamingPlayState(true);
597 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
598 EXPECT_FALSE(state.is_memory_reporting_enabled);
599 EXPECT_TRUE(state.is_suspended);
600 }
601
602 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
603 InitializeWebMediaPlayerImpl();
604 WebMediaPlayerImpl::PlayState state;
605 SetMetadata(true, true);
606
607 // Suspended players should be resumed unless we have reached the appropriate
608 // ready state and are not seeking.
609 SetPaused(true);
610 state = ComputePlayStateSuspended();
611 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
612 EXPECT_FALSE(state.is_memory_reporting_enabled);
613 EXPECT_FALSE(state.is_suspended);
614
615 // Paused players in the idle state are allowed to remain suspended.
616 state = ComputeIdleSuspendedPlayState();
617 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
618 EXPECT_FALSE(state.is_memory_reporting_enabled);
619 EXPECT_TRUE(state.is_suspended);
620
621 SetPaused(false);
622 state = ComputePlayStateSuspended();
623 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
624 EXPECT_FALSE(state.is_memory_reporting_enabled);
625 EXPECT_FALSE(state.is_suspended);
626
627 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
628
629 // Paused players should stay suspended.
630 SetPaused(true);
631 state = ComputePlayStateSuspended();
632 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
633 EXPECT_FALSE(state.is_memory_reporting_enabled);
634 EXPECT_TRUE(state.is_suspended);
635
636 // Playing players should resume into the playing state.
637 SetPaused(false);
638 state = ComputePlayStateSuspended();
639 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
640 EXPECT_TRUE(state.is_memory_reporting_enabled);
641 EXPECT_FALSE(state.is_suspended);
642
643 // If seeking, the previously suspended state does not matter; the player
644 // should always be resumed.
645 SetSeeking(true);
646
647 SetPaused(true);
648 state = ComputePlayStateSuspended();
649 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
650 EXPECT_FALSE(state.is_memory_reporting_enabled);
651 EXPECT_FALSE(state.is_suspended);
652
653 SetPaused(false);
654 state = ComputePlayStateSuspended();
655 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
656 EXPECT_TRUE(state.is_memory_reporting_enabled);
657 EXPECT_FALSE(state.is_suspended);
658 } 629 }
659 630
660 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) { 631 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) {
661 InitializeWebMediaPlayerImpl(); 632 InitializeWebMediaPlayerImpl();
662 PipelineMetadata metadata; 633 PipelineMetadata metadata;
663 metadata.has_video = true; 634 metadata.has_video = true;
664 metadata.natural_size = gfx::Size(320, 240); 635 metadata.natural_size = gfx::Size(320, 240);
665 636
666 OnMetadata(metadata); 637 OnMetadata(metadata);
667 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize()); 638 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize());
(...skipping 11 matching lines...) Expand all
679 metadata.video_rotation = VIDEO_ROTATION_90; 650 metadata.video_rotation = VIDEO_ROTATION_90;
680 651
681 // For 90/270deg rotations, the natural size should be transposed. 652 // For 90/270deg rotations, the natural size should be transposed.
682 OnMetadata(metadata); 653 OnMetadata(metadata);
683 ASSERT_EQ(blink::WebSize(240, 320), wmpi_->naturalSize()); 654 ASSERT_EQ(blink::WebSize(240, 320), wmpi_->naturalSize());
684 655
685 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); 656 OnVideoNaturalSizeChange(gfx::Size(1920, 1080));
686 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize()); 657 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize());
687 } 658 }
688 659
689 // Audible backgrounded videos are not suspended if delegate_ allows it.
690 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPlaying) {
691 InitializeWebMediaPlayerImpl();
692 WebMediaPlayerImpl::PlayState state;
693 SetMetadata(true, true);
694 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
695
696 SetupForResumingBackgroundVideo();
697
698 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo())
699 .WillRepeatedly(Return(true));
700 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true));
701
702 SetPaused(false);
703 state = ComputeBackgroundedPlayState();
704 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
705 EXPECT_TRUE(state.is_memory_reporting_enabled);
706 EXPECT_FALSE(state.is_suspended);
707 }
708
709 // Backgrounding audible videos should suspend them and report as paused, not
710 // gone.
711 TEST_F(WebMediaPlayerImplTest, ComputePlayState_BackgroundedVideoPaused) {
712 InitializeWebMediaPlayerImpl();
713 WebMediaPlayerImpl::PlayState state;
714 SetMetadata(true, true);
715 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
716
717 SetupForResumingBackgroundVideo();
718
719 EXPECT_CALL(delegate_, IsPlayingBackgroundVideo()).WillOnce(Return(false));
720 EXPECT_CALL(delegate_, IsHidden()).WillRepeatedly(Return(true));
721
722 state = ComputeBackgroundedPlayState();
723 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
724 EXPECT_FALSE(state.is_memory_reporting_enabled);
725 EXPECT_TRUE(state.is_suspended);
726 }
727
728 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) {
729 InitializeWebMediaPlayerImpl();
730 SetMetadata(true, true);
731 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
732 SetPaused(false);
733
734 EXPECT_CALL(delegate_, DidPlay(_, true, false, false, _));
735 client_.set_is_autoplaying_muted(true);
736 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
737
738 EXPECT_CALL(delegate_, DidPlay(_, true, true, false, _));
739 client_.set_is_autoplaying_muted(false);
740 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
741 }
742
743 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_SetVolume) {
744 InitializeWebMediaPlayerImpl();
745 SetMetadata(true, true);
746 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
747 SetPaused(false);
748
749 EXPECT_CALL(delegate_, DidPlay(_, true, false, false, _));
750 client_.set_is_autoplaying_muted(true);
751 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
752
753 EXPECT_CALL(delegate_, DidPlay(_, true, true, false, _));
754 client_.set_is_autoplaying_muted(false);
755 wmpi_->setVolume(1.0);
756 }
757
758 } // namespace media 660 } // 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