| 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 // Unit tests for AudioOutputAuthorizationHandler. | 5 // Unit tests for AudioOutputAuthorizationHandler. |
| 6 | 6 |
| 7 #include "content/browser/renderer_host/media/audio_output_authorization_handler
.h" | 7 #include "content/browser/renderer_host/media/audio_output_authorization_handler
.h" |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 SyncWithAllThreads(); | 94 SyncWithAllThreads(); |
| 95 } | 95 } |
| 96 | 96 |
| 97 ~AudioOutputAuthorizationHandlerTest() override { SyncWithAllThreads(); } | 97 ~AudioOutputAuthorizationHandlerTest() override { SyncWithAllThreads(); } |
| 98 | 98 |
| 99 protected: | 99 protected: |
| 100 MediaStreamManager* GetMediaStreamManager() { | 100 MediaStreamManager* GetMediaStreamManager() { |
| 101 return media_stream_manager_.get(); | 101 return media_stream_manager_.get(); |
| 102 } | 102 } |
| 103 | 103 |
| 104 media::AudioManager* GetAudioManager() { return audio_manager_.get(); } |
| 105 |
| 104 void SyncWithAllThreads() { | 106 void SyncWithAllThreads() { |
| 105 // New tasks might be posted while we are syncing, but in | 107 // New tasks might be posted while we are syncing, but in |
| 106 // every iteration at least one task will be run. 20 iterations should be | 108 // every iteration at least one task will be run. 20 iterations should be |
| 107 // enough for our code. | 109 // enough for our code. |
| 108 for (int i = 0; i < 20; ++i) { | 110 for (int i = 0; i < 20; ++i) { |
| 109 base::RunLoop().RunUntilIdle(); | 111 base::RunLoop().RunUntilIdle(); |
| 110 SyncWith(BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)); | 112 SyncWith(BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)); |
| 111 SyncWith(audio_thread_->task_runner()); | 113 SyncWith(audio_thread_->task_runner()); |
| 112 } | 114 } |
| 113 } | 115 } |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 }; | 167 }; |
| 166 | 168 |
| 167 TEST_F(AudioOutputAuthorizationHandlerTest, AuthorizeDefaultDevice_Ok) { | 169 TEST_F(AudioOutputAuthorizationHandlerTest, AuthorizeDefaultDevice_Ok) { |
| 168 MockListener listener; | 170 MockListener listener; |
| 169 EXPECT_CALL(listener, | 171 EXPECT_CALL(listener, |
| 170 MockAuthorizationCallback(media::OUTPUT_DEVICE_STATUS_OK, false, | 172 MockAuthorizationCallback(media::OUTPUT_DEVICE_STATUS_OK, false, |
| 171 _, kDefaultDeviceId)) | 173 _, kDefaultDeviceId)) |
| 172 .Times(1); | 174 .Times(1); |
| 173 std::unique_ptr<AudioOutputAuthorizationHandler> handler = | 175 std::unique_ptr<AudioOutputAuthorizationHandler> handler = |
| 174 base::MakeUnique<AudioOutputAuthorizationHandler>( | 176 base::MakeUnique<AudioOutputAuthorizationHandler>( |
| 175 GetMediaStreamManager(), kRenderProcessId, kSalt); | 177 GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); |
| 176 | 178 |
| 177 BrowserThread::PostTask( | 179 BrowserThread::PostTask( |
| 178 BrowserThread::IO, FROM_HERE, | 180 BrowserThread::IO, FROM_HERE, |
| 179 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, | 181 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, |
| 180 base::Unretained(handler.get()), kRenderFrameId, 0, | 182 base::Unretained(handler.get()), kRenderFrameId, 0, |
| 181 kDefaultDeviceId, SecurityOrigin(), listener.GetCallback()))); | 183 kDefaultDeviceId, SecurityOrigin(), listener.GetCallback()))); |
| 182 | 184 |
| 183 SyncWithAllThreads(); | 185 SyncWithAllThreads(); |
| 184 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); | 186 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); |
| 185 SyncWithAllThreads(); | 187 SyncWithAllThreads(); |
| 186 } | 188 } |
| 187 | 189 |
| 188 TEST_F(AudioOutputAuthorizationHandlerTest, | 190 TEST_F(AudioOutputAuthorizationHandlerTest, |
| 189 AuthorizeDefaultDeviceByEmptyId_Ok) { | 191 AuthorizeDefaultDeviceByEmptyId_Ok) { |
| 190 MockListener listener; | 192 MockListener listener; |
| 191 EXPECT_CALL(listener, | 193 EXPECT_CALL(listener, |
| 192 MockAuthorizationCallback(media::OUTPUT_DEVICE_STATUS_OK, false, | 194 MockAuthorizationCallback(media::OUTPUT_DEVICE_STATUS_OK, false, |
| 193 _, kDefaultDeviceId)) | 195 _, kDefaultDeviceId)) |
| 194 .Times(1); | 196 .Times(1); |
| 195 std::unique_ptr<AudioOutputAuthorizationHandler> handler = | 197 std::unique_ptr<AudioOutputAuthorizationHandler> handler = |
| 196 base::MakeUnique<AudioOutputAuthorizationHandler>( | 198 base::MakeUnique<AudioOutputAuthorizationHandler>( |
| 197 GetMediaStreamManager(), kRenderProcessId, kSalt); | 199 GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); |
| 198 | 200 |
| 199 BrowserThread::PostTask( | 201 BrowserThread::PostTask( |
| 200 BrowserThread::IO, FROM_HERE, | 202 BrowserThread::IO, FROM_HERE, |
| 201 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, | 203 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, |
| 202 base::Unretained(handler.get()), kRenderFrameId, 0, | 204 base::Unretained(handler.get()), kRenderFrameId, 0, |
| 203 kEmptyDeviceId, SecurityOrigin(), listener.GetCallback()))); | 205 kEmptyDeviceId, SecurityOrigin(), listener.GetCallback()))); |
| 204 | 206 |
| 205 SyncWithAllThreads(); | 207 SyncWithAllThreads(); |
| 206 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); | 208 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); |
| 207 SyncWithAllThreads(); | 209 SyncWithAllThreads(); |
| 208 } | 210 } |
| 209 | 211 |
| 210 TEST_F(AudioOutputAuthorizationHandlerTest, | 212 TEST_F(AudioOutputAuthorizationHandlerTest, |
| 211 AuthorizeNondefaultDeviceIdWithoutPermission_NotAuthorized) { | 213 AuthorizeNondefaultDeviceIdWithoutPermission_NotAuthorized) { |
| 212 std::string raw_nondefault_id = GetRawNondefaultId(); | 214 std::string raw_nondefault_id = GetRawNondefaultId(); |
| 213 std::string hashed_id = MediaStreamManager::GetHMACForMediaDeviceID( | 215 std::string hashed_id = MediaStreamManager::GetHMACForMediaDeviceID( |
| 214 kSalt, SecurityOrigin(), raw_nondefault_id); | 216 kSalt, SecurityOrigin(), raw_nondefault_id); |
| 215 | 217 |
| 216 MockListener listener; | 218 MockListener listener; |
| 217 std::unique_ptr<AudioOutputAuthorizationHandler> handler = | 219 std::unique_ptr<AudioOutputAuthorizationHandler> handler = |
| 218 base::MakeUnique<AudioOutputAuthorizationHandler>( | 220 base::MakeUnique<AudioOutputAuthorizationHandler>( |
| 219 GetMediaStreamManager(), kRenderProcessId, kSalt); | 221 GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); |
| 220 BrowserThread::PostTask( | 222 BrowserThread::PostTask( |
| 221 BrowserThread::IO, FROM_HERE, | 223 BrowserThread::IO, FROM_HERE, |
| 222 base::Bind( | 224 base::Bind( |
| 223 &AudioOutputAuthorizationHandler::OverridePermissionsForTesting, | 225 &AudioOutputAuthorizationHandler::OverridePermissionsForTesting, |
| 224 base::Unretained(handler.get()), false)); | 226 base::Unretained(handler.get()), false)); |
| 225 SyncWithAllThreads(); | 227 SyncWithAllThreads(); |
| 226 | 228 |
| 227 EXPECT_CALL(listener, MockAuthorizationCallback( | 229 EXPECT_CALL(listener, MockAuthorizationCallback( |
| 228 media::OUTPUT_DEVICE_STATUS_ERROR_NOT_AUTHORIZED, | 230 media::OUTPUT_DEVICE_STATUS_ERROR_NOT_AUTHORIZED, |
| 229 false, _, std::string())) | 231 false, _, std::string())) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 241 } | 243 } |
| 242 | 244 |
| 243 TEST_F(AudioOutputAuthorizationHandlerTest, | 245 TEST_F(AudioOutputAuthorizationHandlerTest, |
| 244 AuthorizeNondefaultDeviceIdWithPermission_Ok) { | 246 AuthorizeNondefaultDeviceIdWithPermission_Ok) { |
| 245 std::string raw_nondefault_id = GetRawNondefaultId(); | 247 std::string raw_nondefault_id = GetRawNondefaultId(); |
| 246 std::string hashed_id = MediaStreamManager::GetHMACForMediaDeviceID( | 248 std::string hashed_id = MediaStreamManager::GetHMACForMediaDeviceID( |
| 247 kSalt, SecurityOrigin(), raw_nondefault_id); | 249 kSalt, SecurityOrigin(), raw_nondefault_id); |
| 248 MockListener listener; | 250 MockListener listener; |
| 249 std::unique_ptr<AudioOutputAuthorizationHandler> handler = | 251 std::unique_ptr<AudioOutputAuthorizationHandler> handler = |
| 250 base::MakeUnique<AudioOutputAuthorizationHandler>( | 252 base::MakeUnique<AudioOutputAuthorizationHandler>( |
| 251 GetMediaStreamManager(), kRenderProcessId, kSalt); | 253 GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); |
| 252 BrowserThread::PostTask( | 254 BrowserThread::PostTask( |
| 253 BrowserThread::IO, FROM_HERE, | 255 BrowserThread::IO, FROM_HERE, |
| 254 base::Bind( | 256 base::Bind( |
| 255 &AudioOutputAuthorizationHandler::OverridePermissionsForTesting, | 257 &AudioOutputAuthorizationHandler::OverridePermissionsForTesting, |
| 256 base::Unretained(handler.get()), true)); | 258 base::Unretained(handler.get()), true)); |
| 257 | 259 |
| 258 EXPECT_CALL(listener, | 260 EXPECT_CALL(listener, |
| 259 MockAuthorizationCallback(media::OUTPUT_DEVICE_STATUS_OK, false, | 261 MockAuthorizationCallback(media::OUTPUT_DEVICE_STATUS_OK, false, |
| 260 _, raw_nondefault_id)) | 262 _, raw_nondefault_id)) |
| 261 .Times(1); | 263 .Times(1); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 272 } | 274 } |
| 273 | 275 |
| 274 TEST_F(AudioOutputAuthorizationHandlerTest, | 276 TEST_F(AudioOutputAuthorizationHandlerTest, |
| 275 AuthorizeInvalidDeviceId_BadMessage) { | 277 AuthorizeInvalidDeviceId_BadMessage) { |
| 276 std::unique_ptr<TestBrowserContext> context = | 278 std::unique_ptr<TestBrowserContext> context = |
| 277 base::MakeUnique<TestBrowserContext>(); | 279 base::MakeUnique<TestBrowserContext>(); |
| 278 std::unique_ptr<MockRenderProcessHost> RPH = | 280 std::unique_ptr<MockRenderProcessHost> RPH = |
| 279 base::MakeUnique<MockRenderProcessHost>(context.get()); | 281 base::MakeUnique<MockRenderProcessHost>(context.get()); |
| 280 MockListener listener; | 282 MockListener listener; |
| 281 std::unique_ptr<AudioOutputAuthorizationHandler> handler = | 283 std::unique_ptr<AudioOutputAuthorizationHandler> handler = |
| 282 base::MakeUnique<AudioOutputAuthorizationHandler>(GetMediaStreamManager(), | 284 base::MakeUnique<AudioOutputAuthorizationHandler>( |
| 283 RPH->GetID(), kSalt); | 285 GetAudioManager(), GetMediaStreamManager(), RPH->GetID(), kSalt); |
| 284 EXPECT_EQ(RPH->bad_msg_count(), 0); | 286 EXPECT_EQ(RPH->bad_msg_count(), 0); |
| 285 | 287 |
| 286 EXPECT_CALL(listener, MockAuthorizationCallback(_, _, _, _)).Times(0); | 288 EXPECT_CALL(listener, MockAuthorizationCallback(_, _, _, _)).Times(0); |
| 287 | 289 |
| 288 BrowserThread::PostTask( | 290 BrowserThread::PostTask( |
| 289 BrowserThread::IO, FROM_HERE, | 291 BrowserThread::IO, FROM_HERE, |
| 290 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, | 292 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, |
| 291 base::Unretained(handler.get()), kRenderFrameId, 0, | 293 base::Unretained(handler.get()), kRenderFrameId, 0, |
| 292 kInvalidDeviceId, SecurityOrigin(), listener.GetCallback()))); | 294 kInvalidDeviceId, SecurityOrigin(), listener.GetCallback()))); |
| 293 | 295 |
| 294 SyncWithAllThreads(); | 296 SyncWithAllThreads(); |
| 295 EXPECT_EQ(RPH->bad_msg_count(), 1); | 297 EXPECT_EQ(RPH->bad_msg_count(), 1); |
| 296 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); | 298 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); |
| 297 SyncWithAllThreads(); | 299 SyncWithAllThreads(); |
| 298 RPH.reset(); | 300 RPH.reset(); |
| 299 context.reset(); | 301 context.reset(); |
| 300 } | 302 } |
| 301 | 303 |
| 302 TEST_F(AudioOutputAuthorizationHandlerTest, | 304 TEST_F(AudioOutputAuthorizationHandlerTest, |
| 303 AuthorizeNondefaultDeviceIdWithBadOrigin_BadMessage) { | 305 AuthorizeNondefaultDeviceIdWithBadOrigin_BadMessage) { |
| 304 std::string raw_nondefault_id = GetRawNondefaultId(); | 306 std::string raw_nondefault_id = GetRawNondefaultId(); |
| 305 std::string hashed_id = MediaStreamManager::GetHMACForMediaDeviceID( | 307 std::string hashed_id = MediaStreamManager::GetHMACForMediaDeviceID( |
| 306 kSalt, SecurityOrigin(), raw_nondefault_id); | 308 kSalt, SecurityOrigin(), raw_nondefault_id); |
| 307 std::unique_ptr<TestBrowserContext> context = | 309 std::unique_ptr<TestBrowserContext> context = |
| 308 base::MakeUnique<TestBrowserContext>(); | 310 base::MakeUnique<TestBrowserContext>(); |
| 309 std::unique_ptr<MockRenderProcessHost> RPH = | 311 std::unique_ptr<MockRenderProcessHost> RPH = |
| 310 base::MakeUnique<MockRenderProcessHost>(context.get()); | 312 base::MakeUnique<MockRenderProcessHost>(context.get()); |
| 311 MockListener listener; | 313 MockListener listener; |
| 312 std::unique_ptr<AudioOutputAuthorizationHandler> handler = | 314 std::unique_ptr<AudioOutputAuthorizationHandler> handler = |
| 313 base::MakeUnique<AudioOutputAuthorizationHandler>(GetMediaStreamManager(), | 315 base::MakeUnique<AudioOutputAuthorizationHandler>( |
| 314 RPH->GetID(), kSalt); | 316 GetAudioManager(), GetMediaStreamManager(), RPH->GetID(), kSalt); |
| 315 | 317 |
| 316 EXPECT_EQ(RPH->bad_msg_count(), 0); | 318 EXPECT_EQ(RPH->bad_msg_count(), 0); |
| 317 EXPECT_CALL(listener, MockAuthorizationCallback(_, _, _, _)).Times(0); | 319 EXPECT_CALL(listener, MockAuthorizationCallback(_, _, _, _)).Times(0); |
| 318 | 320 |
| 319 BrowserThread::PostTask( | 321 BrowserThread::PostTask( |
| 320 BrowserThread::IO, FROM_HERE, | 322 BrowserThread::IO, FROM_HERE, |
| 321 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, | 323 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, |
| 322 base::Unretained(handler.get()), kRenderFrameId, 0, hashed_id, | 324 base::Unretained(handler.get()), kRenderFrameId, 0, hashed_id, |
| 323 BadSecurityOrigin(), listener.GetCallback()))); | 325 BadSecurityOrigin(), listener.GetCallback()))); |
| 324 | 326 |
| 325 SyncWithAllThreads(); | 327 SyncWithAllThreads(); |
| 326 EXPECT_EQ(RPH->bad_msg_count(), 1); | 328 EXPECT_EQ(RPH->bad_msg_count(), 1); |
| 327 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); | 329 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); |
| 328 SyncWithAllThreads(); | 330 SyncWithAllThreads(); |
| 329 RPH.reset(); | 331 RPH.reset(); |
| 330 context.reset(); | 332 context.reset(); |
| 331 } | 333 } |
| 332 | 334 |
| 333 TEST_F(AudioOutputAuthorizationHandlerTest, | 335 TEST_F(AudioOutputAuthorizationHandlerTest, |
| 334 AuthorizeWithSessionIdWithoutDevice_GivesDefault) { | 336 AuthorizeWithSessionIdWithoutDevice_GivesDefault) { |
| 335 MockListener listener; | 337 MockListener listener; |
| 336 std::unique_ptr<AudioOutputAuthorizationHandler> handler = | 338 std::unique_ptr<AudioOutputAuthorizationHandler> handler = |
| 337 base::MakeUnique<AudioOutputAuthorizationHandler>( | 339 base::MakeUnique<AudioOutputAuthorizationHandler>( |
| 338 GetMediaStreamManager(), kRenderProcessId, kSalt); | 340 GetAudioManager(), GetMediaStreamManager(), kRenderProcessId, kSalt); |
| 339 | 341 |
| 340 EXPECT_CALL(listener, | 342 EXPECT_CALL(listener, |
| 341 MockAuthorizationCallback(media::OUTPUT_DEVICE_STATUS_OK, false, | 343 MockAuthorizationCallback(media::OUTPUT_DEVICE_STATUS_OK, false, |
| 342 _, kDefaultDeviceId)) | 344 _, kDefaultDeviceId)) |
| 343 .Times(1); | 345 .Times(1); |
| 344 | 346 |
| 345 BrowserThread::PostTask( | 347 BrowserThread::PostTask( |
| 346 BrowserThread::IO, FROM_HERE, | 348 BrowserThread::IO, FROM_HERE, |
| 347 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, | 349 (base::Bind(&AudioOutputAuthorizationHandler::RequestDeviceAuthorization, |
| 348 base::Unretained(handler.get()), kRenderFrameId, kSessionId, | 350 base::Unretained(handler.get()), kRenderFrameId, kSessionId, |
| 349 std::string(), BadSecurityOrigin(), listener.GetCallback()))); | 351 std::string(), BadSecurityOrigin(), listener.GetCallback()))); |
| 350 | 352 |
| 351 SyncWithAllThreads(); | 353 SyncWithAllThreads(); |
| 352 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); | 354 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, handler.release()); |
| 353 SyncWithAllThreads(); | 355 SyncWithAllThreads(); |
| 354 } | 356 } |
| 355 | 357 |
| 356 } // namespace content | 358 } // namespace content |
| OLD | NEW |