PM: Add a time provider.

This implements a time provider interface, as well as a real and a fake
implementation.

BUG=chromium:341205
TEST=Unit tests.

Change-Id: Ibc6a865ab868e0f8c760c003dc970b7987896a36
Reviewed-on: https://chromium-review.googlesource.com/190247
Tested-by: Gilad Arnold <garnold@chromium.org>
Reviewed-by: Alex Deymo <deymo@chromium.org>
Commit-Queue: Gilad Arnold <garnold@chromium.org>
diff --git a/policy_manager/state.h b/policy_manager/state.h
index 4950b56..fb847a7 100644
--- a/policy_manager/state.h
+++ b/policy_manager/state.h
@@ -7,6 +7,7 @@
 
 #include "update_engine/policy_manager/random_provider.h"
 #include "update_engine/policy_manager/shill_provider.h"
+#include "update_engine/policy_manager/time_provider.h"
 
 namespace chromeos_policy_manager {
 
@@ -20,12 +21,14 @@
   // succeeded.
   bool Init() {
     return (random_provider_ && random_provider_->Init() &&
-            shill_provider_ && shill_provider_->Init());
+            shill_provider_ && shill_provider_->Init() &&
+            time_provider_ && time_provider_->Init());
   }
 
   // These functions return the given provider.
   RandomProvider* random_provider() { return random_provider_.get(); }
   ShillProvider* shill_provider() { return shill_provider_.get(); }
+  TimeProvider* time_provider() { return time_provider_.get(); }
 
  protected:
   // Initialize the private scoped_ptr for each provider.
@@ -37,10 +40,15 @@
     return shill_provider_.reset(shill_provider);
   }
 
+  void set_time_provider(TimeProvider* time_provider) {
+    return time_provider_.reset(time_provider);
+  }
+
  private:
   // Instances of the providers.
   scoped_ptr<RandomProvider> random_provider_;
   scoped_ptr<ShillProvider> shill_provider_;
+  scoped_ptr<TimeProvider> time_provider_;
 };
 
 }  // namespace chromeos_policy_manager