| Index: chrome/browser/usb/usb_device.cc
|
| diff --git a/chrome/browser/usb/usb_device.cc b/chrome/browser/usb/usb_device.cc
|
| index a4883809a78bd75024550f99e37997b85f644367..39d81a81c5a486c642f085529e4dd274e36851d1 100644
|
| --- a/chrome/browser/usb/usb_device.cc
|
| +++ b/chrome/browser/usb/usb_device.cc
|
| @@ -12,16 +12,24 @@
|
| #include "content/public/browser/browser_thread.h"
|
| #include "third_party/libusb/src/libusb/libusb.h"
|
|
|
| +#if defined(OS_CHROMEOS)
|
| +#include "base/chromeos/chromeos_version.h"
|
| +#include "chromeos/dbus/dbus_thread_manager.h"
|
| +#include "chromeos/dbus/permission_broker_client.h"
|
| +#endif // defined(OS_CHROMEOS)
|
| +
|
| using content::BrowserThread;
|
|
|
| UsbDevice::UsbDevice(
|
| scoped_refptr<UsbContext> context,
|
| PlatformUsbDevice platform_device,
|
| uint16 vendor_id,
|
| - uint16 product_id)
|
| + uint16 product_id,
|
| + uint32 unique_id)
|
| : platform_device_(platform_device),
|
| vendor_id_(vendor_id),
|
| product_id_(product_id),
|
| + unique_id_(unique_id),
|
| context_(context) {
|
| CHECK(platform_device) << "platform_device cannot be NULL";
|
| libusb_ref_device(platform_device);
|
| @@ -31,6 +39,7 @@ UsbDevice::UsbDevice()
|
| : platform_device_(NULL),
|
| vendor_id_(0),
|
| product_id_(0),
|
| + unique_id_(0),
|
| context_(NULL) {
|
| }
|
|
|
| @@ -45,6 +54,45 @@ UsbDevice::~UsbDevice() {
|
| libusb_unref_device(platform_device_);
|
| }
|
|
|
| +#if defined(OS_CHROMEOS)
|
| +void UsbDevice::RequestUsbAcess(
|
| + int interface_id,
|
| + const base::Callback<void(bool success)>& callback) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| +
|
| + // ChromeOS builds on non-ChromeOS machines (dev) should not attempt to
|
| + // use permission broker.
|
| + if (base::chromeos::IsRunningOnChromeOS()) {
|
| + chromeos::PermissionBrokerClient* client =
|
| + chromeos::DBusThreadManager::Get()->GetPermissionBrokerClient();
|
| + DCHECK(client) << "Could not get permission broker client.";
|
| + if (!client) {
|
| + callback.Run(false);
|
| + return;
|
| + }
|
| +
|
| + BrowserThread::PostTask(
|
| + BrowserThread::UI, FROM_HERE,
|
| + base::Bind(&chromeos::PermissionBrokerClient::RequestUsbAccess,
|
| + base::Unretained(client),
|
| + this->vendor_id_,
|
| + this->product_id_,
|
| + interface_id,
|
| + base::Bind(&UsbDevice::OnRequestUsbAccessReplied,
|
| + base::Unretained(this),
|
| + callback)));
|
| + }
|
| +}
|
| +
|
| +void UsbDevice::OnRequestUsbAccessReplied(
|
| + const base::Callback<void(bool success)>& callback,
|
| + bool success) {
|
| + BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
|
| + base::Bind(callback, success));
|
| +}
|
| +
|
| +#endif
|
| +
|
| scoped_refptr<UsbDeviceHandle> UsbDevice::Open() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| PlatformUsbDeviceHandle handle;
|
|
|