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

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

Issue 2490783002: Refactor WebMediaPlayerDelegate interface. (Closed)
Patch Set: Unit tests. Created 4 years 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 if (observer_->OnIdleTimeout()) {
168 is_stale_ = true;
169 return true;
170 }
171 }
172 return false;
173 }
174
175 void SetFrameClosedForTesting(bool is_closed) { is_closed_ = is_closed; }
176
177 private:
178 Observer* observer_ = nullptr;
179 int player_id_ = 1234;
180 bool is_idle_ = false;
181 bool is_stale_ = false;
182 bool is_closed_ = false;
121 }; 183 };
122 184
123 class WebMediaPlayerImplTest : public testing::Test { 185 class WebMediaPlayerImplTest : public testing::Test {
124 public: 186 public:
125 WebMediaPlayerImplTest() 187 WebMediaPlayerImplTest()
126 : media_thread_("MediaThreadForTest"), 188 : media_thread_("MediaThreadForTest"),
127 web_view_(blink::WebView::create(nullptr, 189 web_view_(blink::WebView::create(nullptr,
128 blink::WebPageVisibilityStateVisible)), 190 blink::WebPageVisibilityStateVisible)),
129 web_local_frame_( 191 web_local_frame_(
130 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, 192 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; 244 wmpi_->pipeline_metadata_.has_video = has_video;
183 } 245 }
184 246
185 void OnMetadata(PipelineMetadata metadata) { wmpi_->OnMetadata(metadata); } 247 void OnMetadata(PipelineMetadata metadata) { wmpi_->OnMetadata(metadata); }
186 248
187 void OnVideoNaturalSizeChange(const gfx::Size& size) { 249 void OnVideoNaturalSizeChange(const gfx::Size& size) {
188 wmpi_->OnVideoNaturalSizeChange(size); 250 wmpi_->OnVideoNaturalSizeChange(size);
189 } 251 }
190 252
191 WebMediaPlayerImpl::PlayState ComputePlayState() { 253 WebMediaPlayerImpl::PlayState ComputePlayState() {
192 wmpi_->is_idle_ = false;
193 wmpi_->must_suspend_ = false;
194 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false); 254 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, false);
195 } 255 }
196 256
197 WebMediaPlayerImpl::PlayState ComputePlayStateSuspended() { 257 WebMediaPlayerImpl::PlayState ComputePlayState_FrameHidden() {
198 wmpi_->is_idle_ = false; 258 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, true);
199 wmpi_->must_suspend_ = false; 259 }
260
261 WebMediaPlayerImpl::PlayState ComputePlayState_Suspended() {
200 return wmpi_->UpdatePlayState_ComputePlayState(false, false, true, false); 262 return wmpi_->UpdatePlayState_ComputePlayState(false, false, true, false);
201 } 263 }
202 264
203 WebMediaPlayerImpl::PlayState ComputeBackgroundedPlayState() { 265 WebMediaPlayerImpl::PlayState ComputePlayState_Remote() {
204 wmpi_->is_idle_ = false; 266 return wmpi_->UpdatePlayState_ComputePlayState(true, false, false, false);
205 wmpi_->must_suspend_ = false;
206 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false, true);
207 } 267 }
208 268
209 WebMediaPlayerImpl::PlayState ComputeIdlePlayState() { 269 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); 270 return wmpi_->UpdatePlayState_ComputePlayState(false, true, false, true);
231 } 271 }
232 272
233 void SetDelegateState(WebMediaPlayerImpl::DelegateState state) {
234 wmpi_->SetDelegateState(state);
235 }
236
237 bool IsSuspended() { return wmpi_->pipeline_controller_.IsSuspended(); } 273 bool IsSuspended() { return wmpi_->pipeline_controller_.IsSuspended(); }
238 274
239 void AddBufferedRanges() { 275 void AddBufferedRanges() {
240 wmpi_->buffered_data_source_host_.AddBufferedByteRange(0, 1); 276 wmpi_->buffered_data_source_host_.AddBufferedByteRange(0, 1);
241 } 277 }
242 278
243 void SetupForResumingBackgroundVideo() { 279 void SetupForResumingBackgroundVideo() {
244 #if !defined(OS_ANDROID) 280 #if !defined(OS_ANDROID)
245 // Need to enable media suspend to test resuming background videos. 281 // Need to enable media suspend to test resuming background videos.
246 base::CommandLine::ForCurrentProcess()->AppendSwitch( 282 base::CommandLine::ForCurrentProcess()->AppendSwitch(
247 switches::kEnableMediaSuspend); 283 switches::kEnableMediaSuspend);
248 #endif // !defined(OS_ANDROID) 284 #endif // !defined(OS_ANDROID)
249 scoped_feature_list_.InitAndEnableFeature(kResumeBackgroundVideo); 285 scoped_feature_list_.InitAndEnableFeature(kResumeBackgroundVideo);
250 } 286 }
251 287
288 void SetDelegateState(WebMediaPlayerImpl::DelegateState state) {
289 wmpi_->SetDelegateState(state, false);
290 }
291
252 // "Renderer" thread. 292 // "Renderer" thread.
253 base::MessageLoop message_loop_; 293 base::MessageLoop message_loop_;
254 294
255 // "Media" thread. This is necessary because WMPI destruction waits on a 295 // "Media" thread. This is necessary because WMPI destruction waits on a
256 // WaitableEvent. 296 // WaitableEvent.
257 base::Thread media_thread_; 297 base::Thread media_thread_;
258 298
259 // Blink state. 299 // Blink state.
260 blink::WebFrameClient web_frame_client_; 300 blink::WebFrameClient web_frame_client_;
261 blink::WebView* web_view_; 301 blink::WebView* web_view_;
(...skipping 15 matching lines...) Expand all
277 std::unique_ptr<WebMediaPlayerImpl> wmpi_; 317 std::unique_ptr<WebMediaPlayerImpl> wmpi_;
278 318
279 private: 319 private:
280 base::test::ScopedFeatureList scoped_feature_list_; 320 base::test::ScopedFeatureList scoped_feature_list_;
281 321
282 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest); 322 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerImplTest);
283 }; 323 };
284 324
285 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) { 325 TEST_F(WebMediaPlayerImplTest, ConstructAndDestroy) {
286 InitializeWebMediaPlayerImpl(); 326 InitializeWebMediaPlayerImpl();
327 EXPECT_FALSE(IsSuspended());
287 } 328 }
288 329
289 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledBeforeLoadingBegins) { 330 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledBeforeLoadingBegins) {
290 InitializeWebMediaPlayerImpl(); 331 InitializeWebMediaPlayerImpl();
291 wmpi_->OnSuspendRequested(false); 332 EXPECT_TRUE(delegate_.ExpireForTesting());
292 base::RunLoop().RunUntilIdle(); 333 base::RunLoop().RunUntilIdle();
293 EXPECT_TRUE(IsSuspended()); 334 EXPECT_TRUE(IsSuspended());
294 } 335 }
295 336
296 TEST_F(WebMediaPlayerImplTest, 337 TEST_F(WebMediaPlayerImplTest,
297 IdleSuspendIsDisabledIfLoadingProgressedRecently) { 338 IdleSuspendIsDisabledIfLoadingProgressedRecently) {
298 InitializeWebMediaPlayerImpl(); 339 InitializeWebMediaPlayerImpl();
299 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 340 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
300 clock->Advance(base::TimeDelta::FromSeconds(1)); 341 clock->Advance(base::TimeDelta::FromSeconds(1));
301 SetTickClock(clock); 342 SetTickClock(clock);
302 AddBufferedRanges(); 343 AddBufferedRanges();
303 wmpi_->didLoadingProgress(); 344 wmpi_->didLoadingProgress();
304 // Advance less than the loading timeout. 345 // Advance less than the loading timeout.
305 clock->Advance(base::TimeDelta::FromSeconds(1)); 346 clock->Advance(base::TimeDelta::FromSeconds(1));
306 wmpi_->OnSuspendRequested(false); 347 EXPECT_FALSE(delegate_.ExpireForTesting());
307 base::RunLoop().RunUntilIdle(); 348 base::RunLoop().RunUntilIdle();
308 EXPECT_FALSE(IsSuspended()); 349 EXPECT_FALSE(IsSuspended());
309 } 350 }
310 351
311 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledIfLoadingHasStalled) { 352 TEST_F(WebMediaPlayerImplTest, IdleSuspendIsEnabledIfLoadingHasStalled) {
312 InitializeWebMediaPlayerImpl(); 353 InitializeWebMediaPlayerImpl();
313 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock(); 354 base::SimpleTestTickClock* clock = new base::SimpleTestTickClock();
314 clock->Advance(base::TimeDelta::FromSeconds(1)); 355 clock->Advance(base::TimeDelta::FromSeconds(1));
315 SetTickClock(clock); 356 SetTickClock(clock);
316 AddBufferedRanges(); 357 AddBufferedRanges();
317 wmpi_->didLoadingProgress(); 358 wmpi_->didLoadingProgress();
318 // Advance more than the loading timeout. 359 // Advance more than the loading timeout.
319 clock->Advance(base::TimeDelta::FromSeconds(4)); 360 clock->Advance(base::TimeDelta::FromSeconds(4));
320 wmpi_->OnSuspendRequested(false); 361 EXPECT_TRUE(delegate_.ExpireForTesting());
321 base::RunLoop().RunUntilIdle(); 362 base::RunLoop().RunUntilIdle();
322 EXPECT_TRUE(IsSuspended()); 363 EXPECT_TRUE(IsSuspended());
323 } 364 }
324 365
325 TEST_F(WebMediaPlayerImplTest, DidLoadingProgressTriggersResume) { 366 TEST_F(WebMediaPlayerImplTest, DidLoadingProgressTriggersResume) {
326 InitializeWebMediaPlayerImpl(); 367 // Same setup as IdleSuspendIsEnabledBeforeLoadingBegins.
327 EXPECT_FALSE(IsSuspended()); 368 InitializeWebMediaPlayerImpl();
328 wmpi_->OnSuspendRequested(false); 369 EXPECT_TRUE(delegate_.ExpireForTesting());
329 base::RunLoop().RunUntilIdle(); 370 base::RunLoop().RunUntilIdle();
330 EXPECT_TRUE(IsSuspended()); 371 EXPECT_TRUE(IsSuspended());
372
373 // Like IdleSuspendIsDisabledIfLoadingProgressedRecently, the idle timeout
374 // should be rejected if it hasn't been long enough.
331 AddBufferedRanges(); 375 AddBufferedRanges();
332 wmpi_->didLoadingProgress(); 376 wmpi_->didLoadingProgress();
377 EXPECT_FALSE(delegate_.ExpireForTesting());
333 base::RunLoop().RunUntilIdle(); 378 base::RunLoop().RunUntilIdle();
334 EXPECT_FALSE(IsSuspended()); 379 EXPECT_FALSE(IsSuspended());
335 } 380 }
336 381
337 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterConstruction) { 382 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Constructed) {
338 InitializeWebMediaPlayerImpl(); 383 InitializeWebMediaPlayerImpl();
339 WebMediaPlayerImpl::PlayState state; 384 WebMediaPlayerImpl::PlayState state = ComputePlayState();
340 385 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
341 state = ComputePlayState(); 386 EXPECT_TRUE(state.is_idle);
342 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 387 EXPECT_FALSE(state.is_suspended);
343 EXPECT_FALSE(state.is_memory_reporting_enabled); 388 EXPECT_FALSE(state.is_memory_reporting_enabled);
344 EXPECT_FALSE(state.is_suspended); 389 }
345 390
346 state = ComputeIdlePlayState(); 391 TEST_F(WebMediaPlayerImplTest, ComputePlayState_HaveMetadata) {
347 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 392 InitializeWebMediaPlayerImpl();
348 EXPECT_FALSE(state.is_memory_reporting_enabled); 393 SetMetadata(true, true);
349 EXPECT_TRUE(state.is_suspended); 394 WebMediaPlayerImpl::PlayState state = ComputePlayState();
350 395 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
351 state = ComputeBackgroundedPlayState(); 396 EXPECT_TRUE(state.is_idle);
352 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 397 EXPECT_FALSE(state.is_suspended);
353 EXPECT_FALSE(state.is_memory_reporting_enabled); 398 EXPECT_FALSE(state.is_memory_reporting_enabled);
354 EXPECT_FALSE(state.is_suspended); 399 }
355 400
356 state = ComputeMustSuspendPlayState(); 401 TEST_F(WebMediaPlayerImplTest, ComputePlayState_HaveFutureData) {
357 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 402 InitializeWebMediaPlayerImpl();
358 EXPECT_FALSE(state.is_memory_reporting_enabled); 403 SetMetadata(true, true);
359 EXPECT_TRUE(state.is_suspended); 404 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
360 } 405 WebMediaPlayerImpl::PlayState state = ComputePlayState();
361 406 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
362 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata) { 407 EXPECT_TRUE(state.is_idle);
363 InitializeWebMediaPlayerImpl(); 408 EXPECT_FALSE(state.is_suspended);
364 WebMediaPlayerImpl::PlayState state; 409 EXPECT_FALSE(state.is_memory_reporting_enabled);
365 SetMetadata(true, true); 410 }
366 411
367 state = ComputePlayState(); 412 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) {
368 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 413 InitializeWebMediaPlayerImpl();
369 EXPECT_FALSE(state.is_memory_reporting_enabled); 414 SetMetadata(true, true);
370 EXPECT_FALSE(state.is_suspended); 415 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
371 416 SetPaused(false);
372 state = ComputeIdlePlayState(); 417 WebMediaPlayerImpl::PlayState state = ComputePlayState();
373 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 418 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
374 EXPECT_FALSE(state.is_memory_reporting_enabled); 419 EXPECT_FALSE(state.is_idle);
375 EXPECT_TRUE(state.is_suspended); 420 EXPECT_FALSE(state.is_suspended);
376 421 EXPECT_TRUE(state.is_memory_reporting_enabled);
377 state = ComputeBackgroundedPlayState(); 422 }
378 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 423
379 EXPECT_FALSE(state.is_memory_reporting_enabled); 424 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Underflow) {
380 EXPECT_TRUE(state.is_suspended); 425 InitializeWebMediaPlayerImpl();
381 426 SetMetadata(true, true);
382 state = ComputeMustSuspendPlayState(); 427 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
383 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 428 SetPaused(false);
384 EXPECT_FALSE(state.is_memory_reporting_enabled); 429 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData);
385 EXPECT_TRUE(state.is_suspended); 430 WebMediaPlayerImpl::PlayState state = ComputePlayState();
386 } 431 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
387 432 EXPECT_FALSE(state.is_idle);
388 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) { 433 EXPECT_FALSE(state.is_suspended);
389 InitializeWebMediaPlayerImpl(); 434 EXPECT_TRUE(state.is_memory_reporting_enabled);
390 WebMediaPlayerImpl::PlayState state; 435 }
391 SetMetadata(true, false); 436
392 437 TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameHidden) {
393 state = ComputePlayState(); 438 InitializeWebMediaPlayerImpl();
394 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 439 SetMetadata(true, true);
395 EXPECT_FALSE(state.is_memory_reporting_enabled); 440 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
396 EXPECT_FALSE(state.is_suspended); 441 SetPaused(false);
397 442 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
398 state = ComputeIdlePlayState(); 443 // TODO(sandersd): Make sure both variants are tested.
399 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
400 EXPECT_FALSE(state.is_memory_reporting_enabled);
401 EXPECT_TRUE(state.is_suspended);
402
403 SetPaused(false);
404 state = ComputeBackgroundedPlayState();
405 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
406 EXPECT_FALSE(state.is_memory_reporting_enabled);
407 EXPECT_FALSE(state.is_suspended);
408
409 state = ComputeMustSuspendPlayState();
410 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
411 EXPECT_FALSE(state.is_memory_reporting_enabled);
412 EXPECT_TRUE(state.is_suspended);
413 }
414
415 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) {
416 InitializeWebMediaPlayerImpl();
417 WebMediaPlayerImpl::PlayState state;
418 SetMetadata(true, true);
419 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
420
421 state = ComputePlayState();
422 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
423 EXPECT_FALSE(state.is_memory_reporting_enabled);
424 EXPECT_FALSE(state.is_suspended);
425
426 state = ComputeBackgroundedPlayState();
427
428 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo)) 444 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo))
429 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 445 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
430 else 446 else
431 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 447 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
432 EXPECT_FALSE(state.is_memory_reporting_enabled); 448 EXPECT_TRUE(state.is_idle);
433 EXPECT_TRUE(state.is_suspended); 449 EXPECT_TRUE(state.is_suspended);
434 450 EXPECT_FALSE(state.is_memory_reporting_enabled);
435 // Idle suspension is possible after HaveFutureData. 451 }
436 state = ComputeIdlePlayState(); 452
437 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 453 TEST_F(WebMediaPlayerImplTest, ComputePlayState_FrameClosed) {
438 EXPECT_FALSE(state.is_memory_reporting_enabled); 454 InitializeWebMediaPlayerImpl();
439 EXPECT_TRUE(state.is_suspended); 455 SetMetadata(true, true);
440 456 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
441 state = ComputeMustSuspendPlayState(); 457 SetPaused(false);
442 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 458 delegate_.SetFrameClosedForTesting(true);
443 EXPECT_FALSE(state.is_memory_reporting_enabled); 459 WebMediaPlayerImpl::PlayState state = ComputePlayState();
444 EXPECT_TRUE(state.is_suspended); 460 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
445 } 461 EXPECT_TRUE(state.is_idle);
446 462 EXPECT_TRUE(state.is_suspended);
447 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing) { 463 EXPECT_FALSE(state.is_memory_reporting_enabled);
448 InitializeWebMediaPlayerImpl(); 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.
449 WebMediaPlayerImpl::PlayState state; 487 WebMediaPlayerImpl::PlayState state;
450 SetMetadata(true, true);
451 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
452 SetPaused(false);
453
454 state = ComputePlayState(); 488 state = ComputePlayState();
455 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 489 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
456 EXPECT_TRUE(state.is_memory_reporting_enabled); 490 EXPECT_FALSE(state.is_idle);
457 EXPECT_FALSE(state.is_suspended); 491 EXPECT_FALSE(state.is_suspended);
458 492 EXPECT_TRUE(state.is_memory_reporting_enabled);
459 state = ComputeBackgroundedPlayState(); 493
460 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo)) 494 SetPaused(true);
461 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 495 state = ComputePlayState();
462 else 496 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
463 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 497 EXPECT_TRUE(state.is_idle);
464 EXPECT_FALSE(state.is_memory_reporting_enabled); 498 EXPECT_FALSE(state.is_suspended);
465 EXPECT_TRUE(state.is_suspended); 499 EXPECT_FALSE(state.is_memory_reporting_enabled);
466 500 }
467 state = ComputeMustSuspendPlayState(); 501
468 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 502 TEST_F(WebMediaPlayerImplTest, ComputePlayState_StaysSuspended) {
469 EXPECT_FALSE(state.is_memory_reporting_enabled); 503 InitializeWebMediaPlayerImpl();
470 EXPECT_TRUE(state.is_suspended); 504 SetMetadata(true, true);
471 } 505 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
472 506
473 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingThenUnderflow) { 507 // Should stay suspended even though not stale or backgrounded.
474 InitializeWebMediaPlayerImpl(); 508 WebMediaPlayerImpl::PlayState state = ComputePlayState_Suspended();
509 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
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.
475 WebMediaPlayerImpl::PlayState state; 553 WebMediaPlayerImpl::PlayState state;
476 SetMetadata(true, true); 554 state = ComputePlayState_BackgroundedStreaming();
477 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 555 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
478 SetPaused(false); 556 EXPECT_TRUE(state.is_idle);
479 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveCurrentData); 557 EXPECT_FALSE(state.is_suspended);
480 558 EXPECT_FALSE(state.is_memory_reporting_enabled);
481 // Underflow should not trigger idle suspend. The user is still playing the 559
482 // the video, just waiting on the network. 560 // Streaming media should suspend when the tab is closed, regardless.
483 state = ComputePlayState(); 561 delegate_.SetFrameClosedForTesting(true);
484 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 562 state = ComputePlayState_BackgroundedStreaming();
485 EXPECT_TRUE(state.is_memory_reporting_enabled); 563 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
486 EXPECT_FALSE(state.is_suspended); 564 EXPECT_TRUE(state.is_idle);
487 565 EXPECT_TRUE(state.is_suspended);
488 // Background suspend should still be possible during underflow. 566 EXPECT_FALSE(state.is_memory_reporting_enabled);
489 state = ComputeBackgroundedPlayState(); 567 }
490 if (base::FeatureList::IsEnabled(kResumeBackgroundVideo)) 568
491 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 569 TEST_F(WebMediaPlayerImplTest, ComputePlayState_PlayingBackgroundedVideo) {
492 else 570 SetupForResumingBackgroundVideo();
493 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 571
494 EXPECT_FALSE(state.is_memory_reporting_enabled); 572 InitializeWebMediaPlayerImpl();
495 EXPECT_TRUE(state.is_suspended); 573 SetMetadata(true, true);
496 574 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
497 // Forced suspend should still be possible during underflow. 575 SetPaused(false);
498 state = ComputeMustSuspendPlayState(); 576 EXPECT_CALL(delegate_, IsBackgroundVideoPlaybackAllowed())
499 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 577 .WillRepeatedly(Return(true));
500 EXPECT_FALSE(state.is_memory_reporting_enabled); 578
501 EXPECT_TRUE(state.is_suspended); 579 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
502 } 580 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
503 581 EXPECT_FALSE(state.is_idle);
504 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Playing_AudioOnly) { 582 EXPECT_FALSE(state.is_suspended);
505 InitializeWebMediaPlayerImpl(); 583 EXPECT_TRUE(state.is_memory_reporting_enabled);
506 WebMediaPlayerImpl::PlayState state; 584 }
585
586 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AudioOnly) {
587 InitializeWebMediaPlayerImpl();
507 SetMetadata(true, false); 588 SetMetadata(true, false);
508 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 589 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
509 SetPaused(false); 590 SetPaused(false);
510 591
511 state = ComputePlayState(); 592 // Backgrounded audio-only playback stays playing.
512 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 593 WebMediaPlayerImpl::PlayState state = ComputePlayState_FrameHidden();
513 EXPECT_TRUE(state.is_memory_reporting_enabled); 594 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
514 EXPECT_FALSE(state.is_suspended); 595 EXPECT_FALSE(state.is_idle);
515 596 EXPECT_FALSE(state.is_suspended);
516 // Audio-only stays playing in the background. 597 EXPECT_TRUE(state.is_memory_reporting_enabled);
517 state = ComputeBackgroundedPlayState(); 598 }
518 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 599
519 EXPECT_TRUE(state.is_memory_reporting_enabled); 600 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_StartsAndStops) {
520 EXPECT_FALSE(state.is_suspended); 601 InitializeWebMediaPlayerImpl();
521 602 SetMetadata(true, true);
522 // Backgrounding a paused audio only player should suspend, but keep the 603 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
523 // session alive for user interactions. 604 SetPaused(false);
524 SetPaused(true); 605 client_.set_is_autoplaying_muted(true);
525 state = ComputeBackgroundedPlayState(); 606
526 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 607 EXPECT_CALL(delegate_, DidPlay(_, false, true, _));
527 EXPECT_FALSE(state.is_memory_reporting_enabled); 608 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
528 EXPECT_TRUE(state.is_suspended); 609
529 610 client_.set_is_autoplaying_muted(false);
530 state = ComputeMustSuspendPlayState(); 611 EXPECT_CALL(delegate_, DidPlay(_, true, true, _));
531 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 612 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
532 EXPECT_FALSE(state.is_memory_reporting_enabled); 613 }
533 EXPECT_TRUE(state.is_suspended); 614
534 } 615 TEST_F(WebMediaPlayerImplTest, AutoplayMuted_SetVolume) {
535 616 InitializeWebMediaPlayerImpl();
536 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) { 617 SetMetadata(true, true);
537 InitializeWebMediaPlayerImpl(); 618 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
538 WebMediaPlayerImpl::PlayState state; 619 SetPaused(false);
539 SetMetadata(true, true); 620 client_.set_is_autoplaying_muted(true);
540 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 621
541 SetSeeking(true); 622 EXPECT_CALL(delegate_, DidPlay(_, false, true, _));
542 623 SetDelegateState(WebMediaPlayerImpl::DelegateState::PLAYING);
543 state = ComputePlayState(); 624
544 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state); 625 client_.set_is_autoplaying_muted(false);
545 EXPECT_FALSE(state.is_memory_reporting_enabled); 626 EXPECT_CALL(delegate_, DidPlay(_, true, true, _));
546 EXPECT_FALSE(state.is_suspended); 627 wmpi_->setVolume(1.0);
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 } 628 }
659 629
660 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) { 630 TEST_F(WebMediaPlayerImplTest, NaturalSizeChange) {
661 InitializeWebMediaPlayerImpl(); 631 InitializeWebMediaPlayerImpl();
662 PipelineMetadata metadata; 632 PipelineMetadata metadata;
663 metadata.has_video = true; 633 metadata.has_video = true;
664 metadata.natural_size = gfx::Size(320, 240); 634 metadata.natural_size = gfx::Size(320, 240);
665 635
666 OnMetadata(metadata); 636 OnMetadata(metadata);
667 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize()); 637 ASSERT_EQ(blink::WebSize(320, 240), wmpi_->naturalSize());
(...skipping 11 matching lines...) Expand all
679 metadata.video_rotation = VIDEO_ROTATION_90; 649 metadata.video_rotation = VIDEO_ROTATION_90;
680 650
681 // For 90/270deg rotations, the natural size should be transposed. 651 // For 90/270deg rotations, the natural size should be transposed.
682 OnMetadata(metadata); 652 OnMetadata(metadata);
683 ASSERT_EQ(blink::WebSize(240, 320), wmpi_->naturalSize()); 653 ASSERT_EQ(blink::WebSize(240, 320), wmpi_->naturalSize());
684 654
685 OnVideoNaturalSizeChange(gfx::Size(1920, 1080)); 655 OnVideoNaturalSizeChange(gfx::Size(1920, 1080));
686 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize()); 656 ASSERT_EQ(blink::WebSize(1080, 1920), wmpi_->naturalSize());
687 } 657 }
688 658
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 659 } // 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