1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// 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)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef EXTENSIONS_BROWSER_API_USB_USB_DEVICE_RESOURCE_H_
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define EXTENSIONS_BROWSER_API_USB_USB_DEVICE_RESOURCE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/synchronization/lock.h"
13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "device/usb/usb_device_handle.h"
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/api_resource.h"
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "extensions/browser/api/api_resource_manager.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace usb_service {
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass UsbDeviceHandle;
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A UsbDeviceResource is an ApiResource wrapper for a UsbDevice.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UsbDeviceResource : public ApiResource {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  static const content::BrowserThread::ID kThreadId =
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::BrowserThread::FILE;
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  UsbDeviceResource(const std::string& owner_extension_id,
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                    scoped_refptr<device::UsbDeviceHandle> device);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~UsbDeviceResource();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<device::UsbDeviceHandle> device() { return device_; }
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool IsPersistent() const OVERRIDE;
37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  friend class ApiResourceManager<UsbDeviceResource>;
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  static const char* service_name() { return "UsbDeviceResourceManager"; }
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_refptr<device::UsbDeviceHandle> device_;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(UsbDeviceResource);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif  // EXTENSIONS_BROWSER_API_USB_USB_DEVICE_RESOURCE_H_
50