# 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 || is_android)

source_set("hid") {
  public = [
    "chrome_hid_delegate.h",
    "hid_chooser_context.h",
    "hid_chooser_context_factory.h",
    "hid_common.h",
    "hid_policy_allowed_devices.h",
    "hid_policy_allowed_devices_factory.h",
    "web_hid_histograms.h",
  ]
  public_deps = [
    "//base",
    "//chrome/browser/chooser_controller",
    "//chrome/browser/profiles:profile",
    "//components/keyed_service/core",
    "//components/permissions",
    "//components/prefs",
    "//content/public/browser",
    "//extensions/buildflags",
    "//mojo/public/cpp/bindings",
    "//services/device/public/mojom",
    "//ui/gfx",
    "//url",
  ]

  if (is_win || is_mac || is_linux || is_chromeos) {
    public += [
      "hid_connection_tracker.h",
      "hid_connection_tracker_factory.h",
      "hid_system_tray_icon.h",
    ]
    public_deps += [ "//chrome/browser/device_notifications" ]
    if (is_chromeos) {
      public += [ "hid_pinned_notification.h" ]
    } else {
      public += [ "hid_status_icon.h" ]
    }
  }

  if (enable_extensions) {
    public += [ "web_view_chooser_context.h" ]
  }
}

source_set("impl") {
  sources = [
    "chrome_hid_delegate.cc",
    "hid_chooser_context.cc",
    "hid_chooser_context_factory.cc",
    "hid_policy_allowed_devices.cc",
    "hid_policy_allowed_devices_factory.cc",
    "web_hid_histograms.cc",
  ]

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

  deps = [
    "//base",
    "//chrome/app:branded_strings",
    "//chrome/app:generated_resources",
    "//chrome/browser:browser_process",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/ui/dialogs:browser_dialogs",
    "//chrome/browser/ui/hid",
    "//chrome/common:chrome_features",
    "//chrome/common:constants",
    "//components/content_settings/core/common",
    "//components/permissions",
    "//components/prefs",
    "//components/vector_icons",
    "//content/public/browser",
    "//extensions/buildflags",
    "//mojo/public/cpp/bindings",
    "//services/device/public/cpp/hid",
    "//services/device/public/mojom",
    "//ui/base",
    "//ui/gfx",
    "//url",
  ]

  if (is_android) {
    deps += [ "//chrome/browser/ui/android/device_dialog" ]
  }

  if (!is_android) {
    sources += [
      "hid_connection_tracker.cc",
      "hid_connection_tracker_factory.cc",
      "hid_system_tray_icon.cc",
    ]
    deps += [ "//chrome/browser/ui:chrome_pages" ]
    if (is_chromeos) {
      sources += [ "hid_pinned_notification.cc" ]
      deps += [
        "//ash/constants",
        "//chrome/browser/ash/profiles",
        "//chromeos/ash/components/browser_context_helper",
        "//components/user_manager",
      ]
    } else {
      sources += [ "hid_status_icon.cc" ]
    }
  }

  if (enable_extensions) {
    sources += [ "web_view_chooser_context.cc" ]
    deps += [
      "//extensions/browser",
      "//extensions/common",
    ]
  }
}

source_set("test_support") {
  testonly = true
  sources = [
    "mock_hid_device_observer.cc",
    "mock_hid_device_observer.h",
  ]
  public_deps = [
    ":hid",
    "//testing/gmock",
  ]
  deps = [ "//chrome/browser" ]
  if (!is_android) {
    sources += [
      "hid_test_utils.cc",
      "hid_test_utils.h",
    ]
    public_deps += [ "//chrome/browser/device_notifications:test_support" ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "chrome_hid_delegate_unittest.cc",
    "hid_chooser_context_unittest.cc",
    "hid_policy_allowed_devices_unittest.cc",
  ]

  deps = [
    ":hid",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/prefs",
    "//chrome/test:test_support",
    "//components/account_id:test_support",
    "//components/prefs:test_support",
    "//content/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_chromeos) {
    sources += [ "hid_pinned_notification_unittest.cc" ]
    deps += [
      ":hid",
      ":test_support",
      "//base",
      "//chrome/browser/device_notifications:unit_tests",
      "//chrome/test:test_support",
      "//components/user_manager:test_support",
      "//content/test:test_support",
      "//testing/gtest",
    ]
  }

  if (is_win || is_mac || is_linux) {
    sources += [ "hid_status_icon_unittest.cc" ]
    deps += [ "//chrome/browser/device_notifications:unit_tests" ]
  }
}

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

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "hid_browsertest.cc",
      "hid_connection_tracker_browsertest.cc",
    ]
    deps = [
      ":hid",
      ":test_support",
      "//base",
      "//chrome/browser:browser_process",
      "//chrome/browser:chrome_content_browser_client",
      "//chrome/browser/device_notifications:browser_test_support",
      "//chrome/browser/ui",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//content/test:test_support",
      "//testing/gtest",
    ]

    if (is_chromeos) {
      deps += [ "//chrome/browser/ash/test:test_support" ]
    }
  }

  source_set("device_realtarget_browsertests") {
    testonly = true
    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
    sources = [ "chrome_hid_realtarget_browsertest.cc" ]
    deps = [
      ":hid",
      "//chrome/browser/ui",
      "//chrome/browser/ui/hid",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/test:test_support_ui",
      "//content/public/common",
      "//content/test:test_support",
    ]
  }
}
