Chromium Code Reviews| Index: extensions/browser/api/usb/usb_apitest.cc |
| diff --git a/extensions/browser/api/usb/usb_apitest.cc b/extensions/browser/api/usb/usb_apitest.cc |
| index cc6b47b172d113a589422ad3869fe31a5e03dd1b..30601a9fb5390225de575f07e7f764a2bf53516e 100644 |
| --- a/extensions/browser/api/usb/usb_apitest.cc |
| +++ b/extensions/browser/api/usb/usb_apitest.cc |
| @@ -4,6 +4,8 @@ |
| #include <stddef.h> |
| +#include <numeric> |
| + |
| #include "chrome/browser/extensions/extension_apitest.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/test/test_utils.h" |
| @@ -48,6 +50,44 @@ ACTION_TEMPLATE(InvokeUsbTransferCallback, |
| ::std::tr1::get<k>(args).Run(p1, io_buffer, 1); |
| } |
| +ACTION_P2(InvokeUsbIsochronousTransferOutCallback, |
| + transferred_length, |
| + success_packets) { |
| + std::vector<UsbDeviceHandle::IsochronousPacket> packets(arg2.size()); |
| + for (size_t i = 0; i < packets.size(); ++i) { |
| + packets[i].length = arg2[i]; |
| + if (i < success_packets) { |
| + packets[i].transferred_length = transferred_length; |
| + packets[i].status = device::USB_TRANSFER_COMPLETED; |
| + } else { |
| + packets[i].transferred_length = 0; |
| + packets[i].status = device::USB_TRANSFER_ERROR; |
| + } |
| + } |
| + arg4.Run(arg1, packets); |
| +} |
| + |
| +ACTION_P2(InvokeUsbIsochronousTransferInCallback, |
| + transferred_length, |
| + success_packets) { |
| + size_t total_length = std::accumulate(arg1.begin(), arg1.end(), 0u); |
| + net::IOBuffer* io_buffer = new net::IOBuffer(total_length); |
| + 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
|
| + std::vector<UsbDeviceHandle::IsochronousPacket> packets(arg1.size()); |
| + for (size_t i = 0; i < packets.size(); ++i) { |
| + packets[i].length = arg1[i]; |
| + packets[i].transferred_length = transferred_length; |
| + if (i < success_packets) { |
| + packets[i].transferred_length = transferred_length; |
| + packets[i].status = device::USB_TRANSFER_COMPLETED; |
| + } else { |
| + packets[i].transferred_length = 0; |
| + packets[i].status = device::USB_TRANSFER_ERROR; |
| + } |
| + } |
| + arg3.Run(io_buffer, packets); |
| +} |
| + |
| class TestDevicePermissionsPrompt |
| : public DevicePermissionsPrompt, |
| public DevicePermissionsPrompt::Prompt::Observer { |
| @@ -165,10 +205,8 @@ IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferEvent) { |
| EXPECT_CALL(*mock_device_handle_.get(), |
| GenericTransfer(device::USB_DIRECTION_OUTBOUND, 2, _, 1, _, _)) |
| .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)); |
| - EXPECT_CALL( |
| - *mock_device_handle_.get(), |
| - IsochronousTransfer(device::USB_DIRECTION_OUTBOUND, 3, _, 1, 1, 1, _, _)) |
| - .WillOnce(InvokeUsbTransferCallback<7>(device::USB_TRANSFER_COMPLETED)); |
| + EXPECT_CALL(*mock_device_handle_.get(), IsochronousTransferOut(3, _, _, _, _)) |
| + .WillOnce(InvokeUsbIsochronousTransferOutCallback(1, 1u)); |
| EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| ASSERT_TRUE(RunAppTest("api_test/usb/transfer_event")); |
| } |
| @@ -181,10 +219,14 @@ IN_PROC_BROWSER_TEST_F(UsbApiTest, ZeroLengthTransfer) { |
| } |
| IN_PROC_BROWSER_TEST_F(UsbApiTest, TransferFailure) { |
| - EXPECT_CALL(*mock_device_handle_.get(), GenericTransfer(_, _, _, _, _, _)) |
| + EXPECT_CALL(*mock_device_handle_.get(), |
| + GenericTransfer(device::USB_DIRECTION_OUTBOUND, 1, _, _, _, _)) |
| .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_COMPLETED)) |
| .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_ERROR)) |
| .WillOnce(InvokeUsbTransferCallback<5>(device::USB_TRANSFER_TIMEOUT)); |
| + EXPECT_CALL(*mock_device_handle_.get(), IsochronousTransferIn(2, _, _, _)) |
| + .WillOnce(InvokeUsbIsochronousTransferInCallback(8, 10u)) |
| + .WillOnce(InvokeUsbIsochronousTransferInCallback(8, 5u)); |
| EXPECT_CALL(*mock_device_handle_.get(), Close()).Times(AnyNumber()); |
| ASSERT_TRUE(RunAppTest("api_test/usb/transfer_failure")); |
| } |