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 @@ ...@@ -8,6 +8,7 @@
#include <vector> #include <vector>
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
#include "content/public/browser/browser_thread.h"
#include "device/core/device_client.h" #include "device/core/device_client.h"
#include "device/hid/hid_device_filter.h" #include "device/hid/hid_device_filter.h"
#include "device/hid/hid_service.h" #include "device/hid/hid_service.h"
...@@ -38,6 +39,7 @@ HidDeviceManager::GetFactoryInstance() { ...@@ -38,6 +39,7 @@ HidDeviceManager::GetFactoryInstance() {
scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices( scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices(
const Extension* extension, const Extension* extension,
const std::vector<HidDeviceFilter>& filters) { const std::vector<HidDeviceFilter>& filters) {
DCHECK(IsCalledOnValidThread());
UpdateDevices(); UpdateDevices();
HidService* hid_service = device::DeviceClient::Get()->GetHidService(); HidService* hid_service = device::DeviceClient::Get()->GetHidService();
...@@ -107,6 +109,7 @@ scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices( ...@@ -107,6 +109,7 @@ scoped_ptr<base::ListValue> HidDeviceManager::GetApiDevices(
bool HidDeviceManager::GetDeviceInfo(int resource_id, bool HidDeviceManager::GetDeviceInfo(int resource_id,
device::HidDeviceInfo* device_info) { device::HidDeviceInfo* device_info) {
DCHECK(IsCalledOnValidThread());
UpdateDevices(); UpdateDevices();
HidService* hid_service = device::DeviceClient::Get()->GetHidService(); HidService* hid_service = device::DeviceClient::Get()->GetHidService();
DCHECK(hid_service); DCHECK(hid_service);
...@@ -121,6 +124,7 @@ bool HidDeviceManager::GetDeviceInfo(int resource_id, ...@@ -121,6 +124,7 @@ bool HidDeviceManager::GetDeviceInfo(int resource_id,
bool HidDeviceManager::HasPermission(const Extension* extension, bool HidDeviceManager::HasPermission(const Extension* extension,
const device::HidDeviceInfo& device_info) { const device::HidDeviceInfo& device_info) {
DCHECK(IsCalledOnValidThread());
UsbDevicePermission::CheckParam usbParam( UsbDevicePermission::CheckParam usbParam(
device_info.vendor_id, device_info.vendor_id,
device_info.product_id, device_info.product_id,
...@@ -142,8 +146,13 @@ bool HidDeviceManager::HasPermission(const Extension* extension, ...@@ -142,8 +146,13 @@ bool HidDeviceManager::HasPermission(const Extension* extension,
return false; return false;
} }
// static
bool HidDeviceManager::IsCalledOnValidThread() {
return content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE);
}
void HidDeviceManager::UpdateDevices() { void HidDeviceManager::UpdateDevices() {
thread_checker_.CalledOnValidThread(); DCHECK(IsCalledOnValidThread());
HidService* hid_service = device::DeviceClient::Get()->GetHidService(); HidService* hid_service = device::DeviceClient::Get()->GetHidService();
DCHECK(hid_service); DCHECK(hid_service);
......
...@@ -51,11 +51,10 @@ class HidDeviceManager : public BrowserContextKeyedAPI { ...@@ -51,11 +51,10 @@ class HidDeviceManager : public BrowserContextKeyedAPI {
friend class BrowserContextKeyedAPIFactory<HidDeviceManager>; friend class BrowserContextKeyedAPIFactory<HidDeviceManager>;
static const char* service_name() { return "HidDeviceManager"; } static const char* service_name() { return "HidDeviceManager"; }
static bool IsCalledOnValidThread();
void UpdateDevices(); void UpdateDevices();
base::ThreadChecker thread_checker_;
int next_resource_id_; int next_resource_id_;
typedef std::map<int, device::HidDeviceId> ResourceIdToDeviceIdMap; 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