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

#include "chrome/browser/process_singleton_startup_lock.h"

#include "base/check_op.h"
#include "base/functional/bind.h"

ProcessSingletonStartupLock::ProcessSingletonStartupLock(
    const ProcessSingleton::NotificationCallback& original_callback)
    : locked_(true),
      original_callback_(original_callback) {}

ProcessSingletonStartupLock::~ProcessSingletonStartupLock() {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}

ProcessSingleton::NotificationCallback
ProcessSingletonStartupLock::AsNotificationCallback() {
  return base::BindRepeating(
      &ProcessSingletonStartupLock::NotificationCallbackImpl,
      base::Unretained(this));
}

void ProcessSingletonStartupLock::Unlock() {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  locked_ = false;

  // Replay the command lines of the messages which were received while the
  // ProcessSingleton was locked. Only replay each message once.
  std::set<DelayedStartupMessage> replayed_messages;
  for (std::vector<DelayedStartupMessage>::const_iterator it =
           saved_startup_messages_.begin();
       it != saved_startup_messages_.end(); ++it) {
    if (replayed_messages.find(*it) != replayed_messages.end())
      continue;
    original_callback_.Run(base::CommandLine(it->first), it->second);
    replayed_messages.insert(*it);
  }
  saved_startup_messages_.clear();
}

bool ProcessSingletonStartupLock::NotificationCallbackImpl(
    base::CommandLine command_line,
    const base::FilePath& current_directory) {
  if (locked_) {
    // If locked, it means we are not ready to process this message because
    // we are probably in a first run critical phase.
    saved_startup_messages_.push_back(
        std::make_pair(command_line.argv(), current_directory));
    return true;
  } else {
    return original_callback_.Run(std::move(command_line), current_directory);
  }
}
