# 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("//build/config/ui.gni")

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

source_set("feedback_enum") {
  sources = [ "public/feedback_source.h" ]
}

source_set("feedback") {
  sources = [
    "feedback_uploader_chrome.h",
    "feedback_uploader_factory_chrome.h",
  ]
  public_deps = [
    "//build/config/chromebox_for_meetings:buildflags",
    "//components/feedback",
    "//components/feedback/content:factory",
    "//components/signin/public/identity_manager",
  ]
  deps = [
    "//chrome/browser/signin",
    "//google_apis",
  ]
  if (is_android) {
    sources += [
      "android/family_info_feedback_source.cc",
      "android/family_info_feedback_source.h",
    ]
    public_deps += [
      "//components/supervised_user/core/browser",
      "//components/supervised_user/core/browser:fetcher",
      "//components/supervised_user/core/browser/proto",
    ]
    deps += [
      "//base",
      "//chrome/browser/feedback/android:jni_headers",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/supervised_user",
      "//content/public/browser",
      "//services/network/public/cpp",
    ]
  } else {
    # The non-android feed code has circular dependencies and the easiest way to
    # decouple is to separate between the interface and the implementation. Many
    # parts of Chrome want to call a method "ShowFeedback" to show the feedback
    # page (the interface). The implementation of the feedback uploader requires
    # fetching data from many different components (the implementation).
    sources += [
      "feedback_dialog_utils.h",
      "show_feedback_page.h",
      "system_logs/chrome_system_logs_fetcher.h",
    ]
    public_deps += [
      "//base",
      "//chrome/browser/device_identity",
      "//chrome/browser/feedback:feedback_enum",
      "//components/sessions:session_id",
    ]
  }
}

source_set("feedback_impl") {
  sources = [
    "feedback_uploader_chrome.cc",
    "feedback_uploader_factory_chrome.cc",
    "report_unsafe_site_dialog.h",
  ]
  deps = [
    ":feedback",
    "//chrome/browser:browser_features",
    "//chrome/browser:browser_process",
    "//chrome/browser:memory_details",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/signin",
    "//chrome/common:constants",
    "//components/safe_browsing/core/common:safe_browsing_prefs",
    "//content/public/browser",
  ]
  public_deps = [ "//components/feedback" ]
  if (is_android) {
    sources += [ "report_unsafe_site_dialog_android.cc" ]
  } else {
    sources += [
      "feedback_dialog_utils.cc",
      "report_unsafe_site_dialog_views.cc",
      "report_unsafe_site_dialog_views.h",
      "show_feedback_page.cc",
      "system_logs/about_system_logs_fetcher.cc",
      "system_logs/about_system_logs_fetcher.h",
      "system_logs/chrome_system_logs_fetcher.cc",
      "system_logs/log_sources/chrome_internal_log_source.cc",
      "system_logs/log_sources/chrome_internal_log_source.h",
      "system_logs/log_sources/chrome_root_store_log_source.cc",
      "system_logs/log_sources/chrome_root_store_log_source.h",
      "system_logs/log_sources/crash_ids_source.cc",
      "system_logs/log_sources/crash_ids_source.h",
      "system_logs/log_sources/device_event_log_source.cc",
      "system_logs/log_sources/device_event_log_source.h",
      "system_logs/log_sources/family_info_log_source.cc",
      "system_logs/log_sources/family_info_log_source.h",
      "system_logs/log_sources/memory_details_log_source.cc",
      "system_logs/log_sources/memory_details_log_source.h",
      "system_logs/log_sources/performance_log_source.cc",
      "system_logs/log_sources/performance_log_source.h",
      "system_logs/log_sources/related_website_sets_source.cc",
      "system_logs/log_sources/related_website_sets_source.h",
    ]
    public_deps += [
      "//chrome/browser/feedback:feedback_enum",
      "//components/feedback/content:factory",
      "//components/supervised_user/core/browser:fetcher",
      "//components/supervised_user/core/browser/proto",
      "//components/upload_list",
    ]
    deps += [
      "//base",
      "//chrome/browser/crash_upload_list",
      "//chrome/browser/device_identity",
      "//chrome/browser/devtools",
      "//chrome/browser/extensions",
      "//chrome/browser/feedback/report_unsafe_site",
      "//chrome/browser/first_party_sets",
      "//chrome/browser/google",
      "//chrome/browser/metrics",
      "//chrome/browser/performance_manager/public/user_tuning",
      "//chrome/browser/profiles:profile_manager",
      "//chrome/browser/sync",
      "//chrome/browser/sync:factories",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/views/web_dialogs",
      "//chrome/browser/ui/webui/feedback",
      "//chrome/browser/ui/webui/feedback/report_unsafe_site:mojo_bindings",
      "//chrome/browser/ui/webui/top_chrome",
      "//chrome/browser/updater",
      "//chrome/common",
      "//components/device_event_log",
      "//components/feedback",
      "//components/performance_manager",
      "//components/safe_browsing/content/browser:client_side_detection",
      "//components/supervised_user/core/browser",
      "//components/tabs:public",
      "//extensions/browser",
      "//extensions/browser/api/feedback_private",
      "//extensions/browser/api/power",
      "//net",
      "//services/cert_verifier:lib",
    ]
  }
  if (is_chromeos) {
    deps += [
      "//ash",
      "//ash/constants",
      "//ash/webui/os_feedback_ui:url_constants",
      "//chrome/browser/ash/arc",
      "//chrome/browser/ash/arc:arc_util",
      "//chrome/browser/ash/arc/policy",
      "//chrome/browser/ash/login",
      "//chrome/browser/ash/login/demo_mode",
      "//chrome/browser/ash/policy/enrollment",
      "//chrome/browser/ash/system_logs",
      "//chrome/browser/ash/system_web_apps",
      "//chrome/browser/ui/ash/multi_user",
      "//chrome/browser/ui/ash/system_web_apps",
      "//chromeos/ash/components/dbus/debug_daemon",
      "//chromeos/ash/components/dbus/spaced",
      "//chromeos/ash/components/login/auth",
      "//chromeos/ash/components/settings",
      "//chromeos/ash/components/system",
      "//chromeos/ash/components/system_web_apps:system_web_app_type",
      "//chromeos/components/kiosk",
      "//chromeos/version",
    ]
  }
  if (is_linux) {
    sources += [
      "system_logs/log_sources/ozone_platform_state_dump_source.cc",
      "system_logs/log_sources/ozone_platform_state_dump_source.h",
    ]
    deps += [ "//ui/ozone" ]
  }
}

