blob: 88a8239f56d66801c4e8bc63493f25c750e7d55c [file] [log] [blame]
Justin Cohen76c71472021-07-27 02:05:571// Copyright 2021 The Chromium Authors. All rights reserved.
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.
18const base::Feature kUseUserDefaultsForExitedCleanlyBeacon{
19 "UseUserDefaultsForExitedCleanlyBeaconEnabler",
20 base::FEATURE_DISABLED_BY_DEFAULT};
21NSString* const kUserDefaultsFeatureFlagForExitedCleanlyBeacon =
22 @"UserDefaultsFeatureFlagForExitedCleanlyBeacon";
23
24}
25
26// static
Caitlin Fischer17547f482021-11-09 23:13:2427void CleanExitBeacon::SetUserDefaultsBeacon(bool exited_cleanly) {
Justin Cohen76c71472021-07-27 02:05:5728 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() {
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
Caitlin Fischer17547f482021-11-09 23:13:2448// 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
Justin Cohen76c71472021-07-27 02:05:5767} // namespace metrics