xref: /aosp_15_r20/external/cronet/components/metrics/clean_exit_beacon_ios.mm (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1// Copyright 2021 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/metrics/clean_exit_beacon.h"
6
7#include <Foundation/Foundation.h>
8
9#include "base/feature_list.h"
10
11namespace metrics {
12namespace {
13
14// Used to enable the workaround for a local state not persisting sometimes.
15NSString* const kLastSessionExitedCleanly = @"LastSessionExitedCleanly";
16// Because variations are not initialized this early in startup, pair a user
17// defaults value with the variations config.
18BASE_FEATURE(kUseUserDefaultsForExitedCleanlyBeacon,
19             "UseUserDefaultsForExitedCleanlyBeaconEnabler",
20             base::FEATURE_DISABLED_BY_DEFAULT);
21NSString* const kUserDefaultsFeatureFlagForExitedCleanlyBeacon =
22    @"UserDefaultsFeatureFlagForExitedCleanlyBeacon";
23
24}
25
26// static
27void CleanExitBeacon::SetUserDefaultsBeacon(bool exited_cleanly) {
28  NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
29  [defaults setBool:exited_cleanly forKey:kLastSessionExitedCleanly];
30  [defaults synchronize];
31}
32
33// static
34bool CleanExitBeacon::ShouldUseUserDefaultsBeacon() {
35  NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
36  return [defaults boolForKey:kUserDefaultsFeatureFlagForExitedCleanlyBeacon];
37}
38
39// static
40void CleanExitBeacon::SyncUseUserDefaultsBeacon() {
41  NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
42  [defaults setBool:base::FeatureList::IsEnabled(
43                        kUseUserDefaultsForExitedCleanlyBeacon)
44             forKey:kUserDefaultsFeatureFlagForExitedCleanlyBeacon];
45  [defaults synchronize];
46}
47
48// static
49bool CleanExitBeacon::HasUserDefaultsBeacon() {
50  NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
51  return [defaults objectForKey:kLastSessionExitedCleanly] != nil;
52}
53
54// static
55bool CleanExitBeacon::GetUserDefaultsBeacon() {
56  NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
57  return [defaults boolForKey:kLastSessionExitedCleanly];
58}
59
60// static
61void CleanExitBeacon::ResetUserDefaultsBeacon() {
62  NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
63  [defaults removeObjectForKey:kLastSessionExitedCleanly];
64  [defaults synchronize];
65}
66
67}  // namespace metrics
68