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

Side by Side Diff: content/renderer/media/renderer_webmediaplayer_delegate_browsertest.cc

Issue 1996043002: Split MediaContentType and AudioFocusType (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed nits Created 4 years, 3 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 <tuple> 5 #include <tuple>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegateTest); 84 DISALLOW_COPY_AND_ASSIGN(RendererWebMediaPlayerDelegateTest);
85 }; 85 };
86 86
87 TEST_F(RendererWebMediaPlayerDelegateTest, SendsMessagesCorrectly) { 87 TEST_F(RendererWebMediaPlayerDelegateTest, SendsMessagesCorrectly) {
88 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer; 88 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer;
89 const int delegate_id = delegate_manager_->AddObserver(&observer); 89 const int delegate_id = delegate_manager_->AddObserver(&observer);
90 90
91 // Verify the playing message. 91 // Verify the playing message.
92 { 92 {
93 const bool kHasVideo = true, kHasAudio = false, kIsRemote = false; 93 const bool kHasVideo = true, kHasAudio = false, kIsRemote = false;
94 const base::TimeDelta kDuration = base::TimeDelta::FromSeconds(5); 94 const media::MediaContentType kMediaContentType =
95 media::MediaContentType::Transient;
95 delegate_manager_->DidPlay(delegate_id, kHasVideo, kHasAudio, kIsRemote, 96 delegate_manager_->DidPlay(delegate_id, kHasVideo, kHasAudio, kIsRemote,
96 kDuration); 97 kMediaContentType);
97 98
98 const IPC::Message* msg = test_sink().GetUniqueMessageMatching( 99 const IPC::Message* msg = test_sink().GetUniqueMessageMatching(
99 MediaPlayerDelegateHostMsg_OnMediaPlaying::ID); 100 MediaPlayerDelegateHostMsg_OnMediaPlaying::ID);
100 ASSERT_TRUE(msg); 101 ASSERT_TRUE(msg);
101 102
102 std::tuple<int, bool, bool, bool, base::TimeDelta> result; 103 std::tuple<int, bool, bool, bool, media::MediaContentType> result;
103 ASSERT_TRUE(MediaPlayerDelegateHostMsg_OnMediaPlaying::Read(msg, &result)); 104 ASSERT_TRUE(MediaPlayerDelegateHostMsg_OnMediaPlaying::Read(msg, &result));
104 EXPECT_EQ(delegate_id, std::get<0>(result)); 105 EXPECT_EQ(delegate_id, std::get<0>(result));
105 EXPECT_EQ(kHasVideo, std::get<1>(result)); 106 EXPECT_EQ(kHasVideo, std::get<1>(result));
106 EXPECT_EQ(kHasAudio, std::get<2>(result)); 107 EXPECT_EQ(kHasAudio, std::get<2>(result));
107 EXPECT_EQ(kIsRemote, std::get<3>(result)); 108 EXPECT_EQ(kIsRemote, std::get<3>(result));
108 EXPECT_EQ(kDuration, std::get<4>(result)); 109 EXPECT_EQ(kMediaContentType, std::get<4>(result));
109 } 110 }
110 111
111 // Verify the paused message. 112 // Verify the paused message.
112 { 113 {
113 test_sink().ClearMessages(); 114 test_sink().ClearMessages();
114 const bool kReachedEndOfStream = true; 115 const bool kReachedEndOfStream = true;
115 delegate_manager_->DidPause(delegate_id, kReachedEndOfStream); 116 delegate_manager_->DidPause(delegate_id, kReachedEndOfStream);
116 117
117 const IPC::Message* msg = test_sink().GetUniqueMessageMatching( 118 const IPC::Message* msg = test_sink().GetUniqueMessageMatching(
118 MediaPlayerDelegateHostMsg_OnMediaPaused::ID); 119 MediaPlayerDelegateHostMsg_OnMediaPaused::ID);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 delegate_manager_->SetIdleCleanupParamsForTesting(kIdleTimeout, &tick_clock); 182 delegate_manager_->SetIdleCleanupParamsForTesting(kIdleTimeout, &tick_clock);
182 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); 183 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting());
183 184
184 // Just adding an observer should not start the idle timer. 185 // Just adding an observer should not start the idle timer.
185 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer_1; 186 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer_1;
186 const int delegate_id_1 = delegate_manager_->AddObserver(&observer_1); 187 const int delegate_id_1 = delegate_manager_->AddObserver(&observer_1);
187 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); 188 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting());
188 189
189 // Starting playback should not have an idle timer. 190 // Starting playback should not have an idle timer.
190 delegate_manager_->DidPlay(delegate_id_1, true, true, false, 191 delegate_manager_->DidPlay(delegate_id_1, true, true, false,
191 base::TimeDelta()); 192 media::MediaContentType::Persistent);
192 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); 193 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting());
193 194
194 // Never calling DidPlay() but calling DidPause() should count as idle. 195 // Never calling DidPlay() but calling DidPause() should count as idle.
195 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer_2; 196 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer_2;
196 const int delegate_id_2 = delegate_manager_->AddObserver(&observer_2); 197 const int delegate_id_2 = delegate_manager_->AddObserver(&observer_2);
197 delegate_manager_->DidPause(delegate_id_2, false); 198 delegate_manager_->DidPause(delegate_id_2, false);
198 EXPECT_TRUE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); 199 EXPECT_TRUE(delegate_manager_->IsIdleCleanupTimerRunningForTesting());
199 200
200 // Adding the observer should instantly queue the timeout task, once run the 201 // Adding the observer should instantly queue the timeout task, once run the
201 // second delegate should be expired while the first is kept alive. 202 // second delegate should be expired while the first is kept alive.
202 { 203 {
203 EXPECT_CALL(observer_2, OnSuspendRequested(false)) 204 EXPECT_CALL(observer_2, OnSuspendRequested(false))
204 .WillOnce(RunClosure(base::Bind( 205 .WillOnce(RunClosure(base::Bind(
205 &RendererWebMediaPlayerDelegate::PlayerGone, 206 &RendererWebMediaPlayerDelegate::PlayerGone,
206 base::Unretained(delegate_manager_.get()), delegate_id_2))); 207 base::Unretained(delegate_manager_.get()), delegate_id_2)));
207 base::RunLoop run_loop; 208 base::RunLoop run_loop;
208 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 209 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
209 run_loop.QuitClosure()); 210 run_loop.QuitClosure());
210 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); 211 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1));
211 run_loop.Run(); 212 run_loop.Run();
212 } 213 }
213 214
214 // Pausing should count as idle if playback didn't reach end of stream, but 215 // Pausing should count as idle if playback didn't reach end of stream, but
215 // in this case the player will not remove the MediaSession. 216 // in this case the player will not remove the MediaSession.
216 delegate_manager_->DidPause(delegate_id_1, false /* reached_end_of_stream */); 217 delegate_manager_->DidPause(delegate_id_1, false /* reached_end_of_stream */);
217 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer_3; 218 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer_3;
218 const int delegate_id_3 = delegate_manager_->AddObserver(&observer_3); 219 const int delegate_id_3 = delegate_manager_->AddObserver(&observer_3);
219 delegate_manager_->DidPlay(delegate_id_3, true, true, false, 220 delegate_manager_->DidPlay(delegate_id_3, true, true, false,
220 base::TimeDelta()); 221 media::MediaContentType::Persistent);
221 222
222 // Adding the observer should instantly queue the timeout task, once run no 223 // Adding the observer should instantly queue the timeout task, once run no
223 // delegates should have been expired. 224 // delegates should have been expired.
224 { 225 {
225 EXPECT_CALL(observer_1, OnSuspendRequested(false)) 226 EXPECT_CALL(observer_1, OnSuspendRequested(false))
226 .Times(testing::AtLeast(1)); 227 .Times(testing::AtLeast(1));
227 base::RunLoop run_loop; 228 base::RunLoop run_loop;
228 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 229 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
229 run_loop.QuitClosure()); 230 run_loop.QuitClosure());
230 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); 231 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1));
231 run_loop.Run(); 232 run_loop.Run();
232 } 233 }
233 234
234 delegate_manager_->DidPlay(delegate_id_1, true, true, false, 235 delegate_manager_->DidPlay(delegate_id_1, true, true, false,
235 base::TimeDelta()); 236 media::MediaContentType::Persistent);
236 237
237 // Pausing after reaching end of stream should count as idle. 238 // Pausing after reaching end of stream should count as idle.
238 delegate_manager_->DidPause(delegate_id_1, true /* reached_end_of_stream */); 239 delegate_manager_->DidPause(delegate_id_1, true /* reached_end_of_stream */);
239 240
240 // Once the timeout task runs the first delegate should be expired while the 241 // Once the timeout task runs the first delegate should be expired while the
241 // third is kept alive. 242 // third is kept alive.
242 { 243 {
243 EXPECT_CALL(observer_1, OnSuspendRequested(false)) 244 EXPECT_CALL(observer_1, OnSuspendRequested(false))
244 .WillOnce(RunClosure(base::Bind( 245 .WillOnce(RunClosure(base::Bind(
245 &RendererWebMediaPlayerDelegate::PlayerGone, 246 &RendererWebMediaPlayerDelegate::PlayerGone,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); 288 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting());
288 delegate_manager_->RemoveObserver(delegate_id_1); 289 delegate_manager_->RemoveObserver(delegate_id_1);
289 } 290 }
290 291
291 TEST_F(RendererWebMediaPlayerDelegateTest, PlayingVideosSet) { 292 TEST_F(RendererWebMediaPlayerDelegateTest, PlayingVideosSet) {
292 MockWebMediaPlayerDelegateObserver observer; 293 MockWebMediaPlayerDelegateObserver observer;
293 int delegate_id = delegate_manager_->AddObserver(&observer); 294 int delegate_id = delegate_manager_->AddObserver(&observer);
294 EXPECT_FALSE(HasPlayingVideo(delegate_id)); 295 EXPECT_FALSE(HasPlayingVideo(delegate_id));
295 296
296 // Playing a local video adds it to the set. 297 // Playing a local video adds it to the set.
297 delegate_manager_->DidPlay(delegate_id, true, true, false, base::TimeDelta()); 298 delegate_manager_->DidPlay(delegate_id, true, true, false,
299 MediaContentType::Persistent);
298 EXPECT_TRUE(HasPlayingVideo(delegate_id)); 300 EXPECT_TRUE(HasPlayingVideo(delegate_id));
299 301
300 // Pause doesn't remove the video from the set. 302 // Pause doesn't remove the video from the set.
301 delegate_manager_->DidPause(delegate_id, false); 303 delegate_manager_->DidPause(delegate_id, false);
302 EXPECT_TRUE(HasPlayingVideo(delegate_id)); 304 EXPECT_TRUE(HasPlayingVideo(delegate_id));
303 305
304 // Reaching the end removes the video from the set. 306 // Reaching the end removes the video from the set.
305 delegate_manager_->DidPause(delegate_id, true); 307 delegate_manager_->DidPause(delegate_id, true);
306 EXPECT_FALSE(HasPlayingVideo(delegate_id)); 308 EXPECT_FALSE(HasPlayingVideo(delegate_id));
307 309
308 // Removing the player removes the video from the set. 310 // Removing the player removes the video from the set.
309 delegate_manager_->DidPlay(delegate_id, true, true, false, base::TimeDelta()); 311 delegate_manager_->DidPlay(delegate_id, true, true, false,
312 MediaContentType::Persistent);
310 delegate_manager_->PlayerGone(delegate_id); 313 delegate_manager_->PlayerGone(delegate_id);
311 EXPECT_FALSE(HasPlayingVideo(delegate_id)); 314 EXPECT_FALSE(HasPlayingVideo(delegate_id));
312 315
313 // Playing a remote video removes it from the set. 316 // Playing a remote video removes it from the set.
314 delegate_manager_->DidPlay(delegate_id, true, true, false, base::TimeDelta()); 317 delegate_manager_->DidPlay(delegate_id, true, true, false,
315 delegate_manager_->DidPlay(delegate_id, true, true, true, base::TimeDelta()); 318 MediaContentType::Persistent);
319 delegate_manager_->DidPlay(delegate_id, true, true, true,
320 MediaContentType::Persistent);
316 EXPECT_FALSE(HasPlayingVideo(delegate_id)); 321 EXPECT_FALSE(HasPlayingVideo(delegate_id));
317 322
318 // Playing a local video without audio adds it to the set (because of WMPA). 323 // Playing a local video without audio adds it to the set (because of WMPA).
319 delegate_manager_->DidPlay( 324 delegate_manager_->DidPlay(delegate_id, true, false, false,
320 delegate_id, true, false, false, base::TimeDelta()); 325 MediaContentType::Persistent);
321 EXPECT_TRUE(HasPlayingVideo(delegate_id)); 326 EXPECT_TRUE(HasPlayingVideo(delegate_id));
322 327
323 // Playing a local audio removes it from the set. 328 // Playing a local audio removes it from the set.
324 delegate_manager_->DidPlay( 329 delegate_manager_->DidPlay(delegate_id, false, true, false,
325 delegate_id, false, true, false, base::TimeDelta()); 330 MediaContentType::Persistent);
326 EXPECT_FALSE(HasPlayingVideo(delegate_id)); 331 EXPECT_FALSE(HasPlayingVideo(delegate_id));
327 332
328 // Removing the observer also removes the video from the set. 333 // Removing the observer also removes the video from the set.
329 delegate_manager_->DidPlay(delegate_id, true, true, false, base::TimeDelta()); 334 delegate_manager_->DidPlay(delegate_id, true, true, false,
335 MediaContentType::Persistent);
330 delegate_manager_->RemoveObserver(delegate_id); 336 delegate_manager_->RemoveObserver(delegate_id);
331 EXPECT_FALSE(HasPlayingVideo(delegate_id)); 337 EXPECT_FALSE(HasPlayingVideo(delegate_id));
332 } 338 }
333 339
334 TEST_F(RendererWebMediaPlayerDelegateTest, IsPlayingBackgroundVideo) { 340 TEST_F(RendererWebMediaPlayerDelegateTest, IsPlayingBackgroundVideo) {
335 MockWebMediaPlayerDelegateObserver observer; 341 MockWebMediaPlayerDelegateObserver observer;
336 int delegate_id = delegate_manager_->AddObserver(&observer); 342 int delegate_id = delegate_manager_->AddObserver(&observer);
337 EXPECT_FALSE(delegate_manager_->IsPlayingBackgroundVideo()); 343 EXPECT_FALSE(delegate_manager_->IsPlayingBackgroundVideo());
338 344
339 // Showing the frame always clears the flag. 345 // Showing the frame always clears the flag.
340 SetPlayingBackgroundVideo(true); 346 SetPlayingBackgroundVideo(true);
341 delegate_manager_->WasShown(); 347 delegate_manager_->WasShown();
342 EXPECT_FALSE(delegate_manager_->IsPlayingBackgroundVideo()); 348 EXPECT_FALSE(delegate_manager_->IsPlayingBackgroundVideo());
343 349
344 // Pausing anything other than a local playing video doesn't affect the flag. 350 // Pausing anything other than a local playing video doesn't affect the flag.
345 SetPlayingBackgroundVideo(true); 351 SetPlayingBackgroundVideo(true);
346 CallOnMediaDelegatePause(delegate_id); 352 CallOnMediaDelegatePause(delegate_id);
347 EXPECT_TRUE(delegate_manager_->IsPlayingBackgroundVideo()); 353 EXPECT_TRUE(delegate_manager_->IsPlayingBackgroundVideo());
348 354
349 // Pausing a currently playing video does clears the flag. 355 // Pausing a currently playing video does clears the flag.
350 delegate_manager_->DidPlay( 356 delegate_manager_->DidPlay(delegate_id, true, true, false,
351 delegate_id, true, true, false, base::TimeDelta()); 357 MediaContentType::Persistent);
352 CallOnMediaDelegatePause(delegate_id); 358 CallOnMediaDelegatePause(delegate_id);
353 EXPECT_FALSE(delegate_manager_->IsPlayingBackgroundVideo()); 359 EXPECT_FALSE(delegate_manager_->IsPlayingBackgroundVideo());
354 360
355 // TODO(avayvod): this test can't mock IsHidden() method. 361 // TODO(avayvod): this test can't mock IsHidden() method.
356 // Just test that the value changes or doesn't depending on whether the video 362 // Just test that the value changes or doesn't depending on whether the video
357 // is currently playing. 363 // is currently playing.
358 bool old_value = !delegate_manager_->IsHidden(); 364 bool old_value = !delegate_manager_->IsHidden();
359 SetPlayingBackgroundVideo(old_value); 365 SetPlayingBackgroundVideo(old_value);
360 delegate_manager_->DidPause(delegate_id, true); 366 delegate_manager_->DidPause(delegate_id, true);
361 CallOnMediaDelegatePlay(delegate_id); 367 CallOnMediaDelegatePlay(delegate_id);
362 EXPECT_EQ(old_value, delegate_manager_->IsPlayingBackgroundVideo()); 368 EXPECT_EQ(old_value, delegate_manager_->IsPlayingBackgroundVideo());
363 369
364 delegate_manager_->DidPlay( 370 delegate_manager_->DidPlay(delegate_id, true, true, false,
365 delegate_id, true, true, false, base::TimeDelta()); 371 MediaContentType::Persistent);
366 CallOnMediaDelegatePlay(delegate_id); 372 CallOnMediaDelegatePlay(delegate_id);
367 EXPECT_NE(old_value, delegate_manager_->IsPlayingBackgroundVideo()); 373 EXPECT_NE(old_value, delegate_manager_->IsPlayingBackgroundVideo());
368 } 374 }
369 375
370 #if defined(OS_ANDROID) 376 #if defined(OS_ANDROID)
371 377
372 TEST_F(RendererWebMediaPlayerDelegateTest, Histograms) { 378 TEST_F(RendererWebMediaPlayerDelegateTest, Histograms) {
373 MockWebMediaPlayerDelegateObserver observer; 379 MockWebMediaPlayerDelegateObserver observer;
374 int delegate_id = delegate_manager_->AddObserver(&observer); 380 int delegate_id = delegate_manager_->AddObserver(&observer);
375 base::HistogramTester histogram_tester; 381 base::HistogramTester histogram_tester;
376 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 0); 382 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 0);
377 383
378 // Pausing or showing doesn't record anything as background playback 384 // Pausing or showing doesn't record anything as background playback
379 // hasn't started yet. 385 // hasn't started yet.
380 delegate_manager_->DidPlay( 386 delegate_manager_->DidPlay(delegate_id, true, true, false,
381 delegate_id, true, true, false, base::TimeDelta()); 387 MediaContentType::Persistent);
382 CallOnMediaDelegatePause(delegate_id); 388 CallOnMediaDelegatePause(delegate_id);
383 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 0); 389 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 0);
384 390
385 delegate_manager_->DidPlay( 391 delegate_manager_->DidPlay(delegate_id, true, true, false,
386 delegate_id, true, true, false, base::TimeDelta()); 392 MediaContentType::Persistent);
387 delegate_manager_->WasShown(); 393 delegate_manager_->WasShown();
388 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 0); 394 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 0);
389 395
390 // Doing this things after the background playback has started should record 396 // Doing this things after the background playback has started should record
391 // the time. 397 // the time.
392 delegate_manager_->DidPlay( 398 delegate_manager_->DidPlay(delegate_id, true, true, false,
393 delegate_id, true, true, false, base::TimeDelta()); 399 MediaContentType::Persistent);
394 SetPlayingBackgroundVideo(true); 400 SetPlayingBackgroundVideo(true);
395 CallOnMediaDelegatePause(delegate_id); 401 CallOnMediaDelegatePause(delegate_id);
396 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 1); 402 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 1);
397 403
398 delegate_manager_->DidPlay( 404 delegate_manager_->DidPlay(delegate_id, true, true, false,
399 delegate_id, true, true, false, base::TimeDelta()); 405 MediaContentType::Persistent);
400 SetPlayingBackgroundVideo(true); 406 SetPlayingBackgroundVideo(true);
401 delegate_manager_->WasShown(); 407 delegate_manager_->WasShown();
402 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 2); 408 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 2);
403 } 409 }
404 410
405 #endif // OS_ANDROID 411 #endif // OS_ANDROID
406 412
407 } // namespace media 413 } // namespace media
OLDNEW
« no previous file with comments | « content/renderer/media/renderer_webmediaplayer_delegate.cc ('k') | content/renderer/media/webmediaplayer_ms.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698