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

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

Issue 2039793005: Don't resume paused media. Don't resume playing media after timeout. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reimplement. Add tests. Created 4 years, 6 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 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 void SetMetadata(bool has_audio, bool has_video) { 134 void SetMetadata(bool has_audio, bool has_video) {
135 wmpi_->SetNetworkState(blink::WebMediaPlayer::NetworkStateLoaded); 135 wmpi_->SetNetworkState(blink::WebMediaPlayer::NetworkStateLoaded);
136 wmpi_->SetReadyState(blink::WebMediaPlayer::ReadyStateHaveMetadata); 136 wmpi_->SetReadyState(blink::WebMediaPlayer::ReadyStateHaveMetadata);
137 wmpi_->pipeline_metadata_.has_audio = has_audio; 137 wmpi_->pipeline_metadata_.has_audio = has_audio;
138 wmpi_->pipeline_metadata_.has_video = has_video; 138 wmpi_->pipeline_metadata_.has_video = has_video;
139 } 139 }
140 140
141 WebMediaPlayerImpl::PlayState ComputePlayState() { 141 WebMediaPlayerImpl::PlayState ComputePlayState() {
142 wmpi_->is_idle_ = false; 142 wmpi_->is_idle_ = false;
143 wmpi_->must_suspend_ = false; 143 wmpi_->must_suspend_ = false;
144 return wmpi_->UpdatePlayState_ComputePlayState(false, false); 144 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false);
145 }
146
147 WebMediaPlayerImpl::PlayState ComputePlayStateSuspended() {
148 wmpi_->is_idle_ = false;
149 wmpi_->must_suspend_ = false;
150 return wmpi_->UpdatePlayState_ComputePlayState(false, true, false);
145 } 151 }
146 152
147 WebMediaPlayerImpl::PlayState ComputeBackgroundedPlayState() { 153 WebMediaPlayerImpl::PlayState ComputeBackgroundedPlayState() {
148 wmpi_->is_idle_ = false; 154 wmpi_->is_idle_ = false;
149 wmpi_->must_suspend_ = false; 155 wmpi_->must_suspend_ = false;
150 return wmpi_->UpdatePlayState_ComputePlayState(false, true); 156 return wmpi_->UpdatePlayState_ComputePlayState(false, false, true);
151 } 157 }
152 158
153 WebMediaPlayerImpl::PlayState ComputeIdlePlayState() { 159 WebMediaPlayerImpl::PlayState ComputeIdlePlayState() {
154 wmpi_->is_idle_ = true; 160 wmpi_->is_idle_ = true;
155 wmpi_->must_suspend_ = false; 161 wmpi_->must_suspend_ = false;
156 return wmpi_->UpdatePlayState_ComputePlayState(false, false); 162 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false);
157 } 163 }
158 164
159 WebMediaPlayerImpl::PlayState ComputeMustSuspendPlayState() { 165 WebMediaPlayerImpl::PlayState ComputeMustSuspendPlayState() {
160 wmpi_->is_idle_ = false; 166 wmpi_->is_idle_ = false;
161 wmpi_->must_suspend_ = true; 167 wmpi_->must_suspend_ = true;
162 return wmpi_->UpdatePlayState_ComputePlayState(false, false); 168 return wmpi_->UpdatePlayState_ComputePlayState(false, false, false);
163 } 169 }
164 170
165 // "Renderer" thread. 171 // "Renderer" thread.
166 base::MessageLoop message_loop_; 172 base::MessageLoop message_loop_;
167 173
168 // "Media" thread. This is necessary because WMPI destruction waits on a 174 // "Media" thread. This is necessary because WMPI destruction waits on a
169 // WaitableEvent. 175 // WaitableEvent.
170 base::Thread media_thread_; 176 base::Thread media_thread_;
171 177
172 // Blink state. 178 // Blink state.
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 240
235 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) { 241 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterMetadata_AudioOnly) {
236 WebMediaPlayerImpl::PlayState state; 242 WebMediaPlayerImpl::PlayState state;
237 SetMetadata(true, false); 243 SetMetadata(true, false);
238 244
239 state = ComputePlayState(); 245 state = ComputePlayState();
240 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 246 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
241 EXPECT_FALSE(state.is_memory_reporting_enabled); 247 EXPECT_FALSE(state.is_memory_reporting_enabled);
242 EXPECT_FALSE(state.is_suspended); 248 EXPECT_FALSE(state.is_suspended);
243 249
244 // Background suspend is not enabled for audio-only. 250 // Background suspend is not enabled for audio-only unless paused.
251 SetPaused(true);
245 state = ComputeBackgroundedPlayState(); 252 state = ComputeBackgroundedPlayState();
246 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 253 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
247 EXPECT_FALSE(state.is_memory_reporting_enabled); 254 EXPECT_FALSE(state.is_memory_reporting_enabled);
255 EXPECT_TRUE(state.is_suspended);
256
257 SetPaused(false);
258 state = ComputeBackgroundedPlayState();
259 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
260 EXPECT_FALSE(state.is_memory_reporting_enabled);
248 EXPECT_FALSE(state.is_suspended); 261 EXPECT_FALSE(state.is_suspended);
249 262
250 state = ComputeMustSuspendPlayState(); 263 state = ComputeMustSuspendPlayState();
251 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 264 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
252 EXPECT_FALSE(state.is_memory_reporting_enabled); 265 EXPECT_FALSE(state.is_memory_reporting_enabled);
253 EXPECT_TRUE(state.is_suspended); 266 EXPECT_TRUE(state.is_suspended);
254 } 267 }
255 268
256 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) { 269 TEST_F(WebMediaPlayerImplTest, ComputePlayState_AfterFutureData) {
257 WebMediaPlayerImpl::PlayState state; 270 WebMediaPlayerImpl::PlayState state;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 325 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
313 EXPECT_TRUE(state.is_memory_reporting_enabled); 326 EXPECT_TRUE(state.is_memory_reporting_enabled);
314 EXPECT_FALSE(state.is_suspended); 327 EXPECT_FALSE(state.is_suspended);
315 328
316 // Audio-only stays playing in the background. 329 // Audio-only stays playing in the background.
317 state = ComputeBackgroundedPlayState(); 330 state = ComputeBackgroundedPlayState();
318 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 331 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
319 EXPECT_TRUE(state.is_memory_reporting_enabled); 332 EXPECT_TRUE(state.is_memory_reporting_enabled);
320 EXPECT_FALSE(state.is_suspended); 333 EXPECT_FALSE(state.is_suspended);
321 334
335 // Backgrounding a paused audio only player should suspend, but keep the
336 // session alive for user interactions.
337 SetPaused(true);
338 state = ComputeBackgroundedPlayState();
339 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
340 EXPECT_FALSE(state.is_memory_reporting_enabled);
341 EXPECT_TRUE(state.is_suspended);
342
322 state = ComputeMustSuspendPlayState(); 343 state = ComputeMustSuspendPlayState();
323 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 344 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
324 EXPECT_FALSE(state.is_memory_reporting_enabled); 345 EXPECT_FALSE(state.is_memory_reporting_enabled);
325 EXPECT_TRUE(state.is_suspended); 346 EXPECT_TRUE(state.is_suspended);
326 } 347 }
327 348
328 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) { 349 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) {
329 WebMediaPlayerImpl::PlayState state; 350 WebMediaPlayerImpl::PlayState state;
330 SetMetadata(true, true); 351 SetMetadata(true, true);
331 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 352 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
(...skipping 30 matching lines...) Expand all
362 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); 383 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
363 EXPECT_FALSE(state.is_memory_reporting_enabled); 384 EXPECT_FALSE(state.is_memory_reporting_enabled);
364 EXPECT_FALSE(state.is_suspended); 385 EXPECT_FALSE(state.is_suspended);
365 386
366 state = ComputeIdlePlayState(); 387 state = ComputeIdlePlayState();
367 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); 388 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
368 EXPECT_FALSE(state.is_memory_reporting_enabled); 389 EXPECT_FALSE(state.is_memory_reporting_enabled);
369 EXPECT_TRUE(state.is_suspended); 390 EXPECT_TRUE(state.is_suspended);
370 } 391 }
371 392
393 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
394 WebMediaPlayerImpl::PlayState state;
395 SetMetadata(true, true);
396
397 // Suspended players should be resumed unless we have reached the appropriate
398 // ready state and are not seeking.
399 SetPaused(true);
400 state = ComputePlayStateSuspended();
401 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
402 EXPECT_FALSE(state.is_memory_reporting_enabled);
403 EXPECT_FALSE(state.is_suspended);
404
405 SetPaused(false);
406 state = ComputePlayStateSuspended();
407 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
408 EXPECT_FALSE(state.is_memory_reporting_enabled);
409 EXPECT_FALSE(state.is_suspended);
410
411 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
412
413 // Paused players should stay suspended.
414 SetPaused(true);
415 state = ComputePlayStateSuspended();
416 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
417 EXPECT_FALSE(state.is_memory_reporting_enabled);
418 EXPECT_TRUE(state.is_suspended);
419
420 // Playing players should resume into the playing state.
421 SetPaused(false);
422 state = ComputePlayStateSuspended();
423 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
424 EXPECT_TRUE(state.is_memory_reporting_enabled);
425 EXPECT_FALSE(state.is_suspended);
426
427 // If seeking, the previously suspended state does not matter; the player
428 // should always be resumed.
429 SetSeeking(true);
430
431 SetPaused(true);
432 state = ComputePlayStateSuspended();
433 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED_BUT_NOT_IDLE,
434 state.delegate_state);
435 EXPECT_FALSE(state.is_memory_reporting_enabled);
436 EXPECT_FALSE(state.is_suspended);
437
438 SetPaused(false);
439 state = ComputePlayStateSuspended();
440 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
441 EXPECT_TRUE(state.is_memory_reporting_enabled);
442 EXPECT_FALSE(state.is_suspended);
443 }
444
372 } // namespace media 445 } // 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