Commit ea245886 authored by reillyg's avatar reillyg Committed by Commit bot

Check that extensions::HidDeviceManager is used from the FILE thread.

Commit 7fb8b995 attempted to enable an unused thread check in
extensions::HidDeviceManager but this was not correct because while this
class is normally used from the FILE thread this is not where it is
created (issue 417939). This change adopts the pattern used in
extensions::ApiResourceManager where the BrowserContextKeyedAPI
implements its own thread assertions.

BUG=

Review URL: https://codereview.chromium.org/604843003

Cr-Commit-Position: refs/heads/master@{#297013}
parent 49b3bcbf
......@@ -8,6 +8,7 @@
#include <vector>
#include "base/lazy_instance.h"
#include "content/public/browser/browser_thread.h"
#include "device/core/device_client.h"
#include "device/hid/hid_device_filter.h"
#include "device/hid/hid_service.h"
......@@ -38,6 +39,7 @@ HidDeviceManager::GetFactoryInstance() {
scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices(
const Extension* extension,
const std::vector<HidDeviceFilter>& filters) {
DCHECK(IsCalledOnValidThread());
UpdateDevices();
HidService* hid_service = device::DeviceClient::Get()->GetHidService();
......@@ -107,6 +109,7 @@ scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices(
bool HidDeviceManager::GetDeviceInfo(int resource_id,
device::HidDeviceInfo* device_info) {
DCHECK(IsCalledOnValidThread());
UpdateDevices();
HidService* hid_service = device::DeviceClient::Get()->GetHidService();
DCHECK(hid_service);
......@@ -121,6 +124,7 @@ bool HidDeviceManager::GetDeviceInfo(int resource_id,
bool HidDeviceManager::HasPermission(const Extension* extension,
const device::HidDeviceInfo& device_info) {
DCHECK(IsCalledOnValidThread());
UsbDevicePermission::CheckParam usbParam(
device_info.vendor_id,
device_info.product_id,
......@@ -142,8 +146,13 @@ bool HidDeviceManager::HasPermission(const Extension* extension,
return false;
}
// static
bool HidDeviceManager::IsCalledOnValidThread() {
return content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE);
}
void HidDeviceManager::UpdateDevices() {
thread_checker_.CalledOnValidThread();
DCHECK(IsCalledOnValidThread());
HidService* hid_service = device::DeviceClient::Get()->GetHidService();
DCHECK(hid_service);
......
......@@ -51,11 +51,10 @@ class HidDeviceManager : public BrowserContextKeyedAPI {
friend class BrowserContextKeyedAPIFactory<HidDeviceManager>;
static const char* service_name() { return "HidDeviceManager"; }
static bool IsCalledOnValidThread();
void UpdateDevices();
base::ThreadChecker thread_checker_;
int next_resource_id_;
typedef std::map<int, device::HidDeviceId> ResourceIdToDeviceIdMap;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment