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

import("//components/spellcheck/spellcheck_build_features.gni")

assert(enable_spellcheck)

source_set("spellchecker") {
  public = [
    "spell_check_host_chrome_impl.h",
    "spell_check_initialization_host_impl.h",
    "spellcheck_custom_dictionary.h",
    "spellcheck_factory.h",
    "spellcheck_hunspell_dictionary.h",
    "spellcheck_service.h",
  ]

  if (use_browser_spellchecker && enable_spelling_service) {
    public += [ "spelling_request.h" ]
  }

  if (is_win || is_linux || is_chromeos) {
    public += [
      "spellcheck_language_blocklist_policy_handler.h",
      "spellcheck_language_policy_handler.h",
    ]
  }

  if (has_spellcheck_panel) {
    public += [ "spell_check_panel_host_impl.h" ]
  }

  public_deps = [
    "//base",
    "//chrome/browser/profiles",
    "//components/keyed_service/core",
    "//components/prefs",
    "//components/spellcheck/browser",
    "//components/spellcheck/common",
    "//components/sync/model",
    "//content/public/browser",
    "//mojo/public/cpp/bindings",
    "//services/network/public/cpp",
  ]

  if (is_win || is_linux || is_chromeos) {
    public_deps += [ "//components/policy/core/browser" ]
  }
}

source_set("impl") {
  sources = [
    "spell_check_host_chrome_impl.cc",
    "spell_check_initialization_host_impl.cc",
    "spellcheck_custom_dictionary.cc",
    "spellcheck_factory.cc",
    "spellcheck_hunspell_dictionary.cc",
    "spellcheck_service.cc",
  ]

  if (use_browser_spellchecker && enable_spelling_service) {
    sources += [ "spelling_request.cc" ]
  }

  if (is_win || is_linux || is_chromeos) {
    sources += [
      "spellcheck_language_blocklist_policy_handler.cc",
      "spellcheck_language_policy_handler.cc",
    ]
  }

  if (has_spellcheck_panel) {
    sources += [ "spell_check_panel_host_impl.cc" ]
  }

  public_deps = [ ":spellchecker" ]

  deps = [
    "//chrome/app/resources:locale_settings",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/search:search",
    "//chrome/common",
    "//components/language/core/browser",
    "//components/policy:generated",
    "//components/pref_registry",
    "//components/strings:components_strings",
    "//components/sync/base",
    "//components/sync/protocol",
    "//components/user_prefs",
    "//crypto",
    "//net",
    "//services/network/public/mojom",
    "//third_party/abseil-cpp:absl",
    "//ui/base",
    "//url",
  ]

  if (!is_android) {
    deps += [ "//third_party/hunspell" ]
  }

  if (is_chromeos) {
    deps += [ "//ash/constants" ]
  }
}

source_set("unit_tests") {
  testonly = true

  # spellcheck_service_unittest.cc has file-scope statics of
  # non-trivial-destructor types, which -Wexit-time-destructors rejects.
  configs += [ "//build/config/compiler:no_exit_time_destructors" ]

  sources = [ "spellcheck_custom_dictionary_unittest.cc" ]

  deps = [
    ":spellchecker",
    "//base",
    "//base/test:test_support",
    "//chrome/test:test_support",
    "//components/spellcheck/browser",
    "//components/spellcheck/common",
    "//content/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_chromeos || is_linux || is_win) {
    sources += [ "spellcheck_language_policy_handlers_unittest.cc" ]
    deps += [ "//components/policy/core/browser" ]
  }

  if (!is_mac) {
    sources += [ "spellcheck_service_unittest.cc" ]
    deps += [ "//components/language/core/browser" ]
  }

  if (is_mac) {
    sources += [ "spell_check_host_chrome_impl_mac_unittest.cc" ]
  }

  if (use_renderer_spellchecker) {
    sources += [ "spell_check_host_chrome_impl_unittest.cc" ]
  }

  if (enable_spelling_service) {
    sources += [ "spelling_service_client_unittest.cc" ]
  }

  if (use_browser_spellchecker && enable_spelling_service) {
    sources += [ "spelling_request_unittest.cc" ]
  }
}

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

    # spellcheck_service_browsertest.cc has file-scope statics of
    # non-trivial-destructor types, which -Wexit-time-destructors rejects.
    configs += [ "//build/config/compiler:no_exit_time_destructors" ]

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = []

    deps = [
      ":spellchecker",
      "//base",
      "//chrome/browser/ui",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/spellcheck/browser",
      "//components/spellcheck/common",
      "//content/test:test_support",
      "//testing/gtest",
    ]

    if (!is_mac) {
      sources += [ "spellcheck_service_browsertest.cc" ]
    }

    if (is_mac) {
      sources += [ "spell_check_host_chrome_impl_mac_browsertest.cc" ]
    }

    if (is_win) {
      sources += [ "spell_check_host_chrome_impl_win_browsertest.cc" ]
    }
  }
}

if (is_mac) {
  source_set("interactive_ui_tests") {
    testonly = true

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [ "spellcheck_mac_view_interactive_uitest.mm" ]

    deps = [
      "//base",
      "//chrome/browser/ui",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/spellcheck:buildflags",
      "//content/test:test_support",
      "//testing/gtest",
    ]
  }
}
