OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |