| Index: device/hid/hid_connection_linux.h
|
| diff --git a/device/hid/hid_connection_linux.h b/device/hid/hid_connection_linux.h
|
| index bcdb99c1cc7d231b07e2346ce983b1aa4a27dc67..574c732638b810dcb96363749fab8bce70c64141 100644
|
| --- a/device/hid/hid_connection_linux.h
|
| +++ b/device/hid/hid_connection_linux.h
|
| @@ -10,13 +10,14 @@
|
|
|
| #include <queue>
|
|
|
| -#include "base/files/file.h"
|
| +#include "base/files/scoped_file.h"
|
| #include "base/macros.h"
|
| #include "base/memory/weak_ptr.h"
|
| +#include "base/sequence_checker.h"
|
| #include "device/hid/hid_connection.h"
|
|
|
| namespace base {
|
| -class SingleThreadTaskRunner;
|
| +class SequencedTaskRunner;
|
| }
|
|
|
| namespace device {
|
| @@ -25,16 +26,13 @@ class HidConnectionLinux : public HidConnection {
|
| public:
|
| HidConnectionLinux(
|
| scoped_refptr<HidDeviceInfo> device_info,
|
| - base::File device_file,
|
| - scoped_refptr<base::SingleThreadTaskRunner> file_thread_runner);
|
| + base::ScopedFD fd,
|
| + scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
|
|
|
| private:
|
| friend class base::RefCountedThreadSafe<HidConnectionLinux>;
|
| class FileThreadHelper;
|
|
|
| - typedef base::Callback<void(ssize_t)> InternalWriteCallback;
|
| - typedef base::Callback<void(int)> IoctlCallback;
|
| -
|
| ~HidConnectionLinux() override;
|
|
|
| // HidConnection implementation.
|
| @@ -49,46 +47,21 @@ class HidConnectionLinux : public HidConnection {
|
| size_t size,
|
| const WriteCallback& callback) override;
|
|
|
| - // Callbacks for blocking operations run on the FILE thread.
|
| - void FinishWrite(size_t expected_size,
|
| - const WriteCallback& callback,
|
| - ssize_t result);
|
| - void FinishGetFeatureReport(uint8_t report_id,
|
| - scoped_refptr<net::IOBuffer> buffer,
|
| - const ReadCallback& callback,
|
| - int result);
|
| - void FinishSendFeatureReport(const WriteCallback& callback, int result);
|
| -
|
| - // Writes to the device. This operation may block.
|
| - static void BlockingWrite(
|
| - base::PlatformFile platform_file,
|
| - scoped_refptr<net::IOBuffer> buffer,
|
| - size_t size,
|
| - const InternalWriteCallback& callback,
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner);
|
| - // Performs an ioctl on the device. This operation may block.
|
| - static void BlockingIoctl(
|
| - base::PlatformFile platform_file,
|
| - int request,
|
| - scoped_refptr<net::IOBuffer> buffer,
|
| - const IoctlCallback& callback,
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner);
|
| -
|
| - // Closes the device file descriptor. Must be called on the FILE thread.
|
| - static void CloseDevice(base::File device_file);
|
| -
|
| void ProcessInputReport(scoped_refptr<net::IOBuffer> buffer, size_t size);
|
| void ProcessReadQueue();
|
|
|
| - base::File device_file_;
|
| - FileThreadHelper* helper_;
|
| + // This object lives on the sequence to which |blocking_task_runner_| posts
|
| + // tasks so all calls must be posted there including this object's
|
| + // destruction.
|
| + std::unique_ptr<FileThreadHelper> helper_;
|
|
|
| - scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| - scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
|
| + const scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
|
|
|
| std::queue<PendingHidReport> pending_reports_;
|
| std::queue<PendingHidRead> pending_reads_;
|
|
|
| + base::SequenceChecker sequence_checker_;
|
| +
|
| base::WeakPtrFactory<HidConnectionLinux> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(HidConnectionLinux);
|
|
|