| Index: extensions/browser/api/usb/usb_api.cc
|
| diff --git a/extensions/browser/api/usb/usb_api.cc b/extensions/browser/api/usb/usb_api.cc
|
| index 53f5c5bdf84b9d3d41904b007c2b5460ca9ad67e..5369bf3123c30535ecbd7a8212fa034de1ab996b 100644
|
| --- a/extensions/browser/api/usb/usb_api.cc
|
| +++ b/extensions/browser/api/usb/usb_api.cc
|
| @@ -56,7 +56,6 @@ using device::UsbDeviceFilter;
|
| using device::UsbDeviceHandle;
|
| using device::UsbEndpointDescriptor;
|
| using device::UsbEndpointDirection;
|
| -using device::UsbInterfaceAltSettingDescriptor;
|
| using device::UsbInterfaceDescriptor;
|
| using device::UsbService;
|
| using device::UsbSynchronizationType;
|
| @@ -761,75 +760,54 @@ void UsbListInterfacesFunction::AsyncWorkStart() {
|
| if (!device_handle.get())
|
| return;
|
|
|
| - scoped_refptr<UsbConfigDescriptor> config =
|
| - device_handle->GetDevice()->ListInterfaces();
|
| + const UsbConfigDescriptor& config =
|
| + device_handle->GetDevice()->GetConfiguration();
|
|
|
| - if (!config.get()) {
|
| - SetError(kErrorCannotListInterfaces);
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| + scoped_ptr<base::ListValue> result(new base::ListValue());
|
|
|
| - result_.reset(new base::ListValue());
|
| -
|
| - for (size_t i = 0, num_interfaces = config->GetNumInterfaces();
|
| - i < num_interfaces;
|
| - ++i) {
|
| - scoped_refptr<const UsbInterfaceDescriptor> usb_interface(
|
| - config->GetInterface(i));
|
| - for (size_t j = 0, num_descriptors = usb_interface->GetNumAltSettings();
|
| - j < num_descriptors;
|
| - ++j) {
|
| - scoped_refptr<const UsbInterfaceAltSettingDescriptor> descriptor =
|
| - usb_interface->GetAltSetting(j);
|
| - std::vector<linked_ptr<EndpointDescriptor> > endpoints;
|
| - for (size_t k = 0, num_endpoints = descriptor->GetNumEndpoints();
|
| - k < num_endpoints;
|
| - k++) {
|
| - scoped_refptr<const UsbEndpointDescriptor> endpoint =
|
| - descriptor->GetEndpoint(k);
|
| - linked_ptr<EndpointDescriptor> endpoint_desc(new EndpointDescriptor());
|
| -
|
| - TransferType type;
|
| - Direction direction;
|
| - SynchronizationType synchronization;
|
| - UsageType usage;
|
| -
|
| - if (!ConvertTransferTypeSafely(endpoint->GetTransferType(), &type) ||
|
| - !ConvertDirectionSafely(endpoint->GetDirection(), &direction) ||
|
| - !ConvertSynchronizationTypeSafely(
|
| - endpoint->GetSynchronizationType(), &synchronization) ||
|
| - !ConvertUsageTypeSafely(endpoint->GetUsageType(), &usage)) {
|
| - SetError(kErrorCannotListInterfaces);
|
| - AsyncWorkCompleted();
|
| - return;
|
| - }
|
| -
|
| - endpoint_desc->address = endpoint->GetAddress();
|
| - endpoint_desc->type = type;
|
| - endpoint_desc->direction = direction;
|
| - endpoint_desc->maximum_packet_size = endpoint->GetMaximumPacketSize();
|
| - endpoint_desc->synchronization = synchronization;
|
| - endpoint_desc->usage = usage;
|
| -
|
| - int* polling_interval = new int;
|
| - endpoint_desc->polling_interval.reset(polling_interval);
|
| - *polling_interval = endpoint->GetPollingInterval();
|
| -
|
| - endpoints.push_back(endpoint_desc);
|
| + for (size_t i = 0; i < config.interfaces.size(); ++i) {
|
| + const UsbInterfaceDescriptor& usb_interface = config.interfaces[i];
|
| + std::vector<linked_ptr<EndpointDescriptor> > endpoints;
|
| +
|
| + for (size_t j = 0; j < usb_interface.endpoints.size(); ++j) {
|
| + const UsbEndpointDescriptor& endpoint = usb_interface.endpoints[j];
|
| + linked_ptr<EndpointDescriptor> endpoint_desc(new EndpointDescriptor());
|
| +
|
| + TransferType type;
|
| + Direction direction;
|
| + SynchronizationType synchronization;
|
| + UsageType usage;
|
| +
|
| + if (!ConvertTransferTypeSafely(endpoint.transfer_type, &type) ||
|
| + !ConvertDirectionSafely(endpoint.direction, &direction) ||
|
| + !ConvertSynchronizationTypeSafely(endpoint.synchronization_type,
|
| + &synchronization) ||
|
| + !ConvertUsageTypeSafely(endpoint.usage_type, &usage)) {
|
| + SetError(kErrorCannotListInterfaces);
|
| + AsyncWorkCompleted();
|
| + return;
|
| }
|
|
|
| - result_->Append(
|
| - PopulateInterfaceDescriptor(descriptor->GetInterfaceNumber(),
|
| - descriptor->GetAlternateSetting(),
|
| - descriptor->GetInterfaceClass(),
|
| - descriptor->GetInterfaceSubclass(),
|
| - descriptor->GetInterfaceProtocol(),
|
| - &endpoints));
|
| + endpoint_desc->address = endpoint.address;
|
| + endpoint_desc->type = type;
|
| + endpoint_desc->direction = direction;
|
| + endpoint_desc->maximum_packet_size = endpoint.maximum_packet_size;
|
| + endpoint_desc->synchronization = synchronization;
|
| + endpoint_desc->usage = usage;
|
| + endpoint_desc->polling_interval.reset(new int(endpoint.polling_interval));
|
| +
|
| + endpoints.push_back(endpoint_desc);
|
| }
|
| +
|
| + result->Append(PopulateInterfaceDescriptor(usb_interface.interface_number,
|
| + usb_interface.alternate_setting,
|
| + usb_interface.interface_class,
|
| + usb_interface.interface_subclass,
|
| + usb_interface.interface_protocol,
|
| + &endpoints));
|
| }
|
|
|
| - SetResult(result_.release());
|
| + SetResult(result.release());
|
| AsyncWorkCompleted();
|
| }
|
|
|
|
|