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

import("//chrome/common/features.gni")

source_set("termination_notification") {
  sources = [
    "termination_notification.cc",
    "termination_notification.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  public_deps = [ "//base" ]

  deps = [ "//content/public/browser" ]
}

source_set("lifetime") {
  public = [
    "application_lifetime.h",
    "browser_shutdown.h",
  ]

  public_deps = [ "//base" ]

  if (is_android) {
    public += [ "application_lifetime_android.h" ]
  }

  if (is_chromeos) {
    public += [ "application_lifetime_chromeos.h" ]
  }

  if (!is_android) {
    public += [
      "application_lifetime_desktop.h",
      "browser_close_manager.h",
      "restartability_monitor.h",
      "smart_restart_manager.h",
      "smart_restart_metrics_observer.h",
      "smart_restart_policy.h",
    ]
    public_deps += [
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/upgrade_detector",
    ]
  }

  if (is_win || is_mac || is_linux) {
    public += [ "scheduled_restart_manager.h" ]
    public_deps += [
      "//chrome/browser/upgrade_detector",
      "//ui/base/idle",
    ]
  }

  if (!is_android && !is_chromeos) {
    public += [ "switch_utils.h" ]
  }
}

source_set("impl") {
  sources = [
    "application_lifetime.cc",
    "browser_shutdown.cc",
  ]

  public_deps = [
    ":lifetime",
    "//chrome/browser:browser_public_dependencies",
  ]

  deps = [
    ":termination_notification",
    "//build/config/compiler:compiler_buildflags",
    "//chrome/browser:browser_process",
    "//chrome/browser:browser_process_platform_part",
    "//chrome/browser:flags",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/profiles:profile_util",
    "//chrome/common:buildflags",
    "//components/crash/core/common:crash_key",
    "//components/language/core/browser",
    "//components/language/core/common",
    "//components/metrics",
    "//components/prefs",
    "//components/tracing:tracing_config",
    "//content/public/browser",
    "//content/public/common",
    "//printing/buildflags",
    "//rlz/buildflags",
  ]

  if (is_android) {
    sources += [ "application_lifetime_android.cc" ]
    deps += [ "//chrome/browser/lifetime/android:jni_headers" ]
  }

  if (is_chromeos) {
    sources += [ "application_lifetime_chromeos.cc" ]
    deps += [
      "//ash/constants",
      "//chrome/browser/ash/boot_times_recorder",
      "//chromeos/ash/components/browser_context_helper",
      "//chromeos/ash/components/dbus",
      "//chromeos/ash/components/dbus/session_manager",
      "//chromeos/ash/components/dbus/update_engine",
      "//chromeos/ash/components/login/session",
      "//chromeos/ash/components/settings",
      "//chromeos/dbus/power",
      "//components/user_manager",
    ]
  }

  if (is_mac) {
    sources += [ "application_lifetime_mac.mm" ]
    deps += [
      "//chrome/browser:app_controller_mac",
      "//chrome/browser:chrome_browser_application_mac",
      "//chrome/browser:shutdown_watchdog_mac",
      "//ui/views",
    ]
  }

  if (use_aura) {
    sources += [ "application_lifetime_aura.cc" ]
    deps += [
      "//ui/aura",
      "//ui/views",
    ]
    if (is_chromeos) {
      deps += [ "//ash" ]
    }
  }

  if (is_win) {
    deps += [
      "//chrome/browser/win",
      "//components/app_launch_prefetch",
    ]
  }

  if (!is_android) {
    sources += [
      "application_lifetime_desktop.cc",
      "browser_close_manager.cc",
      "restartability_monitor.cc",
      "smart_restart_manager.cc",
      "smart_restart_metrics_observer.cc",
      "smart_restart_policy.cc",
    ]
    deps += [
      "//chrome/browser:global_features",
      "//chrome/browser/background/glic",
      "//chrome/browser/download",
      "//chrome/browser/first_run",
      "//chrome/browser/glic",
      "//chrome/browser/metrics",
      "//chrome/browser/metrics/desktop_session_duration",
      "//chrome/browser/notifications",
      "//chrome/browser/profiles:profile_manager",
      "//chrome/browser/sessions",
      "//chrome/browser/ui:browser_init_state",
      "//chrome/browser/ui:chrome_pages",
      "//chrome/browser/ui/lens",
      "//chrome/browser/ui/omnibox/omnibox_everywhere",
      "//chrome/browser/ui/profiles",
      "//chrome/browser/ui/startup",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/web_applications",
      "//components/keep_alive_registry",
      "//components/performance_manager",
      "//components/site_engagement/content",
      "//ui/base/idle",
    ]
  }

  if (is_win || is_mac || is_linux) {
    sources += [ "scheduled_restart_manager.cc" ]
    deps += [
      "//chrome/common:constants",
      "//components/prefs",
    ]
  }

  if (!is_android && !is_chromeos) {
    sources += [ "switch_utils.cc" ]
  }

  if (enable_background_mode) {
    deps += [ "//chrome/browser/background/extensions" ]
  }
}

if (!is_android) {
  source_set("unit_tests") {
    testonly = true

    sources = [
      "restartability_monitor_unittest.cc",
      "smart_restart_metrics_observer_unittest.cc",
      "smart_restart_policy_unittest.cc",
    ]
    deps = [
      ":lifetime",
      "//base",
      "//base/test:test_support",
      "//chrome/browser/upgrade_detector",
      "//chrome/test:test_support",
      "//content/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]

    if (is_chromeos) {
      sources += [ "application_lifetime_chromeos_unittest.cc" ]
      deps += [
        ":lifetime",
        "//base",
        "//chrome/test:test_support",
        "//content/test:test_support",
        "//testing/gtest",
      ]
    }

    if (!is_android && !is_chromeos) {
      sources += [ "switch_utils_unittest.cc" ]
    }

    if (is_win || is_mac || is_linux) {
      sources += [ "scheduled_restart_manager_unittest.cc" ]
    }
  }

  source_set("browser_tests") {
    testonly = true

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "browser_close_manager_browsertest.cc",
      "browser_shutdown_browsertest.cc",
      "smart_restart_manager_browsertest.cc",
      "smart_restart_metrics_observer_browsertest.cc",
    ]

    deps = [
      ":lifetime",
      ":termination_notification",
      "//base",
      "//chrome/browser:chrome_browser_main",
      "//chrome/browser/download:test_support",
      "//chrome/browser/policy:test_support",
      "//chrome/browser/prefs:util",
      "//chrome/browser/ui",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/user_education",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/javascript_dialogs",
      "//content/test:test_support",
      "//testing/gtest",
      "//ui/events:test_support",
    ]

    if (enable_background_mode) {
      deps += [ "//chrome/browser/background/extensions" ]
    }

    if (is_win) {
      deps += [ "//components/app_launch_prefetch" ]
    }

    if (!is_chromeos) {
      sources += [ "application_lifetime_browsertest.cc" ]
    }

    if (is_win || is_mac || is_linux) {
      sources += [ "scheduled_restart_manager_browsertest.cc" ]
    }

    if (is_chromeos) {
      sources += [ "application_lifetime_chromeos_browsertest.cc" ]
    }
  }
}