source_set("unit_tests") {
  testonly = true

  deps = [
    ":feedback_impl",
    "//base/test:test_support",
    "//chrome/browser",
    "//chrome/browser:browser_features",
    "//chrome/browser/performance_manager:test_support",
    "//chrome/common:constants",
    "//chrome/test:test_support",
    "//components/safe_browsing/core/common",
    "//content/test:test_support",
    "//testing/gtest",
  ]
  if (is_android) {
    sources = [
      "android/family_info_feedback_source_unittest.cc",
      "report_unsafe_site_dialog_android_unittest.cc",
    ]
    deps += [
      "//chrome/browser/feedback/android",
      "//chrome/browser/flags:flags_android",
      "//chrome/browser/signin",
      "//chrome/browser/signin:test_support",
      "//chrome/browser/supervised_user:test_support",
      "//chrome/test:test_support_jni_headers",
    ]
  } else {
    sources = [
      "report_unsafe_site_dialog_views_unittest.cc",
      "show_feedback_page_unittest.cc",
      "system_logs/log_sources/crash_ids_source_unittest.cc",
      "system_logs/log_sources/family_info_log_source_unittest.cc",
      "system_logs/log_sources/performance_log_source_unittest.cc",
      "system_logs/log_sources/related_website_sets_source_unittest.cc",
    ]
    deps += [
      "//components/feedback",
      "//components/performance_manager",
      "//components/supervised_user/core/browser",
      "//components/supervised_user/core/common",
      "//components/supervised_user/test_support",
      "//components/upload_list",
    ]
  }
}

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

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "report_unsafe_site_dialog_browsertest.cc",
      "system_logs/log_sources/chrome_internal_log_source_browsertest.cc",
    ]

    deps = [
      ":feedback_impl",
      "//base",
      "//chrome/browser/ui",
      "//chrome/browser/updater",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/feedback",
      "//content/test:test_support",
      "//testing/gtest",
    ]

    if (is_chromeos) {
      sources += [ "show_feedback_page_browsertest.cc" ]
      deps += [ "//chromeos/ash/components/dbus/spaced" ]
    }

    if (use_aura) {
      deps += [ "//ui/aura" ]
    }
  }

  source_set("interactive_ui_tests") {
    testonly = true

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [ "report_unsafe_site_dialog_views_interactive_uitest.cc" ]

    deps = [
      ":feedback_impl",
      "//base",
      "//chrome/browser/ui",
      "//chrome/browser/ui/toolbar",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/safe_browsing/content/browser:client_side_detection",
      "//content/test:test_support",
      "//testing/gtest",
    ]
  }
}
