10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef DEVICE_USB_USB_SERVICE_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define DEVICE_USB_USB_SERVICE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/memory/ref_counted.h" 11a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/memory/scoped_ptr.h" 12a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "base/threading/non_thread_safe.h" 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace base { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SingleThreadTaskRunner; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace device { 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class UsbDevice; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The USB service handles creating and managing an event handler thread that is 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// used to manage and dispatch USB events. It is also responsible for device 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// discovery on the system, which allows it to re-use device handles to prevent 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// competition for the same USB device. 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass UsbService : public base::NonThreadSafe { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Must be called on a thread with a MessageLoopForIO (for example 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // BrowserThread::FILE). The UI task runner reference is used to talk to the 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // PermissionBrokerClient on ChromeOS (UI thread). Returns NULL when 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // initialization fails. 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static UsbService* GetInstance( 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static void SetInstanceForTest(UsbService* instance); 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual scoped_refptr<UsbDevice> GetDeviceById(uint32 unique_id) = 0; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Get all of the devices attached to the system, inserting them into 40ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // |devices|. Clears |devices| before use. The result will be sorted by id 41ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // in increasing order. Must be called on FILE thread. 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void GetDevices(std::vector<scoped_refptr<UsbDevice> >* devices) = 0; 43a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) protected: 45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch friend struct base::DefaultDeleter<UsbService>; 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) UsbService() {} 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~UsbService() {} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UsbService); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace device 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // DEVICE_USB_USB_SERVICE_H_ 54