| 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 "chrome/browser/extensions/extension_apitest.h" | 5 #include "chrome/browser/extensions/extension_apitest.h" |
| 6 #include "chrome/browser/ui/browser.h" | 6 #include "chrome/browser/ui/browser.h" |
| 7 #include "components/usb_service/usb_service.h" | |
| 8 #include "content/public/browser/browser_thread.h" | 7 #include "content/public/browser/browser_thread.h" |
| 9 #include "content/public/test/test_utils.h" | 8 #include "content/public/test/test_utils.h" |
| 9 #include "device/usb/usb_service.h" |
| 10 #include "extensions/browser/api/usb/usb_api.h" | 10 #include "extensions/browser/api/usb/usb_api.h" |
| 11 #include "net/base/io_buffer.h" | 11 #include "net/base/io_buffer.h" |
| 12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
| 13 | 13 |
| 14 using testing::AnyNumber; | 14 using testing::AnyNumber; |
| 15 using testing::_; | 15 using testing::_; |
| 16 using testing::Return; | 16 using testing::Return; |
| 17 using content::BrowserThread; | 17 using content::BrowserThread; |
| 18 using usb_service::UsbConfigDescriptor; | 18 using device::UsbConfigDescriptor; |
| 19 using usb_service::UsbDevice; | 19 using device::UsbDevice; |
| 20 using usb_service::UsbDeviceHandle; | 20 using device::UsbDeviceHandle; |
| 21 using usb_service::UsbEndpointDirection; | 21 using device::UsbEndpointDirection; |
| 22 using usb_service::UsbInterfaceDescriptor; | 22 using device::UsbInterfaceDescriptor; |
| 23 using usb_service::UsbService; | 23 using device::UsbService; |
| 24 using usb_service::UsbTransferCallback; | 24 using device::UsbTransferCallback; |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 ACTION_TEMPLATE(InvokeUsbTransferCallback, | 28 ACTION_TEMPLATE(InvokeUsbTransferCallback, |
| 29 HAS_1_TEMPLATE_PARAMS(int, k), | 29 HAS_1_TEMPLATE_PARAMS(int, k), |
| 30 AND_1_VALUE_PARAMS(p1)) { | 30 AND_1_VALUE_PARAMS(p1)) { |
| 31 net::IOBuffer* io_buffer = new net::IOBuffer(1); | 31 net::IOBuffer* io_buffer = new net::IOBuffer(1); |
| 32 memset(io_buffer->data(), 0, 1); // Avoid uninitialized reads. | 32 memset(io_buffer->data(), 0, 1); // Avoid uninitialized reads. |
| 33 ::std::tr1::get<k>(args).Run(p1, io_buffer, 1); | 33 ::std::tr1::get<k>(args).Run(p1, io_buffer, 1); |
| 34 } | 34 } |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 IN_PROC_BROWSER_TEST_F(UsbApiTest, DeviceHandling) { | 211 IN_PROC_BROWSER_TEST_F(UsbApiTest, DeviceHandling) { |
| 212 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(4); | 212 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(4); |
| 213 ASSERT_TRUE(RunExtensionTest("usb/device_handling")); | 213 ASSERT_TRUE(RunExtensionTest("usb/device_handling")); |
| 214 } | 214 } |
| 215 | 215 |
| 216 IN_PROC_BROWSER_TEST_F(UsbApiTest, ResetDevice) { | 216 IN_PROC_BROWSER_TEST_F(UsbApiTest, ResetDevice) { |
| 217 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(2); | 217 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(2); |
| 218 EXPECT_CALL(*mock_device_handle_.get(), ResetDevice()) | 218 EXPECT_CALL(*mock_device_handle_.get(), ResetDevice()) |
| 219 .WillOnce(Return(true)) | 219 .WillOnce(Return(true)) |
| 220 .WillOnce(Return(false)); | 220 .WillOnce(Return(false)); |
| 221 EXPECT_CALL( | 221 EXPECT_CALL(*mock_device_handle_.get(), |
| 222 *mock_device_handle_.get(), | 222 InterruptTransfer(device::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) |
| 223 InterruptTransfer(usb_service::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) | 223 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); |
| 224 .WillOnce( | |
| 225 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED)); | |
| 226 ASSERT_TRUE(RunExtensionTest("usb/reset_device")); | 224 ASSERT_TRUE(RunExtensionTest("usb/reset_device")); |
| 227 } | 225 } |
| 228 | 226 |
| 229 IN_PROC_BROWSER_TEST_F(UsbApiTest, ListInterfaces) { | 227 IN_PROC_BROWSER_TEST_F(UsbApiTest, ListInterfaces) { |
| 230 scoped_refptr<MockUsbConfigDescriptor> mock_descriptor = | 228 scoped_refptr<MockUsbConfigDescriptor> mock_descriptor = |
| 231 new MockUsbConfigDescriptor(); | 229 new MockUsbConfigDescriptor(); |
| 232 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 230 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 233 EXPECT_CALL(*mock_descriptor.get(), GetNumInterfaces()).WillOnce(Return(0)); | 231 EXPECT_CALL(*mock_descriptor.get(), GetNumInterfaces()).WillOnce(Return(0)); |
| 234 EXPECT_CALL(*mock_device_.get(), ListInterfaces()) | 232 EXPECT_CALL(*mock_device_.get(), ListInterfaces()) |
| 235 .WillOnce(Return(mock_descriptor)); | 233 .WillOnce(Return(mock_descriptor)); |
| 236 ASSERT_TRUE(RunExtensionTest("usb/list_interfaces")); | 234 ASSERT_TRUE(RunExtensionTest("usb/list_interfaces")); |
| 237 } | 235 } |
| 238 | 236 |
| 239 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) { | 237 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) { |
| 240 EXPECT_CALL(*mock_device_handle_.get(), | 238 EXPECT_CALL(*mock_device_handle_.get(), |
| 241 ControlTransfer(usb_service::USB_DIRECTION_OUTBOUND, | 239 ControlTransfer(device::USB_DIRECTION_OUTBOUND, |
| 242 UsbDeviceHandle::STANDARD, | 240 UsbDeviceHandle::STANDARD, |
| 243 UsbDeviceHandle::DEVICE, | 241 UsbDeviceHandle::DEVICE, |
| 244 1, | 242 1, |
| 245 2, | 243 2, |
| 246 3, | 244 3, |
| 247 _, | 245 _, |
| 248 1, | 246 1, |
| 249 _, | 247 _, |
| 250 _)) | 248 _)) |
| 251 .WillOnce( | 249 .WillOnce(InvokeUsbTransferCallback<9>(device::USB_TRANSFER_COMPLETED)); |
| 252 InvokeUsbTransferCallback<9>(usb_service::USB_TRANSFER_COMPLETED)); | |
| 253 EXPECT_CALL(*mock_device_handle_.get(), | 250 EXPECT_CALL(*mock_device_handle_.get(), |
| 254 BulkTransfer(usb_service::USB_DIRECTION_OUTBOUND, 1, _, 1, _, _)) | 251 BulkTransfer(device::USB_DIRECTION_OUTBOUND, 1, _, 1, _, _)) |
| 255 .WillOnce( | 252 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); |
| 256 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED)); | 253 EXPECT_CALL(*mock_device_handle_.get(), |
| 254 InterruptTransfer(device::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) |
| 255 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); |
| 257 EXPECT_CALL( | 256 EXPECT_CALL( |
| 258 *mock_device_handle_.get(), | 257 *mock_device_handle_.get(), |
| 259 InterruptTransfer(usb_service::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) | 258 IsochronousTransfer(device::USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _)) |
| 260 .WillOnce( | 259 .WillOnce(InvokeUsbTransferCallback<7>(device::USB_TRANSFER_COMPLETED)); |
| 261 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED)); | |
| 262 EXPECT_CALL(*mock_device_handle_.get(), | |
| 263 IsochronousTransfer( | |
| 264 usb_service::USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _)) | |
| 265 .WillOnce( | |
| 266 InvokeUsbTransferCallback<7>(usb_service::USB_TRANSFER_COMPLETED)); | |
| 267 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 260 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 268 ASSERT_TRUE(RunExtensionTest("usb/transfer_event")); | 261 ASSERT_TRUE(RunExtensionTest("usb/transfer_event")); |
| 269 } | 262 } |
| 270 | 263 |
| 271 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) { | 264 IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) { |
| 272 EXPECT_CALL(*mock_device_handle_.get(), BulkTransfer(_, _, _, 0, _, _)) | 265 EXPECT_CALL(*mock_device_handle_.get(), BulkTransfer(_, _, _, 0, _, _)) |
| 273 .WillOnce( | 266 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); |
| 274 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED)); | |
| 275 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 267 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 276 ASSERT_TRUE(RunExtensionTest("usb/zero_length_transfer")); | 268 ASSERT_TRUE(RunExtensionTest("usb/zero_length_transfer")); |
| 277 } | 269 } |
| 278 | 270 |
| 279 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) { | 271 IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) { |
| 280 EXPECT_CALL(*mock_device_handle_.get(), BulkTransfer(_, _, _, _, _, _)) | 272 EXPECT_CALL(*mock_device_handle_.get(), BulkTransfer(_, _, _, _, _, _)) |
| 281 .WillOnce( | 273 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)) |
| 282 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_COMPLETED)) | 274 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_ERROR)) |
| 283 .WillOnce(InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_ERROR)) | 275 .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_TIMEOUT)); |
| 284 .WillOnce( | |
| 285 InvokeUsbTransferCallback<5>(usb_service::USB_TRANSFER_TIMEOUT)); | |
| 286 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 276 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 287 ASSERT_TRUE(RunExtensionTest("usb/transfer_failure")); | 277 ASSERT_TRUE(RunExtensionTest("usb/transfer_failure")); |
| 288 } | 278 } |
| 289 | 279 |
| 290 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) { | 280 IN_PROC_BROWSER_TEST_F(UsbApiTest, InvalidLengthTransfer) { |
| 291 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); | 281 EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| 292 ASSERT_TRUE(RunExtensionTest("usb/invalid_length_transfer")); | 282 ASSERT_TRUE(RunExtensionTest("usb/invalid_length_transfer")); |
| 293 } | 283 } |
| OLD | NEW |