| 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::Transient); |
| 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::Transient); |
| 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::Transient); |
| 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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 delegate_manager_->DidPlay( | 399 delegate_manager_->DidPlay( |
| 399 delegate_id, true, true, false, base::TimeDelta()); | 400 delegate_id, true, true, false, base::TimeDelta()); |
| 400 SetPlayingBackgroundVideo(true); | 401 SetPlayingBackgroundVideo(true); |
| 401 delegate_manager_->WasShown(); | 402 delegate_manager_->WasShown(); |
| 402 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 2); | 403 histogram_tester.ExpectTotalCount("Media.Android.BackgroundVideoTime", 2); |
| 403 } | 404 } |
| 404 | 405 |
| 405 #endif // OS_ANDROID | 406 #endif // OS_ANDROID |
| 406 | 407 |
| 407 } // namespace media | 408 } // namespace media |
| OLD | NEW |