blob: 9fd61552cc225b2f1c384472bc0f29b4e3f2b8e3 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_BREADCRUMBS_CORE_BREADCRUMBS_STATUS_H_
#define COMPONENTS_BREADCRUMBS_CORE_BREADCRUMBS_STATUS_H_
#include "components/version_info/channel.h"
class PrefService;
class PrefRegistrySimple;
namespace breadcrumbs {
// A Local State pref that stores whether breadcrumbs is enabled, allowing it to
// stay enabled on the same clients between sessions. This is useful for crashes
// that happen at startup, in case the previous session's log provides insight.
extern const char kEnabledPref[];
// A Local State pref that stores when breadcrumbs was enabled or disabled.
// Breadcrumbs' enabled state is re-randomized after `kEnabledDuration`.
extern const char kEnabledTimePref[];
// Returns whether breadcrumbs logging is enabled. Note that if metrics consent
// was not provided, this will return true but breadcrumbs will not actually be
// uploaded or persisted to disk. If `prefs` is null, breadcrumbs will be
// disabled for the entire session, e.g., for Chrome for Android's minimal mode.
bool IsEnabled(PrefService* prefs);
// Enables or disables breadcrumbs by chance. Returns true if it was enabled,
// and false if it was disabled. Breadcrumbs is enabled at the following rates:
// * 99% on Canary
// * 80% on Dev
// * 80% on Beta
// * 5% on Stable
bool MaybeEnableBasedOnChannel(PrefService* prefs,
version_info::Channel channel);
// Registers local-state preferences used by breadcrumbs.
void RegisterPrefs(PrefRegistrySimple* registry);
// Forces `breadcrumbs::IsEnabled()` to return true while it exists. Returns
// breadcrumbs to its default state once destroyed.
class ScopedEnableBreadcrumbsForTesting {
public:
ScopedEnableBreadcrumbsForTesting();
~ScopedEnableBreadcrumbsForTesting();
};
} // namespace breadcrumbs
#endif // COMPONENTS_BREADCRUMBS_CORE_BREADCRUMBS_STATUS_H_