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 <string> | 5 #include <string> |
6 #include <queue> | 6 #include <queue> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 namespace content { | 44 namespace content { |
45 | 45 |
46 class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost, | 46 class MockMediaStreamDispatcherHost : public MediaStreamDispatcherHost, |
47 public TestContentBrowserClient { | 47 public TestContentBrowserClient { |
48 public: | 48 public: |
49 MockMediaStreamDispatcherHost( | 49 MockMediaStreamDispatcherHost( |
50 const ResourceContext::SaltCallback salt_callback, | 50 const ResourceContext::SaltCallback salt_callback, |
51 const scoped_refptr<base::MessageLoopProxy>& message_loop, | 51 const scoped_refptr<base::MessageLoopProxy>& message_loop, |
52 MediaStreamManager* manager) | 52 MediaStreamManager* manager) |
53 : MediaStreamDispatcherHost(kProcessId, salt_callback, manager), | 53 : MediaStreamDispatcherHost(kProcessId, salt_callback, manager), |
54 message_loop_(message_loop) {} | 54 message_loop_(message_loop), |
| 55 current_ipc_(NULL) {} |
55 | 56 |
56 // A list of mock methods. | 57 // A list of mock methods. |
57 MOCK_METHOD4(OnStreamGenerated, | 58 MOCK_METHOD4(OnStreamGenerated, |
58 void(int routing_id, int request_id, int audio_array_size, | 59 void(int routing_id, int request_id, int audio_array_size, |
59 int video_array_size)); | 60 int video_array_size)); |
60 MOCK_METHOD3(OnStreamGenerationFailed, void(int routing_id, | 61 MOCK_METHOD3(OnStreamGenerationFailed, void(int routing_id, |
61 int request_id, | 62 int request_id, |
62 MediaStreamRequestResult result)); | 63 MediaStreamRequestResult result)); |
63 MOCK_METHOD1(OnDeviceStopped, void(int routing_id)); | 64 MOCK_METHOD1(OnDeviceStopped, void(int routing_id)); |
64 MOCK_METHOD2(OnDeviceOpened, void(int routing_id, int request_id)); | 65 MOCK_METHOD2(OnDeviceOpened, void(int routing_id, int request_id)); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 StreamDeviceInfoArray enumerated_devices_; | 108 StreamDeviceInfoArray enumerated_devices_; |
108 | 109 |
109 private: | 110 private: |
110 virtual ~MockMediaStreamDispatcherHost() {} | 111 virtual ~MockMediaStreamDispatcherHost() {} |
111 | 112 |
112 // This method is used to dispatch IPC messages to the renderer. We intercept | 113 // This method is used to dispatch IPC messages to the renderer. We intercept |
113 // these messages here and dispatch to our mock methods to verify the | 114 // these messages here and dispatch to our mock methods to verify the |
114 // conversation between this object and the renderer. | 115 // conversation between this object and the renderer. |
115 virtual bool Send(IPC::Message* message) OVERRIDE { | 116 virtual bool Send(IPC::Message* message) OVERRIDE { |
116 CHECK(message); | 117 CHECK(message); |
| 118 current_ipc_ = message; |
117 | 119 |
118 // In this method we dispatch the messages to the according handlers as if | 120 // In this method we dispatch the messages to the according handlers as if |
119 // we are the renderer. | 121 // we are the renderer. |
120 bool handled = true; | 122 bool handled = true; |
121 IPC_BEGIN_MESSAGE_MAP(MockMediaStreamDispatcherHost, *message) | 123 IPC_BEGIN_MESSAGE_MAP(MockMediaStreamDispatcherHost, *message) |
122 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated, OnStreamGenerated) | 124 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerated, |
| 125 OnStreamGeneratedInternal) |
123 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed, | 126 IPC_MESSAGE_HANDLER(MediaStreamMsg_StreamGenerationFailed, |
124 OnStreamGenerationFailed) | 127 OnStreamGenerationFailedInternal) |
125 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceStopped, OnDeviceStopped) | 128 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceStopped, OnDeviceStoppedInternal) |
126 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpened, OnDeviceOpened) | 129 IPC_MESSAGE_HANDLER(MediaStreamMsg_DeviceOpened, OnDeviceOpenedInternal) |
127 IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesEnumerated, | 130 IPC_MESSAGE_HANDLER(MediaStreamMsg_DevicesEnumerated, OnDevicesEnumerated) |
128 OnDevicesEnumerated) | |
129 IPC_MESSAGE_UNHANDLED(handled = false) | 131 IPC_MESSAGE_UNHANDLED(handled = false) |
130 IPC_END_MESSAGE_MAP() | 132 IPC_END_MESSAGE_MAP() |
131 EXPECT_TRUE(handled); | 133 EXPECT_TRUE(handled); |
132 | 134 |
133 delete message; | 135 delete message; |
| 136 current_ipc_ = NULL; |
134 return true; | 137 return true; |
135 } | 138 } |
136 | 139 |
137 // These handler methods do minimal things and delegate to the mock methods. | 140 // These handler methods do minimal things and delegate to the mock methods. |
138 void OnStreamGenerated( | 141 void OnStreamGeneratedInternal( |
139 const IPC::Message& msg, | |
140 int request_id, | 142 int request_id, |
141 std::string label, | 143 std::string label, |
142 StreamDeviceInfoArray audio_device_list, | 144 StreamDeviceInfoArray audio_device_list, |
143 StreamDeviceInfoArray video_device_list) { | 145 StreamDeviceInfoArray video_device_list) { |
144 OnStreamGenerated(msg.routing_id(), request_id, audio_device_list.size(), | 146 OnStreamGenerated(current_ipc_->routing_id(), request_id, |
145 video_device_list.size()); | 147 audio_device_list.size(), video_device_list.size()); |
146 // Notify that the event have occurred. | 148 // Notify that the event have occurred. |
147 base::Closure quit_closure = quit_closures_.front(); | 149 base::Closure quit_closure = quit_closures_.front(); |
148 quit_closures_.pop(); | 150 quit_closures_.pop(); |
149 message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure)); | 151 message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure)); |
150 | 152 |
151 label_ = label; | 153 label_ = label; |
152 audio_devices_ = audio_device_list; | 154 audio_devices_ = audio_device_list; |
153 video_devices_ = video_device_list; | 155 video_devices_ = video_device_list; |
154 } | 156 } |
155 | 157 |
156 void OnStreamGenerationFailed( | 158 void OnStreamGenerationFailedInternal( |
157 const IPC::Message& msg, | |
158 int request_id, | 159 int request_id, |
159 content::MediaStreamRequestResult result) { | 160 content::MediaStreamRequestResult result) { |
160 OnStreamGenerationFailed(msg.routing_id(), request_id, result); | 161 OnStreamGenerationFailed(current_ipc_->routing_id(), request_id, result); |
161 if (!quit_closures_.empty()) { | 162 if (!quit_closures_.empty()) { |
162 base::Closure quit_closure = quit_closures_.front(); | 163 base::Closure quit_closure = quit_closures_.front(); |
163 quit_closures_.pop(); | 164 quit_closures_.pop(); |
164 message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure)); | 165 message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure)); |
165 } | 166 } |
166 | 167 |
167 label_= ""; | 168 label_= ""; |
168 } | 169 } |
169 | 170 |
170 void OnDeviceStopped(const IPC::Message& msg, | 171 void OnDeviceStoppedInternal(const std::string& label, |
171 const std::string& label, | 172 const content::StreamDeviceInfo& device) { |
172 const content::StreamDeviceInfo& device) { | |
173 if (IsVideoMediaType(device.device.type)) | 173 if (IsVideoMediaType(device.device.type)) |
174 EXPECT_TRUE(StreamDeviceInfo::IsEqual(device, video_devices_[0])); | 174 EXPECT_TRUE(StreamDeviceInfo::IsEqual(device, video_devices_[0])); |
175 if (IsAudioMediaType(device.device.type)) | 175 if (IsAudioMediaType(device.device.type)) |
176 EXPECT_TRUE(StreamDeviceInfo::IsEqual(device, audio_devices_[0])); | 176 EXPECT_TRUE(StreamDeviceInfo::IsEqual(device, audio_devices_[0])); |
177 | 177 |
178 OnDeviceStopped(msg.routing_id()); | 178 OnDeviceStopped(current_ipc_->routing_id()); |
179 } | 179 } |
180 | 180 |
181 void OnDeviceOpened(const IPC::Message& msg, | 181 void OnDeviceOpenedInternal(int request_id, |
182 int request_id, | 182 const std::string& label, |
183 const std::string& label, | 183 const StreamDeviceInfo& device) { |
184 const StreamDeviceInfo& device) { | |
185 base::Closure quit_closure = quit_closures_.front(); | 184 base::Closure quit_closure = quit_closures_.front(); |
186 quit_closures_.pop(); | 185 quit_closures_.pop(); |
187 message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure)); | 186 message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure)); |
188 label_ = label; | 187 label_ = label; |
189 opened_device_ = device; | 188 opened_device_ = device; |
190 } | 189 } |
191 | 190 |
192 void OnDevicesEnumerated(const IPC::Message& msg, | 191 void OnDevicesEnumerated(int request_id, |
193 int request_id, | |
194 const StreamDeviceInfoArray& devices) { | 192 const StreamDeviceInfoArray& devices) { |
195 base::Closure quit_closure = quit_closures_.front(); | 193 base::Closure quit_closure = quit_closures_.front(); |
196 quit_closures_.pop(); | 194 quit_closures_.pop(); |
197 message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure)); | 195 message_loop_->PostTask(FROM_HERE, base::ResetAndReturn(&quit_closure)); |
198 enumerated_devices_ = devices; | 196 enumerated_devices_ = devices; |
199 } | 197 } |
200 | 198 |
201 scoped_refptr<base::MessageLoopProxy> message_loop_; | 199 scoped_refptr<base::MessageLoopProxy> message_loop_; |
202 | 200 IPC::Message* current_ipc_; |
203 std::queue<base::Closure> quit_closures_; | 201 std::queue<base::Closure> quit_closures_; |
204 }; | 202 }; |
205 | 203 |
206 class MockMediaStreamUIProxy : public FakeMediaStreamUIProxy { | 204 class MockMediaStreamUIProxy : public FakeMediaStreamUIProxy { |
207 public: | 205 public: |
208 MOCK_METHOD2( | 206 MOCK_METHOD2( |
209 OnStarted, | 207 OnStarted, |
210 void(const base::Closure& stop, | 208 void(const base::Closure& stop, |
211 const MediaStreamUIProxy::WindowIdCallback& window_id_callback)); | 209 const MediaStreamUIProxy::WindowIdCallback& window_id_callback)); |
212 }; | 210 }; |
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 850 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
853 MEDIA_DEVICE_AUDIO_CAPTURE); | 851 MEDIA_DEVICE_AUDIO_CAPTURE); |
854 } | 852 } |
855 | 853 |
856 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevices) { | 854 TEST_F(MediaStreamDispatcherHostTest, EnumerateVideoDevices) { |
857 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, | 855 EnumerateDevicesAndWaitForResult(kRenderId, kPageRequestId, |
858 MEDIA_DEVICE_VIDEO_CAPTURE); | 856 MEDIA_DEVICE_VIDEO_CAPTURE); |
859 } | 857 } |
860 | 858 |
861 }; // namespace content | 859 }; // namespace content |
OLD | NEW |