cast_metrics_service_client.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. #ifndef CHROMECAST_METRICS_CAST_METRICS_SERVICE_CLIENT_H_
  5. #define CHROMECAST_METRICS_CAST_METRICS_SERVICE_CLIENT_H_
  6. #include <stdint.h>
  7. #include <memory>
  8. #include <string>
  9. #include "base/memory/ref_counted.h"
  10. #include "build/build_config.h"
  11. #include "chromecast/public/cast_sys_info.h"
  12. #include "components/metrics/enabled_state_provider.h"
  13. #include "components/metrics/metrics_log_store.h"
  14. #include "components/metrics/metrics_log_uploader.h"
  15. #include "components/metrics/metrics_service_client.h"
  16. #include "components/variations/synthetic_trial_registry.h"
  17. class PrefRegistrySimple;
  18. class PrefService;
  19. namespace base {
  20. class SingleThreadTaskRunner;
  21. }
  22. namespace metrics {
  23. struct ClientInfo;
  24. class MetricsService;
  25. class MetricsStateManager;
  26. } // namespace metrics
  27. namespace network {
  28. class SharedURLLoaderFactory;
  29. }
  30. namespace chromecast {
  31. namespace metrics {
  32. class CastMetricsServiceDelegate {
  33. public:
  34. // Invoked when the metrics client ID changes.
  35. virtual void SetMetricsClientId(const std::string& client_id) = 0;
  36. // Allows registration of extra metrics providers.
  37. virtual void RegisterMetricsProviders(::metrics::MetricsService* service) = 0;
  38. // Adds Cast embedder-specific storage limits to |limits| object.
  39. virtual void ApplyMetricsStorageLimits(
  40. ::metrics::MetricsLogStore::StorageLimits* limits) {}
  41. protected:
  42. virtual ~CastMetricsServiceDelegate() = default;
  43. };
  44. class CastMetricsServiceClient : public ::metrics::MetricsServiceClient,
  45. public ::metrics::EnabledStateProvider {
  46. public:
  47. CastMetricsServiceClient(
  48. CastMetricsServiceDelegate* delegate,
  49. PrefService* pref_service,
  50. scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory);
  51. ~CastMetricsServiceClient() override;
  52. CastMetricsServiceClient(const CastMetricsServiceClient&) = delete;
  53. CastMetricsServiceClient& operator=(const CastMetricsServiceClient&) = delete;
  54. static void RegisterPrefs(PrefRegistrySimple* registry);
  55. // Use |client_id| when starting MetricsService instead of generating a new
  56. // client ID. If used, SetForceClientId must be called before Initialize.
  57. void SetForceClientId(const std::string& client_id);
  58. void OnApplicationNotIdle();
  59. // Processes all events from shared file. This should be used to consume all
  60. // events in the file before shutdown. This function is safe to call from any
  61. // thread.
  62. void ProcessExternalEvents(base::OnceClosure cb);
  63. void InitializeMetricsService();
  64. void StartMetricsService();
  65. void Finalize();
  66. // ::metrics::MetricsServiceClient:
  67. variations::SyntheticTrialRegistry* GetSyntheticTrialRegistry() override;
  68. ::metrics::MetricsService* GetMetricsService() override;
  69. void SetMetricsClientId(const std::string& client_id) override;
  70. int32_t GetProduct() override;
  71. std::string GetApplicationLocale() override;
  72. const network_time::NetworkTimeTracker* GetNetworkTimeTracker() override;
  73. bool GetBrand(std::string* brand_code) override;
  74. ::metrics::SystemProfileProto::Channel GetChannel() override;
  75. bool IsExtendedStableChannel() override;
  76. std::string GetVersionString() override;
  77. void CollectFinalMetricsForLog(base::OnceClosure done_callback) override;
  78. GURL GetMetricsServerUrl() override;
  79. std::unique_ptr<::metrics::MetricsLogUploader> CreateUploader(
  80. const GURL& server_url,
  81. const GURL& insecure_server_url,
  82. base::StringPiece mime_type,
  83. ::metrics::MetricsLogUploader::MetricServiceType service_type,
  84. const ::metrics::MetricsLogUploader::UploadCallback& on_upload_complete)
  85. override;
  86. base::TimeDelta GetStandardUploadInterval() override;
  87. ::metrics::MetricsLogStore::StorageLimits GetStorageLimits() const override;
  88. // ::metrics::EnabledStateProvider:
  89. bool IsConsentGiven() const override;
  90. // Starts/stops the metrics service.
  91. void EnableMetricsService(bool enabled);
  92. std::string client_id() const { return client_id_; }
  93. PrefService* pref_service() const { return pref_service_; }
  94. void SetCallbacks(
  95. base::RepeatingCallback<void(base::OnceClosure)> collect_final_metrics_cb,
  96. base::RepeatingCallback<void(base::OnceClosure)> external_events_cb);
  97. private:
  98. std::unique_ptr<::metrics::ClientInfo> LoadClientInfo();
  99. void StoreClientInfo(const ::metrics::ClientInfo& client_info);
  100. CastMetricsServiceDelegate* const delegate_;
  101. PrefService* const pref_service_;
  102. std::string client_id_;
  103. std::string force_client_id_;
  104. bool client_info_loaded_;
  105. const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
  106. std::unique_ptr<::metrics::MetricsStateManager> metrics_state_manager_;
  107. std::unique_ptr<variations::SyntheticTrialRegistry> synthetic_trial_registry_;
  108. std::unique_ptr<::metrics::MetricsService> metrics_service_;
  109. std::unique_ptr<::metrics::EnabledStateProvider> enabled_state_provider_;
  110. scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_;
  111. base::RepeatingCallback<void(base::OnceClosure)> collect_final_metrics_cb_;
  112. base::RepeatingCallback<void(base::OnceClosure)> external_events_cb_;
  113. const std::unique_ptr<CastSysInfo> cast_sys_info_;
  114. };
  115. } // namespace metrics
  116. } // namespace chromecast
  117. #endif // CHROMECAST_METRICS_CAST_METRICS_SERVICE_CLIENT_H_