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

import("//extensions/buildflags/buildflags.gni")

assert(is_win || is_mac || is_linux || is_chromeos)

source_set("themes") {
  public = [
    "browser_theme_pack.h",
    "browser_theme_provider_delegate.h",
    "custom_theme_supplier.h",
    "theme_helper.h",
    "theme_local_data_batch_uploader.h",
    "theme_properties.h",
    "theme_service.h",
    "theme_service_factory.h",
    "theme_service_observer.h",
    "theme_service_utils.h",
    "theme_syncable_service.h",
  ]
  sources = [
    "browser_theme_pack.cc",
    "custom_theme_supplier.cc",
    "theme_helper.cc",
    "theme_local_data_batch_uploader.cc",
    "theme_properties.cc",
    "theme_service.cc",
    "theme_service_factory.cc",
    "theme_service_utils.cc",
    "theme_syncable_service.cc",
  ]
  deps = [
    "//chrome/app/theme:theme_resources",
    "//chrome/browser:browser_process",
    "//chrome/browser/infobars",
    "//chrome/browser/search/background",
    "//chrome/browser/ui/browser_window",
    "//chrome/browser/ui/color:color_headers",
    "//chrome/browser/ui/frame",
    "//chrome/browser/ui/tabs:features",
    "//chrome/browser/ui/tabs:tab_group",
    "//chrome/browser/ui/webui/cr_components/theme_color_picker",
    "//chrome/common",
    "//components/crx_file",
    "//components/infobars/content",
    "//components/keyed_service/content",
    "//components/pref_registry",
    "//components/resources:components_scaled_resources",
    "//components/sync/protocol",
    "//components/sync_preferences",
    "//components/tab_groups",
    "//components/tabs:public",
    "//components/themes",
    "//components/themes:prefs",
    "//components/themes/cross_device",
    "//components/version_info",
    "//content/public/browser",
    "//third_party/abseil-cpp:absl",
    "//ui/color",
    "//ui/color/dynamic_color",
    "//ui/gfx",
    "//ui/native_theme",
  ]
  public_deps = [
    "//base",
    "//chrome/browser/profiles:profile",
    "//chrome/common/themes:autogenerated_theme_util",
    "//components/keyed_service/core",
    "//components/prefs",
    "//components/sync/model",
    "//skia",
    "//ui/base",
    "//ui/base/mojom",
    "//ui/color:color_provider_key",
    "//ui/gfx:color_utils",
  ]
  if (enable_extensions) {
    public_deps += [
      "//extensions/buildflags",
      "//extensions/common",
    ]
    deps += [ "//extensions/browser" ]
  }
  if (is_win) {
    sources += [
      "theme_helper_win.cc",
      "theme_helper_win.h",
    ]
  }
  if (is_linux) {
    public += [ "theme_service_aura_linux.h" ]
    sources += [ "theme_service_aura_linux.cc" ]
    deps += [
      "//ui/linux:linux_ui",
      "//ui/linux:linux_ui_factory",
      "//ui/ozone",
    ]
  }
  if (!is_android) {
    deps += [ "//chrome/browser/new_tab_page/chrome_colors" ]
  }
}

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

    sources = [
      "test/theme_service_changed_waiter.cc",
      "test/theme_service_changed_waiter.h",
    ]

    public_deps = [
      ":themes",
      "//base",
    ]
  }

  source_set("test_support") {
    testonly = true

    sources = [
      "theme_service_test_utils.cc",
      "theme_service_test_utils.h",
    ]

    deps = [
      ":themes",
      "//base",
      "//base/test:test_support",
      "//chrome/browser/ui/color:color_headers",
      "//components/sync",
      "//testing/gtest",
      "//ui/gfx",
    ]
  }

  source_set("unit_tests") {
    testonly = true

    sources = [
      "browser_theme_pack_unittest.cc",
      "theme_local_data_batch_uploader_unittest.cc",
      "theme_properties_unittest.cc",
      "theme_service_unittest.cc",
      "theme_syncable_service_unittest.cc",
    ]

    deps = [
      ":test_support",
      ":themes",
      "//base",
      "//base/test:test_support",
      "//chrome/browser/extensions",
      "//chrome/browser/prefs",
      "//chrome/browser/themes/cross_device:unit_tests",
      "//chrome/browser/ui/color:color_headers",
      "//chrome/browser/ui/color:mixers",
      "//chrome/browser/ui/frame",
      "//chrome/test:test_support",
      "//components/color",
      "//components/pref_registry",
      "//components/sync:test_support",
      "//components/sync_device_info:test_support",
      "//components/sync_preferences:test_support",
      "//components/themes:prefs",
      "//components/themes/cross_device",
      "//content/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//ui/color:test_support",
      "//ui/color/dynamic_color",
      "//ui/gfx",
    ]

    if (is_linux) {
      deps += [
        "//ui/linux:linux_ui_factory",
        "//ui/ozone",
      ]
    }

    if (is_chromeos) {
      deps += [ "//chrome/browser/ash/login/users" ]
    }
  }

  source_set("browser_tests") {
    testonly = true

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [ "theme_service_browsertest.cc" ]

    deps = [
      ":themes",
      "//base",
      "//chrome/browser/ui",
      "//chrome/browser/ui/color:color_headers",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//content/test:test_support",
      "//testing/gtest",
    ]
  }
}
