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