Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(605)

Side by Side Diff: content/renderer/usb/web_usb_device_impl.cc

Issue 1521803002: Match WebUSB errors more closely to the specificiation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/usb/web_usb_client_impl.cc ('k') | third_party/WebKit/Source/modules/webusb/USBError.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698