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

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: Remove now incorrect test. 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
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 SetPaused(false);
245 state = ComputeBackgroundedPlayState(); 251 state = ComputeBackgroundedPlayState();
246 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 252 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
247 EXPECT_FALSE(state.is_memory_reporting_enabled); 253 EXPECT_FALSE(state.is_memory_reporting_enabled);
248 EXPECT_FALSE(state.is_suspended); 254 EXPECT_FALSE(state.is_suspended);
249 255
250 state = ComputeMustSuspendPlayState(); 256 state = ComputeMustSuspendPlayState();
251 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 257 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
252 EXPECT_FALSE(state.is_memory_reporting_enabled); 258 EXPECT_FALSE(state.is_memory_reporting_enabled);
253 EXPECT_TRUE(state.is_suspended); 259 EXPECT_TRUE(state.is_suspended);
254 } 260 }
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 318 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
313 EXPECT_TRUE(state.is_memory_reporting_enabled); 319 EXPECT_TRUE(state.is_memory_reporting_enabled);
314 EXPECT_FALSE(state.is_suspended); 320 EXPECT_FALSE(state.is_suspended);
315 321
316 // Audio-only stays playing in the background. 322 // Audio-only stays playing in the background.
317 state = ComputeBackgroundedPlayState(); 323 state = ComputeBackgroundedPlayState();
318 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state); 324 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
319 EXPECT_TRUE(state.is_memory_reporting_enabled); 325 EXPECT_TRUE(state.is_memory_reporting_enabled);
320 EXPECT_FALSE(state.is_suspended); 326 EXPECT_FALSE(state.is_suspended);
321 327
328 // Backgrounding a paused audio only player should suspend, but keep the
329 // session alive for user interactions.
330 SetPaused(true);
331 state = ComputeBackgroundedPlayState();
332 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
333 EXPECT_FALSE(state.is_memory_reporting_enabled);
334 EXPECT_TRUE(state.is_suspended);
335
322 state = ComputeMustSuspendPlayState(); 336 state = ComputeMustSuspendPlayState();
323 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state); 337 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
324 EXPECT_FALSE(state.is_memory_reporting_enabled); 338 EXPECT_FALSE(state.is_memory_reporting_enabled);
325 EXPECT_TRUE(state.is_suspended); 339 EXPECT_TRUE(state.is_suspended);
326 } 340 }
327 341
328 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) { 342 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Paused_Seek) {
329 WebMediaPlayerImpl::PlayState state; 343 WebMediaPlayerImpl::PlayState state;
330 SetMetadata(true, true); 344 SetMetadata(true, true);
331 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData); 345 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
(...skipping 30 matching lines...) Expand all
362 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); 376 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
363 EXPECT_FALSE(state.is_memory_reporting_enabled); 377 EXPECT_FALSE(state.is_memory_reporting_enabled);
364 EXPECT_FALSE(state.is_suspended); 378 EXPECT_FALSE(state.is_suspended);
365 379
366 state = ComputeIdlePlayState(); 380 state = ComputeIdlePlayState();
367 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state); 381 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::ENDED, state.delegate_state);
368 EXPECT_FALSE(state.is_memory_reporting_enabled); 382 EXPECT_FALSE(state.is_memory_reporting_enabled);
369 EXPECT_TRUE(state.is_suspended); 383 EXPECT_TRUE(state.is_suspended);
370 } 384 }
371 385
386 TEST_F(WebMediaPlayerImplTest, ComputePlayState_Suspended) {
387 WebMediaPlayerImpl::PlayState state;
388 SetMetadata(true, true);
389
390 // Suspended players should be resumed unless we have reached the appropriate
391 // ready state and are not seeking.
392 SetPaused(true);
393 state = ComputePlayStateSuspended();
394 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
395 EXPECT_FALSE(state.is_memory_reporting_enabled);
396 EXPECT_FALSE(state.is_suspended);
397
398 SetPaused(false);
399 state = ComputePlayStateSuspended();
400 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::GONE, state.delegate_state);
401 EXPECT_FALSE(state.is_memory_reporting_enabled);
402 EXPECT_FALSE(state.is_suspended);
403
404 SetReadyState(blink::WebMediaPlayer::ReadyStateHaveFutureData);
405
406 // Paused players should stay suspended.
407 SetPaused(true);
408 state = ComputePlayStateSuspended();
409 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED, state.delegate_state);
410 EXPECT_FALSE(state.is_memory_reporting_enabled);
411 EXPECT_TRUE(state.is_suspended);
412
413 // Playing players should resume into the playing state.
414 SetPaused(false);
415 state = ComputePlayStateSuspended();
416 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
417 EXPECT_TRUE(state.is_memory_reporting_enabled);
418 EXPECT_FALSE(state.is_suspended);
419
420 // If seeking, the previously suspended state does not matter; the player
421 // should always be resumed.
422 SetSeeking(true);
423
424 SetPaused(true);
425 state = ComputePlayStateSuspended();
426 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PAUSED_BUT_NOT_IDLE,
427 state.delegate_state);
428 EXPECT_FALSE(state.is_memory_reporting_enabled);
429 EXPECT_FALSE(state.is_suspended);
430
431 SetPaused(false);
432 state = ComputePlayStateSuspended();
433 EXPECT_EQ(WebMediaPlayerImpl::DelegateState::PLAYING, state.delegate_state);
434 EXPECT_TRUE(state.is_memory_reporting_enabled);
435 EXPECT_FALSE(state.is_suspended);
436 }
437
372 } // namespace media 438 } // namespace media
OLDNEW
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698