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.
5 #include "components/metrics/clean_exit_beacon.h"
7 #include <Foundation/Foundation.h>
9 #include "base/feature_list.h"
14 // Used to enable the workaround for a local state not persisting sometimes.
15 NSString* const kLastSessionExitedCleanly = @"LastSessionExitedCleanly";
16 // Because variations are not initialized this early in startup, pair a user
17 // defaults value with the variations config.
18 BASE_FEATURE(kUseUserDefaultsForExitedCleanlyBeacon,
19 "UseUserDefaultsForExitedCleanlyBeaconEnabler",
20 base::FEATURE_DISABLED_BY_DEFAULT);
21 NSString* const kUserDefaultsFeatureFlagForExitedCleanlyBeacon =
22 @"UserDefaultsFeatureFlagForExitedCleanlyBeacon";
27 void CleanExitBeacon::SetUserDefaultsBeacon(bool exited_cleanly) {
28 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
29 [defaults setBool:exited_cleanly forKey:kLastSessionExitedCleanly];
30 [defaults synchronize];
34 bool CleanExitBeacon::ShouldUseUserDefaultsBeacon() {
35 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
36 return [defaults boolForKey:kUserDefaultsFeatureFlagForExitedCleanlyBeacon];
40 void CleanExitBeacon::SyncUseUserDefaultsBeacon() {
41 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
42 [defaults setBool:base::FeatureList::IsEnabled(
43 kUseUserDefaultsForExitedCleanlyBeacon)
44 forKey:kUserDefaultsFeatureFlagForExitedCleanlyBeacon];
45 [defaults synchronize];
49 bool CleanExitBeacon::HasUserDefaultsBeacon() {
50 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
51 return [defaults objectForKey:kLastSessionExitedCleanly] != nil;
55 bool CleanExitBeacon::GetUserDefaultsBeacon() {
56 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
57 return [defaults boolForKey:kLastSessionExitedCleanly];
61 void CleanExitBeacon::ResetUserDefaultsBeacon() {
62 NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults;
63 [defaults removeObjectForKey:kLastSessionExitedCleanly];
64 [defaults synchronize];
67 } // namespace metrics