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 |