// 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 #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