1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef DEVICE_USB_USB_SERVICE_H_ 6 #define DEVICE_USB_USB_SERVICE_H_ 7 8 #include <vector> 9 10 #include "base/memory/ref_counted.h" 11 #include "base/memory/scoped_ptr.h" 12 #include "base/threading/non_thread_safe.h" 13 14 namespace base { 15 class SingleThreadTaskRunner; 16 } 17 18 namespace device { 19 20 class UsbDevice; 21 22 // The USB service handles creating and managing an event handler thread that is 23 // used to manage and dispatch USB events. It is also responsible for device 24 // discovery on the system, which allows it to re-use device handles to prevent 25 // competition for the same USB device. 26 class UsbService : public base::NonThreadSafe { 27 public: 28 // Must be called on a thread with a MessageLoopForIO (for example 29 // BrowserThread::FILE). The UI task runner reference is used to talk to the 30 // PermissionBrokerClient on ChromeOS (UI thread). Returns NULL when 31 // initialization fails. 32 static UsbService* GetInstance( 33 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); 34 35 static void SetInstanceForTest(UsbService* instance); 36 37 virtual scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) = 0; 38 39 // Get all of the devices attached to the system, inserting them into 40 // |devices|. Clears |devices| before use. The result will be sorted by id 41 // in increasing order. Must be called on FILE thread. 42 virtual void GetDevices(std::vector<scoped_refptr<UsbDevice> >* devices) = 0; 43 44 protected: 45 friend struct base::DefaultDeleter<UsbService>; 46 UsbService() {} 47 virtual ~UsbService() {} 48 DISALLOW_COPY_AND_ASSIGN(UsbService); 49 }; 50 51 } // namespace device 52 53 #endif // DEVICE_USB_USB_SERVICE_H_ 54