| 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 ac4f681a3ff34f49702e6c7e3a7c410f1524fabf..f2eee2b3db5eeb0ebb8d70efccf9b1c95716f4f8 100644
|
| --- a/content/renderer/usb/web_usb_client_impl.cc
|
| +++ b/content/renderer/usb/web_usb_client_impl.cc
|
| @@ -98,4 +98,39 @@ void WebUSBClientImpl::requestDevice(
|
| delete callbacks;
|
| }
|
|
|
| +void WebUSBClientImpl::setObserver(Observer* observer) {
|
| + if (!observer_) {
|
| + // Set up two sequential calls to GetDeviceChanges to avoid latency.
|
| + device_manager_->GetDeviceChanges(base::Bind(
|
| + &WebUSBClientImpl::OnDeviceChangeNotification, base::Unretained(this)));
|
| + device_manager_->GetDeviceChanges(base::Bind(
|
| + &WebUSBClientImpl::OnDeviceChangeNotification, base::Unretained(this)));
|
| + }
|
| +
|
| + observer_ = observer;
|
| +}
|
| +
|
| +void WebUSBClientImpl::OnDeviceChangeNotification(
|
| + device::usb::DeviceChangeNotificationPtr notification) {
|
| + if (!observer_)
|
| + return;
|
| +
|
| + device_manager_->GetDeviceChanges(base::Bind(
|
| + &WebUSBClientImpl::OnDeviceChangeNotification, base::Unretained(this)));
|
| + for (size_t i = 0; i < notification->devices_added.size(); ++i) {
|
| + device::usb::DeviceManagerPtr device_manager;
|
| + mojo::ConnectToService(device_services_.get(), &device_manager);
|
| + observer_->onDeviceConnected(blink::adoptWebPtr(new WebUSBDeviceImpl(
|
| + device_manager.Pass(), mojo::ConvertTo<blink::WebUSBDeviceInfo>(
|
| + notification->devices_added[i]))));
|
| + }
|
| + for (size_t i = 0; i < notification->devices_removed.size(); ++i) {
|
| + device::usb::DeviceManagerPtr device_manager;
|
| + mojo::ConnectToService(device_services_.get(), &device_manager);
|
| + observer_->onDeviceDisconnected(blink::adoptWebPtr(new WebUSBDeviceImpl(
|
| + device_manager.Pass(), mojo::ConvertTo<blink::WebUSBDeviceInfo>(
|
| + notification->devices_removed[i]))));
|
| + }
|
| +}
|
| +
|
| } // namespace content
|
|
|