| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/metrics/clean_exit_beacon.h" |
| |
| #include <Foundation/Foundation.h> |
| |
| #include "base/feature_list.h" |
| |
| namespace metrics { |
| namespace { |
| |
| // Used to enable the workaround for a local state not persisting sometimes. |
| NSString* const kLastSessionExitedCleanly = @"LastSessionExitedCleanly"; |
| // Because variations are not initialized this early in startup, pair a user |
| // defaults value with the variations config. |
| BASE_FEATURE(kUseUserDefaultsForExitedCleanlyBeacon, |
| "UseUserDefaultsForExitedCleanlyBeaconEnabler", |
| base::FEATURE_DISABLED_BY_DEFAULT); |
| NSString* const kUserDefaultsFeatureFlagForExitedCleanlyBeacon = |
| @"UserDefaultsFeatureFlagForExitedCleanlyBeacon"; |
| |
| } |
| |
| // static |
| void CleanExitBeacon::SetUserDefaultsBeacon(bool exited_cleanly) { |
| NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults; |
| [defaults setBool:exited_cleanly forKey:kLastSessionExitedCleanly]; |
| [defaults synchronize]; |
| } |
| |
| // static |
| bool CleanExitBeacon::ShouldUseUserDefaultsBeacon() { |
| NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults; |
| return [defaults boolForKey:kUserDefaultsFeatureFlagForExitedCleanlyBeacon]; |
| } |
| |
| // static |
| void CleanExitBeacon::SyncUseUserDefaultsBeacon() { |
| NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults; |
| [defaults setBool:base::FeatureList::IsEnabled( |
| kUseUserDefaultsForExitedCleanlyBeacon) |
| forKey:kUserDefaultsFeatureFlagForExitedCleanlyBeacon]; |
| [defaults synchronize]; |
| } |
| |
| // static |
| bool CleanExitBeacon::HasUserDefaultsBeacon() { |
| NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults; |
| return [defaults objectForKey:kLastSessionExitedCleanly] != nil; |
| } |
| |
| // static |
| bool CleanExitBeacon::GetUserDefaultsBeacon() { |
| NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults; |
| return [defaults boolForKey:kLastSessionExitedCleanly]; |
| } |
| |
| // static |
| void CleanExitBeacon::ResetUserDefaultsBeacon() { |
| NSUserDefaults* defaults = NSUserDefaults.standardUserDefaults; |
| [defaults removeObjectForKey:kLastSessionExitedCleanly]; |
| [defaults synchronize]; |
| } |
| |
| } // namespace metrics |