74d37107e154e3edde01268538c08bbb0d8fffde
[platform/framework/web/crosswalk.git] / src / chrome / browser / metrics / metrics_services_manager.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/metrics/metrics_services_manager.h"
6
7 #include <string>
8
9 #include "base/command_line.h"
10 #include "base/logging.h"
11 #include "base/prefs/pref_service.h"
12 #include "chrome/browser/metrics/chrome_metrics_service_client.h"
13 #include "chrome/browser/metrics/variations/variations_service.h"
14 #include "chrome/common/chrome_switches.h"
15 #include "chrome/common/pref_names.h"
16 #include "chrome/installer/util/google_update_settings.h"
17 #include "components/metrics/metrics_service.h"
18 #include "components/metrics/metrics_state_manager.h"
19 #include "components/rappor/rappor_service.h"
20
21 #if defined(OS_CHROMEOS)
22 #include "chrome/browser/chromeos/settings/cros_settings.h"
23 #endif
24
25 MetricsServicesManager::MetricsServicesManager(PrefService* local_state)
26     : local_state_(local_state) {
27   DCHECK(local_state);
28 }
29
30 MetricsServicesManager::~MetricsServicesManager() {
31 }
32
33 MetricsService* MetricsServicesManager::GetMetricsService() {
34   DCHECK(thread_checker_.CalledOnValidThread());
35   return GetChromeMetricsServiceClient()->metrics_service();
36 }
37
38 rappor::RapporService* MetricsServicesManager::GetRapporService() {
39   DCHECK(thread_checker_.CalledOnValidThread());
40   if (!rappor_service_)
41     rappor_service_.reset(new rappor::RapporService);
42   return rappor_service_.get();
43 }
44
45 chrome_variations::VariationsService*
46 MetricsServicesManager::GetVariationsService() {
47   DCHECK(thread_checker_.CalledOnValidThread());
48   if (!variations_service_) {
49     variations_service_ =
50         chrome_variations::VariationsService::Create(local_state_,
51                                                      GetMetricsStateManager());
52   }
53   return variations_service_.get();
54 }
55
56 void MetricsServicesManager::OnPluginLoadingError(
57     const base::FilePath& plugin_path) {
58   GetChromeMetricsServiceClient()->LogPluginLoadingError(plugin_path);
59 }
60
61 ChromeMetricsServiceClient*
62 MetricsServicesManager::GetChromeMetricsServiceClient() {
63   DCHECK(thread_checker_.CalledOnValidThread());
64   if (!metrics_service_client_) {
65     metrics_service_client_ = ChromeMetricsServiceClient::Create(
66         GetMetricsStateManager(), local_state_);
67   }
68   return metrics_service_client_.get();
69 }
70
71 metrics::MetricsStateManager* MetricsServicesManager::GetMetricsStateManager() {
72   DCHECK(thread_checker_.CalledOnValidThread());
73   if (!metrics_state_manager_) {
74     metrics_state_manager_ = metrics::MetricsStateManager::Create(
75         local_state_,
76         base::Bind(&MetricsServicesManager::IsMetricsReportingEnabled,
77                    base::Unretained(this)),
78         base::Bind(&GoogleUpdateSettings::StoreMetricsClientInfo),
79         base::Bind(&GoogleUpdateSettings::LoadMetricsClientInfo));
80   }
81   return metrics_state_manager_.get();
82 }
83
84 // TODO(asvitkine): This function does not report the correct value on Android,
85 // see http://crbug.com/362192.
86 bool MetricsServicesManager::IsMetricsReportingEnabled() const {
87   // If the user permits metrics reporting with the checkbox in the
88   // prefs, we turn on recording.  We disable metrics completely for
89   // non-official builds, or when field trials are forced.
90   if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kForceFieldTrials))
91     return false;
92
93   bool enabled = false;
94 #if defined(GOOGLE_CHROME_BUILD)
95 #if defined(OS_CHROMEOS)
96   chromeos::CrosSettings::Get()->GetBoolean(chromeos::kStatsReportingPref,
97                                             &enabled);
98 #else
99   enabled = local_state_->GetBoolean(prefs::kMetricsReportingEnabled);
100 #endif  // #if defined(OS_CHROMEOS)
101 #endif  // defined(GOOGLE_CHROME_BUILD)
102   return enabled;
103 }