1// Copyright (c) 2012 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 CHROME_BROWSER_EXTENSIONS_API_USB_USB_DEVICE_RESOURCE_H_
6#define CHROME_BROWSER_EXTENSIONS_API_USB_USB_DEVICE_RESOURCE_H_
7
8#include <set>
9#include <string>
10
11#include "base/basictypes.h"
12#include "base/memory/linked_ptr.h"
13#include "base/memory/ref_counted.h"
14#include "base/synchronization/lock.h"
15#include "chrome/browser/extensions/api/api_resource.h"
16#include "chrome/browser/extensions/api/api_resource_manager.h"
17#include "chrome/browser/usb/usb_device_handle.h"
18#include "chrome/common/extensions/api/usb.h"
19
20class UsbDeviceHandle;
21
22namespace net {
23class IOBuffer;
24}  // namespace net
25
26namespace extensions {
27
28// A UsbDeviceResource is an ApiResource wrapper for a UsbDevice.
29class UsbDeviceResource : public ApiResource {
30 public:
31  UsbDeviceResource(const std::string& owner_extension_id,
32                    scoped_refptr<UsbDeviceHandle> device);
33  virtual ~UsbDeviceResource();
34
35  scoped_refptr<UsbDeviceHandle> device() {
36    return device_;
37  }
38
39 private:
40  friend class ApiResourceManager<UsbDeviceResource>;
41  static const char* service_name() {
42    return "UsbDeviceResourceManager";
43  }
44
45  scoped_refptr<UsbDeviceHandle> device_;
46
47  DISALLOW_COPY_AND_ASSIGN(UsbDeviceResource);
48};
49
50}  // namespace extensions
51
52#endif  // CHROME_BROWSER_EXTENSIONS_API_USB_USB_DEVICE_RESOURCE_H_
53