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