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 |