Chromium Code Reviews| Index: device/usb/mojo/device_impl.cc |
| diff --git a/device/usb/mojo/device_impl.cc b/device/usb/mojo/device_impl.cc |
| index 6269b05bae419e7d01fbec5d3bc2a52c9f70fc61..2a834fa5d2ec64dd7d5727893cbe501f19898ab5 100644 |
| --- a/device/usb/mojo/device_impl.cc |
| +++ b/device/usb/mojo/device_impl.cc |
| @@ -19,6 +19,7 @@ |
| #include "device/usb/mojo/type_converters.h" |
| #include "device/usb/usb_descriptors.h" |
| #include "device/usb/usb_device.h" |
| +#include "mojo/common/common_type_converters.h" |
| #include "net/base/io_buffer.h" |
| namespace device { |
| @@ -26,48 +27,43 @@ namespace usb { |
| namespace { |
| -using MojoTransferInCallback = |
| - base::Callback<void(TransferStatus, mojo::Array<uint8_t>)>; |
| - |
| -using MojoTransferOutCallback = base::Callback<void(TransferStatus)>; |
| - |
| scoped_refptr<net::IOBuffer> CreateTransferBuffer(size_t size) { |
| - scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer( |
| + return new net::IOBuffer( |
| std::max(static_cast<size_t>(1u), static_cast<size_t>(size))); |
| - return buffer; |
| } |
| -void OnTransferIn(std::unique_ptr<MojoTransferInCallback> callback, |
| +void OnTransferIn(std::unique_ptr<Device::GenericTransferInCallback> callback, |
|
Ken Rockot(use gerrit already)
2016/08/10 01:38:41
Optional nit(s): As discussed, I really don't thin
|
| UsbTransferStatus status, |
| scoped_refptr<net::IOBuffer> buffer, |
| size_t buffer_size) { |
| - mojo::Array<uint8_t> data; |
| + std::vector<uint8_t> data; |
| if (buffer) { |
| // TODO(rockot/reillyg): We should change UsbDeviceHandle to use a |
| // std::vector<uint8_t> instead of net::IOBuffer. Then we could move |
| // instead of copy. |
| - std::vector<uint8_t> bytes(buffer_size); |
| - std::copy(buffer->data(), buffer->data() + buffer_size, bytes.begin()); |
| - data.Swap(&bytes); |
| + data.resize(buffer_size); |
| + std::copy(buffer->data(), buffer->data() + buffer_size, data.begin()); |
| } |
| - callback->Run(mojo::ConvertTo<TransferStatus>(status), std::move(data)); |
| + callback->Run(mojo::ConvertTo<TransferStatus>(status), data); |
| } |
| -void OnTransferOut(std::unique_ptr<MojoTransferOutCallback> callback, |
| +void OnTransferOut(std::unique_ptr<Device::GenericTransferOutCallback> callback, |
| UsbTransferStatus status, |
| scoped_refptr<net::IOBuffer> buffer, |
| size_t buffer_size) { |
| callback->Run(mojo::ConvertTo<TransferStatus>(status)); |
| } |
| -mojo::Array<IsochronousPacketPtr> BuildIsochronousPacketArray( |
| - mojo::Array<uint32_t> packet_lengths, |
| +std::vector<IsochronousPacketPtr> BuildIsochronousPacketArray( |
| + const std::vector<uint32_t>& packet_lengths, |
| TransferStatus status) { |
| - mojo::Array<IsochronousPacketPtr> packets(packet_lengths.size()); |
| - for (size_t i = 0; i < packet_lengths.size(); ++i) { |
| - packets[i] = IsochronousPacket::New(); |
| - packets[i]->length = packet_lengths[i]; |
| - packets[i]->status = status; |
| + std::vector<IsochronousPacketPtr> packets; |
| + packets.reserve(packet_lengths.size()); |
| + for (uint32_t packet_length : packet_lengths) { |
| + auto packet = IsochronousPacket::New(); |
| + packet->length = packet_length; |
| + packet->status = status; |
| + packets.push_back(std::move(packet)); |
| } |
| return packets; |
| } |
| @@ -76,7 +72,7 @@ void OnIsochronousTransferIn( |
| std::unique_ptr<Device::IsochronousTransferInCallback> callback, |
| scoped_refptr<net::IOBuffer> buffer, |
| const std::vector<UsbDeviceHandle::IsochronousPacket>& packets) { |
| - mojo::Array<uint8_t> data; |
| + std::vector<uint8_t> data; |
| if (buffer) { |
| // TODO(rockot/reillyg): We should change UsbDeviceHandle to use a |
| // std::vector<uint8_t> instead of net::IOBuffer. Then we could move |
| @@ -87,19 +83,19 @@ void OnIsochronousTransferIn( |
| const UsbDeviceHandle::IsochronousPacket& packet) { |
| return a + packet.length; |
| }); |
| - std::vector<uint8_t> bytes(buffer_size); |
| - std::copy(buffer->data(), buffer->data() + buffer_size, bytes.begin()); |
| - data.Swap(&bytes); |
| + data.resize(buffer_size); |
| + std::copy(buffer->data(), buffer->data() + buffer_size, data.begin()); |
| } |
| - callback->Run(std::move(data), |
| - mojo::Array<IsochronousPacketPtr>::From(packets)); |
| + |
| + callback->Run(data, |
| + mojo::ConvertTo<std::vector<IsochronousPacketPtr>>(packets)); |
| } |
| void OnIsochronousTransferOut( |
| std::unique_ptr<Device::IsochronousTransferOutCallback> callback, |
| scoped_refptr<net::IOBuffer> buffer, |
| const std::vector<UsbDeviceHandle::IsochronousPacket>& packets) { |
| - callback->Run(mojo::Array<IsochronousPacketPtr>::From(packets)); |
| + callback->Run(mojo::ConvertTo<std::vector<IsochronousPacketPtr>>(packets)); |
| } |
| } // namespace |
| @@ -322,7 +318,7 @@ void DeviceImpl::ControlTransferIn(ControlTransferParamsPtr params, |
| uint32_t timeout, |
| const ControlTransferInCallback& callback) { |
| if (!device_handle_) { |
| - callback.Run(TransferStatus::TRANSFER_ERROR, mojo::Array<uint8_t>()); |
| + callback.Run(TransferStatus::TRANSFER_ERROR, base::nullopt); |
| return; |
| } |
| @@ -337,14 +333,13 @@ void DeviceImpl::ControlTransferIn(ControlTransferParamsPtr params, |
| params->request, params->value, params->index, buffer, length, timeout, |
| base::Bind(&OnTransferIn, base::Passed(&callback_ptr))); |
| } else { |
| - mojo::Array<uint8_t> data; |
| - callback.Run(TransferStatus::PERMISSION_DENIED, std::move(data)); |
| + callback.Run(TransferStatus::PERMISSION_DENIED, base::nullopt); |
| } |
| } |
| void DeviceImpl::ControlTransferOut( |
| ControlTransferParamsPtr params, |
| - mojo::Array<uint8_t> data, |
| + const std::vector<uint8_t>& data, |
| uint32_t timeout, |
| const ControlTransferOutCallback& callback) { |
| if (!device_handle_) { |
| @@ -354,8 +349,7 @@ void DeviceImpl::ControlTransferOut( |
| if (HasControlTransferPermission(params->recipient, params->index)) { |
| scoped_refptr<net::IOBuffer> buffer = CreateTransferBuffer(data.size()); |
| - const std::vector<uint8_t>& storage = data.storage(); |
| - std::copy(storage.begin(), storage.end(), buffer->data()); |
| + std::copy(data.begin(), data.end(), buffer->data()); |
| auto callback_ptr = |
| base::WrapUnique(new ControlTransferOutCallback(callback)); |
| device_handle_->ControlTransfer( |
| @@ -374,7 +368,7 @@ void DeviceImpl::GenericTransferIn(uint8_t endpoint_number, |
| uint32_t timeout, |
| const GenericTransferInCallback& callback) { |
| if (!device_handle_) { |
| - callback.Run(TransferStatus::TRANSFER_ERROR, mojo::Array<uint8_t>()); |
| + callback.Run(TransferStatus::TRANSFER_ERROR, base::nullopt); |
| return; |
| } |
| @@ -388,7 +382,7 @@ void DeviceImpl::GenericTransferIn(uint8_t endpoint_number, |
| void DeviceImpl::GenericTransferOut( |
| uint8_t endpoint_number, |
| - mojo::Array<uint8_t> data, |
| + const std::vector<uint8_t>& data, |
| uint32_t timeout, |
| const GenericTransferOutCallback& callback) { |
| if (!device_handle_) { |
| @@ -400,8 +394,7 @@ void DeviceImpl::GenericTransferOut( |
| base::WrapUnique(new GenericTransferOutCallback(callback)); |
| uint8_t endpoint_address = endpoint_number; |
| scoped_refptr<net::IOBuffer> buffer = CreateTransferBuffer(data.size()); |
| - const std::vector<uint8_t>& storage = data.storage(); |
| - std::copy(storage.begin(), storage.end(), buffer->data()); |
| + std::copy(data.begin(), data.end(), buffer->data()); |
| device_handle_->GenericTransfer( |
| USB_DIRECTION_OUTBOUND, endpoint_address, buffer, data.size(), timeout, |
| base::Bind(&OnTransferOut, base::Passed(&callback_ptr))); |
| @@ -409,12 +402,12 @@ void DeviceImpl::GenericTransferOut( |
| void DeviceImpl::IsochronousTransferIn( |
| uint8_t endpoint_number, |
| - mojo::Array<uint32_t> packet_lengths, |
| + const std::vector<uint32_t>& packet_lengths, |
| uint32_t timeout, |
| const IsochronousTransferInCallback& callback) { |
| if (!device_handle_) { |
| - callback.Run(mojo::Array<uint8_t>(), |
| - BuildIsochronousPacketArray(std::move(packet_lengths), |
| + callback.Run(base::nullopt, |
| + BuildIsochronousPacketArray(packet_lengths, |
| TransferStatus::TRANSFER_ERROR)); |
| return; |
| } |
| @@ -423,18 +416,18 @@ void DeviceImpl::IsochronousTransferIn( |
| base::WrapUnique(new IsochronousTransferInCallback(callback)); |
| uint8_t endpoint_address = endpoint_number | 0x80; |
| device_handle_->IsochronousTransferIn( |
| - endpoint_address, packet_lengths.storage(), timeout, |
| + endpoint_address, packet_lengths, timeout, |
| base::Bind(&OnIsochronousTransferIn, base::Passed(&callback_ptr))); |
| } |
| void DeviceImpl::IsochronousTransferOut( |
| uint8_t endpoint_number, |
| - mojo::Array<uint8_t> data, |
| - mojo::Array<uint32_t> packet_lengths, |
| + const std::vector<uint8_t>& data, |
| + const std::vector<uint32_t>& packet_lengths, |
| uint32_t timeout, |
| const IsochronousTransferOutCallback& callback) { |
| if (!device_handle_) { |
| - callback.Run(BuildIsochronousPacketArray(std::move(packet_lengths), |
| + callback.Run(BuildIsochronousPacketArray(packet_lengths, |
| TransferStatus::TRANSFER_ERROR)); |
| return; |
| } |
| @@ -443,12 +436,9 @@ void DeviceImpl::IsochronousTransferOut( |
| base::WrapUnique(new IsochronousTransferOutCallback(callback)); |
| uint8_t endpoint_address = endpoint_number; |
| scoped_refptr<net::IOBuffer> buffer = CreateTransferBuffer(data.size()); |
| - { |
| - const std::vector<uint8_t>& storage = data.storage(); |
| - std::copy(storage.begin(), storage.end(), buffer->data()); |
| - } |
| + std::copy(data.begin(), data.end(), buffer->data()); |
| device_handle_->IsochronousTransferOut( |
| - endpoint_address, buffer, packet_lengths.storage(), timeout, |
| + endpoint_address, buffer, packet_lengths, timeout, |
| base::Bind(&OnIsochronousTransferOut, base::Passed(&callback_ptr))); |
| } |