| Index: device/devices_app/usb/device_manager_impl.h
|
| diff --git a/device/devices_app/usb/device_manager_impl.h b/device/devices_app/usb/device_manager_impl.h
|
| index 24013036b7c4bc88217ba58fcd03c802f1141ce2..31e8173d1eaa6cd9c132bbbd135b524fdba77875 100644
|
| --- a/device/devices_app/usb/device_manager_impl.h
|
| +++ b/device/devices_app/usb/device_manager_impl.h
|
| @@ -13,10 +13,8 @@
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/memory/weak_ptr.h"
|
| -#include "base/scoped_observer.h"
|
| #include "device/devices_app/usb/public/interfaces/device_manager.mojom.h"
|
| #include "device/devices_app/usb/public/interfaces/permission_provider.mojom.h"
|
| -#include "device/usb/usb_service.h"
|
| #include "third_party/mojo/src/mojo/public/cpp/bindings/array.h"
|
| #include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
|
| #include "third_party/mojo/src/mojo/public/cpp/bindings/interface_request.h"
|
| @@ -37,17 +35,15 @@
|
|
|
| // Implementation of the public DeviceManager interface. This interface can be
|
| // requested from the devices app located at "mojo:devices", if available.
|
| -class DeviceManagerImpl : public DeviceManager,
|
| - public device::UsbService::Observer {
|
| +class DeviceManagerImpl : public DeviceManager {
|
| public:
|
| using DeviceList = std::vector<scoped_refptr<UsbDevice>>;
|
| using DeviceMap = std::map<std::string, scoped_refptr<device::UsbDevice>>;
|
|
|
| - static void Create(PermissionProviderPtr permission_provider,
|
| - mojo::InterfaceRequest<DeviceManager> request);
|
| -
|
| - DeviceManagerImpl(PermissionProviderPtr permission_provider,
|
| - mojo::InterfaceRequest<DeviceManager> request);
|
| + DeviceManagerImpl(
|
| + mojo::InterfaceRequest<DeviceManager> request,
|
| + PermissionProviderPtr permission_provider,
|
| + scoped_refptr<base::SequencedTaskRunner> service_task_runner);
|
| ~DeviceManagerImpl() override;
|
|
|
| void set_connection_error_handler(const mojo::Closure& error_handler) {
|
| @@ -55,6 +51,8 @@
|
| }
|
|
|
| private:
|
| + class ServiceThreadHelper;
|
| +
|
| // DeviceManager implementation:
|
| void GetDevices(EnumerationOptionsPtr options,
|
| const GetDevicesCallback& callback) override;
|
| @@ -63,6 +61,8 @@
|
| mojo::InterfaceRequest<Device> device_request) override;
|
|
|
| // Callbacks to handle the async responses from the underlying UsbService.
|
| + void OnGetDevice(mojo::InterfaceRequest<Device> device_request,
|
| + scoped_refptr<UsbDevice> device);
|
| void OnGetDevicePermissionCheckComplete(
|
| scoped_refptr<device::UsbDevice> device,
|
| mojo::InterfaceRequest<Device> device_request,
|
| @@ -71,11 +71,9 @@
|
| const GetDevicesCallback& callback,
|
| const DeviceList& devices);
|
|
|
| - // UsbService::Observer implementation:
|
| - void OnDeviceAdded(scoped_refptr<device::UsbDevice> device) override;
|
| - void OnDeviceRemoved(scoped_refptr<device::UsbDevice> device) override;
|
| - void WillDestroyUsbService() override;
|
| -
|
| + // Methods called by |helper_| when devices are added or removed.
|
| + void OnDeviceAdded(scoped_refptr<device::UsbDevice> device);
|
| + void OnDeviceRemoved(scoped_refptr<device::UsbDevice> device);
|
| void MaybeRunDeviceChangesCallback();
|
| void OnEnumerationPermissionCheckComplete(
|
| const DeviceMap& devices_added,
|
| @@ -83,6 +81,7 @@
|
| mojo::Array<mojo::String> allowed_guids);
|
|
|
| PermissionProviderPtr permission_provider_;
|
| + scoped_refptr<base::SequencedTaskRunner> service_task_runner_;
|
|
|
| // If there are unfinished calls to GetDeviceChanges their callbacks
|
| // are stored in |device_change_callbacks_|. Otherwise device changes
|
| @@ -95,8 +94,9 @@
|
| // only perform a single request to |permission_provider_| at a time.
|
| bool permission_request_pending_ = false;
|
|
|
| - UsbService* usb_service_;
|
| - ScopedObserver<device::UsbService, device::UsbService::Observer> observer_;
|
| + // |helper_| is owned by the service thread and holds a weak reference
|
| + // back to the device manager that created it.
|
| + ServiceThreadHelper* helper_;
|
|
|
| mojo::Closure connection_error_handler_;
|
|
|
|
|