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..5ece47176831e87878ef90183ea427a03b9a9aa2 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,20 @@ 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::Array<device::usb::DeviceFilterPtr>::From(options.filters); |
+ |
+ webusb_permission_bubble_->GetPermission( |
+ device_filters.Pass(), |
+ base::Bind(&OnRequestDevicesComplete, base::Passed(&scoped_callbacks), |
+ base::Unretained(device_manager_.get()))); |
} |
void WebUSBClientImpl::setObserver(Observer* observer) { |