Chromium Code Reviews| 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> | |
| 8 | |
| 7 #include "chrome/browser/extensions/extension_apitest.h" | 9 #include "chrome/browser/extensions/extension_apitest.h" |
| 8 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| 9 #include "content/public/test/test_utils.h" | 11 #include "content/public/test/test_utils.h" |
| 10 #include "device/core/mock_device_client.h" | 12 #include "device/core/mock_device_client.h" |
| 11 #include "device/usb/mock_usb_device.h" | 13 #include "device/usb/mock_usb_device.h" |
| 12 #include "device/usb/mock_usb_device_handle.h" | 14 #include "device/usb/mock_usb_device_handle.h" |
| 13 #include "device/usb/mock_usb_service.h" | 15 #include "device/usb/mock_usb_service.h" |
| 14 #include "extensions/browser/api/device_permissions_prompt.h" | 16 #include "extensions/browser/api/device_permissions_prompt.h" |
| 15 #include "extensions/browser/api/usb/usb_api.h" | 17 #include "extensions/browser/api/usb/usb_api.h" |
| 16 #include "extensions/shell/browser/shell_extensions_api_client.h" | 18 #include "extensions/shell/browser/shell_extensions_api_client.h" |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 41 } | 43 } |
| 42 | 44 |
| 43 ACTION_TEMPLATE(InvokeUsbTransferCallback, | 45 ACTION_TEMPLATE(InvokeUsbTransferCallback, |
| 44 HAS_1_TEMPLATE_PARAMS(int, k), | 46 HAS_1_TEMPLATE_PARAMS(int, k), |
| 45 AND_1_VALUE_PARAMS(p1)) { | 47 AND_1_VALUE_PARAMS(p1)) { |
| 46 net::IOBuffer* io_buffer = new net::IOBuffer(1); | 48 net::IOBuffer* io_buffer = new net::IOBuffer(1); |
| 47 memset(io_buffer->data(), 0, 1); // Avoid uninitialized reads. | 49 memset(io_buffer->data(), 0, 1); // Avoid uninitialized reads. |
| 48 ::std::tr1::get<k>(args).Run(p1, io_buffer, 1); | 50 ::std::tr1::get<k>(args).Run(p1, io_buffer, 1); |
| 49 } | 51 } |
| 50 | 52 |
| 53 ACTION_P2(InvokeUsbIsochronousTransferOutCallback, | |
| 54 transferred_length, | |
| 55 success_packets) { | |
| 56 std::vector<UsbDeviceHandle::IsochronousPacket> packets(arg2.size()); | |
| 57 for (size_t i = 0; i < packets.size(); ++i) { | |
| 58 packets[i].length = arg2[i]; | |
| 59 if (i < success_packets) { | |
| 60 packets[i].transferred_length = transferred_length; | |
| 61 packets[i].status = device::USB_TRANSFER_COMPLETED; | |
| 62 } else { | |
| 63 packets[i].transferred_length = 0; | |
| 64 packets[i].status = device::USB_TRANSFER_ERROR; | |
| 65 } | |
| 66 } | |
| 67 arg4.Run(arg1, packets); | |
| 68 } | |
| 69 | |
| 70 ACTION_P2(InvokeUsbIsochronousTransferInCallback, | |
| 71 transferred_length, | |
| 72 success_packets) { | |
| 73 size_t total_length = std::accumulate(arg1.begin(), arg1.end(), 0u); | |
| 74 net::IOBuffer* io_buffer = new net::IOBuffer(total_length); | |
| 75 memset(io_buffer->data(), 0, total_length); // Avoid uninitialized reads. | |
|
Reilly Grant (use Gerrit)
2016/02/02 21:14:17
For the record this is the line I had to add in th
| |
| 76 std::vector<UsbDeviceHandle::IsochronousPacket> packets(arg1.size()); | |
| 77 for (size_t i = 0; i < packets.size(); ++i) { | |
| 78 packets[i].length = arg1[i]; | |
| 79 packets[i].transferred_length = transferred_length; | |
| 80 if (i < success_packets) { | |
| 81 packets[i].transferred_length = transferred_length; | |
| 82 packets[i].status = device::USB_TRANSFER_COMPLETED; | |
| 83 } else { | |
| 84 packets[i].transferred_length = 0; | |
| 85 packets[i].status = device::USB_TRANSFER_ERROR; | |
| 86 } | |
| 87 } | |
| 88 arg3.Run(io_buffer, packets); | |
| 89 } | |
| 90 | |
| 51 class TestDevicePermissionsPrompt | 91 class TestDevicePermissionsPrompt |
| 52 : public DevicePermissionsPrompt, | 92 : public DevicePermissionsPrompt, |
| 53 public DevicePermissionsPrompt::Prompt::Observer { | 93 public DevicePermissionsPrompt::Prompt::Observer { |
| 54 public: | 94 public: |
| 55 explicit TestDevicePermissionsPrompt(content::WebContents* web_contents) | 95 explicit TestDevicePermissionsPrompt(content::WebContents* web_contents) |
| 56 : DevicePermissionsPrompt(web_contents) {} | 96 : DevicePermissionsPrompt(web_contents) {} |
| 57 | 97 |
| 58 void ShowDialog() override { prompt()->SetObserver(this); } | 98 void ShowDialog() override { prompt()->SetObserver(this); } |
| 59 | 99 |
| 60 void OnDevicesChanged() override { | 100 void OnDevicesChanged() override { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 158 1, | 198 1, |
| 159 _, | 199 _, |
| 160 _)) | 200 _)) |
| 161 .WillOnce(InvokeUsbTransferCallback<9>(device::USB_TRANSFER_COMPLETED)); | 201 .WillOnce(InvokeUsbTransferCallback<9>(device::USB_TRANSFER_COMPLETED)); |
| 162 EXPECT_CALL(*mock_device_handle_.get(), | 202 EXPECT_CALL(*mock_device_handle_.get(), |
| 163 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 1, _, 1, _, _)) | 203 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 1, _, 1, _, _)) |
| 164 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); | 204 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); |
| 165 EXPECT_CALL(*mock_device_handle_.get(), | 205 EXPECT_CALL(*mock_device_handle_.get(), |
| 166 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) | 206 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) |
| 167 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); | 207 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); |
| 168 EXPECT_CALL( | 208 EXPECT_CALL(*mock_device_handle_.get(), IsochronousTransferOut(3, _, _, _, _)) |
| 169 *mock_device_handle_.get(), | 209 .WillOnce(InvokeUsbIsochronousTransferOutCallback(1, 1u)); |
| 170 IsochronousTransfer(device::USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _)) | |
| 171 .WillOnce(InvokeUsbTransferCallback<7>(device::USB_TRANSFER_COMPLETED)); | |
| 172 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 210 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 173 ASSERT_TRUE(RunAppTest("api_test/usb/transfer_event")); | 211 ASSERT_TRUE(RunAppTest("api_test/usb/transfer_event")); |
| 174 } | 212 } |
| 175 | 213 |
| 176 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) { | 214 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) { |
| 177 EXPECT_CALL(*mock_device_handle_.get(), GenericTransfer(_, _, _, 0, _, _)) | 215 EXPECT_CALL(*mock_device_handle_.get(), GenericTransfer(_, _, _, 0, _, _)) |
| 178 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); | 216 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); |
| 179 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 217 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 180 ASSERT_TRUE(RunAppTest("api_test/usb/zero_length_transfer")); | 218 ASSERT_TRUE(RunAppTest("api_test/usb/zero_length_transfer")); |
| 181 } | 219 } |
| 182 | 220 |
| 183 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) { | 221 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) { |
| 184 EXPECT_CALL(*mock_device_handle_.get(), GenericTransfer(_, _, _, _, _, _)) | 222 EXPECT_CALL(*mock_device_handle_.get(), |
| 223 GenericTransfer(device::USB_DIRECTION_OUTBOUND, 1, _, _, _, _)) | |
| 185 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)) | 224 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)) |
| 186 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_ERROR)) | 225 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_ERROR)) |
| 187 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_TIMEOUT)); | 226 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_TIMEOUT)); |
| 227 EXPECT_CALL(*mock_device_handle_.get(), IsochronousTransferIn(2, _, _, _)) | |
| 228 .WillOnce(InvokeUsbIsochronousTransferInCallback(8, 10u)) | |
| 229 .WillOnce(InvokeUsbIsochronousTransferInCallback(8, 5u)); | |
| 188 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 230 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 189 ASSERT_TRUE(RunAppTest("api_test/usb/transfer_failure")); | 231 ASSERT_TRUE(RunAppTest("api_test/usb/transfer_failure")); |
| 190 } | 232 } |
| 191 | 233 |
| 192 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) { | 234 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) { |
| 193 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 235 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 194 ASSERT_TRUE(RunAppTest("api_test/usb/invalid_length_transfer")); | 236 ASSERT_TRUE(RunAppTest("api_test/usb/invalid_length_transfer")); |
| 195 } | 237 } |
| 196 | 238 |
| 197 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidTimeout) { | 239 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidTimeout) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 237 | 279 |
| 238 TestExtensionsAPIClient test_api_client; | 280 TestExtensionsAPIClient test_api_client; |
| 239 ASSERT_TRUE(LoadApp("api_test/usb/get_user_selected_devices")); | 281 ASSERT_TRUE(LoadApp("api_test/usb/get_user_selected_devices")); |
| 240 ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); | 282 ASSERT_TRUE(ready_listener.WaitUntilSatisfied()); |
| 241 | 283 |
| 242 device_client_->usb_service()->RemoveDevice(mock_device_); | 284 device_client_->usb_service()->RemoveDevice(mock_device_); |
| 243 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); | 285 ASSERT_TRUE(result_listener.WaitUntilSatisfied()); |
| 244 } | 286 } |
| 245 | 287 |
| 246 } // namespace extensions | 288 } // namespace extensions |
| OLD | NEW |