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#ifndef CHROMECAST_METRICS_CAST_METRICS_SERVICE_CLIENT_H_
6#define CHROMECAST_METRICS_CAST_METRICS_SERVICE_CLIENT_H_
7
8#include <string>
9
10#include "base/macros.h"
11#include "base/memory/ref_counted.h"
12#include "base/memory/scoped_ptr.h"
13#include "components/metrics/metrics_service_client.h"
14
15class PrefService;
16
17namespace base {
18class TaskRunner;
19}
20
21namespace metrics {
22class MetricsService;
23class MetricsStateManager;
24}  // namespace metrics
25
26namespace net {
27class URLRequestContextGetter;
28}  // namespace net
29
30namespace chromecast {
31namespace metrics {
32
33class CastMetricsServiceClient : public ::metrics::MetricsServiceClient {
34 public:
35  virtual ~CastMetricsServiceClient();
36
37  static CastMetricsServiceClient* Create(
38      base::TaskRunner* io_task_runner,
39      PrefService* pref_service,
40      net::URLRequestContextGetter* request_context);
41
42  // metrics::MetricsServiceClient implementation:
43  virtual void SetMetricsClientId(const std::string& client_id) OVERRIDE;
44  virtual bool IsOffTheRecordSessionActive() OVERRIDE;
45  virtual std::string GetApplicationLocale() OVERRIDE;
46  virtual bool GetBrand(std::string* brand_code) OVERRIDE;
47  virtual ::metrics::SystemProfileProto::Channel GetChannel() OVERRIDE;
48  virtual std::string GetVersionString() OVERRIDE;
49  virtual void OnLogUploadComplete() OVERRIDE;
50  virtual void StartGatheringMetrics(
51      const base::Closure& done_callback) OVERRIDE;
52  virtual void CollectFinalMetrics(const base::Closure& done_callback) OVERRIDE;
53  virtual scoped_ptr< ::metrics::MetricsLogUploader> CreateUploader(
54      const std::string& server_url,
55      const std::string& mime_type,
56      const base::Callback<void(int)>& on_upload_complete) OVERRIDE;
57
58  // Starts/stops the metrics service.
59  void EnableMetricsService(bool enabled);
60
61 private:
62  CastMetricsServiceClient(
63      base::TaskRunner* io_task_runner,
64      PrefService* pref_service,
65      net::URLRequestContextGetter* request_context);
66
67  // Returns whether or not metrics reporting is enabled.
68  bool IsReportingEnabled();
69
70  scoped_ptr< ::metrics::MetricsStateManager> metrics_state_manager_;
71  scoped_ptr< ::metrics::MetricsService> metrics_service_;
72  net::URLRequestContextGetter* request_context_;
73
74  DISALLOW_COPY_AND_ASSIGN(CastMetricsServiceClient);
75};
76
77}  // namespace metrics
78}  // namespace chromecast
79
80#endif  // CHROMECAST_METRICS_CAST_METRICS_SERVICE_CLIENT_H_
81