| 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) {
|
|
|