Index: extensions/browser/api/hid/hid_device_manager.cc |
diff --git a/extensions/browser/api/hid/hid_device_manager.cc b/extensions/browser/api/hid/hid_device_manager.cc |
index 5a6403c87c95b01bc5fb318e76adb27b5c647ee1..e1bbc0cdc064b1cf0df2a62d9b4a75f0952bbd73 100644 |
--- a/extensions/browser/api/hid/hid_device_manager.cc |
+++ b/extensions/browser/api/hid/hid_device_manager.cc |
@@ -11,6 +11,7 @@ |
#include "device/core/device_client.h" |
#include "device/hid/hid_device_filter.h" |
#include "device/hid/hid_service.h" |
+#include "extensions/browser/api/device_permissions_manager.h" |
#include "extensions/common/permissions/permissions_data.h" |
#include "extensions/common/permissions/usb_device_permission.h" |
@@ -57,12 +58,13 @@ void PopulateHidDeviceInfo(hid::HidDeviceInfo* output, |
} |
} |
-bool WillDispatchDeviceEvent(scoped_refptr<HidDeviceInfo> device_info, |
+bool WillDispatchDeviceEvent(base::WeakPtr<HidDeviceManager> device_manager, |
+ scoped_refptr<device::HidDeviceInfo> device_info, |
content::BrowserContext* context, |
const Extension* extension, |
base::ListValue* event_args) { |
- if (extension) { |
- return HidDeviceManager::HasPermission(extension, device_info); |
+ if (device_manager && extension) { |
+ return device_manager->HasPermission(extension, device_info, false); |
} |
return false; |
} |
@@ -83,10 +85,8 @@ struct HidDeviceManager::GetApiDevicesParams { |
}; |
HidDeviceManager::HidDeviceManager(content::BrowserContext* context) |
- : initialized_(false), |
+ : browser_context_(context), |
hid_service_observer_(this), |
- enumeration_ready_(false), |
- next_resource_id_(0), |
weak_factory_(this) { |
event_router_ = EventRouter::Get(context); |
if (event_router_) { |
@@ -125,6 +125,22 @@ void HidDeviceManager::GetApiDevices( |
} |
} |
+scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevicesFromList( |
+ const std::vector<scoped_refptr<HidDeviceInfo>>& devices) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ scoped_ptr<base::ListValue> device_list(new base::ListValue()); |
+ for (const auto& device : devices) { |
+ const auto& device_entry = resource_ids_.find(device->device_id()); |
Devlin
2015/05/05 22:19:50
a const& to an iterator is kind of weird...
Reilly Grant (use Gerrit)
2015/05/06 00:52:53
Fixed.
|
+ DCHECK(device_entry != resource_ids_.end()); |
Devlin
2015/05/05 22:19:50
DCHECK_NE
Reilly Grant (use Gerrit)
2015/05/06 00:52:53
DCHECK_EQ and DCHECK_NE don't work for iterators b
|
+ |
+ hid::HidDeviceInfo device_info; |
+ device_info.device_id = device_entry->second; |
+ PopulateHidDeviceInfo(&device_info, device); |
+ device_list->Append(device_info.ToValue().release()); |
+ } |
+ return device_list.Pass(); |
+} |
+ |
scoped_refptr<HidDeviceInfo> HidDeviceManager::GetDeviceInfo(int resource_id) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
HidService* hid_service = device::DeviceClient::Get()->GetHidService(); |
@@ -139,9 +155,26 @@ scoped_refptr<HidDeviceInfo> HidDeviceManager::GetDeviceInfo(int resource_id) { |
return hid_service->GetDeviceInfo(device_iter->second); |
} |
-// static |
bool HidDeviceManager::HasPermission(const Extension* extension, |
- scoped_refptr<HidDeviceInfo> device_info) { |
+ scoped_refptr<HidDeviceInfo> device_info, |
+ bool update_last_used) { |
+ DevicePermissionsManager* permissions_manager = |
+ DevicePermissionsManager::Get(browser_context_); |
+ if (permissions_manager) { |
+ DevicePermissions* device_permissions = |
+ permissions_manager->GetForExtension(extension->id()); |
+ DCHECK(device_permissions); |
+ |
+ scoped_refptr<DevicePermissionEntry> permission_entry = |
+ device_permissions->FindHidDeviceEntry(device_info); |
+ if (permission_entry) { |
+ if (update_last_used) { |
+ permissions_manager->UpdateLastUsed(extension->id(), permission_entry); |
+ } |
+ return true; |
Devlin
2015/05/05 22:19:50
When is |updatre_last_used| true? (Maybe I just m
Reilly Grant (use Gerrit)
2015/05/06 00:52:53
All it does when update_last_used is set update th
|
+ } |
+ } |
+ |
UsbDevicePermission::CheckParam usbParam( |
device_info->vendor_id(), device_info->product_id(), |
UsbDevicePermissionData::UNSPECIFIED_INTERFACE); |
@@ -250,7 +283,7 @@ scoped_ptr<base::ListValue> HidDeviceManager::CreateApiDeviceList( |
continue; |
} |
- if (!HasPermission(extension, device_info)) { |
+ if (!HasPermission(extension, device_info, false)) { |
continue; |
} |
@@ -288,8 +321,8 @@ void HidDeviceManager::DispatchEvent(const std::string& event_name, |
scoped_ptr<base::ListValue> event_args, |
scoped_refptr<HidDeviceInfo> device_info) { |
scoped_ptr<Event> event(new Event(event_name, event_args.Pass())); |
- event->will_dispatch_callback = |
- base::Bind(&WillDispatchDeviceEvent, device_info); |
+ event->will_dispatch_callback = base::Bind( |
+ &WillDispatchDeviceEvent, weak_factory_.GetWeakPtr(), device_info); |
event_router_->BroadcastEvent(event.Pass()); |
} |