| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <numeric> | 9 #include <numeric> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <utility> | 11 #include <utility> |
| 12 #include <vector> | 12 #include <vector> |
| 13 | 13 |
| 14 #include "base/barrier_closure.h" | 14 #include "base/barrier_closure.h" |
| 15 #include "base/memory/ptr_util.h" | |
| 16 #include "device/core/device_client.h" | 15 #include "device/core/device_client.h" |
| 17 #include "device/usb/usb_descriptors.h" | 16 #include "device/usb/usb_descriptors.h" |
| 18 #include "device/usb/usb_device_handle.h" | 17 #include "device/usb/usb_device_handle.h" |
| 19 #include "device/usb/usb_service.h" | 18 #include "device/usb/usb_service.h" |
| 20 #include "extensions/browser/api/device_permissions_manager.h" | 19 #include "extensions/browser/api/device_permissions_manager.h" |
| 21 #include "extensions/browser/api/device_permissions_prompt.h" | 20 #include "extensions/browser/api/device_permissions_prompt.h" |
| 22 #include "extensions/browser/api/extensions_api_client.h" | 21 #include "extensions/browser/api/extensions_api_client.h" |
| 23 #include "extensions/browser/api/usb/usb_device_resource.h" | 22 #include "extensions/browser/api/usb/usb_device_resource.h" |
| 24 #include "extensions/browser/api/usb/usb_guid_map.h" | 23 #include "extensions/browser/api/usb/usb_guid_map.h" |
| 25 #include "extensions/browser/extension_system.h" | 24 #include "extensions/browser/extension_system.h" |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 case device::USB_TRANSFER_OVERFLOW: | 241 case device::USB_TRANSFER_OVERFLOW: |
| 243 return kErrorOverflow; | 242 return kErrorOverflow; |
| 244 case device::USB_TRANSFER_LENGTH_SHORT: | 243 case device::USB_TRANSFER_LENGTH_SHORT: |
| 245 return kErrorTransferLength; | 244 return kErrorTransferLength; |
| 246 default: | 245 default: |
| 247 NOTREACHED(); | 246 NOTREACHED(); |
| 248 return ""; | 247 return ""; |
| 249 } | 248 } |
| 250 } | 249 } |
| 251 | 250 |
| 252 std::unique_ptr<base::Value> PopulateConnectionHandle(int handle, | 251 base::Value* PopulateConnectionHandle(int handle, |
| 253 int vendor_id, | 252 int vendor_id, |
| 254 int product_id) { | 253 int product_id) { |
| 255 ConnectionHandle result; | 254 ConnectionHandle result; |
| 256 result.handle = handle; | 255 result.handle = handle; |
| 257 result.vendor_id = vendor_id; | 256 result.vendor_id = vendor_id; |
| 258 result.product_id = product_id; | 257 result.product_id = product_id; |
| 259 return result.ToValue(); | 258 return result.ToValue().release(); |
| 260 } | 259 } |
| 261 | 260 |
| 262 TransferType ConvertTransferTypeToApi(const UsbTransferType& input) { | 261 TransferType ConvertTransferTypeToApi(const UsbTransferType& input) { |
| 263 switch (input) { | 262 switch (input) { |
| 264 case device::USB_TRANSFER_CONTROL: | 263 case device::USB_TRANSFER_CONTROL: |
| 265 return usb::TRANSFER_TYPE_CONTROL; | 264 return usb::TRANSFER_TYPE_CONTROL; |
| 266 case device::USB_TRANSFER_INTERRUPT: | 265 case device::USB_TRANSFER_INTERRUPT: |
| 267 return usb::TRANSFER_TYPE_INTERRUPT; | 266 return usb::TRANSFER_TYPE_INTERRUPT; |
| 268 case device::USB_TRANSFER_ISOCHRONOUS: | 267 case device::USB_TRANSFER_ISOCHRONOUS: |
| 269 return usb::TRANSFER_TYPE_ISOCHRONOUS; | 268 return usb::TRANSFER_TYPE_ISOCHRONOUS; |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 | 605 |
| 607 UsbGetUserSelectedDevicesFunction::~UsbGetUserSelectedDevicesFunction() { | 606 UsbGetUserSelectedDevicesFunction::~UsbGetUserSelectedDevicesFunction() { |
| 608 } | 607 } |
| 609 | 608 |
| 610 ExtensionFunction::ResponseAction UsbGetUserSelectedDevicesFunction::Run() { | 609 ExtensionFunction::ResponseAction UsbGetUserSelectedDevicesFunction::Run() { |
| 611 std::unique_ptr<extensions::api::usb::GetUserSelectedDevices::Params> | 610 std::unique_ptr<extensions::api::usb::GetUserSelectedDevices::Params> |
| 612 parameters = GetUserSelectedDevices::Params::Create(*args_); | 611 parameters = GetUserSelectedDevices::Params::Create(*args_); |
| 613 EXTENSION_FUNCTION_VALIDATE(parameters.get()); | 612 EXTENSION_FUNCTION_VALIDATE(parameters.get()); |
| 614 | 613 |
| 615 if (!user_gesture()) { | 614 if (!user_gesture()) { |
| 616 return RespondNow(OneArgument(base::MakeUnique<base::ListValue>())); | 615 return RespondNow(OneArgument(new base::ListValue())); |
| 617 } | 616 } |
| 618 | 617 |
| 619 bool multiple = false; | 618 bool multiple = false; |
| 620 if (parameters->options.multiple) { | 619 if (parameters->options.multiple) { |
| 621 multiple = *parameters->options.multiple; | 620 multiple = *parameters->options.multiple; |
| 622 } | 621 } |
| 623 | 622 |
| 624 std::vector<UsbDeviceFilter> filters; | 623 std::vector<UsbDeviceFilter> filters; |
| 625 if (parameters->options.filters) { | 624 if (parameters->options.filters) { |
| 626 filters.resize(parameters->options.filters->size()); | 625 filters.resize(parameters->options.filters->size()); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 701 UsbRequestAccessFunction::UsbRequestAccessFunction() { | 700 UsbRequestAccessFunction::UsbRequestAccessFunction() { |
| 702 } | 701 } |
| 703 | 702 |
| 704 UsbRequestAccessFunction::~UsbRequestAccessFunction() { | 703 UsbRequestAccessFunction::~UsbRequestAccessFunction() { |
| 705 } | 704 } |
| 706 | 705 |
| 707 ExtensionFunction::ResponseAction UsbRequestAccessFunction::Run() { | 706 ExtensionFunction::ResponseAction UsbRequestAccessFunction::Run() { |
| 708 std::unique_ptr<extensions::api::usb::RequestAccess::Params> parameters = | 707 std::unique_ptr<extensions::api::usb::RequestAccess::Params> parameters = |
| 709 RequestAccess::Params::Create(*args_); | 708 RequestAccess::Params::Create(*args_); |
| 710 EXTENSION_FUNCTION_VALIDATE(parameters.get()); | 709 EXTENSION_FUNCTION_VALIDATE(parameters.get()); |
| 711 return RespondNow( | 710 return RespondNow(OneArgument(new base::FundamentalValue(true))); |
| 712 OneArgument(base::MakeUnique<base::FundamentalValue>(true))); | |
| 713 } | 711 } |
| 714 | 712 |
| 715 UsbOpenDeviceFunction::UsbOpenDeviceFunction() { | 713 UsbOpenDeviceFunction::UsbOpenDeviceFunction() { |
| 716 } | 714 } |
| 717 | 715 |
| 718 UsbOpenDeviceFunction::~UsbOpenDeviceFunction() { | 716 UsbOpenDeviceFunction::~UsbOpenDeviceFunction() { |
| 719 } | 717 } |
| 720 | 718 |
| 721 ExtensionFunction::ResponseAction UsbOpenDeviceFunction::Run() { | 719 ExtensionFunction::ResponseAction UsbOpenDeviceFunction::Run() { |
| 722 std::unique_ptr<extensions::api::usb::OpenDevice::Params> parameters = | 720 std::unique_ptr<extensions::api::usb::OpenDevice::Params> parameters = |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1246 return RespondNow(Error(kErrorNoConnection)); | 1244 return RespondNow(Error(kErrorNoConnection)); |
| 1247 } | 1245 } |
| 1248 | 1246 |
| 1249 device_handle->ResetDevice( | 1247 device_handle->ResetDevice( |
| 1250 base::Bind(&UsbResetDeviceFunction::OnComplete, this)); | 1248 base::Bind(&UsbResetDeviceFunction::OnComplete, this)); |
| 1251 return RespondLater(); | 1249 return RespondLater(); |
| 1252 } | 1250 } |
| 1253 | 1251 |
| 1254 void UsbResetDeviceFunction::OnComplete(bool success) { | 1252 void UsbResetDeviceFunction::OnComplete(bool success) { |
| 1255 if (success) { | 1253 if (success) { |
| 1256 Respond(OneArgument(base::MakeUnique<base::FundamentalValue>(true))); | 1254 Respond(OneArgument(new base::FundamentalValue(true))); |
| 1257 } else { | 1255 } else { |
| 1258 scoped_refptr<UsbDeviceHandle> device_handle = | 1256 scoped_refptr<UsbDeviceHandle> device_handle = |
| 1259 GetDeviceHandle(parameters_->handle); | 1257 GetDeviceHandle(parameters_->handle); |
| 1260 if (device_handle.get()) { | 1258 if (device_handle.get()) { |
| 1261 device_handle->Close(); | 1259 device_handle->Close(); |
| 1262 } | 1260 } |
| 1263 ReleaseDeviceHandle(parameters_->handle); | 1261 ReleaseDeviceHandle(parameters_->handle); |
| 1264 | 1262 |
| 1265 std::unique_ptr<base::ListValue> error_args(new base::ListValue()); | 1263 std::unique_ptr<base::ListValue> error_args(new base::ListValue()); |
| 1266 error_args->AppendBoolean(false); | 1264 error_args->AppendBoolean(false); |
| 1267 // Using ErrorWithArguments is discouraged but required to maintain | 1265 // Using ErrorWithArguments is discouraged but required to maintain |
| 1268 // compatibility with existing applications. | 1266 // compatibility with existing applications. |
| 1269 Respond(ErrorWithArguments(std::move(error_args), kErrorResetDevice)); | 1267 Respond(ErrorWithArguments(std::move(error_args), kErrorResetDevice)); |
| 1270 } | 1268 } |
| 1271 } | 1269 } |
| 1272 | 1270 |
| 1273 } // namespace extensions | 1271 } // namespace extensions |
| OLD | NEW |