summaryrefslogtreecommitdiffstats
path: root/device/hid/hid_service_linux.h
diff options
context:
space:
mode:
authorreillyg <reillyg@chromium.org>2014-12-03 16:26:27 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-04 00:27:20 +0000
commit56868deb02c83ade521fa482e2d03b9319162ae9 (patch)
tree7de3aa7d1acb084f9902bbcd943733fe7df1329a /device/hid/hid_service_linux.h
parent255cf5511b0932fd3e500089ca3d53bd7e5c13c9 (diff)
downloadchromium_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.h38
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);
};