blob: 88a8239f56d66801c4e8bc63493f25c750e7d55c [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// 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.
const 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