OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <numeric> | 7 #include <numeric> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "net/base/io_buffer.h" | 21 #include "net/base/io_buffer.h" |
22 | 22 |
23 using testing::_; | 23 using testing::_; |
24 using testing::AnyNumber; | 24 using testing::AnyNumber; |
25 using testing::Invoke; | 25 using testing::Invoke; |
26 using testing::Return; | 26 using testing::Return; |
27 using device::MockDeviceClient; | 27 using device::MockDeviceClient; |
28 using device::MockUsbDevice; | 28 using device::MockUsbDevice; |
29 using device::MockUsbDeviceHandle; | 29 using device::MockUsbDeviceHandle; |
30 using device::UsbConfigDescriptor; | 30 using device::UsbConfigDescriptor; |
| 31 using device::UsbControlTransferRecipient; |
| 32 using device::UsbControlTransferType; |
31 using device::UsbDeviceHandle; | 33 using device::UsbDeviceHandle; |
32 using device::UsbEndpointDirection; | |
33 using device::UsbInterfaceDescriptor; | 34 using device::UsbInterfaceDescriptor; |
| 35 using device::UsbTransferDirection; |
| 36 using device::UsbTransferStatus; |
34 | 37 |
35 namespace extensions { | 38 namespace extensions { |
36 | 39 |
37 namespace { | 40 namespace { |
38 | 41 |
39 ACTION_TEMPLATE(InvokeCallback, | 42 ACTION_TEMPLATE(InvokeCallback, |
40 HAS_1_TEMPLATE_PARAMS(int, k), | 43 HAS_1_TEMPLATE_PARAMS(int, k), |
41 AND_1_VALUE_PARAMS(p1)) { | 44 AND_1_VALUE_PARAMS(p1)) { |
42 ::std::tr1::get<k>(args).Run(p1); | 45 ::std::tr1::get<k>(args).Run(p1); |
43 } | 46 } |
44 | 47 |
45 ACTION_TEMPLATE(InvokeUsbTransferCallback, | 48 ACTION_TEMPLATE(InvokeUsbTransferCallback, |
46 HAS_1_TEMPLATE_PARAMS(int, k), | 49 HAS_1_TEMPLATE_PARAMS(int, k), |
47 AND_1_VALUE_PARAMS(p1)) { | 50 AND_1_VALUE_PARAMS(p1)) { |
48 net::IOBuffer* io_buffer = nullptr; | 51 net::IOBuffer* io_buffer = nullptr; |
49 size_t length = 0; | 52 size_t length = 0; |
50 if (p1 != device::USB_TRANSFER_ERROR) { | 53 if (p1 != UsbTransferStatus::TRANSFER_ERROR) { |
51 length = 1; | 54 length = 1; |
52 io_buffer = new net::IOBuffer(length); | 55 io_buffer = new net::IOBuffer(length); |
53 memset(io_buffer->data(), 0, length); // Avoid uninitialized reads. | 56 memset(io_buffer->data(), 0, length); // Avoid uninitialized reads. |
54 } | 57 } |
55 ::std::tr1::get<k>(args).Run(p1, io_buffer, 1); | 58 ::std::tr1::get<k>(args).Run(p1, io_buffer, 1); |
56 } | 59 } |
57 | 60 |
58 ACTION_P2(InvokeUsbIsochronousTransferOutCallback, | 61 ACTION_P2(InvokeUsbIsochronousTransferOutCallback, |
59 transferred_length, | 62 transferred_length, |
60 success_packets) { | 63 success_packets) { |
61 std::vector<UsbDeviceHandle::IsochronousPacket> packets(arg2.size()); | 64 std::vector<UsbDeviceHandle::IsochronousPacket> packets(arg2.size()); |
62 for (size_t i = 0; i < packets.size(); ++i) { | 65 for (size_t i = 0; i < packets.size(); ++i) { |
63 packets[i].length = arg2[i]; | 66 packets[i].length = arg2[i]; |
64 if (i < success_packets) { | 67 if (i < success_packets) { |
65 packets[i].transferred_length = transferred_length; | 68 packets[i].transferred_length = transferred_length; |
66 packets[i].status = device::USB_TRANSFER_COMPLETED; | 69 packets[i].status = UsbTransferStatus::COMPLETED; |
67 } else { | 70 } else { |
68 packets[i].transferred_length = 0; | 71 packets[i].transferred_length = 0; |
69 packets[i].status = device::USB_TRANSFER_ERROR; | 72 packets[i].status = UsbTransferStatus::TRANSFER_ERROR; |
70 } | 73 } |
71 } | 74 } |
72 arg4.Run(arg1, packets); | 75 arg4.Run(arg1, packets); |
73 } | 76 } |
74 | 77 |
75 ACTION_P2(InvokeUsbIsochronousTransferInCallback, | 78 ACTION_P2(InvokeUsbIsochronousTransferInCallback, |
76 transferred_length, | 79 transferred_length, |
77 success_packets) { | 80 success_packets) { |
78 size_t total_length = std::accumulate(arg1.begin(), arg1.end(), 0u); | 81 size_t total_length = std::accumulate(arg1.begin(), arg1.end(), 0u); |
79 net::IOBuffer* io_buffer = new net::IOBuffer(total_length); | 82 net::IOBuffer* io_buffer = new net::IOBuffer(total_length); |
80 memset(io_buffer->data(), 0, total_length); // Avoid uninitialized reads. | 83 memset(io_buffer->data(), 0, total_length); // Avoid uninitialized reads. |
81 std::vector<UsbDeviceHandle::IsochronousPacket> packets(arg1.size()); | 84 std::vector<UsbDeviceHandle::IsochronousPacket> packets(arg1.size()); |
82 for (size_t i = 0; i < packets.size(); ++i) { | 85 for (size_t i = 0; i < packets.size(); ++i) { |
83 packets[i].length = arg1[i]; | 86 packets[i].length = arg1[i]; |
84 packets[i].transferred_length = transferred_length; | 87 packets[i].transferred_length = transferred_length; |
85 if (i < success_packets) { | 88 if (i < success_packets) { |
86 packets[i].transferred_length = transferred_length; | 89 packets[i].transferred_length = transferred_length; |
87 packets[i].status = device::USB_TRANSFER_COMPLETED; | 90 packets[i].status = UsbTransferStatus::COMPLETED; |
88 } else { | 91 } else { |
89 packets[i].transferred_length = 0; | 92 packets[i].transferred_length = 0; |
90 packets[i].status = device::USB_TRANSFER_ERROR; | 93 packets[i].status = UsbTransferStatus::TRANSFER_ERROR; |
91 } | 94 } |
92 } | 95 } |
93 arg3.Run(io_buffer, packets); | 96 arg3.Run(io_buffer, packets); |
94 } | 97 } |
95 | 98 |
96 ACTION_P(SetConfiguration, mock_device) { | 99 ACTION_P(SetConfiguration, mock_device) { |
97 mock_device->ActiveConfigurationChanged(arg0); | 100 mock_device->ActiveConfigurationChanged(arg0); |
98 arg1.Run(true); | 101 arg1.Run(true); |
99 } | 102 } |
100 | 103 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 EXPECT_CALL(*mock_device_handle_, Close()).Times(2); | 174 EXPECT_CALL(*mock_device_handle_, Close()).Times(2); |
172 ASSERT_TRUE(RunAppTest("api_test/usb/device_handling")); | 175 ASSERT_TRUE(RunAppTest("api_test/usb/device_handling")); |
173 } | 176 } |
174 | 177 |
175 IN_PROC_BROWSER_TEST_F(UsbApiTest, ResetDevice) { | 178 IN_PROC_BROWSER_TEST_F(UsbApiTest, ResetDevice) { |
176 EXPECT_CALL(*mock_device_handle_, Close()).Times(2); | 179 EXPECT_CALL(*mock_device_handle_, Close()).Times(2); |
177 EXPECT_CALL(*mock_device_handle_, ResetDevice(_)) | 180 EXPECT_CALL(*mock_device_handle_, ResetDevice(_)) |
178 .WillOnce(InvokeCallback<0>(true)) | 181 .WillOnce(InvokeCallback<0>(true)) |
179 .WillOnce(InvokeCallback<0>(false)); | 182 .WillOnce(InvokeCallback<0>(false)); |
180 EXPECT_CALL(*mock_device_handle_, | 183 EXPECT_CALL(*mock_device_handle_, |
181 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) | 184 GenericTransfer(UsbTransferDirection::OUTBOUND, 2, _, 1, _, _)) |
182 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); | 185 .WillOnce(InvokeUsbTransferCallback<5>(UsbTransferStatus::COMPLETED)); |
183 ASSERT_TRUE(RunAppTest("api_test/usb/reset_device")); | 186 ASSERT_TRUE(RunAppTest("api_test/usb/reset_device")); |
184 } | 187 } |
185 | 188 |
186 IN_PROC_BROWSER_TEST_F(UsbApiTest, SetConfiguration) { | 189 IN_PROC_BROWSER_TEST_F(UsbApiTest, SetConfiguration) { |
187 EXPECT_CALL(*mock_device_handle_, SetConfiguration(1, _)) | 190 EXPECT_CALL(*mock_device_handle_, SetConfiguration(1, _)) |
188 .WillOnce(SetConfiguration(mock_device_.get())); | 191 .WillOnce(SetConfiguration(mock_device_.get())); |
189 EXPECT_CALL(*mock_device_handle_, Close()).Times(1); | 192 EXPECT_CALL(*mock_device_handle_, Close()).Times(1); |
190 ASSERT_TRUE(RunAppTest("api_test/usb/set_configuration")); | 193 ASSERT_TRUE(RunAppTest("api_test/usb/set_configuration")); |
191 } | 194 } |
192 | 195 |
193 IN_PROC_BROWSER_TEST_F(UsbApiTest, ListInterfaces) { | 196 IN_PROC_BROWSER_TEST_F(UsbApiTest, ListInterfaces) { |
194 mock_device_->ActiveConfigurationChanged(1); | 197 mock_device_->ActiveConfigurationChanged(1); |
195 EXPECT_CALL(*mock_device_handle_, Close()).Times(1); | 198 EXPECT_CALL(*mock_device_handle_, Close()).Times(1); |
196 ASSERT_TRUE(RunAppTest("api_test/usb/list_interfaces")); | 199 ASSERT_TRUE(RunAppTest("api_test/usb/list_interfaces")); |
197 } | 200 } |
198 | 201 |
199 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) { | 202 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) { |
200 EXPECT_CALL( | 203 EXPECT_CALL( |
201 *mock_device_handle_, | 204 *mock_device_handle_, |
202 ControlTransfer(device::USB_DIRECTION_OUTBOUND, UsbDeviceHandle::STANDARD, | 205 ControlTransfer(UsbTransferDirection::OUTBOUND, |
203 UsbDeviceHandle::DEVICE, 1, 2, 3, _, 1, _, _)) | 206 UsbControlTransferType::STANDARD, |
204 .WillOnce(InvokeUsbTransferCallback<9>(device::USB_TRANSFER_COMPLETED)); | 207 UsbControlTransferRecipient::DEVICE, 1, 2, 3, _, 1, _, _)) |
| 208 .WillOnce(InvokeUsbTransferCallback<9>(UsbTransferStatus::COMPLETED)); |
205 EXPECT_CALL(*mock_device_handle_, | 209 EXPECT_CALL(*mock_device_handle_, |
206 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 1, _, 1, _, _)) | 210 GenericTransfer(UsbTransferDirection::OUTBOUND, 1, _, 1, _, _)) |
207 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); | 211 .WillOnce(InvokeUsbTransferCallback<5>(UsbTransferStatus::COMPLETED)); |
208 EXPECT_CALL(*mock_device_handle_, | 212 EXPECT_CALL(*mock_device_handle_, |
209 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) | 213 GenericTransfer(UsbTransferDirection::OUTBOUND, 2, _, 1, _, _)) |
210 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); | 214 .WillOnce(InvokeUsbTransferCallback<5>(UsbTransferStatus::COMPLETED)); |
211 EXPECT_CALL(*mock_device_handle_, IsochronousTransferOut(3, _, _, _, _)) | 215 EXPECT_CALL(*mock_device_handle_, IsochronousTransferOut(3, _, _, _, _)) |
212 .WillOnce(InvokeUsbIsochronousTransferOutCallback(1, 1u)); | 216 .WillOnce(InvokeUsbIsochronousTransferOutCallback(1, 1u)); |
213 EXPECT_CALL(*mock_device_handle_, Close()).Times(AnyNumber()); | 217 EXPECT_CALL(*mock_device_handle_, Close()).Times(AnyNumber()); |
214 ASSERT_TRUE(RunAppTest("api_test/usb/transfer_event")); | 218 ASSERT_TRUE(RunAppTest("api_test/usb/transfer_event")); |
215 } | 219 } |
216 | 220 |
217 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) { | 221 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) { |
218 EXPECT_CALL(*mock_device_handle_, GenericTransfer(_, _, _, 0, _, _)) | 222 EXPECT_CALL(*mock_device_handle_, GenericTransfer(_, _, _, 0, _, _)) |
219 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); | 223 .WillOnce(InvokeUsbTransferCallback<5>(UsbTransferStatus::COMPLETED)); |
220 EXPECT_CALL(*mock_device_handle_, Close()).Times(AnyNumber()); | 224 EXPECT_CALL(*mock_device_handle_, Close()).Times(AnyNumber()); |
221 ASSERT_TRUE(RunAppTest("api_test/usb/zero_length_transfer")); | 225 ASSERT_TRUE(RunAppTest("api_test/usb/zero_length_transfer")); |
222 } | 226 } |
223 | 227 |
224 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) { | 228 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) { |
225 EXPECT_CALL(*mock_device_handle_, | 229 EXPECT_CALL(*mock_device_handle_, |
226 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 1, _, _, _, _)) | 230 GenericTransfer(UsbTransferDirection::OUTBOUND, 1, _, _, _, _)) |
227 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)) | 231 .WillOnce(InvokeUsbTransferCallback<5>(UsbTransferStatus::COMPLETED)) |
228 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_ERROR)) | 232 .WillOnce(InvokeUsbTransferCallback<5>(UsbTransferStatus::TRANSFER_ERROR)) |
229 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_TIMEOUT)); | 233 .WillOnce(InvokeUsbTransferCallback<5>(UsbTransferStatus::TIMEOUT)); |
230 EXPECT_CALL(*mock_device_handle_, IsochronousTransferIn(2, _, _, _)) | 234 EXPECT_CALL(*mock_device_handle_, IsochronousTransferIn(2, _, _, _)) |
231 .WillOnce(InvokeUsbIsochronousTransferInCallback(8, 10u)) | 235 .WillOnce(InvokeUsbIsochronousTransferInCallback(8, 10u)) |
232 .WillOnce(InvokeUsbIsochronousTransferInCallback(8, 5u)); | 236 .WillOnce(InvokeUsbIsochronousTransferInCallback(8, 5u)); |
233 EXPECT_CALL(*mock_device_handle_, Close()).Times(AnyNumber()); | 237 EXPECT_CALL(*mock_device_handle_, Close()).Times(AnyNumber()); |
234 ASSERT_TRUE(RunAppTest("api_test/usb/transfer_failure")); | 238 ASSERT_TRUE(RunAppTest("api_test/usb/transfer_failure")); |
235 } | 239 } |
236 | 240 |
237 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) { | 241 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) { |
238 EXPECT_CALL(*mock_device_handle_, Close()).Times(AnyNumber()); | 242 EXPECT_CALL(*mock_device_handle_, Close()).Times(AnyNumber()); |
239 ASSERT_TRUE(RunAppTest("api_test/usb/invalid_length_transfer")); | 243 ASSERT_TRUE(RunAppTest("api_test/usb/invalid_length_transfer")); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 | 286 |
283 TestExtensionsAPIClient test_api_client; | 287 TestExtensionsAPIClient test_api_client; |
284 ASSERT_TRUE(LoadApp("api_test/usb/get_user_selected_devices")); | 288 ASSERT_TRUE(LoadApp("api_test/usb/get_user_selected_devices")); |
285 ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); | 289 ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); |
286 | 290 |
287 device_client_->usb_service()->RemoveDevice(mock_device_); | 291 device_client_->usb_service()->RemoveDevice(mock_device_); |
288 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); | 292 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); |
289 } | 293 } |
290 | 294 |
291 } // namespace extensions | 295 } // namespace extensions |
OLD | NEW |