| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "extensions/browser/api/usb/usb_api.h" | 5 #include "extensions/browser/api/usb/usb_api.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 namespace usb = extensions::core_api::usb; | 24 namespace usb = extensions::core_api::usb; |
| 25 namespace BulkTransfer = usb::BulkTransfer; | 25 namespace BulkTransfer = usb::BulkTransfer; |
| 26 namespace ClaimInterface = usb::ClaimInterface; | 26 namespace ClaimInterface = usb::ClaimInterface; |
| 27 namespace CloseDevice = usb::CloseDevice; | 27 namespace CloseDevice = usb::CloseDevice; |
| 28 namespace ControlTransfer = usb::ControlTransfer; | 28 namespace ControlTransfer = usb::ControlTransfer; |
| 29 namespace FindDevices = usb::FindDevices; | 29 namespace FindDevices = usb::FindDevices; |
| 30 namespace GetDevices = usb::GetDevices; | 30 namespace GetDevices = usb::GetDevices; |
| 31 namespace GetUserSelectedDevices = usb::GetUserSelectedDevices; | 31 namespace GetUserSelectedDevices = usb::GetUserSelectedDevices; |
| 32 namespace InterruptTransfer = usb::InterruptTransfer; | 32 namespace InterruptTransfer = usb::InterruptTransfer; |
| 33 namespace IsochronousTransfer = usb::IsochronousTransfer; | 33 namespace IsochronousTransfer = usb::IsochronousTransfer; |
| 34 namespace SetConfiguration = usb::SetConfiguration; |
| 34 namespace GetConfiguration = usb::GetConfiguration; | 35 namespace GetConfiguration = usb::GetConfiguration; |
| 35 namespace ListInterfaces = usb::ListInterfaces; | 36 namespace ListInterfaces = usb::ListInterfaces; |
| 36 namespace OpenDevice = usb::OpenDevice; | 37 namespace OpenDevice = usb::OpenDevice; |
| 37 namespace ReleaseInterface = usb::ReleaseInterface; | 38 namespace ReleaseInterface = usb::ReleaseInterface; |
| 38 namespace RequestAccess = usb::RequestAccess; | 39 namespace RequestAccess = usb::RequestAccess; |
| 39 namespace ResetDevice = usb::ResetDevice; | 40 namespace ResetDevice = usb::ResetDevice; |
| 40 namespace SetInterfaceAlternateSetting = usb::SetInterfaceAlternateSetting; | 41 namespace SetInterfaceAlternateSetting = usb::SetInterfaceAlternateSetting; |
| 41 | 42 |
| 42 using content::BrowserThread; | 43 using content::BrowserThread; |
| 43 using device::UsbConfigDescriptor; | 44 using device::UsbConfigDescriptor; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 const char kDataKey[] = "data"; | 78 const char kDataKey[] = "data"; |
| 78 const char kResultCodeKey[] = "resultCode"; | 79 const char kResultCodeKey[] = "resultCode"; |
| 79 | 80 |
| 80 const char kErrorInitService[] = "Failed to initialize USB service."; | 81 const char kErrorInitService[] = "Failed to initialize USB service."; |
| 81 | 82 |
| 82 const char kErrorOpen[] = "Failed to open device."; | 83 const char kErrorOpen[] = "Failed to open device."; |
| 83 const char kErrorCancelled[] = "Transfer was cancelled."; | 84 const char kErrorCancelled[] = "Transfer was cancelled."; |
| 84 const char kErrorDisconnect[] = "Device disconnected."; | 85 const char kErrorDisconnect[] = "Device disconnected."; |
| 85 const char kErrorGeneric[] = "Transfer failed."; | 86 const char kErrorGeneric[] = "Transfer failed."; |
| 86 const char kErrorNotSupported[] = "Not supported on this platform."; | 87 const char kErrorNotSupported[] = "Not supported on this platform."; |
| 88 const char kErrorNotConfigured[] = "The device is not in a configured state."; |
| 87 const char kErrorOverflow[] = "Inbound transfer overflow."; | 89 const char kErrorOverflow[] = "Inbound transfer overflow."; |
| 88 const char kErrorStalled[] = "Transfer stalled."; | 90 const char kErrorStalled[] = "Transfer stalled."; |
| 89 const char kErrorTimeout[] = "Transfer timed out."; | 91 const char kErrorTimeout[] = "Transfer timed out."; |
| 90 const char kErrorTransferLength[] = "Transfer length is insufficient."; | 92 const char kErrorTransferLength[] = "Transfer length is insufficient."; |
| 93 const char kErrorCannotSetConfiguration[] = |
| 94 "Error setting device configuration."; |
| 91 const char kErrorCannotClaimInterface[] = "Error claiming interface."; | 95 const char kErrorCannotClaimInterface[] = "Error claiming interface."; |
| 92 const char kErrorCannotReleaseInterface[] = "Error releasing interface."; | 96 const char kErrorCannotReleaseInterface[] = "Error releasing interface."; |
| 93 const char kErrorCannotSetInterfaceAlternateSetting[] = | 97 const char kErrorCannotSetInterfaceAlternateSetting[] = |
| 94 "Error setting alternate interface setting."; | 98 "Error setting alternate interface setting."; |
| 95 const char kErrorConvertDirection[] = "Invalid transfer direction."; | 99 const char kErrorConvertDirection[] = "Invalid transfer direction."; |
| 96 const char kErrorConvertRecipient[] = "Invalid transfer recipient."; | 100 const char kErrorConvertRecipient[] = "Invalid transfer recipient."; |
| 97 const char kErrorConvertRequestType[] = "Invalid request type."; | 101 const char kErrorConvertRequestType[] = "Invalid request type."; |
| 98 const char kErrorMalformedParameters[] = "Error parsing parameters."; | 102 const char kErrorMalformedParameters[] = "Error parsing parameters."; |
| 99 const char kErrorNoDevice[] = "No such device."; | 103 const char kErrorNoDevice[] = "No such device."; |
| 100 const char kErrorPermissionDenied[] = "Permission to access device was denied"; | 104 const char kErrorPermissionDenied[] = "Permission to access device was denied"; |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 } | 386 } |
| 383 } | 387 } |
| 384 | 388 |
| 385 void ConvertInterfaceDescriptor(const UsbInterfaceDescriptor& input, | 389 void ConvertInterfaceDescriptor(const UsbInterfaceDescriptor& input, |
| 386 InterfaceDescriptor* output) { | 390 InterfaceDescriptor* output) { |
| 387 output->interface_number = input.interface_number; | 391 output->interface_number = input.interface_number; |
| 388 output->alternate_setting = input.alternate_setting; | 392 output->alternate_setting = input.alternate_setting; |
| 389 output->interface_class = input.interface_class; | 393 output->interface_class = input.interface_class; |
| 390 output->interface_subclass = input.interface_subclass; | 394 output->interface_subclass = input.interface_subclass; |
| 391 output->interface_protocol = input.interface_protocol; | 395 output->interface_protocol = input.interface_protocol; |
| 392 for (UsbEndpointDescriptor::Iterator endpointIt = input.endpoints.begin(); | 396 for (const UsbEndpointDescriptor& input_endpoint : input.endpoints) { |
| 393 endpointIt != input.endpoints.end(); | |
| 394 ++endpointIt) { | |
| 395 linked_ptr<EndpointDescriptor> endpoint(new EndpointDescriptor); | 397 linked_ptr<EndpointDescriptor> endpoint(new EndpointDescriptor); |
| 396 ConvertEndpointDescriptor(*endpointIt, endpoint.get()); | 398 ConvertEndpointDescriptor(input_endpoint, endpoint.get()); |
| 397 output->endpoints.push_back(endpoint); | 399 output->endpoints.push_back(endpoint); |
| 398 } | 400 } |
| 399 if (input.extra_data.size() > 0) { | 401 if (input.extra_data.size() > 0) { |
| 400 output->extra_data = | 402 output->extra_data = |
| 401 std::string(reinterpret_cast<const char*>(&input.extra_data[0]), | 403 std::string(reinterpret_cast<const char*>(&input.extra_data[0]), |
| 402 input.extra_data.size()); | 404 input.extra_data.size()); |
| 403 } | 405 } |
| 404 } | 406 } |
| 405 | 407 |
| 406 void ConvertConfigDescriptor(const UsbConfigDescriptor& input, | 408 void ConvertConfigDescriptor(const UsbConfigDescriptor& input, |
| 407 ConfigDescriptor* output) { | 409 ConfigDescriptor* output) { |
| 408 output->configuration_value = input.configuration_value; | 410 output->configuration_value = input.configuration_value; |
| 409 output->self_powered = input.self_powered; | 411 output->self_powered = input.self_powered; |
| 410 output->remote_wakeup = input.remote_wakeup; | 412 output->remote_wakeup = input.remote_wakeup; |
| 411 output->max_power = input.maximum_power; | 413 output->max_power = input.maximum_power; |
| 412 for (UsbInterfaceDescriptor::Iterator interfaceIt = input.interfaces.begin(); | 414 for (const UsbInterfaceDescriptor& input_interface : input.interfaces) { |
| 413 interfaceIt != input.interfaces.end(); | |
| 414 ++interfaceIt) { | |
| 415 linked_ptr<InterfaceDescriptor> interface(new InterfaceDescriptor); | 415 linked_ptr<InterfaceDescriptor> interface(new InterfaceDescriptor); |
| 416 ConvertInterfaceDescriptor(*interfaceIt, interface.get()); | 416 ConvertInterfaceDescriptor(input_interface, interface.get()); |
| 417 output->interfaces.push_back(interface); | 417 output->interfaces.push_back(interface); |
| 418 } | 418 } |
| 419 if (input.extra_data.size() > 0) { | 419 if (input.extra_data.size() > 0) { |
| 420 output->extra_data = | 420 output->extra_data = |
| 421 std::string(reinterpret_cast<const char*>(&input.extra_data[0]), | 421 std::string(reinterpret_cast<const char*>(&input.extra_data[0]), |
| 422 input.extra_data.size()); | 422 input.extra_data.size()); |
| 423 } | 423 } |
| 424 } | 424 } |
| 425 | 425 |
| 426 void ConvertDeviceFilter(const usb::DeviceFilter& input, | 426 void ConvertDeviceFilter(const usb::DeviceFilter& input, |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 829 } | 829 } |
| 830 | 830 |
| 831 bool UsbOpenDeviceFunction::Respond() { | 831 bool UsbOpenDeviceFunction::Respond() { |
| 832 if (permission_entry_.get()) { | 832 if (permission_entry_.get()) { |
| 833 device_permissions_manager_->UpdateLastUsed(extension_->id(), | 833 device_permissions_manager_->UpdateLastUsed(extension_->id(), |
| 834 permission_entry_); | 834 permission_entry_); |
| 835 } | 835 } |
| 836 return UsbAsyncApiFunction::Respond(); | 836 return UsbAsyncApiFunction::Respond(); |
| 837 } | 837 } |
| 838 | 838 |
| 839 UsbSetConfigurationFunction::UsbSetConfigurationFunction() { |
| 840 } |
| 841 |
| 842 UsbSetConfigurationFunction::~UsbSetConfigurationFunction() { |
| 843 } |
| 844 |
| 845 bool UsbSetConfigurationFunction::Prepare() { |
| 846 parameters_ = SetConfiguration::Params::Create(*args_); |
| 847 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
| 848 return true; |
| 849 } |
| 850 |
| 851 void UsbSetConfigurationFunction::AsyncWorkStart() { |
| 852 scoped_refptr<UsbDeviceHandle> device_handle = |
| 853 GetDeviceHandleOrCompleteWithError(parameters_->handle); |
| 854 if (!device_handle.get()) { |
| 855 return; |
| 856 } |
| 857 |
| 858 if (device_handle->SetConfiguration(parameters_->configuration_value)) { |
| 859 SetResult(new base::FundamentalValue(true)); |
| 860 } else { |
| 861 SetError(kErrorCannotSetConfiguration); |
| 862 } |
| 863 AsyncWorkCompleted(); |
| 864 } |
| 865 |
| 839 UsbGetConfigurationFunction::UsbGetConfigurationFunction() { | 866 UsbGetConfigurationFunction::UsbGetConfigurationFunction() { |
| 840 } | 867 } |
| 841 | 868 |
| 842 UsbGetConfigurationFunction::~UsbGetConfigurationFunction() { | 869 UsbGetConfigurationFunction::~UsbGetConfigurationFunction() { |
| 843 } | 870 } |
| 844 | 871 |
| 845 bool UsbGetConfigurationFunction::Prepare() { | 872 bool UsbGetConfigurationFunction::Prepare() { |
| 846 parameters_ = GetConfiguration::Params::Create(*args_); | 873 parameters_ = GetConfiguration::Params::Create(*args_); |
| 847 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 874 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
| 848 return true; | 875 return true; |
| 849 } | 876 } |
| 850 | 877 |
| 851 void UsbGetConfigurationFunction::AsyncWorkStart() { | 878 void UsbGetConfigurationFunction::AsyncWorkStart() { |
| 852 scoped_refptr<UsbDeviceHandle> device_handle = | 879 scoped_refptr<UsbDeviceHandle> device_handle = |
| 853 GetDeviceHandleOrCompleteWithError(parameters_->handle); | 880 GetDeviceHandleOrCompleteWithError(parameters_->handle); |
| 854 if (!device_handle.get()) { | 881 if (!device_handle.get()) { |
| 855 return; | 882 return; |
| 856 } | 883 } |
| 857 | 884 |
| 858 ConfigDescriptor config; | 885 const UsbConfigDescriptor* config_descriptor = |
| 859 ConvertConfigDescriptor(device_handle->GetDevice()->GetConfiguration(), | 886 device_handle->GetDevice()->GetConfiguration(); |
| 860 &config); | 887 if (config_descriptor) { |
| 888 ConfigDescriptor config; |
| 889 ConvertConfigDescriptor(*config_descriptor, &config); |
| 890 SetResult(config.ToValue().release()); |
| 891 } else { |
| 892 SetError(kErrorNotConfigured); |
| 893 } |
| 861 | 894 |
| 862 SetResult(config.ToValue().release()); | |
| 863 AsyncWorkCompleted(); | 895 AsyncWorkCompleted(); |
| 864 } | 896 } |
| 865 | 897 |
| 866 UsbListInterfacesFunction::UsbListInterfacesFunction() { | 898 UsbListInterfacesFunction::UsbListInterfacesFunction() { |
| 867 } | 899 } |
| 868 | 900 |
| 869 UsbListInterfacesFunction::~UsbListInterfacesFunction() { | 901 UsbListInterfacesFunction::~UsbListInterfacesFunction() { |
| 870 } | 902 } |
| 871 | 903 |
| 872 bool UsbListInterfacesFunction::Prepare() { | 904 bool UsbListInterfacesFunction::Prepare() { |
| 873 parameters_ = ListInterfaces::Params::Create(*args_); | 905 parameters_ = ListInterfaces::Params::Create(*args_); |
| 874 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); | 906 EXTENSION_FUNCTION_VALIDATE(parameters_.get()); |
| 875 return true; | 907 return true; |
| 876 } | 908 } |
| 877 | 909 |
| 878 void UsbListInterfacesFunction::AsyncWorkStart() { | 910 void UsbListInterfacesFunction::AsyncWorkStart() { |
| 879 scoped_refptr<UsbDeviceHandle> device_handle = | 911 scoped_refptr<UsbDeviceHandle> device_handle = |
| 880 GetDeviceHandleOrCompleteWithError(parameters_->handle); | 912 GetDeviceHandleOrCompleteWithError(parameters_->handle); |
| 881 if (!device_handle.get()) { | 913 if (!device_handle.get()) { |
| 882 return; | 914 return; |
| 883 } | 915 } |
| 884 | 916 |
| 885 ConfigDescriptor config; | 917 const UsbConfigDescriptor* config_descriptor = |
| 886 ConvertConfigDescriptor(device_handle->GetDevice()->GetConfiguration(), | 918 device_handle->GetDevice()->GetConfiguration(); |
| 887 &config); | 919 if (config_descriptor) { |
| 920 ConfigDescriptor config; |
| 921 ConvertConfigDescriptor(*config_descriptor, &config); |
| 888 | 922 |
| 889 scoped_ptr<base::ListValue> result(new base::ListValue); | 923 scoped_ptr<base::ListValue> result(new base::ListValue); |
| 890 for (size_t i = 0; i < config.interfaces.size(); ++i) { | 924 for (size_t i = 0; i < config.interfaces.size(); ++i) { |
| 891 result->Append(config.interfaces[i]->ToValue().release()); | 925 result->Append(config.interfaces[i]->ToValue().release()); |
| 926 } |
| 927 |
| 928 SetResult(result.release()); |
| 929 } else { |
| 930 SetError(kErrorNotConfigured); |
| 892 } | 931 } |
| 893 | 932 |
| 894 SetResult(result.release()); | |
| 895 AsyncWorkCompleted(); | 933 AsyncWorkCompleted(); |
| 896 } | 934 } |
| 897 | 935 |
| 898 UsbCloseDeviceFunction::UsbCloseDeviceFunction() { | 936 UsbCloseDeviceFunction::UsbCloseDeviceFunction() { |
| 899 } | 937 } |
| 900 | 938 |
| 901 UsbCloseDeviceFunction::~UsbCloseDeviceFunction() { | 939 UsbCloseDeviceFunction::~UsbCloseDeviceFunction() { |
| 902 } | 940 } |
| 903 | 941 |
| 904 bool UsbCloseDeviceFunction::Prepare() { | 942 bool UsbCloseDeviceFunction::Prepare() { |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1242 SetResult(new base::FundamentalValue(false)); | 1280 SetResult(new base::FundamentalValue(false)); |
| 1243 CompleteWithError(kErrorResetDevice); | 1281 CompleteWithError(kErrorResetDevice); |
| 1244 return; | 1282 return; |
| 1245 } | 1283 } |
| 1246 | 1284 |
| 1247 SetResult(new base::FundamentalValue(true)); | 1285 SetResult(new base::FundamentalValue(true)); |
| 1248 AsyncWorkCompleted(); | 1286 AsyncWorkCompleted(); |
| 1249 } | 1287 } |
| 1250 | 1288 |
| 1251 } // namespace extensions | 1289 } // namespace extensions |
| OLD | NEW |