chromium/ios/chrome/browser/shared/model/utils/first_run_util.mm

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/shared/model/utils/first_run_util.h"

#import <optional>

#import "ios/chrome/browser/first_run/model/first_run.h"
#import "ios/chrome/browser/shared/public/features/system_flags.h"

BOOL IsFirstRun() {
  return FirstRun::IsChromeFirstRun() ||
         experimental_flags::AlwaysDisplayFirstRun();
}

BOOL IsFirstRunRecent(const base::TimeDelta& time_delta) {
  // Use the first_run age to determine the user is new on this device.
  if (IsFirstRun()) {
    return YES;
  }

  std::optional<int> recency = experimental_flags::GetFirstRunRecency();
  if (recency.has_value()) {
    return base::Days(recency.value()) < time_delta;
  }

  std::optional<base::File::Info> info = FirstRun::GetSentinelInfo();
  if (!info.has_value()) {
    return NO;
  }
  base::Time first_run_time = info.value().creation_time;
  BOOL is_first_run_recent = base::Time::Now() - first_run_time < time_delta;
  return is_first_run_recent;
}