PM: Add an update engine provider.

The UpdaterProvider exports variables for querying the status of an
update process and related settings. Includes a concrete implementation
(RealUpdaterProvider), which currently links directly with update engine
code and pulls information through the SystemState object.  Also
included is a fake implementation (FakeUpdaterProvider) for testing
purposes.

BUG=chromium:346914
TEST=Unit tests.

Change-Id: I6ed5b40f21e43537e78aebf4217d811e149f745b
Reviewed-on: https://chromium-review.googlesource.com/192232
Reviewed-by: Gilad Arnold <garnold@chromium.org>
Commit-Queue: Gilad Arnold <garnold@chromium.org>
Tested-by: Gilad Arnold <garnold@chromium.org>
diff --git a/policy_manager/state_factory.cc b/policy_manager/state_factory.cc
index cab9d5e..a5f0df9 100644
--- a/policy_manager/state_factory.cc
+++ b/policy_manager/state_factory.cc
@@ -6,26 +6,31 @@
 
 #include <base/logging.h>
 
+#include "update_engine/clock_interface.h"
 #include "update_engine/policy_manager/real_random_provider.h"
 #include "update_engine/policy_manager/real_shill_provider.h"
 #include "update_engine/policy_manager/real_system_provider.h"
 #include "update_engine/policy_manager/real_time_provider.h"
+#include "update_engine/policy_manager/real_updater_provider.h"
 
 namespace chromeos_policy_manager {
 
-State* DefaultStateFactory(
-    chromeos_update_engine::DBusWrapperInterface* dbus,
-    chromeos_update_engine::ClockInterface* clock) {
+State* DefaultStateFactory(chromeos_update_engine::DBusWrapperInterface* dbus,
+                           chromeos_update_engine::SystemState* system_state) {
+  chromeos_update_engine::ClockInterface* const clock = system_state->clock();
   scoped_ptr<RealRandomProvider> random_provider(new RealRandomProvider());
   scoped_ptr<RealShillProvider> shill_provider(
       new RealShillProvider(dbus, clock));
   scoped_ptr<RealSystemProvider> system_provider(new RealSystemProvider());
   scoped_ptr<RealTimeProvider> time_provider(new RealTimeProvider(clock));
+  scoped_ptr<RealUpdaterProvider> updater_provider(
+      new RealUpdaterProvider(system_state));
 
   if (!(random_provider->Init() &&
         shill_provider->Init() &&
         system_provider->Init() &&
-        time_provider->Init())) {
+        time_provider->Init() &&
+        updater_provider->Init())) {
     LOG(ERROR) << "Error initializing providers";
     return NULL;
   }
@@ -33,7 +38,8 @@
   return new State(random_provider.release(),
                    shill_provider.release(),
                    system_provider.release(),
-                   time_provider.release());
+                   time_provider.release(),
+                   updater_provider.release());
 }
 
 }  // namespace chromeos_policy_manager