| 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 |