chromium/ios/chrome/browser/app_launcher/model/app_launching_state.mm

// Copyright 2017 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/app_launcher/model/app_launching_state.h"

const double kDefaultMaxSecondsBetweenConsecutiveExternalAppLaunches = 30.0;

@implementation AppLaunchingState {
  // Timestamp of the last app launch request.
  NSDate* _lastAppLaunchTime;
}
static double _maxSecondsBetweenConsecutiveLaunches =
    kDefaultMaxSecondsBetweenConsecutiveExternalAppLaunches;
@synthesize consecutiveLaunchesCount = _consecutiveLaunchesCount;
@synthesize appLaunchingBlocked = _appLaunchingBlocked;

+ (double)maxSecondsBetweenConsecutiveLaunches {
  return _maxSecondsBetweenConsecutiveLaunches;
}

+ (void)setMaxSecondsBetweenConsecutiveLaunches:(double)seconds {
  _maxSecondsBetweenConsecutiveLaunches = seconds;
}

- (void)updateWithLaunchRequest {
  if (_appLaunchingBlocked) {
    return;
  }
  if (!_lastAppLaunchTime ||
      -_lastAppLaunchTime.timeIntervalSinceNow >
          [[self class] maxSecondsBetweenConsecutiveLaunches]) {
    _consecutiveLaunchesCount = 1;
  } else {
    _consecutiveLaunchesCount++;
  }
  _lastAppLaunchTime = [NSDate date];
}

@end