#ifndef CHROMECAST_BROWSER_METRICS_CAST_STABILITY_METRICS_PROVIDER_H_
#define CHROMECAST_BROWSER_METRICS_CAST_STABILITY_METRICS_PROVIDER_H_
#include "base/process/kill.h"
#include "base/scoped_multi_source_observation.h"
#include "components/metrics/metrics_provider.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_process_host_creation_observer.h"
#include "content/public/browser/render_process_host_observer.h"
class PrefService;
namespace content {
class RenderProcessHost;
}
namespace metrics {
class MetricsService;
}
namespace chromecast {
namespace metrics {
class CastStabilityMetricsProvider
: public ::metrics::MetricsProvider,
public content::RenderProcessHostObserver,
public content::RenderProcessHostCreationObserver {
public:
CastStabilityMetricsProvider(::metrics::MetricsService* metrics_service,
PrefService* pref_service);
CastStabilityMetricsProvider(const CastStabilityMetricsProvider&) = delete;
CastStabilityMetricsProvider& operator=(const CastStabilityMetricsProvider&) =
delete;
~CastStabilityMetricsProvider() override;
void OnRecordingEnabled() override;
void OnRecordingDisabled() override;
void LogExternalCrash(const std::string& crash_type);
void OnRenderProcessHostCreated(content::RenderProcessHost* host) override;
void RenderProcessExited(
content::RenderProcessHost* host,
const content::ChildProcessTerminationInfo& info) override;
void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
private:
void LogRendererCrash(content::RenderProcessHost* host,
base::TerminationStatus status,
int exit_code);
void IncrementPrefValue(const char* path);
base::ScopedMultiSourceObservation<content::RenderProcessHost,
content::RenderProcessHostObserver>
scoped_observations_{this};
::metrics::MetricsService* metrics_service_;
PrefService* const pref_service_;
bool logging_enabled_ = false;
};
}
}
#endif