Home | History | Annotate | Download | only in usb
      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 #include "extensions/browser/api/usb/usb_device_resource.h"
      6 
      7 #include <string>
      8 #include <vector>
      9 
     10 #include "base/bind.h"
     11 #include "base/bind_helpers.h"
     12 #include "base/synchronization/lock.h"
     13 #include "components/usb_service/usb_device_handle.h"
     14 #include "content/public/browser/browser_thread.h"
     15 #include "extensions/browser/api/api_resource.h"
     16 #include "extensions/common/api/usb.h"
     17 
     18 using content::BrowserThread;
     19 using usb_service::UsbDeviceHandle;
     20 
     21 namespace extensions {
     22 
     23 static base::LazyInstance<
     24     BrowserContextKeyedAPIFactory<ApiResourceManager<UsbDeviceResource> > >
     25     g_factory = LAZY_INSTANCE_INITIALIZER;
     26 
     27 // static
     28 template <>
     29 BrowserContextKeyedAPIFactory<ApiResourceManager<UsbDeviceResource> >*
     30 ApiResourceManager<UsbDeviceResource>::GetFactoryInstance() {
     31   return g_factory.Pointer();
     32 }
     33 
     34 UsbDeviceResource::UsbDeviceResource(const std::string& owner_extension_id,
     35                                      scoped_refptr<UsbDeviceHandle> device)
     36     : ApiResource(owner_extension_id), device_(device) {
     37 }
     38 
     39 UsbDeviceResource::~UsbDeviceResource() {
     40   BrowserThread::PostTask(BrowserThread::FILE,
     41                           FROM_HERE,
     42                           base::Bind(&UsbDeviceHandle::Close, device_));
     43 }
     44 
     45 }  // namespace extensions
     46