// 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 "chrome/test/base/fake_profile_manager.h"

#include "base/files/file_util.h"
#include "base/task/single_thread_task_runner.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/test/base/testing_profile.h"

FakeProfileManager::FakeProfileManager(const base::FilePath& user_data_dir,
                                       bool defer_async_loading)
    : ProfileManagerWithoutInit(user_data_dir) {
  if (!defer_async_loading) {
    UnblockAsyncLoading();
  }
}

FakeProfileManager::~FakeProfileManager() = default;

std::unique_ptr<TestingProfile> FakeProfileManager::BuildTestingProfile(
    const base::FilePath& path,
    Delegate* delegate,
    Profile::CreateMode create_mode) {
  return std::make_unique<TestingProfile>(path, delegate, create_mode);
}

std::unique_ptr<Profile> FakeProfileManager::CreateProfileHelper(
    const base::FilePath& path) {
  if (!base::PathExists(path) && !base::CreateDirectory(path))
    return nullptr;
  return BuildTestingProfile(path, this, Profile::CreateMode::kSynchronous);
}

std::unique_ptr<Profile> FakeProfileManager::CreateProfileAsyncHelper(
    const base::FilePath& path) {
  // SingleThreadTaskRunner::GetCurrentDefault() is TestingProfile's "async"
  // IOTaskRunner (ref. TestingProfile::GetIOTaskRunner()).
  base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
      FROM_HERE,
      base::BindOnce(base::IgnoreResult(&base::CreateDirectory), path));

  return BuildTestingProfile(path, this, Profile::CreateMode::kAsynchronous);
}
