| 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/run_loop.h" | 10 #include "base/run_loop.h" |
| 11 #include "base/single_thread_task_runner.h" |
| 10 #include "base/test/simple_test_tick_clock.h" | 12 #include "base/test/simple_test_tick_clock.h" |
| 13 #include "base/threading/thread_task_runner_handle.h" |
| 11 #include "content/common/media/media_player_delegate_messages.h" | 14 #include "content/common/media/media_player_delegate_messages.h" |
| 12 #include "content/public/renderer/render_view.h" | 15 #include "content/public/renderer/render_view.h" |
| 13 #include "content/public/test/render_view_test.h" | 16 #include "content/public/test/render_view_test.h" |
| 14 #include "content/renderer/media/renderer_webmediaplayer_delegate.h" | 17 #include "content/renderer/media/renderer_webmediaplayer_delegate.h" |
| 15 #include "content/renderer/render_process.h" | 18 #include "content/renderer/render_process.h" |
| 16 #include "testing/gmock/include/gmock/gmock.h" | 19 #include "testing/gmock/include/gmock/gmock.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 21 |
| 19 namespace media { | 22 namespace media { |
| 20 | 23 |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 EXPECT_TRUE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); | 181 EXPECT_TRUE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); |
| 179 | 182 |
| 180 // Adding the observer should instantly queue the timeout task, once run the | 183 // Adding the observer should instantly queue the timeout task, once run the |
| 181 // second delegate should be expired while the first is kept alive. | 184 // second delegate should be expired while the first is kept alive. |
| 182 { | 185 { |
| 183 EXPECT_CALL(observer_2, OnSuspendRequested(false)) | 186 EXPECT_CALL(observer_2, OnSuspendRequested(false)) |
| 184 .WillOnce(RunClosure(base::Bind( | 187 .WillOnce(RunClosure(base::Bind( |
| 185 &RendererWebMediaPlayerDelegate::PlayerGone, | 188 &RendererWebMediaPlayerDelegate::PlayerGone, |
| 186 base::Unretained(delegate_manager_.get()), delegate_id_2))); | 189 base::Unretained(delegate_manager_.get()), delegate_id_2))); |
| 187 base::RunLoop run_loop; | 190 base::RunLoop run_loop; |
| 188 base::MessageLoop::current()->PostTask(FROM_HERE, run_loop.QuitClosure()); | 191 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
| 192 run_loop.QuitClosure()); |
| 189 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); | 193 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); |
| 190 run_loop.Run(); | 194 run_loop.Run(); |
| 191 } | 195 } |
| 192 | 196 |
| 193 // Pausing should count as idle if playback didn't reach end of stream, but | 197 // Pausing should count as idle if playback didn't reach end of stream, but |
| 194 // in this case the player will not remove the MediaSession. | 198 // in this case the player will not remove the MediaSession. |
| 195 delegate_manager_->DidPause(delegate_id_1, false /* reached_end_of_stream */); | 199 delegate_manager_->DidPause(delegate_id_1, false /* reached_end_of_stream */); |
| 196 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer_3; | 200 testing::StrictMock<MockWebMediaPlayerDelegateObserver> observer_3; |
| 197 const int delegate_id_3 = delegate_manager_->AddObserver(&observer_3); | 201 const int delegate_id_3 = delegate_manager_->AddObserver(&observer_3); |
| 198 delegate_manager_->DidPlay(delegate_id_3, true, true, false, | 202 delegate_manager_->DidPlay(delegate_id_3, true, true, false, |
| 199 base::TimeDelta()); | 203 base::TimeDelta()); |
| 200 | 204 |
| 201 // Adding the observer should instantly queue the timeout task, once run no | 205 // Adding the observer should instantly queue the timeout task, once run no |
| 202 // delegates should have been expired. | 206 // delegates should have been expired. |
| 203 { | 207 { |
| 204 EXPECT_CALL(observer_1, OnSuspendRequested(false)) | 208 EXPECT_CALL(observer_1, OnSuspendRequested(false)) |
| 205 .Times(testing::AtLeast(1)); | 209 .Times(testing::AtLeast(1)); |
| 206 base::RunLoop run_loop; | 210 base::RunLoop run_loop; |
| 207 base::MessageLoop::current()->PostTask(FROM_HERE, run_loop.QuitClosure()); | 211 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
| 212 run_loop.QuitClosure()); |
| 208 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); | 213 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); |
| 209 run_loop.Run(); | 214 run_loop.Run(); |
| 210 } | 215 } |
| 211 | 216 |
| 212 delegate_manager_->DidPlay(delegate_id_1, true, true, false, | 217 delegate_manager_->DidPlay(delegate_id_1, true, true, false, |
| 213 base::TimeDelta()); | 218 base::TimeDelta()); |
| 214 | 219 |
| 215 // Pausing after reaching end of stream should count as idle. | 220 // Pausing after reaching end of stream should count as idle. |
| 216 delegate_manager_->DidPause(delegate_id_1, true /* reached_end_of_stream */); | 221 delegate_manager_->DidPause(delegate_id_1, true /* reached_end_of_stream */); |
| 217 | 222 |
| 218 // Once the timeout task runs the first delegate should be expired while the | 223 // Once the timeout task runs the first delegate should be expired while the |
| 219 // third is kept alive. | 224 // third is kept alive. |
| 220 { | 225 { |
| 221 EXPECT_CALL(observer_1, OnSuspendRequested(false)) | 226 EXPECT_CALL(observer_1, OnSuspendRequested(false)) |
| 222 .WillOnce(RunClosure(base::Bind( | 227 .WillOnce(RunClosure(base::Bind( |
| 223 &RendererWebMediaPlayerDelegate::PlayerGone, | 228 &RendererWebMediaPlayerDelegate::PlayerGone, |
| 224 base::Unretained(delegate_manager_.get()), delegate_id_1))); | 229 base::Unretained(delegate_manager_.get()), delegate_id_1))); |
| 225 base::RunLoop run_loop; | 230 base::RunLoop run_loop; |
| 226 base::MessageLoop::current()->PostTask(FROM_HERE, run_loop.QuitClosure()); | 231 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
| 232 run_loop.QuitClosure()); |
| 227 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); | 233 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); |
| 228 run_loop.Run(); | 234 run_loop.Run(); |
| 229 } | 235 } |
| 230 | 236 |
| 231 delegate_manager_->RemoveObserver(delegate_id_1); | 237 delegate_manager_->RemoveObserver(delegate_id_1); |
| 232 delegate_manager_->RemoveObserver(delegate_id_2); | 238 delegate_manager_->RemoveObserver(delegate_id_2); |
| 233 delegate_manager_->RemoveObserver(delegate_id_3); | 239 delegate_manager_->RemoveObserver(delegate_id_3); |
| 234 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); | 240 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); |
| 235 } | 241 } |
| 236 | 242 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 247 const int delegate_id_1 = delegate_manager_->AddObserver(&observer_1); | 253 const int delegate_id_1 = delegate_manager_->AddObserver(&observer_1); |
| 248 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); | 254 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); |
| 249 | 255 |
| 250 // Calling DidPause() should instantly queue the timeout task. | 256 // Calling DidPause() should instantly queue the timeout task. |
| 251 delegate_manager_->DidPause(delegate_id_1, false); | 257 delegate_manager_->DidPause(delegate_id_1, false); |
| 252 EXPECT_TRUE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); | 258 EXPECT_TRUE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); |
| 253 | 259 |
| 254 // Wait for the suspend request, but don't call PlayerGone(). | 260 // Wait for the suspend request, but don't call PlayerGone(). |
| 255 EXPECT_CALL(observer_1, OnSuspendRequested(false)); | 261 EXPECT_CALL(observer_1, OnSuspendRequested(false)); |
| 256 base::RunLoop run_loop; | 262 base::RunLoop run_loop; |
| 257 base::MessageLoop::current()->PostTask(FROM_HERE, run_loop.QuitClosure()); | 263 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
| 264 run_loop.QuitClosure()); |
| 258 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); | 265 tick_clock.Advance(kIdleTimeout + base::TimeDelta::FromMicroseconds(1)); |
| 259 run_loop.Run(); | 266 run_loop.Run(); |
| 260 | 267 |
| 261 // Even though the player did not call PlayerGone() it should be removed from | 268 // Even though the player did not call PlayerGone() it should be removed from |
| 262 // future idle cleanup polls. | 269 // future idle cleanup polls. |
| 263 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); | 270 EXPECT_FALSE(delegate_manager_->IsIdleCleanupTimerRunningForTesting()); |
| 264 delegate_manager_->RemoveObserver(delegate_id_1); | 271 delegate_manager_->RemoveObserver(delegate_id_1); |
| 265 } | 272 } |
| 266 | 273 |
| 267 } // namespace media | 274 } // namespace media |
| OLD | NEW |