| Index: chrome/browser/usb/usb_service.cc
|
| diff --git a/chrome/browser/usb/usb_service.cc b/chrome/browser/usb/usb_service.cc
|
| index 4425d9b4b728bef2a60a47d31e0f7cc1d00b9252..0d575fbf3733dc644d12713f69b6645c6b24034a 100644
|
| --- a/chrome/browser/usb/usb_service.cc
|
| +++ b/chrome/browser/usb/usb_service.cc
|
| @@ -7,12 +7,15 @@
|
| #include <set>
|
| #include <vector>
|
|
|
| +#include "base/basictypes.h"
|
| #include "base/bind.h"
|
| #include "base/bind_helpers.h"
|
| #include "base/logging.h"
|
| +#include "base/memory/ref_counted.h"
|
| #include "base/stl_util.h"
|
| #include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/usb/usb_context.h"
|
| +#include "chrome/browser/usb/usb_device.h"
|
| #include "chrome/browser/usb/usb_device_handle.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/notification_observer.h"
|
| @@ -20,12 +23,6 @@
|
| #include "content/public/browser/notification_service.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)
|
| -
|
| namespace content {
|
|
|
| class NotificationDetails;
|
| @@ -64,14 +61,14 @@ class ExitObserver : public content::NotificationObserver {
|
| using content::BrowserThread;
|
|
|
| UsbService::UsbService()
|
| - : context_(new UsbContext()) {
|
| + : context_(new UsbContext()),
|
| + next_unique_id_(0) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| }
|
|
|
| UsbService::~UsbService() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| - for (DeviceMap::iterator it = devices_.begin();
|
| - it != devices_.end(); ++it) {
|
| + for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
|
| it->second->OnDisconnect();
|
| }
|
| }
|
| @@ -82,97 +79,24 @@ UsbService* UsbService::GetInstance() {
|
| return Singleton<UsbService, LeakySingletonTraits<UsbService> >::get();
|
| }
|
|
|
| -void UsbService::FindDevices(
|
| - const uint16 vendor_id,
|
| - const uint16 product_id,
|
| - int interface_id,
|
| - const base::Callback<void(ScopedDeviceVector vector)>& callback) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| -#if defined(OS_CHROMEOS)
|
| - // 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(ScopedDeviceVector());
|
| - return;
|
| - }
|
| -
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI,
|
| - FROM_HERE,
|
| - base::Bind(&chromeos::PermissionBrokerClient::RequestUsbAccess,
|
| - base::Unretained(client),
|
| - vendor_id,
|
| - product_id,
|
| - interface_id,
|
| - base::Bind(&UsbService::OnRequestUsbAccessReplied,
|
| - base::Unretained(this),
|
| - vendor_id,
|
| - product_id,
|
| - callback)));
|
| - } else {
|
| - FindDevicesImpl(vendor_id, product_id, callback, true);
|
| - }
|
| -#else
|
| - FindDevicesImpl(vendor_id, product_id, callback, true);
|
| -#endif // defined(OS_CHROMEOS)
|
| -}
|
| -
|
| void UsbService::GetDevices(std::vector<scoped_refptr<UsbDevice> >* devices) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| STLClearObject(devices);
|
| RefreshDevices();
|
|
|
| - for (DeviceMap::iterator it = devices_.begin();
|
| - it != devices_.end(); ++it) {
|
| + for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
|
| devices->push_back(it->second);
|
| }
|
| }
|
|
|
| -void UsbService::OnRequestUsbAccessReplied(
|
| - const uint16 vendor_id,
|
| - const uint16 product_id,
|
| - const base::Callback<void(ScopedDeviceVector vectors)>& callback,
|
| - bool success) {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE,
|
| - FROM_HERE,
|
| - base::Bind(&UsbService::FindDevicesImpl,
|
| - base::Unretained(this),
|
| - vendor_id,
|
| - product_id,
|
| - callback,
|
| - success));
|
| -}
|
| -
|
| -void UsbService::FindDevicesImpl(
|
| - const uint16 vendor_id,
|
| - const uint16 product_id,
|
| - const base::Callback<void(ScopedDeviceVector vectors)>& callback,
|
| - bool success) {
|
| +scoped_refptr<UsbDevice> UsbService::GetDeviceById(uint32 unique_id) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
|
| - ScopedDeviceVector devices(new vector<scoped_refptr<UsbDevice> >());
|
| -
|
| - // If the permission broker was unable to obtain permission for the specified
|
| - // devices then there is no point in attempting to enumerate the devices. On
|
| - // platforms without a permission broker, we assume permission is granted.
|
| - if (!success) {
|
| - callback.Run(devices.Pass());
|
| - return;
|
| - }
|
| -
|
| RefreshDevices();
|
|
|
| - for (DeviceMap::iterator it = devices_.begin();
|
| - it != devices_.end(); ++it) {
|
| - if (DeviceMatches(it->second, vendor_id, product_id))
|
| - devices->push_back(it->second);
|
| + for (DeviceMap::iterator it = devices_.begin(); it != devices_.end(); ++it) {
|
| + if (it->second->unique_id() == unique_id) return it->second;
|
| }
|
| -
|
| - callback.Run(devices.Pass());
|
| + return NULL;
|
| }
|
|
|
| void UsbService::RefreshDevices() {
|
| @@ -193,9 +117,10 @@ void UsbService::RefreshDevices() {
|
| if (0 != libusb_get_device_descriptor(platform_devices[i], &descriptor))
|
| continue;
|
| UsbDevice* new_device = new UsbDevice(context_,
|
| - platform_devices[i],
|
| - descriptor.idVendor,
|
| - descriptor.idProduct);
|
| + platform_devices[i],
|
| + descriptor.idVendor,
|
| + descriptor.idProduct,
|
| + ++next_unique_id_);
|
| devices_[platform_devices[i]] = new_device;
|
| connected_devices.insert(new_device);
|
| } else {
|
| @@ -219,9 +144,3 @@ void UsbService::RefreshDevices() {
|
|
|
| libusb_free_device_list(platform_devices, true);
|
| }
|
| -
|
| -bool UsbService::DeviceMatches(scoped_refptr<UsbDevice> device,
|
| - const uint16 vendor_id,
|
| - const uint16 product_id) {
|
| - return device->vendor_id() == vendor_id && device->product_id() == product_id;
|
| -}
|
|
|