# 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("//build/config/ozone.gni")
import("//chrome/common/features.gni")
import("//extensions/buildflags/buildflags.gni")

source_set("sessions") {
  public = [
    "chrome_serialized_navigation_driver.h",
    "chrome_tab_restore_service_client.h",
    "session_common_utils.h",
    "session_restore.h",
    "session_restore_observer.h",
    "session_service_base_observer.h",
    "session_tab_helper_factory.h",
    "tab_restore_service_factory.h",
  ]

  public_deps = [
    "//base",
    "//chrome/browser:defaults",
    "//chrome/browser/profiles:profile",
    "//components/sessions",
    "//ui/base:types",
  ]

  if (!is_android) {
    public += [ "restore_on_startup_policy_handler.h" ]
    public_deps += [ "//components/policy/core/browser" ]
  }

  if (enable_session_service) {
    public += [
      "app_session_service.h",
      "app_session_service_factory.h",
      "exit_type_service.h",
      "exit_type_service_factory.h",
      "session_data_deleter.h",
      "session_data_service.h",
      "session_data_service_factory.h",
      "session_restore_delegate.h",
      "session_restore_stats_collector.h",
      "session_service.h",
      "session_service_base.h",
      "session_service_factory.h",
      "session_service_log.h",
      "session_service_lookup.h",
      "session_service_utils.h",
    ]
    public_deps += [
      "//chrome/browser/ui/browser_window",
      "//components/keyed_service/core",
      "//components/paint_preview/buildflags",
      "//components/split_tabs",
      "//components/tab_groups",
      "//content/public/browser",
      "//ui/base",
      "//ui/base/mojom:ui_base_types",
    ]
  }
}

