Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / chromecast / metrics / cast_metrics_service_client.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 "chromecast/metrics/cast_metrics_service_client.h"
6
7 #include "base/command_line.h"
8 #include "base/i18n/rtl.h"
9 #include "chromecast/common/chromecast_config.h"
10 #include "chromecast/common/chromecast_switches.h"
11 #include "chromecast/metrics/platform_metrics_providers.h"
12 #include "components/metrics/client_info.h"
13 #include "components/metrics/gpu/gpu_metrics_provider.h"
14 #include "components/metrics/metrics_provider.h"
15 #include "components/metrics/metrics_service.h"
16 #include "components/metrics/metrics_state_manager.h"
17 #include "components/metrics/net/net_metrics_log_uploader.h"
18 #include "components/metrics/net/network_metrics_provider.h"
19 #include "components/metrics/profiler/profiler_metrics_provider.h"
20
21 namespace chromecast {
22 namespace metrics {
23
24 namespace {
25
26 void StoreClientInfo(const ::metrics::ClientInfo& client_info) {
27 }
28
29 scoped_ptr<::metrics::ClientInfo> LoadClientInfo() {
30   return scoped_ptr<::metrics::ClientInfo>();
31 }
32
33 }  // namespace
34
35 // static
36 CastMetricsServiceClient* CastMetricsServiceClient::Create(
37     base::TaskRunner* io_task_runner,
38     PrefService* pref_service,
39     net::URLRequestContextGetter* request_context) {
40   return new CastMetricsServiceClient(io_task_runner,
41                                       pref_service,
42                                       request_context);
43 }
44
45 void CastMetricsServiceClient::SetMetricsClientId(
46     const std::string& client_id) {
47   LOG(INFO) << "Metrics client ID set: " << client_id;
48   PlatformSetClientID(client_id);
49 }
50
51 bool CastMetricsServiceClient::IsOffTheRecordSessionActive() {
52   // Chromecast behaves as "off the record" w/r/t recording browsing state,
53   // but this value is about not disabling metrics because of it.
54   return false;
55 }
56
57 std::string CastMetricsServiceClient::GetApplicationLocale() {
58   return base::i18n::GetConfiguredLocale();
59 }
60
61 bool CastMetricsServiceClient::GetBrand(std::string* brand_code) {
62   return false;
63 }
64
65 ::metrics::SystemProfileProto::Channel CastMetricsServiceClient::GetChannel() {
66   return GetPlatformReleaseChannel();
67 }
68
69 std::string CastMetricsServiceClient::GetVersionString() {
70   return GetPlatformVersionString();
71 }
72
73 void CastMetricsServiceClient::OnLogUploadComplete() {
74   PlatformOnLogUploadComplete();
75 }
76
77 void CastMetricsServiceClient::StartGatheringMetrics(
78     const base::Closure& done_callback) {
79   done_callback.Run();
80 }
81
82 void CastMetricsServiceClient::CollectFinalMetrics(
83     const base::Closure& done_callback) {
84   done_callback.Run();
85 }
86
87 scoped_ptr< ::metrics::MetricsLogUploader>
88 CastMetricsServiceClient::CreateUploader(
89     const std::string& server_url,
90     const std::string& mime_type,
91     const base::Callback<void(int)>& on_upload_complete) {
92   std::string uma_server_url(server_url);
93   base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
94   if (command_line->HasSwitch(switches::kOverrideMetricsUploadUrl)) {
95     uma_server_url.assign(
96         command_line->GetSwitchValueASCII(switches::kOverrideMetricsUploadUrl));
97   }
98   DCHECK(!uma_server_url.empty());
99   return scoped_ptr< ::metrics::MetricsLogUploader>(
100       new ::metrics::NetMetricsLogUploader(
101           request_context_,
102           uma_server_url,
103           mime_type,
104           on_upload_complete));
105 }
106
107 void CastMetricsServiceClient::EnableMetricsService(bool enabled) {
108   if (enabled) {
109     metrics_service_->Start();
110   } else {
111     metrics_service_->Stop();
112   }
113 }
114
115 CastMetricsServiceClient::CastMetricsServiceClient(
116     base::TaskRunner* io_task_runner,
117     PrefService* pref_service,
118     net::URLRequestContextGetter* request_context)
119     : metrics_state_manager_(::metrics::MetricsStateManager::Create(
120           pref_service,
121           base::Bind(&CastMetricsServiceClient::IsReportingEnabled,
122                      base::Unretained(this)),
123                      base::Bind(&StoreClientInfo),
124                      base::Bind(&LoadClientInfo))),
125       metrics_service_(new ::metrics::MetricsService(
126           metrics_state_manager_.get(),
127           this,
128           pref_service)),
129       request_context_(request_context) {
130   // Always create a client id as it may also be used by crash reporting,
131   // (indirectly) included in feedback, and can be queried during setup.
132   // For UMA and crash reporting, associated opt-in settings will control
133   // sending reports as directed by the user.
134   // For Setup (which also communicates the user's opt-in preferences),
135   // report the client-id and expect that setup will handle the current opt-in
136   // value.
137   metrics_state_manager_->ForceClientIdCreation();
138
139   metrics_service_->RegisterMetricsProvider(
140       scoped_ptr< ::metrics::MetricsProvider>(
141           new ::metrics::GPUMetricsProvider));
142   metrics_service_->RegisterMetricsProvider(
143       scoped_ptr< ::metrics::MetricsProvider>(
144           new NetworkMetricsProvider(io_task_runner)));
145   metrics_service_->RegisterMetricsProvider(
146       scoped_ptr< ::metrics::MetricsProvider>(
147           new ::metrics::ProfilerMetricsProvider));
148   RegisterPlatformMetricsProviders(metrics_service_.get());
149
150   metrics_service_->InitializeMetricsRecordingState();
151
152   if (IsReportingEnabled())
153     metrics_service_->Start();
154 }
155
156 CastMetricsServiceClient::~CastMetricsServiceClient() {
157 }
158
159 bool CastMetricsServiceClient::IsReportingEnabled() {
160   return PlatformIsReportingEnabled();
161 }
162
163 }  // namespace metrics
164 }  // namespace chromecast