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

#ifndef COMPONENTS_METRICS_STABILITY_METRICS_PROVIDER_H_
#define COMPONENTS_METRICS_STABILITY_METRICS_PROVIDER_H_

#include "base/time/time.h"
#include "build/build_config.h"
#include "components/metrics/metrics_provider.h"

class PrefService;
class PrefRegistrySimple;

namespace metrics {

class SystemProfileProto;

// Stores and loads system information to prefs for stability logs.
class StabilityMetricsProvider : public MetricsProvider {
 public:
  StabilityMetricsProvider(PrefService* local_state);
  ~StabilityMetricsProvider() override;

  static void RegisterPrefs(PrefRegistrySimple* registry);

  void RecordBreakpadRegistration(bool success);
  void RecordBreakpadHasDebugger(bool has_debugger);

  void CheckLastSessionEndCompleted();
  void MarkSessionEndCompleted(bool end_completed);

  void LogCrash(base::Time last_live_timestamp);
  void LogStabilityLogDeferred();
  void LogStabilityDataDiscarded();
  void LogLaunch();
  void LogStabilityVersionMismatch();

 private:
#if defined(OS_WIN)
  // This function is virtual for testing. The |last_live_timestamp| is a
  // time point where the previous browser was known to be alive, and is used
  // to determine whether the system session embedding that timestamp terminated
  // uncleanly.
  virtual bool IsUncleanSystemSession(base::Time last_live_timestamp);
  void MaybeLogSystemCrash(base::Time last_live_timestamp);
#endif
  // Increments an Integer pref value specified by |path|.
  void IncrementPrefValue(const char* path);

  // Gets pref value specified by |path| and resets it to 0 after retrieving.
  int GetPrefValue(const char* path, int* value);

  // MetricsProvider:
  void Init() override;
  void ClearSavedStabilityMetrics() override;
  void ProvideStabilityMetrics(
      SystemProfileProto* system_profile_proto) override;

  PrefService* local_state_;

  DISALLOW_COPY_AND_ASSIGN(StabilityMetricsProvider);
};

}  // namespace metrics

#endif  // COMPONENTS_METRICS_STABILITY_METRICS_PROVIDER_H_
