| 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 "media/remoting/remoting_renderer_controller.h" | 5 #include "media/remoting/remoting_renderer_controller.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "media/base/audio_decoder_config.h" | 10 #include "media/base/audio_decoder_config.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 RunUntilIdle(); | 83 RunUntilIdle(); |
| 84 EXPECT_FALSE(is_rendering_remotely_); | 84 EXPECT_FALSE(is_rendering_remotely_); |
| 85 remoting_renderer_controller_->OnEnteredFullscreen(); | 85 remoting_renderer_controller_->OnEnteredFullscreen(); |
| 86 RunUntilIdle(); | 86 RunUntilIdle(); |
| 87 EXPECT_FALSE(is_rendering_remotely_); | 87 EXPECT_FALSE(is_rendering_remotely_); |
| 88 remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata()); | 88 remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata()); |
| 89 RunUntilIdle(); | 89 RunUntilIdle(); |
| 90 EXPECT_FALSE(is_rendering_remotely_); | 90 EXPECT_FALSE(is_rendering_remotely_); |
| 91 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); | 91 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); |
| 92 RunUntilIdle(); | 92 RunUntilIdle(); |
| 93 EXPECT_FALSE(is_rendering_remotely_); |
| 94 remoting_renderer_controller_->OnPlaying(); |
| 95 RunUntilIdle(); |
| 93 EXPECT_TRUE(is_rendering_remotely_); // All requirements now satisfied. | 96 EXPECT_TRUE(is_rendering_remotely_); // All requirements now satisfied. |
| 94 | 97 |
| 95 // Leaving fullscreen should shut down remoting. | 98 // Leaving fullscreen should shut down remoting. |
| 96 remoting_renderer_controller_->OnExitedFullscreen(); | 99 remoting_renderer_controller_->OnExitedFullscreen(); |
| 97 RunUntilIdle(); | 100 RunUntilIdle(); |
| 98 EXPECT_FALSE(is_rendering_remotely_); | 101 EXPECT_FALSE(is_rendering_remotely_); |
| 99 } | 102 } |
| 100 | 103 |
| 101 TEST_F(RemotingRendererControllerTest, ToggleRendererOnSinkCapabilities) { | 104 TEST_F(RemotingRendererControllerTest, ToggleRendererOnSinkCapabilities) { |
| 102 EXPECT_FALSE(is_rendering_remotely_); | 105 EXPECT_FALSE(is_rendering_remotely_); |
| 103 scoped_refptr<RemotingSourceImpl> remoting_source_impl = | 106 scoped_refptr<RemotingSourceImpl> remoting_source_impl = |
| 104 CreateRemotingSourceImpl(false); | 107 CreateRemotingSourceImpl(false); |
| 105 remoting_renderer_controller_ = | 108 remoting_renderer_controller_ = |
| 106 base::MakeUnique<RemotingRendererController>(remoting_source_impl); | 109 base::MakeUnique<RemotingRendererController>(remoting_source_impl); |
| 107 remoting_renderer_controller_->SetSwitchRendererCallback(base::Bind( | 110 remoting_renderer_controller_->SetSwitchRendererCallback(base::Bind( |
| 108 &RemotingRendererControllerTest::ToggleRenderer, base::Unretained(this))); | 111 &RemotingRendererControllerTest::ToggleRenderer, base::Unretained(this))); |
| 109 RunUntilIdle(); | 112 RunUntilIdle(); |
| 110 EXPECT_FALSE(is_rendering_remotely_); | 113 EXPECT_FALSE(is_rendering_remotely_); |
| 111 remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata()); | 114 remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata()); |
| 112 RunUntilIdle(); | 115 RunUntilIdle(); |
| 113 EXPECT_FALSE(is_rendering_remotely_); | 116 EXPECT_FALSE(is_rendering_remotely_); |
| 114 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); | 117 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); |
| 115 RunUntilIdle(); | 118 RunUntilIdle(); |
| 116 EXPECT_FALSE(is_rendering_remotely_); | 119 EXPECT_FALSE(is_rendering_remotely_); |
| 120 remoting_renderer_controller_->OnPlaying(); |
| 121 RunUntilIdle(); |
| 122 EXPECT_FALSE(is_rendering_remotely_); |
| 117 remoting_renderer_controller_->OnEnteredFullscreen(); | 123 remoting_renderer_controller_->OnEnteredFullscreen(); |
| 118 RunUntilIdle(); | 124 RunUntilIdle(); |
| 119 EXPECT_FALSE(is_rendering_remotely_); | 125 EXPECT_FALSE(is_rendering_remotely_); |
| 120 // An available sink that does not support remote rendering should not cause | 126 // An available sink that does not support remote rendering should not cause |
| 121 // the controller to toggle remote rendering on. | 127 // the controller to toggle remote rendering on. |
| 122 remoting_source_impl->OnSinkAvailable(mojom::RemotingSinkCapabilities::NONE); | 128 remoting_source_impl->OnSinkAvailable(mojom::RemotingSinkCapabilities::NONE); |
| 123 RunUntilIdle(); | 129 RunUntilIdle(); |
| 124 EXPECT_FALSE(is_rendering_remotely_); | 130 EXPECT_FALSE(is_rendering_remotely_); |
| 125 remoting_source_impl->OnSinkGone(); // Bye-bye useless sink! | 131 remoting_source_impl->OnSinkGone(); // Bye-bye useless sink! |
| 126 RunUntilIdle(); | 132 RunUntilIdle(); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 152 RunUntilIdle(); | 158 RunUntilIdle(); |
| 153 EXPECT_FALSE(is_rendering_remotely_); | 159 EXPECT_FALSE(is_rendering_remotely_); |
| 154 remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata()); | 160 remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata()); |
| 155 RunUntilIdle(); | 161 RunUntilIdle(); |
| 156 EXPECT_FALSE(is_rendering_remotely_); | 162 EXPECT_FALSE(is_rendering_remotely_); |
| 157 remoting_renderer_controller_->OnEnteredFullscreen(); | 163 remoting_renderer_controller_->OnEnteredFullscreen(); |
| 158 RunUntilIdle(); | 164 RunUntilIdle(); |
| 159 EXPECT_FALSE(is_rendering_remotely_); | 165 EXPECT_FALSE(is_rendering_remotely_); |
| 160 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); | 166 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); |
| 161 RunUntilIdle(); | 167 RunUntilIdle(); |
| 168 EXPECT_FALSE(is_rendering_remotely_); |
| 169 remoting_renderer_controller_->OnPlaying(); |
| 170 RunUntilIdle(); |
| 162 EXPECT_TRUE(is_rendering_remotely_); // All requirements now satisfied. | 171 EXPECT_TRUE(is_rendering_remotely_); // All requirements now satisfied. |
| 163 | 172 |
| 164 // If the page disables remote playback (e.g., by setting the | 173 // If the page disables remote playback (e.g., by setting the |
| 165 // disableRemotePlayback attribute), this should shut down remoting. | 174 // disableRemotePlayback attribute), this should shut down remoting. |
| 166 remoting_renderer_controller_->OnRemotePlaybackDisabled(true); | 175 remoting_renderer_controller_->OnRemotePlaybackDisabled(true); |
| 167 RunUntilIdle(); | 176 RunUntilIdle(); |
| 168 EXPECT_FALSE(is_rendering_remotely_); | 177 EXPECT_FALSE(is_rendering_remotely_); |
| 169 } | 178 } |
| 170 | 179 |
| 171 TEST_F(RemotingRendererControllerTest, StartFailed) { | 180 TEST_F(RemotingRendererControllerTest, StartFailed) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 183 EXPECT_FALSE(is_rendering_remotely_); | 192 EXPECT_FALSE(is_rendering_remotely_); |
| 184 remoting_renderer_controller_->OnEnteredFullscreen(); | 193 remoting_renderer_controller_->OnEnteredFullscreen(); |
| 185 RunUntilIdle(); | 194 RunUntilIdle(); |
| 186 EXPECT_FALSE(is_rendering_remotely_); | 195 EXPECT_FALSE(is_rendering_remotely_); |
| 187 remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata()); | 196 remoting_renderer_controller_->OnMetadataChanged(DefaultMetadata()); |
| 188 RunUntilIdle(); | 197 RunUntilIdle(); |
| 189 EXPECT_FALSE(is_rendering_remotely_); | 198 EXPECT_FALSE(is_rendering_remotely_); |
| 190 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); | 199 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); |
| 191 RunUntilIdle(); | 200 RunUntilIdle(); |
| 192 EXPECT_FALSE(is_rendering_remotely_); | 201 EXPECT_FALSE(is_rendering_remotely_); |
| 202 remoting_renderer_controller_->OnPlaying(); |
| 203 RunUntilIdle(); |
| 204 EXPECT_FALSE(is_rendering_remotely_); |
| 193 } | 205 } |
| 194 | 206 |
| 195 TEST_F(RemotingRendererControllerTest, EncryptedWithRemotingCdm) { | 207 TEST_F(RemotingRendererControllerTest, EncryptedWithRemotingCdm) { |
| 196 EXPECT_FALSE(is_rendering_remotely_); | 208 EXPECT_FALSE(is_rendering_remotely_); |
| 197 remoting_renderer_controller_ = base::MakeUnique<RemotingRendererController>( | 209 remoting_renderer_controller_ = base::MakeUnique<RemotingRendererController>( |
| 198 CreateRemotingSourceImpl(false)); | 210 CreateRemotingSourceImpl(false)); |
| 199 remoting_renderer_controller_->SetSwitchRendererCallback(base::Bind( | 211 remoting_renderer_controller_->SetSwitchRendererCallback(base::Bind( |
| 200 &RemotingRendererControllerTest::ToggleRenderer, base::Unretained(this))); | 212 &RemotingRendererControllerTest::ToggleRenderer, base::Unretained(this))); |
| 201 RunUntilIdle(); | 213 RunUntilIdle(); |
| 202 EXPECT_FALSE(is_rendering_remotely_); | 214 EXPECT_FALSE(is_rendering_remotely_); |
| 203 remoting_renderer_controller_->OnMetadataChanged(EncryptedMetadata()); | 215 remoting_renderer_controller_->OnMetadataChanged(EncryptedMetadata()); |
| 204 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); | 216 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); |
| 217 remoting_renderer_controller_->OnPlaying(); |
| 205 RunUntilIdle(); | 218 RunUntilIdle(); |
| 206 EXPECT_FALSE(is_rendering_remotely_); | 219 EXPECT_FALSE(is_rendering_remotely_); |
| 207 scoped_refptr<RemotingSourceImpl> cdm_remoting_source_impl = | 220 scoped_refptr<RemotingSourceImpl> cdm_remoting_source_impl = |
| 208 CreateRemotingSourceImpl(false); | 221 CreateRemotingSourceImpl(false); |
| 209 std::unique_ptr<RemotingCdmController> remoting_cdm_controller = | 222 std::unique_ptr<RemotingCdmController> remoting_cdm_controller = |
| 210 base::MakeUnique<RemotingCdmController>(cdm_remoting_source_impl); | 223 base::MakeUnique<RemotingCdmController>(cdm_remoting_source_impl); |
| 211 cdm_remoting_source_impl->OnSinkAvailable(kAllCapabilities); | 224 cdm_remoting_source_impl->OnSinkAvailable(kAllCapabilities); |
| 212 remoting_cdm_controller->ShouldCreateRemotingCdm(base::Bind( | 225 remoting_cdm_controller->ShouldCreateRemotingCdm(base::Bind( |
| 213 &RemotingRendererControllerTest::CreateCdm, base::Unretained(this))); | 226 &RemotingRendererControllerTest::CreateCdm, base::Unretained(this))); |
| 214 RunUntilIdle(); | 227 RunUntilIdle(); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 EXPECT_FALSE(is_rendering_remotely_); | 273 EXPECT_FALSE(is_rendering_remotely_); |
| 261 remoting_renderer_controller_->OnEnteredFullscreen(); | 274 remoting_renderer_controller_->OnEnteredFullscreen(); |
| 262 RunUntilIdle(); | 275 RunUntilIdle(); |
| 263 EXPECT_FALSE(is_rendering_remotely_); | 276 EXPECT_FALSE(is_rendering_remotely_); |
| 264 remoting_renderer_controller_->OnMetadataChanged(EncryptedMetadata()); | 277 remoting_renderer_controller_->OnMetadataChanged(EncryptedMetadata()); |
| 265 RunUntilIdle(); | 278 RunUntilIdle(); |
| 266 EXPECT_FALSE(is_rendering_remotely_); | 279 EXPECT_FALSE(is_rendering_remotely_); |
| 267 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); | 280 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); |
| 268 RunUntilIdle(); | 281 RunUntilIdle(); |
| 269 EXPECT_FALSE(is_rendering_remotely_); | 282 EXPECT_FALSE(is_rendering_remotely_); |
| 283 remoting_renderer_controller_->OnPlaying(); |
| 284 RunUntilIdle(); |
| 285 EXPECT_FALSE(is_rendering_remotely_); |
| 270 | 286 |
| 271 scoped_refptr<RemotingSourceImpl> cdm_remoting_source_impl = | 287 scoped_refptr<RemotingSourceImpl> cdm_remoting_source_impl = |
| 272 CreateRemotingSourceImpl(true); | 288 CreateRemotingSourceImpl(true); |
| 273 std::unique_ptr<RemotingCdmController> remoting_cdm_controller = | 289 std::unique_ptr<RemotingCdmController> remoting_cdm_controller = |
| 274 base::MakeUnique<RemotingCdmController>(cdm_remoting_source_impl); | 290 base::MakeUnique<RemotingCdmController>(cdm_remoting_source_impl); |
| 275 cdm_remoting_source_impl->OnSinkAvailable(kAllCapabilities); | 291 cdm_remoting_source_impl->OnSinkAvailable(kAllCapabilities); |
| 276 remoting_cdm_controller->ShouldCreateRemotingCdm(base::Bind( | 292 remoting_cdm_controller->ShouldCreateRemotingCdm(base::Bind( |
| 277 &RemotingRendererControllerTest::CreateCdm, base::Unretained(this))); | 293 &RemotingRendererControllerTest::CreateCdm, base::Unretained(this))); |
| 278 RunUntilIdle(); | 294 RunUntilIdle(); |
| 279 EXPECT_FALSE(is_rendering_remotely_); | 295 EXPECT_FALSE(is_rendering_remotely_); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 290 EXPECT_FALSE(is_rendering_remotely_); | 306 EXPECT_FALSE(is_rendering_remotely_); |
| 291 remoting_renderer_controller_->OnEnteredFullscreen(); | 307 remoting_renderer_controller_->OnEnteredFullscreen(); |
| 292 RunUntilIdle(); | 308 RunUntilIdle(); |
| 293 EXPECT_FALSE(is_rendering_remotely_); | 309 EXPECT_FALSE(is_rendering_remotely_); |
| 294 remoting_renderer_controller_->OnMetadataChanged(EncryptedMetadata()); | 310 remoting_renderer_controller_->OnMetadataChanged(EncryptedMetadata()); |
| 295 RunUntilIdle(); | 311 RunUntilIdle(); |
| 296 EXPECT_FALSE(is_rendering_remotely_); | 312 EXPECT_FALSE(is_rendering_remotely_); |
| 297 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); | 313 remoting_renderer_controller_->OnRemotePlaybackDisabled(false); |
| 298 RunUntilIdle(); | 314 RunUntilIdle(); |
| 299 EXPECT_FALSE(is_rendering_remotely_); | 315 EXPECT_FALSE(is_rendering_remotely_); |
| 316 remoting_renderer_controller_->OnPlaying(); |
| 317 RunUntilIdle(); |
| 318 EXPECT_FALSE(is_rendering_remotely_); |
| 300 | 319 |
| 301 scoped_refptr<RemotingSourceImpl> cdm_remoting_source_impl = | 320 scoped_refptr<RemotingSourceImpl> cdm_remoting_source_impl = |
| 302 CreateRemotingSourceImpl(false); | 321 CreateRemotingSourceImpl(false); |
| 303 std::unique_ptr<RemotingCdmController> remoting_cdm_controller = | 322 std::unique_ptr<RemotingCdmController> remoting_cdm_controller = |
| 304 base::MakeUnique<RemotingCdmController>(cdm_remoting_source_impl); | 323 base::MakeUnique<RemotingCdmController>(cdm_remoting_source_impl); |
| 305 cdm_remoting_source_impl->OnSinkAvailable(kAllCapabilities); | 324 cdm_remoting_source_impl->OnSinkAvailable(kAllCapabilities); |
| 306 remoting_cdm_controller->ShouldCreateRemotingCdm(base::Bind( | 325 remoting_cdm_controller->ShouldCreateRemotingCdm(base::Bind( |
| 307 &RemotingRendererControllerTest::CreateCdm, base::Unretained(this))); | 326 &RemotingRendererControllerTest::CreateCdm, base::Unretained(this))); |
| 308 RunUntilIdle(); | 327 RunUntilIdle(); |
| 309 EXPECT_FALSE(is_rendering_remotely_); | 328 EXPECT_FALSE(is_rendering_remotely_); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 324 remoting_renderer_controller_->OnSetCdm(remoting_cdm_context.get()); | 343 remoting_renderer_controller_->OnSetCdm(remoting_cdm_context.get()); |
| 325 RunUntilIdle(); | 344 RunUntilIdle(); |
| 326 // Switch to using the remoting renderer, even when the remoting CDM session | 345 // Switch to using the remoting renderer, even when the remoting CDM session |
| 327 // was already terminated, to show the failure interstitial. | 346 // was already terminated, to show the failure interstitial. |
| 328 EXPECT_TRUE(is_rendering_remotely_); | 347 EXPECT_TRUE(is_rendering_remotely_); |
| 329 EXPECT_EQ(RemotingSessionState::SESSION_PERMANENTLY_STOPPED, | 348 EXPECT_EQ(RemotingSessionState::SESSION_PERMANENTLY_STOPPED, |
| 330 remoting_renderer_controller_->remoting_source()->state()); | 349 remoting_renderer_controller_->remoting_source()->state()); |
| 331 } | 350 } |
| 332 | 351 |
| 333 } // namespace media | 352 } // namespace media |
| OLD | NEW |