diff options
author | reillyg <reillyg@chromium.org> | 2014-12-03 16:26:27 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-04 00:27:20 +0000 |
commit | 56868deb02c83ade521fa482e2d03b9319162ae9 (patch) | |
tree | 7de3aa7d1acb084f9902bbcd943733fe7df1329a /device/hid/hid_service_linux.h | |
parent | 255cf5511b0932fd3e500089ca3d53bd7e5c13c9 (diff) | |
download | chromium_src-56868deb02c83ade521fa482e2d03b9319162ae9.zip chromium_src-56868deb02c83ade521fa482e2d03b9319162ae9.tar.gz chromium_src-56868deb02c83ade521fa482e2d03b9319162ae9.tar.bz2 |
Migrate HidServiceLinux and HidConnectionLinux to BrowserThread::UI.
This patch is a follow-up to https://crrev.com/e8fa00efd0965a7eb5816a
that moves the HidService and HidConnection implementations on Linux
from the browser's FILE thread to the UI thread. This is being done
because the HID APIs on platforms other than Linux are more natural to
use on the UI thread. The users of these objects are also usually on
the UI thread. (For example, the extension API bindings.)
BUG=422540
Review URL: https://codereview.chromium.org/771393002
Cr-Commit-Position: refs/heads/master@{#306729}
Diffstat (limited to 'device/hid/hid_service_linux.h')
-rw-r--r-- | device/hid/hid_service_linux.h | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/device/hid/hid_service_linux.h b/device/hid/hid_service_linux.h index 80239c4..59b6036 100644 --- a/device/hid/hid_service_linux.h +++ b/device/hid/hid_service_linux.h @@ -8,40 +8,50 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" -#include "device/hid/device_monitor_linux.h" #include "device/hid/hid_device_info.h" #include "device/hid/hid_service.h" -struct udev_device; - namespace device { class HidConnection; -class HidServiceLinux : public HidService, - public DeviceMonitorLinux::Observer { +class HidServiceLinux : public HidService { public: HidServiceLinux(scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); void Connect(const HidDeviceId& device_id, const ConnectCallback& callback) override; - // Implements DeviceMonitorLinux::Observer: - void OnDeviceAdded(udev_device* device) override; - void OnDeviceRemoved(udev_device* device) override; - private: + struct ConnectParams; + class Helper; + friend class Helper; + ~HidServiceLinux() override; - void FinishConnect(const HidDeviceId& device_id, - const std::string device_node, - const ConnectCallback& callback, - bool success); + // Constructs this services helper object that lives on the FILE thread. + static void StartHelper( + base::WeakPtr<HidServiceLinux> weak_ptr, + scoped_refptr<base::SingleThreadTaskRunner> task_runner); + + // These functions implement the process of locating, requesting access to and + // opening a device. Because this operation crosses multiple threads these + // functions are static and the necessary parameters are passed as a single + // struct. +#if defined(OS_CHROMEOS) + static void OnRequestPathAccessComplete(scoped_ptr<ConnectParams> params, + bool success); +#endif // defined(OS_CHROMEOS) + static void OpenDevice(scoped_ptr<ConnectParams> params); + static void ConnectImpl(scoped_ptr<ConnectParams> params); scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_; + scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_; + // The helper lives on the FILE thread and holds a weak reference back to the + // service that owns it. base::WeakPtrFactory<HidServiceLinux> weak_factory_; + scoped_ptr<Helper> helper_; DISALLOW_COPY_AND_ASSIGN(HidServiceLinux); }; |