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

import("//build/config/features.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

source_set("hid") {
  sources = [
    "hid_collection_info.cc",
    "hid_collection_info.h",
    "hid_connection.cc",
    "hid_connection.h",
    "hid_connection_linux.cc",
    "hid_connection_linux.h",
    "hid_connection_mac.cc",
    "hid_connection_mac.h",
    "hid_connection_win.cc",
    "hid_connection_win.h",
    "hid_device_filter.cc",
    "hid_device_filter.h",
    "hid_device_info.cc",
    "hid_device_info.h",
    "hid_device_info_linux.cc",
    "hid_device_info_linux.h",
    "hid_report_descriptor.cc",
    "hid_report_descriptor.h",
    "hid_report_descriptor_item.cc",
    "hid_report_descriptor_item.h",
    "hid_service.cc",
    "hid_service.h",
    "hid_service_mac.cc",
    "hid_service_mac.h",
    "hid_service_win.cc",
    "hid_service_win.h",
    "hid_usage_and_page.cc",
    "hid_usage_and_page.h",
  ]

  deps = [
    "//base",
    "//components/device_event_log",
    "//device/base",
    "//net",
  ]

  if (is_linux && use_udev) {
    sources += [
      "fake_input_service_linux.cc",
      "fake_input_service_linux.h",
      "hid_service_linux.cc",
      "hid_service_linux.h",
      "input_service_linux.cc",
      "input_service_linux.h",
    ]
    deps += [ "//device/udev_linux" ]
  }

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

  if (is_win) {
    libs = [
      "hid.lib",
      "setupapi.lib",
    ]
  }
}

source_set("mocks") {
  testonly = true

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

  public_deps = [
    ":hid",
    "//testing/gmock",
  ]
}

fuzzer_test("hid_report_descriptor_fuzzer") {
  sources = [
    "hid_report_descriptor_fuzzer.cc",
  ]
  deps = [
    ":hid",
  ]
  seed_corpus = "fuzz_corpus"
  libfuzzer_options = [ "max_len=2048" ]
}
