| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "content/renderer/usb/web_usb_device_impl.h" | 5 #include "content/renderer/usb/web_usb_device_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback.h" | 8 #include "base/callback.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "content/child/scoped_web_callbacks.h" | 10 #include "content/child/scoped_web_callbacks.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 // Generic default rejection handler for any WebUSB callbacks type. Assumes | 34 // Generic default rejection handler for any WebUSB callbacks type. Assumes |
| 35 // |CallbacksType| is a blink::WebCallbacks<T, const blink::WebUSBError&> | 35 // |CallbacksType| is a blink::WebCallbacks<T, const blink::WebUSBError&> |
| 36 // for any type |T|. | 36 // for any type |T|. |
| 37 template <typename CallbacksType> | 37 template <typename CallbacksType> |
| 38 void RejectWithError(const blink::WebUSBError& error, | 38 void RejectWithError(const blink::WebUSBError& error, |
| 39 scoped_ptr<CallbacksType> callbacks) { | 39 scoped_ptr<CallbacksType> callbacks) { |
| 40 callbacks->onError(error); | 40 callbacks->onError(error); |
| 41 } | 41 } |
| 42 | 42 |
| 43 template <typename CallbacksType> | 43 template <typename CallbacksType> |
| 44 void RejectWithDeviceError(const std::string& message, | |
| 45 scoped_ptr<CallbacksType> callbacks) { | |
| 46 RejectWithError(blink::WebUSBError(blink::WebUSBError::Error::Device, | |
| 47 base::UTF8ToUTF16(message)), | |
| 48 callbacks.Pass()); | |
| 49 } | |
| 50 | |
| 51 template <typename CallbacksType> | |
| 52 void RejectWithTransferError(scoped_ptr<CallbacksType> callbacks) { | 44 void RejectWithTransferError(scoped_ptr<CallbacksType> callbacks) { |
| 53 RejectWithError(blink::WebUSBError(blink::WebUSBError::Error::Transfer, | 45 RejectWithError(blink::WebUSBError(blink::WebUSBError::Error::Network, |
| 54 base::UTF8ToUTF16(kTransferFailed)), | 46 base::ASCIIToUTF16(kTransferFailed)), |
| 55 callbacks.Pass()); | 47 callbacks.Pass()); |
| 56 } | 48 } |
| 57 | 49 |
| 58 // Create a new ScopedWebCallbacks for WebUSB device callbacks, defaulting to | 50 // Create a new ScopedWebCallbacks for WebUSB device callbacks, defaulting to |
| 59 // a "device unavailable" rejection. | 51 // a "device unavailable" rejection. |
| 60 template <typename CallbacksType> | 52 template <typename CallbacksType> |
| 61 ScopedWebCallbacks<CallbacksType> MakeScopedUSBCallbacks( | 53 ScopedWebCallbacks<CallbacksType> MakeScopedUSBCallbacks( |
| 62 CallbacksType* callbacks) { | 54 CallbacksType* callbacks) { |
| 63 return make_scoped_web_callbacks( | 55 return make_scoped_web_callbacks( |
| 64 callbacks, | 56 callbacks, |
| 65 base::Bind(&RejectWithError<CallbacksType>, | 57 base::Bind(&RejectWithError<CallbacksType>, |
| 66 blink::WebUSBError(blink::WebUSBError::Error::Device, | 58 blink::WebUSBError(blink::WebUSBError::Error::NotFound, |
| 67 base::UTF8ToUTF16(kDeviceUnavailable)))); | 59 base::ASCIIToUTF16(kDeviceUnavailable)))); |
| 68 } | 60 } |
| 69 | 61 |
| 70 void OnOpenDevice( | 62 void OnOpenDevice( |
| 71 ScopedWebCallbacks<blink::WebUSBDeviceOpenCallbacks> callbacks, | 63 ScopedWebCallbacks<blink::WebUSBDeviceOpenCallbacks> callbacks, |
| 72 device::usb::OpenDeviceError error) { | 64 device::usb::OpenDeviceError error) { |
| 73 auto scoped_callbacks = callbacks.PassCallbacks(); | 65 auto scoped_callbacks = callbacks.PassCallbacks(); |
| 74 switch(error) { | 66 switch(error) { |
| 75 case device::usb::OPEN_DEVICE_ERROR_OK: | 67 case device::usb::OPEN_DEVICE_ERROR_OK: |
| 76 scoped_callbacks->onSuccess(); | 68 scoped_callbacks->onSuccess(); |
| 77 break; | 69 break; |
| 78 case device::usb::OPEN_DEVICE_ERROR_ACCESS_DENIED: | 70 case device::usb::OPEN_DEVICE_ERROR_ACCESS_DENIED: |
| 79 scoped_callbacks->onError(blink::WebUSBError( | 71 scoped_callbacks->onError(blink::WebUSBError( |
| 80 blink::WebUSBError::Error::Device, | 72 blink::WebUSBError::Error::Security, |
| 81 base::UTF8ToUTF16(kDeviceNoAccess))); | 73 base::ASCIIToUTF16(kDeviceNoAccess))); |
| 82 break; | 74 break; |
| 83 default: | 75 default: |
| 84 NOTREACHED(); | 76 NOTREACHED(); |
| 85 } | 77 } |
| 86 } | 78 } |
| 87 | 79 |
| 88 void OnDeviceClosed( | 80 void OnDeviceClosed( |
| 89 ScopedWebCallbacks<blink::WebUSBDeviceCloseCallbacks> callbacks) { | 81 ScopedWebCallbacks<blink::WebUSBDeviceCloseCallbacks> callbacks) { |
| 90 callbacks.PassCallbacks()->onSuccess(); | 82 callbacks.PassCallbacks()->onSuccess(); |
| 91 } | 83 } |
| 92 | 84 |
| 93 void OnGetConfiguration( | 85 void OnGetConfiguration( |
| 94 ScopedWebCallbacks<blink::WebUSBDeviceGetConfigurationCallbacks> callbacks, | 86 ScopedWebCallbacks<blink::WebUSBDeviceGetConfigurationCallbacks> callbacks, |
| 95 uint8_t configuration_value) { | 87 uint8_t configuration_value) { |
| 96 auto scoped_callbacks = callbacks.PassCallbacks(); | 88 auto scoped_callbacks = callbacks.PassCallbacks(); |
| 97 if (configuration_value == 0) | 89 if (configuration_value == 0) { |
| 98 RejectWithDeviceError(kDeviceNotConfigured, scoped_callbacks.Pass()); | 90 RejectWithError(blink::WebUSBError(blink::WebUSBError::Error::NotFound, |
| 99 else | 91 kDeviceNotConfigured), |
| 92 scoped_callbacks.Pass()); |
| 93 } else { |
| 100 scoped_callbacks->onSuccess(configuration_value); | 94 scoped_callbacks->onSuccess(configuration_value); |
| 95 } |
| 101 } | 96 } |
| 102 | 97 |
| 103 void HandlePassFailDeviceOperation( | 98 void HandlePassFailDeviceOperation( |
| 104 ScopedWebCallbacks<blink::WebCallbacks<void, const blink::WebUSBError&>> | 99 ScopedWebCallbacks<blink::WebCallbacks<void, const blink::WebUSBError&>> |
| 105 callbacks, | 100 callbacks, |
| 106 const std::string& failure_message, | 101 const std::string& failure_message, |
| 107 bool success) { | 102 bool success) { |
| 108 auto scoped_callbacks = callbacks.PassCallbacks(); | 103 auto scoped_callbacks = callbacks.PassCallbacks(); |
| 109 if (success) | 104 if (success) { |
| 110 scoped_callbacks->onSuccess(); | 105 scoped_callbacks->onSuccess(); |
| 111 else | 106 } else { |
| 112 RejectWithDeviceError(failure_message, scoped_callbacks.Pass()); | 107 RejectWithError(blink::WebUSBError(blink::WebUSBError::Error::Network, |
| 108 base::ASCIIToUTF16(failure_message)), |
| 109 scoped_callbacks.Pass()); |
| 110 } |
| 113 } | 111 } |
| 114 | 112 |
| 115 void OnTransferIn( | 113 void OnTransferIn( |
| 116 ScopedWebCallbacks<blink::WebUSBDeviceControlTransferCallbacks> callbacks, | 114 ScopedWebCallbacks<blink::WebUSBDeviceControlTransferCallbacks> callbacks, |
| 117 device::usb::TransferStatus status, | 115 device::usb::TransferStatus status, |
| 118 mojo::Array<uint8_t> data) { | 116 mojo::Array<uint8_t> data) { |
| 119 auto scoped_callbacks = callbacks.PassCallbacks(); | 117 auto scoped_callbacks = callbacks.PassCallbacks(); |
| 120 if (status != device::usb::TRANSFER_STATUS_COMPLETED) { | 118 if (status != device::usb::TRANSFER_STATUS_COMPLETED) { |
| 121 RejectWithTransferError(scoped_callbacks.Pass()); | 119 RejectWithTransferError(scoped_callbacks.Pass()); |
| 122 return; | 120 return; |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 } | 296 } |
| 299 | 297 |
| 300 void WebUSBDeviceImpl::reset(blink::WebUSBDeviceResetCallbacks* callbacks) { | 298 void WebUSBDeviceImpl::reset(blink::WebUSBDeviceResetCallbacks* callbacks) { |
| 301 auto scoped_callbacks = MakeScopedUSBCallbacks(callbacks); | 299 auto scoped_callbacks = MakeScopedUSBCallbacks(callbacks); |
| 302 device_->Reset(base::Bind(&HandlePassFailDeviceOperation, | 300 device_->Reset(base::Bind(&HandlePassFailDeviceOperation, |
| 303 base::Passed(&scoped_callbacks), | 301 base::Passed(&scoped_callbacks), |
| 304 kDeviceResetFailed)); | 302 kDeviceResetFailed)); |
| 305 } | 303 } |
| 306 | 304 |
| 307 } // namespace content | 305 } // namespace content |
| OLD | NEW |