chromium/ios/chrome/browser/metrics/model/demographics_client.h

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef IOS_CHROME_BROWSER_METRICS_MODEL_DEMOGRAPHICS_CLIENT_H_
#define IOS_CHROME_BROWSER_METRICS_MODEL_DEMOGRAPHICS_CLIENT_H_

#include "base/memory/weak_ptr.h"
#include "components/metrics/demographics/demographic_metrics_provider.h"
#include "ios/chrome/browser/shared/model/profile/profile_ios.h"

namespace metrics {

// Client used by DemographicMetricsProvider to retrieve Profile information.
class DemographicsClient
    : public metrics::DemographicMetricsProvider::ProfileClient {
 public:
  DemographicsClient();

  DemographicsClient(const DemographicsClient&) = delete;
  DemographicsClient& operator=(const DemographicsClient&) = delete;

  ~DemographicsClient() override;

  // DemographicMetricsProvider::ProfileClient:
  int GetNumberOfProfilesOnDisk() override;
  syncer::SyncService* GetSyncService() override;
  PrefService* GetLocalState() override;
  PrefService* GetProfilePrefs() override;
  base::Time GetNetworkTime() const override;

 private:
  // Returns the browser state for which metrics will be gathered. Once a
  // suitable browser state has been found, future calls will continue to return
  // the same value so that reported metrics are consistent (unless that browser
  // state becomes invalid).
  ChromeBrowserState* GetCachedBrowserState();

  // Weak pointer to the cached ChromeBrowserState.
  base::WeakPtr<ChromeBrowserState> chrome_browser_state_;
};

}  // namespace metrics

#endif  // IOS_CHROME_BROWSER_METRICS_MODEL_DEMOGRAPHICS_CLIENT_H_