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

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

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