Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / metrics / google_update_metrics_provider_win.h
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 CHROME_BROWSER_METRICS_GOOGLE_UPDATE_METRICS_PROVIDER_WIN_H_
6 #define CHROME_BROWSER_METRICS_GOOGLE_UPDATE_METRICS_PROVIDER_WIN_H_
7
8 #include "base/bind.h"
9 #include "base/macros.h"
10 #include "base/memory/weak_ptr.h"
11 #include "chrome/installer/util/google_update_settings.h"
12 #include "components/metrics/metrics_provider.h"
13
14 // GoogleUpdateMetricsProviderWin is responsible for filling out the
15 // GoogleUpdate of the UMA SystemProfileProto.
16 class GoogleUpdateMetricsProviderWin : public metrics::MetricsProvider {
17  public:
18   GoogleUpdateMetricsProviderWin();
19   virtual ~GoogleUpdateMetricsProviderWin();
20
21   // Fetches Google Update data asynchronously and calls |done_callback| when
22   // done.
23   void GetGoogleUpdateData(const base::Closure& done_callback);
24
25   // metrics::MetricsProvider
26   virtual void ProvideSystemProfileMetrics(
27       metrics::SystemProfileProto* system_profile_proto) OVERRIDE;
28
29  private:
30   // This is a small helper struct containing the Google Update metrics state.
31   struct GoogleUpdateMetrics {
32     GoogleUpdateMetrics();
33     ~GoogleUpdateMetrics();
34
35     // Defines whether this is a user-level or system-level install.
36     bool is_system_install;
37
38     // The time at which Google Update last started an automatic update check.
39     base::Time last_started_automatic_update_check;
40
41     // The time at which Google Update last successfully received update
42     // information from Google servers.
43     base::Time last_checked;
44
45     // Details about Google Update's attempts to update itself.
46     GoogleUpdateSettings::ProductData google_update_data;
47
48     // Details about Google Update's attempts to update this product.
49     GoogleUpdateSettings::ProductData product_data;
50   };
51
52   // Retrieve the Google Update data on the blocking pool.
53   static GoogleUpdateMetrics GetGoogleUpdateDataOnBlockingPool();
54
55   // Receives |google_update_metrics| from a blocking pool thread and runs
56   // |done_callback|.
57   void ReceiveGoogleUpdateData(
58       const base::Closure& done_callback,
59       const GoogleUpdateMetrics& google_update_metrics);
60
61   // Google Update metrics that were fetched via GetGoogleUpdateData(). Will be
62   // filled in only after the successful completion of GetGoogleUpdateData().
63   GoogleUpdateMetrics google_update_metrics_;
64
65   base::WeakPtrFactory<GoogleUpdateMetricsProviderWin> weak_ptr_factory_;
66
67   DISALLOW_COPY_AND_ASSIGN(GoogleUpdateMetricsProviderWin);
68 };
69
70 #endif  // CHROME_BROWSER_METRICS_GOOGLE_UPDATE_METRICS_PROVIDER_WIN_H_