| 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"));
|
| }
|
|
|