chromium/ios/chrome/browser/crash_report/model/crash_loop_detection_util.h

// Copyright 2013 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_CRASH_REPORT_MODEL_CRASH_LOOP_DETECTION_UTIL_H_
#define IOS_CHROME_BROWSER_CRASH_REPORT_MODEL_CRASH_LOOP_DETECTION_UTIL_H_

namespace crash_util {

// Returns the number of consecutive failed startups ('instant' crashes) prior
// to this one. This method always returns the number of prior failures even
// after calls to increment or reset the value.
int GetFailedStartupAttemptCount();

// Increases the failed startup count. This should be called immediately after
// startup, so that if there is a crash, it is recorded.
// If `flush_immediately` is true, the value will be persisted immediately. If
// `flush_immediately` is false, this should be followed by a call to
// [[NSUserDefaults standardUserDefaults] synchronize]. This is optional to
// allow coallescing of the potentially expensive call during startup.
void IncrementFailedStartupAttemptCount(bool flush_immediately);

// Resets the failed startup count. This should be called once there is some
// indication the user isn't in a crash loop (e.g., some amount of time has
// elapsed, or some deliberate user action has been taken).
void ResetFailedStartupAttemptCount();

// Resets the hidden state of failed startup attempt count for testing.
void ResetFailedStartupAttemptCountForTests();

}  // namespace crash_util

#endif  // IOS_CHROME_BROWSER_CRASH_REPORT_MODEL_CRASH_LOOP_DETECTION_UTIL_H_