Chromium Code Reviews| Index: content/renderer/usb/web_usb_client_impl.cc |
| diff --git a/content/renderer/usb/web_usb_client_impl.cc b/content/renderer/usb/web_usb_client_impl.cc |
| index fc87597e8c53ee16d0e4e1341f047032ed07c6de..7aa373ed00e1c5dd2ebcf545c7c75bb6bcc3e1bd 100644 |
| --- a/content/renderer/usb/web_usb_client_impl.cc |
| +++ b/content/renderer/usb/web_usb_client_impl.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/memory/scoped_ptr.h" |
| #include "base/move.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "content/child/mojo/type_converters.h" |
| #include "content/child/scoped_web_callbacks.h" |
| #include "content/public/common/service_registry.h" |
| #include "content/renderer/usb/type_converters.h" |
| @@ -64,6 +65,24 @@ void OnGetDevicesComplete( |
| scoped_callbacks.PassCallbacks()->onSuccess(blink::adoptWebPtr(devices)); |
| } |
| +void OnRequestDevicesComplete( |
| + ScopedWebCallbacks<blink::WebUSBClientRequestDeviceCallbacks> callbacks, |
| + device::usb::DeviceManager* device_manager, |
| + device::usb::DeviceInfoPtr result) { |
| + auto scoped_callbacks = callbacks.PassCallbacks(); |
| + if (result) { |
| + device::usb::DevicePtr device; |
| + device_manager->GetDevice(result->guid, mojo::GetProxy(&device)); |
| + blink::WebUSBDevice* web_usb_device = new WebUSBDeviceImpl( |
| + device.Pass(), mojo::ConvertTo<blink::WebUSBDeviceInfo>(result)); |
| + |
| + scoped_callbacks->onSuccess(blink::adoptWebPtr(web_usb_device)); |
| + } else { |
| + scoped_callbacks->onSuccess( |
| + blink::adoptWebPtr<blink::WebUSBDevice>(nullptr)); |
| + } |
| +} |
| + |
| } // namespace |
| WebUSBClientImpl::WebUSBClientImpl(content::ServiceRegistry* service_registry) |
| @@ -83,9 +102,22 @@ void WebUSBClientImpl::getDevices( |
| void WebUSBClientImpl::requestDevice( |
| const blink::WebUSBDeviceRequestOptions& options, |
| blink::WebUSBClientRequestDeviceCallbacks* callbacks) { |
| - callbacks->onError(blink::WebUSBError(blink::WebUSBError::Error::Service, |
| - base::UTF8ToUTF16("Not implemented."))); |
| - delete callbacks; |
| + if (!webusb_permission_bubble_) { |
| + service_registry_->ConnectToRemoteService( |
| + mojo::GetProxy(&webusb_permission_bubble_)); |
| + } |
| + |
| + auto scoped_callbacks = MakeScopedUSBCallbacks(callbacks); |
| + |
| + mojo::Array<device::usb::DeviceFilterPtr> device_filters = |
| + mojo::TypeConverter<mojo::Array<device::usb::DeviceFilterPtr>, |
| + blink::WebVector<blink::WebUSBDeviceFilter>>:: |
| + Convert(options.filters); |
|
Reilly Grant (use Gerrit)
2015/10/14 21:08:47
You should be able to use mojo::Array::From() here
juncai
2015/10/14 22:54:37
Done.
|
| + |
| + webusb_permission_bubble_->GetPermission( |
| + device_filters.Pass(), |
| + base::Bind(&OnRequestDevicesComplete, base::Passed(&scoped_callbacks), |
| + base::Unretained(device_manager_.get()))); |
| } |
| void WebUSBClientImpl::setObserver(Observer* observer) { |