Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4553)

Unified Diff: chrome/browser/extensions/api/usb/usb_device_resource.h

Issue 10224009: Experimental USB API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review changes. Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/usb/usb_device_resource.h
diff --git a/chrome/browser/extensions/api/usb/usb_device_resource.h b/chrome/browser/extensions/api/usb/usb_device_resource.h
new file mode 100644
index 0000000000000000000000000000000000000000..542e9aa7a2a4e4eb2ed63e50b0fac745bd9e70d9
--- /dev/null
+++ b/chrome/browser/extensions/api/usb/usb_device_resource.h
@@ -0,0 +1,63 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_API_USB_USB_DEVICE_RESOURCE_H_
+#define CHROME_BROWSER_EXTENSIONS_API_USB_USB_DEVICE_RESOURCE_H_
+#pragma once
+
+#include <set>
+
+#include "base/basictypes.h"
+#include "base/memory/linked_ptr.h"
+#include "base/synchronization/lock.h"
+#include "chrome/browser/extensions/api/api_resource.h"
+#include "chrome/common/extensions/api/experimental.usb.h"
+
+class UsbDevice;
+
+namespace net {
+class IOBuffer;
+} // namespace net
+
+namespace extensions {
+
+class APIResourceEventNotifier;
+
+// A UsbDeviceResource is an APIResource wrapper for a UsbDevice. When invoking
+// transfers on the underlying device it will use the APIResourceEventNotifier
+// associated with the underlying APIResource to deliver completion messages.
+class UsbDeviceResource : public APIResource {
+ public:
+ UsbDeviceResource(APIResourceEventNotifier* notifier, UsbDevice* device);
+ virtual ~UsbDeviceResource();
+
+ // All of the *Transfer variants that are exposed here adapt their arguments
+ // for the underlying UsbDevice's interface and invoke the corresponding
+ // methods with completion callbacks that call OnTransferComplete on the event
+ // notifier.
+ void ControlTransfer(
+ const api::experimental_usb::ControlTransferInfo& transfer);
+ void InterruptTransfer(
+ const api::experimental_usb::GenericTransferInfo& transfer);
+ void BulkTransfer(const api::experimental_usb::GenericTransferInfo& transfer);
+
+ private:
+ // Invoked by the underlying device's transfer callbacks. Indicates transfer
+ // completion to the APIResource's event notifier.
+ void TransferComplete(net::IOBuffer* buffer, const size_t length,
+ int success);
+
+ scoped_refptr<UsbDevice> device_;
+
+ // pending_transfers_ is used to track the number of transfers that are
+ // currently in flight. Access to pending_transfers_ is protected by lock_.
+ base::Lock lock_;
asargent_no_longer_on_chrome 2012/04/26 21:21:45 Danger Will Robinson! We almost never want to do e
Garret Kelly 2012/04/27 00:32:35 Hmm, then perhaps I need to do a bit more thinking
+ int pending_transfers_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(UsbDeviceResource);
asargent_no_longer_on_chrome 2012/04/26 21:21:45 nit: I think the synonym DISALLOW_COPY_AND_ASSIGN
Garret Kelly 2012/04/27 00:32:35 Oh yeah, I'd forgotten about that. Done.
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_API_USB_USB_DEVICE_RESOURCE_H_

Powered by Google App Engine
This is Rietveld 408576698