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 |