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 |