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..7d2e2d911da6afbd67ef010d1406bcc76f8ff5a2 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,43 @@ 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); |
+ 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 +204,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 +218,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")); |
} |