|  | // 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_ |