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

Unified Diff: extensions/browser/api/hid/hid_device_manager.cc

Issue 1115213004: Add chrome.hid.getUserSelectedDevices API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 5 years, 6 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: 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..7ecf9989913a33a2cc0d675e8a447f7bbdf9ada0 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());
+ DCHECK(device_entry != resource_ids_.end());
+
+ 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,24 @@ 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_);
+ CHECK(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;
+ }
+
UsbDevicePermission::CheckParam usbParam(
device_info->vendor_id(), device_info->product_id(),
UsbDevicePermissionData::UNSPECIFIED_INTERFACE);
@@ -250,7 +281,7 @@ scoped_ptr<base::ListValue> HidDeviceManager::CreateApiDeviceList(
continue;
}
- if (!HasPermission(extension, device_info)) {
+ if (!HasPermission(extension, device_info, false)) {
continue;
}
@@ -288,8 +319,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());
}
« no previous file with comments | « extensions/browser/api/hid/hid_device_manager.h ('k') | extensions/browser/extension_function_histogram_value.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698