source_set("impl") {
  sources = [
    "chrome_serialized_navigation_driver.cc",
    "chrome_tab_restore_service_client.cc",
    "session_common_utils.cc",
    "session_tab_helper_factory.cc",
    "tab_restore_service_factory.cc",
  ]

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

  deps = [
    "//chrome/browser/glic",
    "//chrome/browser/lifetime",
  ]

  if (enable_extensions) {
    deps += [
      "//chrome/browser/apps/app_service",
      "//chrome/browser/apps/platform_apps",
    ]
  }

  if (is_android) {
    sources += [ "session_restore_android.cc" ]
    deps += [
      "//chrome/browser/android:tabs_public",
      "//chrome/browser/ui/browser_window:create_browser_window",
    ]
  }

  if (!is_android) {
    sources += [ "restore_on_startup_policy_handler.cc" ]
    deps += [ "//chrome/browser/prefs:util" ]
  }

  if (enable_session_service) {
    sources += [
      "app_session_service.cc",
      "app_session_service_factory.cc",
      "exit_type_service.cc",
      "exit_type_service_factory.cc",
      "session_data_deleter.cc",
      "session_data_service.cc",
      "session_data_service_factory.cc",
      "session_restore.cc",
      "session_restore_delegate.cc",
      "session_restore_stats_collector.cc",
      "session_service.cc",
      "session_service_base.cc",
      "session_service_factory.cc",
      "session_service_log.cc",
      "session_service_lookup.cc",
      "session_service_utils.cc",
    ]

    deps += [
      "//chrome/browser:after_startup_task_utils",
      "//chrome/browser/content_settings:content_settings_factory",
      "//chrome/browser/devtools",
      "//chrome/browser/extensions",
      "//chrome/browser/media/webrtc",
      "//chrome/browser/notifications",
      "//chrome/browser/performance_manager",
      "//chrome/browser/profiles/keep_alive",
      "//chrome/browser/search",
      "//chrome/browser/tab_group_sync:factories",
      "//chrome/browser/ui:browser_init_state",
      "//chrome/browser/ui:session_crashed_bubble",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/browser_window:create_browser_window",
      "//chrome/browser/ui/startup",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/tabs/saved_tab_groups",
      "//chrome/browser/ui/waap:window_metrics_manager",
      "//chrome/browser/ui/web_applications",
      "//chrome/browser/ui/webui/tab_strip_internals",
      "//chrome/browser/ui/webui/tab_strip_internals:impl",
      "//chrome/browser/ui/webui/whats_new",
      "//chrome/browser/ui/window_metadata",
      "//chrome/browser/web_applications",
      "//components/keep_alive_registry",
      "//components/media_device_salt",
      "//components/pref_registry",
      "//components/tab_groups",
    ]

    if (is_mac) {
      deps += [ "//chrome/browser:app_controller_mac" ]
    }

    if (use_ozone) {
      deps += [ "//ui/ozone" ]
    }

    if (is_chromeos) {
      deps += [
        "//ash",
        "//chrome/browser/ash/boot_times_recorder",
        "//chrome/browser/ash/crostini",
        "//chrome/browser/ash/profiles",
        "//chromeos/components/kiosk",
      ]
    }
  }
}

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

    sources = [
      "app_session_service_test_helper.cc",
      "app_session_service_test_helper.h",
      "session_restore_test_helper.cc",
      "session_restore_test_helper.h",
      "session_restore_test_utils.cc",
      "session_restore_test_utils.h",
      "session_service_base_test_helper.cc",
      "session_service_base_test_helper.h",
      "session_service_test_helper.cc",
      "session_service_test_helper.h",
      "tab_restore_service_load_waiter.cc",
      "tab_restore_service_load_waiter.h",
    ]

    public_deps = [
      ":sessions",
      "//base",
      "//components/sessions",
    ]

    deps = [
      "//chrome/browser/profiles:profile",
      "//components/sessions:test_support",
      "//content/public/browser",
      "//content/test:test_support",
      "//testing/gtest",
    ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "chrome_serialized_navigation_driver_unittest.cc",
    "session_common_utils_unittest.cc",
  ]

  deps = [
    ":sessions",
    "//base",
    "//chrome/browser/prefs:util",
    "//chrome/test:test_support",
    "//components/sessions",
    "//components/sessions:test_support",
    "//content/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (enable_session_service) {
    sources += [
      "app_session_service_unittest.cc",
      "session_data_service_unittest.cc",
      "session_restore_delegate_unittest.cc",
      "session_restore_observer_unittest.cc",
      "session_restore_stats_collector_unittest.cc",
      "session_service_log_unittest.cc",
      "session_service_unittest.cc",
    ]
    deps += [
      ":impl",
      ":test_support",
      "//chrome/browser:browser_process",
      "//chrome/browser/performance_manager",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/ui",
      "//components/favicon/content",
      "//components/favicon/core/test:test_support",
      "//components/performance_manager/test_support:test_support_common",
    ]

    if (is_chromeos) {
      deps += [ "//chromeos/components/kiosk:test_support" ]
    }
  }

  if (!is_android) {
    sources += [
      "restore_on_startup_policy_handler_unittest.cc",
      "tab_restore_service_unittest.cc",
    ]
    deps += [
      "//components/policy/core/browser",
      "//components/policy/core/common:common_constants",
    ]
  }
}

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

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "better_session_restore_browsertest.cc",
      "encrypted_session_storage_browsertest.cc",
      "exit_type_service_browsertest.cc",
      "session_id_generator_browsertest.cc",
      "session_restore_browsertest.cc",
      "session_restore_observer_browsertest.cc",
      "session_service_browsertest.cc",
      "session_service_log_browsertest.cc",
      "tab_restore_browsertest.cc",
    ]

    deps = [
      ":impl",
      ":sessions",
      ":test_support",
      "//base",
      "//chrome/browser/collaboration/messaging",
      "//chrome/browser/prefs:util",
      "//chrome/browser/tab_group_sync:factories",
      "//chrome/browser/ui",
      "//chrome/browser/ui:browser_init_state",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/browser_web_contents_delegate",
      "//chrome/browser/ui/startup",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/tabs/saved_tab_groups",
      "//chrome/browser/ui/window_metadata",
      "//chrome/browser/web_applications:web_applications_test_support",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/infobars/content",
      "//components/javascript_dialogs",
      "//components/saved_tab_groups/internal:model",
      "//components/sessions",
      "//components/sessions:test_support",
      "//content/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//ui/base:ozone_buildflags",
    ]

    if (use_ozone) {
      deps += [ "//ui/ozone" ]
    }

    # Some of these tests have pre-existing size_t-vs-int comparisons that only
    # compiled in //chrome/test because it transitively depends on
    # //third_party/fuzztest, whose public config propagates -Wno-sign-compare.
    # Depend on it here to inherit that suppression. Remove once
    # crbug.com/527094632 is fixed.
    deps += [ "//third_party/fuzztest" ]

    if (is_chromeos) {
      sources += [
        "session_restore_browsertest_chromeos.cc",
        "tab_restore_service_browsertest.cc",
      ]
      deps += [
        "//chrome/browser/ash/crostini",
        "//chrome/browser/ash/system_web_apps/test_support",
        "//chrome/browser/ash/system_web_apps/test_support:test_support_ui",
        "//chrome/browser/ui/ash/system_web_apps",
        "//chromeos/components/kiosk:test_support",
        "//chromeos/ui/wm",
      ]
    }

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

  if (!is_chromeos_device) {
    source_set("interactive_ui_tests") {
      testonly = true

      defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

      sources = [
        "multi_profile_session_restore_interactive_uitest.cc",
        "session_restore_interactive_uitest.cc",
      ]

      deps = [
        ":sessions",
        ":test_support",
        "//base",
        "//chrome/browser/prefs:util",
        "//chrome/browser/ui",
        "//chrome/test:test_support",
        "//chrome/test:test_support_ui",
        "//content/test:test_support",
        "//testing/gtest",
      ]
    }
  }
}
