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.h b/policy_manager/state.h
index 8d93dea..09f1b3d 100644
--- a/policy_manager/state.h
+++ b/policy_manager/state.h
@@ -9,6 +9,7 @@
 #include "update_engine/policy_manager/shill_provider.h"
 #include "update_engine/policy_manager/system_provider.h"
 #include "update_engine/policy_manager/time_provider.h"
+#include "update_engine/policy_manager/updater_provider.h"
 
 namespace chromeos_policy_manager {
 
@@ -18,17 +19,22 @@
  public:
   virtual ~State() {}
   State(RandomProvider* random_provider, ShillProvider* shill_provider,
-        SystemProvider* system_provider, TimeProvider* time_provider) :
+        SystemProvider* system_provider, TimeProvider* time_provider,
+        UpdaterProvider* updater_provider) :
       random_provider_(random_provider),
       shill_provider_(shill_provider),
       system_provider_(system_provider),
-      time_provider_(time_provider) {}
+      time_provider_(time_provider),
+      updater_provider_(updater_provider) {}
 
   // These methods return the given provider.
   virtual RandomProvider* random_provider() { return random_provider_.get(); }
   virtual ShillProvider* shill_provider() { return shill_provider_.get(); }
-  virtual TimeProvider* time_provider() { return time_provider_.get(); }
   virtual SystemProvider* system_provider() { return system_provider_.get(); }
+  virtual TimeProvider* time_provider() { return time_provider_.get(); }
+  virtual UpdaterProvider* updater_provider() {
+    return updater_provider_.get();
+  }
 
  private:
   // Instances of the providers.
@@ -36,6 +42,7 @@
   scoped_ptr<ShillProvider> shill_provider_;
   scoped_ptr<SystemProvider> system_provider_;
   scoped_ptr<TimeProvider> time_provider_;
+  scoped_ptr<UpdaterProvider> updater_provider_;
 };
 
 }  // namespace chromeos_policy_manager