atrusctl: update for libchrome uprev to r680000

- Use base::FileDescriptorWatcher.
- Use base::CheckedObserver.
- Use std::cref.

BUG=chromium:1054279
TEST=emerge

Change-Id: I07e8d8646d49678fe4b5d9b5220f5adbb984fd68
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/atrusctl/+/2203243
Reviewed-by: Joe Tessler <jrt@chromium.org>
Reviewed-by: Hidehiko Abe <hidehiko@chromium.org>
Commit-Queue: Qijiang Fan <fqj@google.com>
Tested-by: Qijiang Fan <fqj@google.com>
diff --git a/src/hidraw_device.cc b/src/hidraw_device.cc
index 1435ee6..57237f2 100644
--- a/src/hidraw_device.cc
+++ b/src/hidraw_device.cc
@@ -4,6 +4,7 @@
 
 #include "hidraw_device.h"
 
+#include <functional>
 #include <vector>
 
 #include <inttypes.h>
@@ -48,9 +49,9 @@
   HIDRawDevice::QueryResult result;
   HIDMessage request(kHidReportId, command);
   HIDMessage response;
-  bool ret = OpenConnection(
-      base::Bind(&HIDRawDevice::ExecuteQueryWrapper, base::Unretained(this),
-                 base::ConstRef(request), &response, &result));
+  bool ret = OpenConnection(base::Bind(&HIDRawDevice::ExecuteQueryWrapper,
+                                       base::Unretained(this),
+                                       std::cref(request), &response, &result));
   if (!ret) {
     result = kQueryError;
   }
diff --git a/src/udev_device_manager.cc b/src/udev_device_manager.cc
index 6158bc3..69a45cf 100644
--- a/src/udev_device_manager.cc
+++ b/src/udev_device_manager.cc
@@ -7,6 +7,7 @@
 #include <inttypes.h>
 #include <libudev.h>
 
+#include <base/bind.h>
 #include <base/logging.h>
 #include <base/macros.h>
 #include <base/strings/string_number_conversions.h>
@@ -83,8 +84,7 @@
 
 UdevDeviceManager::UdevDeviceManager()
     : udev_(udev_new()),
-      monitor_(udev_monitor_new_from_netlink(udev_.get(), "udev")),
-      watcher_(FROM_HERE) {
+      monitor_(udev_monitor_new_from_netlink(udev_.get(), "udev")) {
   CHECK(udev_.get()) << "udev_new() returned nullptr";
   CHECK(monitor_.get()) << "udev_monitor_new_from_netlink() returned nullptr";
 }
@@ -103,9 +103,9 @@
   }
 
   int fd = udev_monitor_get_fd(monitor_.get());
-  // TODO(fqj,g/chromeos-libchrome): replace by base::FileDescriptorWatcher.
-  if (!base::MessageLoopForIO::current()->WatchFileDescriptor(
-          fd, true, base::MessagePumpLibevent::WATCH_READ, &watcher_, this)) {
+  watcher_ = base::FileDescriptorWatcher::WatchReadable(
+      fd, base::Bind(&UdevDeviceManager::OnFdReadable, base::Unretained(this)));
+  if (!watcher_) {
     LOG(ERROR) << "Unable to watch FD " << fd;
     return false;
   }
@@ -163,7 +163,7 @@
   return true;
 }
 
-void UdevDeviceManager::OnFileCanReadWithoutBlocking(int fd) {
+void UdevDeviceManager::OnFdReadable() {
   ScopedUdevDevice device(udev_monitor_receive_device(monitor_.get()));
   if (!device) {
     LOG(WARNING) << "Ignore device event with no associated udev device.";
@@ -180,10 +180,6 @@
   HandleEvent(action_str, dev_node_path);
 }
 
-void UdevDeviceManager::OnFileCanWriteWithoutBlocking(int fd) {
-  LOG(ERROR) << "Unexpected non-blocking write notification for FD " << fd;
-}
-
 void UdevDeviceManager::HandleEvent(const std::string& action_str,
                                     const std::string& device_path) {
   UdevAction action = StringToAction(action_str);
diff --git a/src/udev_device_manager.h b/src/udev_device_manager.h
index e1aa9f6..a18d8b6 100644
--- a/src/udev_device_manager.h
+++ b/src/udev_device_manager.h
@@ -7,6 +7,7 @@
 
 #include <string>
 
+#include <base/files/file_descriptor_watcher_posix.h>
 #include <base/macros.h>
 #include <base/message_loop/message_loop.h>
 #include <base/observer_list.h>
@@ -16,7 +17,7 @@
 
 namespace atrusctl {
 
-class UdevDeviceManager : public base::MessagePumpLibevent::FdWatcher {
+class UdevDeviceManager {
  public:
   UdevDeviceManager();
 
@@ -34,18 +35,14 @@
   bool Enumerate();
 
  private:
-  // base::MessageLoopForIO::Watcher
-  void OnFileCanReadWithoutBlocking(int fd) override;
-
-  // base::MessageLoopForIO::Watcher
-  void OnFileCanWriteWithoutBlocking(int fd) override;
+  void OnFdReadable();
 
   void HandleEvent(const std::string& action_str,
                    const std::string& device_path);
 
   ScopedUdev udev_;
   ScopedUdevMonitor monitor_;
-  base::MessagePumpLibevent::FdWatchController watcher_;
+  std::unique_ptr<base::FileDescriptorWatcher::Controller> watcher_;
   base::ObserverList<UdevSubsystemObserver> observers_;
 
   DISALLOW_COPY_AND_ASSIGN(UdevDeviceManager);
diff --git a/src/udev_subsystem_observer.h b/src/udev_subsystem_observer.h
index 534b5d8..ca7d80d 100644
--- a/src/udev_subsystem_observer.h
+++ b/src/udev_subsystem_observer.h
@@ -6,10 +6,11 @@
 #define UDEV_SUBSYSTEM_OBSERVER_H_
 
 #include <string>
+#include <base/observer_list_types.h>
 
 namespace atrusctl {
 
-class UdevSubsystemObserver {
+class UdevSubsystemObserver : public base::CheckedObserver {
  public:
   virtual ~UdevSubsystemObserver() = default;