PM: Make State an abstract interface.

Similar to CL:196656, move getters/variables to concrete
subclasses. In this case, also introduce a RealState type to achieve
this.

BUG=chromium:364763
TEST=Unit tests pass.

Change-Id: Ic12cd872e576c9690d32359474f3528cf706633d
Reviewed-on: https://chromium-review.googlesource.com/196885
Reviewed-by: David Zeuthen <zeuthen@chromium.org>
Commit-Queue: David Zeuthen <zeuthen@chromium.org>
Tested-by: David Zeuthen <zeuthen@chromium.org>
diff --git a/policy_manager/fake_state.cc b/policy_manager/fake_state.cc
index 8bbf452..6fa663b 100644
--- a/policy_manager/fake_state.cc
+++ b/policy_manager/fake_state.cc
@@ -8,24 +8,15 @@
 
 namespace chromeos_policy_manager {
 
-FakeState::FakeState() : State(new FakeConfigProvider(),
-                               new FakeDevicePolicyProvider(),
-                               new FakeRandomProvider(),
-                               new FakeShillProvider(),
-                               new FakeSystemProvider(),
-                               new FakeTimeProvider(),
-                               new FakeUpdaterProvider()) {
-}
-
 FakeState* FakeState::Construct() {
   scoped_ptr<FakeState> fake_state(new FakeState());
-  if (!(fake_state->config_provider()->Init() &&
-        fake_state->device_policy_provider()->Init() &&
-        fake_state->random_provider()->Init() &&
-        fake_state->shill_provider()->Init() &&
-        fake_state->system_provider()->Init() &&
-        fake_state->time_provider()->Init() &&
-        fake_state->updater_provider()->Init())) {
+  if (!(fake_state->config_provider_.Init() &&
+        fake_state->device_policy_provider_.Init() &&
+        fake_state->random_provider_.Init() &&
+        fake_state->shill_provider_.Init() &&
+        fake_state->system_provider_.Init() &&
+        fake_state->time_provider_.Init() &&
+        fake_state->updater_provider_.Init())) {
     return NULL;
   }
   return fake_state.release();