Revised GPIO module interface + GPIO discovery logic

* The GpioHandler class is no longer a static singleton, rather an
  ordinary object with a dynamic guard against multiple instances. This
  makes testing/mocking a lot easier and simplifies implementation.

* It uses a basic, mockable udev interface; the module comes with
  complete unit testing of the discovery mechanism.

* Corresponding changes to user classes, including UpdateAttempter and
  UpdateCheckScheduler.

Note that the implementation of the test mode signaling protocol is
currently a no-op, always returning false, and hence has no effect on
the update process yet. This mechanism will be implemented in a later
CL.

BUG=chromium-os:25397
TEST=Builds and passes unit tests (including new ones)

Change-Id: I2f6254db6799ff5ef8616314890833f6e3269ff6
Reviewed-on: https://gerrit.chromium.org/gerrit/22869
Reviewed-by: Gilad Arnold <garnold@chromium.org>
Tested-by: Gilad Arnold <garnold@chromium.org>
Commit-Ready: Gilad Arnold <garnold@chromium.org>
diff --git a/update_attempter.h b/update_attempter.h
index 4f30667..950163e 100644
--- a/update_attempter.h
+++ b/update_attempter.h
@@ -61,7 +61,8 @@
 
   UpdateAttempter(PrefsInterface* prefs,
                   MetricsLibraryInterface* metrics_lib,
-                  DbusGlibInterface* dbus_iface);
+                  DbusGlibInterface* dbus_iface,
+                  GpioHandler* gpio_handler);
   virtual ~UpdateAttempter();
 
   // Checks for update and, if a newer version is available, attempts to update
@@ -308,6 +309,12 @@
   // A flag for indicating whether we are using a test server URL.
   bool is_using_test_url_;
 
+  // A flag indicating whether a test update cycle was already attempted.
+  bool is_test_update_attempted_;
+
+  // GPIO handler object.
+  GpioHandler* gpio_handler_;
+
   DISALLOW_COPY_AND_ASSIGN(UpdateAttempter);
 };