| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/renderer/media/media_stream_dispatcher.h" | 5 #include "content/renderer/media/media_stream_dispatcher.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| 11 | 11 |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
| 14 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 15 #include "content/common/media/media_stream_messages.h" | 15 #include "content/common/media/media_stream_messages.h" |
| 16 #include "content/public/common/media_stream_request.h" | 16 #include "content/public/common/media_stream_request.h" |
| 17 #include "content/renderer/media/media_stream_dispatcher_eventhandler.h" | 17 #include "content/renderer/media/media_stream_dispatcher_eventhandler.h" |
| 18 #include "media/base/audio_parameters.h" | 18 #include "media/base/audio_parameters.h" |
| 19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 20 #include "url/gurl.h" | 20 #include "url/gurl.h" |
| 21 #include "url/origin.h" |
| 21 | 22 |
| 22 namespace content { | 23 namespace content { |
| 23 namespace { | 24 namespace { |
| 24 | 25 |
| 25 const int kRouteId = 0; | 26 const int kRouteId = 0; |
| 26 const int kAudioSessionId = 3; | 27 const int kAudioSessionId = 3; |
| 27 const int kVideoSessionId = 5; | 28 const int kVideoSessionId = 5; |
| 28 const int kRequestId1 = 10; | 29 const int kRequestId1 = 10; |
| 29 const int kRequestId2 = 20; | 30 const int kRequestId2 = 20; |
| 30 const int kRequestId3 = 30; | 31 const int kRequestId3 = 30; |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 | 110 |
| 110 using MediaStreamDispatcher::GetNextIpcIdForTest; | 111 using MediaStreamDispatcher::GetNextIpcIdForTest; |
| 111 using RenderFrameObserver::OnMessageReceived; | 112 using RenderFrameObserver::OnMessageReceived; |
| 112 }; | 113 }; |
| 113 | 114 |
| 114 class MediaStreamDispatcherTest : public ::testing::Test { | 115 class MediaStreamDispatcherTest : public ::testing::Test { |
| 115 public: | 116 public: |
| 116 MediaStreamDispatcherTest() | 117 MediaStreamDispatcherTest() |
| 117 : dispatcher_(new MediaStreamDispatcherUnderTest()), | 118 : dispatcher_(new MediaStreamDispatcherUnderTest()), |
| 118 handler_(new MockMediaStreamDispatcherEventHandler), | 119 handler_(new MockMediaStreamDispatcherEventHandler), |
| 119 security_origin_("http://test.com") {} | 120 security_origin_(url::Origin(GURL("http://test.com"))) {} |
| 120 | 121 |
| 121 // Generates a request for a MediaStream and returns the request id that is | 122 // Generates a request for a MediaStream and returns the request id that is |
| 122 // used in IPC. Use this returned id in CompleteGenerateStream to identify | 123 // used in IPC. Use this returned id in CompleteGenerateStream to identify |
| 123 // the request. | 124 // the request. |
| 124 int GenerateStream(const StreamControls& controls, int request_id) { | 125 int GenerateStream(const StreamControls& controls, int request_id) { |
| 125 int next_ipc_id = dispatcher_->GetNextIpcIdForTest(); | 126 int next_ipc_id = dispatcher_->GetNextIpcIdForTest(); |
| 126 dispatcher_->GenerateStream(request_id, handler_.get()->AsWeakPtr(), | 127 dispatcher_->GenerateStream(request_id, handler_.get()->AsWeakPtr(), |
| 127 controls, security_origin_); | 128 controls, security_origin_); |
| 128 return next_ipc_id; | 129 return next_ipc_id; |
| 129 } | 130 } |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 if (controls.video.requested) | 169 if (controls.video.requested) |
| 169 EXPECT_EQ(dispatcher_->video_session_id(label, 0), kVideoSessionId); | 170 EXPECT_EQ(dispatcher_->video_session_id(label, 0), kVideoSessionId); |
| 170 | 171 |
| 171 return label; | 172 return label; |
| 172 } | 173 } |
| 173 | 174 |
| 174 protected: | 175 protected: |
| 175 base::MessageLoop message_loop_; | 176 base::MessageLoop message_loop_; |
| 176 std::unique_ptr<MediaStreamDispatcherUnderTest> dispatcher_; | 177 std::unique_ptr<MediaStreamDispatcherUnderTest> dispatcher_; |
| 177 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler_; | 178 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler_; |
| 178 GURL security_origin_; | 179 url::Origin security_origin_; |
| 179 }; | 180 }; |
| 180 | 181 |
| 181 } // namespace | 182 } // namespace |
| 182 | 183 |
| 183 TEST_F(MediaStreamDispatcherTest, GenerateStreamAndStopDevices) { | 184 TEST_F(MediaStreamDispatcherTest, GenerateStreamAndStopDevices) { |
| 184 StreamControls controls(true, true); | 185 StreamControls controls(true, true); |
| 185 | 186 |
| 186 int ipc_request_id1 = GenerateStream(controls, kRequestId1); | 187 int ipc_request_id1 = GenerateStream(controls, kRequestId1); |
| 187 int ipc_request_id2 = GenerateStream(controls, kRequestId2); | 188 int ipc_request_id2 = GenerateStream(controls, kRequestId2); |
| 188 EXPECT_NE(ipc_request_id1, ipc_request_id2); | 189 EXPECT_NE(ipc_request_id1, ipc_request_id2); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 212 StreamDeviceInfo::kNoId); | 213 StreamDeviceInfo::kNoId); |
| 213 } | 214 } |
| 214 | 215 |
| 215 TEST_F(MediaStreamDispatcherTest, BasicVideoDevice) { | 216 TEST_F(MediaStreamDispatcherTest, BasicVideoDevice) { |
| 216 std::unique_ptr<MediaStreamDispatcher> dispatcher( | 217 std::unique_ptr<MediaStreamDispatcher> dispatcher( |
| 217 new MediaStreamDispatcher(NULL)); | 218 new MediaStreamDispatcher(NULL)); |
| 218 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler1( | 219 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler1( |
| 219 new MockMediaStreamDispatcherEventHandler); | 220 new MockMediaStreamDispatcherEventHandler); |
| 220 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler2( | 221 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler2( |
| 221 new MockMediaStreamDispatcherEventHandler); | 222 new MockMediaStreamDispatcherEventHandler); |
| 222 GURL security_origin; | 223 url::Origin security_origin; |
| 223 | 224 |
| 224 int ipc_request_id1 = dispatcher->next_ipc_id_; | 225 int ipc_request_id1 = dispatcher->next_ipc_id_; |
| 225 dispatcher->EnumerateDevices( | 226 dispatcher->EnumerateDevices( |
| 226 kRequestId1, handler1.get()->AsWeakPtr(), | 227 kRequestId1, handler1.get()->AsWeakPtr(), |
| 227 kVideoType, | 228 kVideoType, |
| 228 security_origin); | 229 security_origin); |
| 229 int ipc_request_id2 = dispatcher->next_ipc_id_; | 230 int ipc_request_id2 = dispatcher->next_ipc_id_; |
| 230 EXPECT_NE(ipc_request_id1, ipc_request_id2); | 231 EXPECT_NE(ipc_request_id1, ipc_request_id2); |
| 231 dispatcher->EnumerateDevices( | 232 dispatcher->EnumerateDevices( |
| 232 kRequestId2, handler2.get()->AsWeakPtr(), | 233 kRequestId2, handler2.get()->AsWeakPtr(), |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0)); | 302 EXPECT_EQ(dispatcher->label_stream_map_.size(), size_t(0)); |
| 302 EXPECT_EQ(dispatcher->requests_.size(), size_t(2)); | 303 EXPECT_EQ(dispatcher->requests_.size(), size_t(2)); |
| 303 } | 304 } |
| 304 | 305 |
| 305 TEST_F(MediaStreamDispatcherTest, TestFailure) { | 306 TEST_F(MediaStreamDispatcherTest, TestFailure) { |
| 306 std::unique_ptr<MediaStreamDispatcher> dispatcher( | 307 std::unique_ptr<MediaStreamDispatcher> dispatcher( |
| 307 new MediaStreamDispatcher(NULL)); | 308 new MediaStreamDispatcher(NULL)); |
| 308 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler( | 309 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler( |
| 309 new MockMediaStreamDispatcherEventHandler); | 310 new MockMediaStreamDispatcherEventHandler); |
| 310 StreamControls components(true, true); | 311 StreamControls components(true, true); |
| 311 GURL security_origin; | 312 url::Origin security_origin; |
| 312 | 313 |
| 313 // Test failure when creating a stream. | 314 // Test failure when creating a stream. |
| 314 int ipc_request_id1 = dispatcher->next_ipc_id_; | 315 int ipc_request_id1 = dispatcher->next_ipc_id_; |
| 315 dispatcher->GenerateStream(kRequestId1, handler.get()->AsWeakPtr(), | 316 dispatcher->GenerateStream(kRequestId1, handler.get()->AsWeakPtr(), |
| 316 components, security_origin); | 317 components, security_origin); |
| 317 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerationFailed( | 318 dispatcher->OnMessageReceived(MediaStreamMsg_StreamGenerationFailed( |
| 318 kRouteId, ipc_request_id1, MEDIA_DEVICE_PERMISSION_DENIED)); | 319 kRouteId, ipc_request_id1, MEDIA_DEVICE_PERMISSION_DENIED)); |
| 319 | 320 |
| 320 // Verify that the request have been completed. | 321 // Verify that the request have been completed. |
| 321 EXPECT_EQ(handler->request_id_, kRequestId1); | 322 EXPECT_EQ(handler->request_id_, kRequestId1); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 352 | 353 |
| 353 TEST_F(MediaStreamDispatcherTest, CancelGenerateStream) { | 354 TEST_F(MediaStreamDispatcherTest, CancelGenerateStream) { |
| 354 std::unique_ptr<MediaStreamDispatcher> dispatcher( | 355 std::unique_ptr<MediaStreamDispatcher> dispatcher( |
| 355 new MediaStreamDispatcher(NULL)); | 356 new MediaStreamDispatcher(NULL)); |
| 356 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler( | 357 std::unique_ptr<MockMediaStreamDispatcherEventHandler> handler( |
| 357 new MockMediaStreamDispatcherEventHandler); | 358 new MockMediaStreamDispatcherEventHandler); |
| 358 StreamControls components(true, true); | 359 StreamControls components(true, true); |
| 359 int ipc_request_id1 = dispatcher->next_ipc_id_; | 360 int ipc_request_id1 = dispatcher->next_ipc_id_; |
| 360 | 361 |
| 361 dispatcher->GenerateStream(kRequestId1, handler.get()->AsWeakPtr(), | 362 dispatcher->GenerateStream(kRequestId1, handler.get()->AsWeakPtr(), |
| 362 components, GURL()); | 363 components, url::Origin()); |
| 363 dispatcher->GenerateStream(kRequestId2, handler.get()->AsWeakPtr(), | 364 dispatcher->GenerateStream(kRequestId2, handler.get()->AsWeakPtr(), |
| 364 components, GURL()); | 365 components, url::Origin()); |
| 365 | 366 |
| 366 EXPECT_EQ(2u, dispatcher->requests_.size()); | 367 EXPECT_EQ(2u, dispatcher->requests_.size()); |
| 367 dispatcher->CancelGenerateStream(kRequestId2, handler.get()->AsWeakPtr()); | 368 dispatcher->CancelGenerateStream(kRequestId2, handler.get()->AsWeakPtr()); |
| 368 EXPECT_EQ(1u, dispatcher->requests_.size()); | 369 EXPECT_EQ(1u, dispatcher->requests_.size()); |
| 369 | 370 |
| 370 // Complete the creation of stream1. | 371 // Complete the creation of stream1. |
| 371 StreamDeviceInfo audio_device_info; | 372 StreamDeviceInfo audio_device_info; |
| 372 audio_device_info.device.name = "Microphone"; | 373 audio_device_info.device.name = "Microphone"; |
| 373 audio_device_info.device.type = kAudioType; | 374 audio_device_info.device.type = kAudioType; |
| 374 audio_device_info.session_id = kAudioSessionId; | 375 audio_device_info.session_id = kAudioSessionId; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 403 dispatcher_->OnMessageReceived( | 404 dispatcher_->OnMessageReceived( |
| 404 MediaStreamMsg_DeviceStopped(kRouteId, label, handler_->video_device_)); | 405 MediaStreamMsg_DeviceStopped(kRouteId, label, handler_->video_device_)); |
| 405 // Verify that MediaStreamDispatcherEventHandler::OnDeviceStopped has been | 406 // Verify that MediaStreamDispatcherEventHandler::OnDeviceStopped has been |
| 406 // called. | 407 // called. |
| 407 EXPECT_EQ(label, handler_->device_stopped_label_); | 408 EXPECT_EQ(label, handler_->device_stopped_label_); |
| 408 EXPECT_EQ(dispatcher_->video_session_id(label, 0), | 409 EXPECT_EQ(dispatcher_->video_session_id(label, 0), |
| 409 StreamDeviceInfo::kNoId); | 410 StreamDeviceInfo::kNoId); |
| 410 } | 411 } |
| 411 | 412 |
| 412 } // namespace content | 413 } // namespace content |
| OLD | NEW |