| Index: device/usb/usb_service.cc
|
| diff --git a/device/usb/usb_service.cc b/device/usb/usb_service.cc
|
| index 10338fc7e14e45f832ae342e43c2447d10604828..18732b50d3e14d581dca34d2641184e6b9cf7908 100644
|
| --- a/device/usb/usb_service.cc
|
| +++ b/device/usb/usb_service.cc
|
| @@ -17,28 +17,6 @@ UsbService* g_service;
|
|
|
| } // namespace
|
|
|
| -// This class manages the lifetime of the global UsbService instance so that
|
| -// it is destroyed when the current message loop is destroyed. A lazy instance
|
| -// cannot be used because this object does not live on the main thread.
|
| -class UsbService::Destroyer : private base::MessageLoop::DestructionObserver {
|
| - public:
|
| - explicit Destroyer(UsbService* usb_service) : usb_service_(usb_service) {
|
| - base::MessageLoop::current()->AddDestructionObserver(this);
|
| - }
|
| - ~Destroyer() override {}
|
| -
|
| - private:
|
| - // base::MessageLoop::DestructionObserver implementation.
|
| - void WillDestroyCurrentMessageLoop() override {
|
| - base::MessageLoop::current()->RemoveDestructionObserver(this);
|
| - delete usb_service_;
|
| - delete this;
|
| - g_service = nullptr;
|
| - }
|
| -
|
| - UsbService* usb_service_;
|
| -};
|
| -
|
| void UsbService::Observer::OnDeviceAdded(scoped_refptr<UsbDevice> device) {
|
| }
|
|
|
| @@ -51,25 +29,23 @@ void UsbService::Observer::OnDeviceRemovedCleanup(
|
|
|
| // static
|
| UsbService* UsbService::GetInstance(
|
| - scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner) {
|
| + scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) {
|
| if (!g_service) {
|
| - g_service = UsbServiceImpl::Create(ui_task_runner);
|
| - // This object will clean itself up when the message loop is destroyed.
|
| - new Destroyer(g_service);
|
| + // UsbService constructor saves the pointer this returns and UsbServiceImpl
|
| + // will destroy itself when the current message loop exits.
|
| + UsbServiceImpl::Create(blocking_task_runner);
|
| }
|
| return g_service;
|
| }
|
|
|
| -// static
|
| -void UsbService::SetInstanceForTest(UsbService* instance) {
|
| - g_service = instance;
|
| - new Destroyer(instance);
|
| -}
|
| -
|
| UsbService::UsbService() {
|
| + DCHECK(!g_service);
|
| + g_service = this;
|
| }
|
|
|
| UsbService::~UsbService() {
|
| + DCHECK(g_service);
|
| + g_service = nullptr;
|
| }
|
|
|
| void UsbService::AddObserver(Observer* observer) {
|
| @@ -85,18 +61,12 @@ void UsbService::RemoveObserver(Observer* observer) {
|
| void UsbService::NotifyDeviceAdded(scoped_refptr<UsbDevice> device) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| - USB_LOG(USER) << "USB device added: vendorId = " << device->vendor_id()
|
| - << ", productId = " << device->product_id()
|
| - << ", uniqueId = " << device->unique_id();
|
| -
|
| FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceAdded(device));
|
| }
|
|
|
| void UsbService::NotifyDeviceRemoved(scoped_refptr<UsbDevice> device) {
|
| DCHECK(CalledOnValidThread());
|
|
|
| - USB_LOG(USER) << "USB device removed: uniqueId = " << device->unique_id();
|
| -
|
| FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceRemoved(device));
|
| FOR_EACH_OBSERVER(Observer, observer_list_, OnDeviceRemovedCleanup(device));
|
| }
|
|
|