Revert "Revert "Make the metrics library respect the policy settings instead of the consent file.""

This reverts commit aa91d046ac27a9bdc96e6cd9438741d98f1cef66

Change-Id: I1c84fb86d6eb56a5a8e88136c98104394be697b2
Reviewed-on: http://gerrit.chromium.org/gerrit/4614
Reviewed-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Ken Mixter <kmixter@chromium.org>
Tested-by: Ken Mixter <kmixter@chromium.org>
diff --git a/metrics/metrics_library.cc b/metrics/metrics_library.cc
index d2c1b0f..ae6c8e0 100644
--- a/metrics/metrics_library.cc
+++ b/metrics/metrics_library.cc
@@ -13,6 +13,7 @@
 #include <cstring>
 
 #include "base/eintr_wrapper.h"  // HANDLE_EINTR macro, no libbase required.
+#include "policy/device_policy.h"
 
 #define READ_WRITE_ALL_FILE_FLAGS \
   (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
@@ -60,7 +61,8 @@
 
 MetricsLibrary::MetricsLibrary()
     : uma_events_file_(NULL),
-      consent_file_(kConsentFile) {}
+      consent_file_(kConsentFile),
+      policy_provider_(NULL) {}
 
 // We take buffer and buffer_size as parameters in order to simplify testing
 // of various alignments of the |device_name| with |buffer_size|.
@@ -130,13 +132,21 @@
 }
 
 bool MetricsLibrary::AreMetricsEnabled() {
-  static struct stat stat_buffer;
   time_t this_check_time = time(NULL);
+  if (!policy_provider_.get())
+    policy_provider_.reset(new policy::PolicyProvider());
+  else
+    policy_provider_->Reload();
+
+  // We initialize with the default value which is false and will be preserved
+  // if the policy is not set.
+  bool enabled = false;
+  if (policy_provider_->device_policy_is_loaded())
+    policy_provider_->GetDevicePolicy().GetMetricsEnabled(&enabled);
 
   if (this_check_time != cached_enabled_time_) {
     cached_enabled_time_ = this_check_time;
-    if (stat(consent_file_, &stat_buffer) >= 0 &&
-        !IsGuestMode())
+    if (enabled && !IsGuestMode())
       cached_enabled_ = true;
     else
       cached_enabled_ = false;
@@ -283,3 +293,7 @@
   // Send the message.
   return SendMessageToChrome(message_length, message);
 }
+
+void MetricsLibrary::SetPolicyProvider(policy::PolicyProvider* provider) {
+  policy_provider_.reset(provider);
+}