blob: c6eab673c5947978c28fa6a9773b9a292bb85c98 [file] [log] [blame]
Avi Drissman8ba1bad2022-09-13 19:22:361// Copyright 2021 The Chromium Authors
Justin Cohen76c71472021-07-27 02:05:572// 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.
Daniel Cheng9615b342022-09-26 18:23:0218BASE_FEATURE(kUseUserDefaultsForExitedCleanlyBeacon,
19 "UseUserDefaultsForExitedCleanlyBeaconEnabler",
20 base::FEATURE_DISABLED_BY_DEFAULT);
Justin Cohen76c71472021-07-27 02:05:5721NSString* const kUserDefaultsFeatureFlagForExitedCleanlyBeacon =
22 @"UserDefaultsFeatureFlagForExitedCleanlyBeacon";
23
24}
25
26// static
Caitlin Fischer17547f482021-11-09 23:13:2427void CleanExitBeacon::SetUserDefaultsBeacon(bool exited_cleanly) {
Avi Drissman5b6ae9f2023-05-16 16:54:0128 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
Caitlin Fischer17547f482021-11-09 23:13:2429 [defaults setBool:exited_cleanly forKey:kLastSessionExitedCleanly];
Justin Cohen76c71472021-07-27 02:05:5730 [defaults synchronize];
31}
32
33// static
34bool CleanExitBeacon::ShouldUseUserDefaultsBeacon() {
Avi Drissman5b6ae9f2023-05-16 16:54:0135 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
Justin Cohen76c71472021-07-27 02:05:5736 return [defaults boolForKey:kUserDefaultsFeatureFlagForExitedCleanlyBeacon];
37}
38
39// static
40void CleanExitBeacon::SyncUseUserDefaultsBeacon() {
Avi Drissman5b6ae9f2023-05-16 16:54:0141 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
Justin Cohen76c71472021-07-27 02:05:5742 [defaults setBool:base::FeatureList::IsEnabled(
43 kUseUserDefaultsForExitedCleanlyBeacon)
44 forKey:kUserDefaultsFeatureFlagForExitedCleanlyBeacon];
45 [defaults synchronize];
46}
47
Caitlin Fischer17547f482021-11-09 23:13:2448// static
49bool CleanExitBeacon::HasUserDefaultsBeacon() {
Avi Drissman5b6ae9f2023-05-16 16:54:0150 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
Caitlin Fischer17547f482021-11-09 23:13:2451 return [defaults objectForKey:kLastSessionExitedCleanly] != nil;
52}
53
54// static
55bool CleanExitBeacon::GetUserDefaultsBeacon() {
Avi Drissman5b6ae9f2023-05-16 16:54:0156 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
Caitlin Fischer17547f482021-11-09 23:13:2457 return [defaults boolForKey:kLastSessionExitedCleanly];
58}
59
60// static
61void CleanExitBeacon::ResetUserDefaultsBeacon() {
Avi Drissman5b6ae9f2023-05-16 16:54:0162 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
Caitlin Fischer17547f482021-11-09 23:13:2463 [defaults removeObjectForKey:kLastSessionExitedCleanly];
64 [defaults synchronize];
65}
66
Justin Cohen76c71472021-07-27 02:05:5767} // namespace metrics