# Copyright 2013 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/features.gni") import("//testing/libfuzzer/fuzzer_test.gni") assert(use_blink) if (is_android) { import("//build/config/android/rules.gni") import("//third_party/jni_zero/jni_zero.gni") } static_library("usb") { # Only targets under //services/device folder can depend on it. visibility = [ ":*", "//services/device:*", "//services/device/serial:*", "//services/device/usb/mojo:*", ] sources = [ "usb_descriptors.cc", "usb_descriptors.h", "usb_device.cc", "usb_device.h", "usb_device_handle.cc", "usb_device_handle.h", "usb_service.cc", "usb_service.h", "webusb_descriptors.cc", "webusb_descriptors.h", ] configs += [ "//build/config/compiler:wexit_time_destructors" ] deps = [ "//components/device_event_log", "//device/base", "//services/device:utility", "//services/device/public/cpp:device_features", "//services/device/public/cpp/usb", "//services/device/public/mojom:usb", ] public_deps = [ "//base", "//url", ] if (is_android) { sources += [ "usb_configuration_android.cc", "usb_configuration_android.h", "usb_device_android.cc", "usb_device_android.h", "usb_device_handle_android.cc", "usb_device_handle_android.h", "usb_endpoint_android.cc", "usb_endpoint_android.h", "usb_interface_android.cc", "usb_interface_android.h", "usb_service_android.cc", "usb_service_android.h", ] deps += [ ":jni_headers" ] } if (is_win) { sources += [ "scoped_winusb_handle.cc", "scoped_winusb_handle.h", "usb_device_handle_win.cc", "usb_device_handle_win.h", "usb_device_win.cc", "usb_device_win.h", "usb_service_win.cc", "usb_service_win.h", ] libs = [ "advapi32.lib", "ole32.lib", "setupapi.lib", "winusb.lib", ] deps += [ "//third_party/re2" ] } if (is_mac) { # These sources and deps are required for libusb. # TODO(crbug.com/40136337) Remove these sources. sources += [ "scoped_libusb_device_handle.cc", "scoped_libusb_device_handle.h", "scoped_libusb_device_ref.cc", "scoped_libusb_device_ref.h", "usb_context.cc", "usb_context.h", "usb_device_handle_impl.cc", "usb_device_handle_impl.h", "usb_device_impl.cc", "usb_device_impl.h", "usb_error.cc", "usb_error.h", "usb_service_impl.cc", "usb_service_impl.h", ] deps += [ "//third_party/libusb" ] } if (is_linux || is_chromeos) { sources += [ "usb_device_linux.cc", "usb_device_linux.h", ] } if (use_udev) { if (is_linux || is_chromeos) { sources += [ "usb_service_linux.cc", "usb_service_linux.h", ] } deps += [ "//device/udev_linux" ] } if (is_android || is_chromeos || is_linux) { sources += [ "usb_device_handle_usbfs.cc", "usb_device_handle_usbfs.h", ] } if (is_android || is_linux) { sources += [ "usb_interface_detach_allowlist.cc", "usb_interface_detach_allowlist.h", ] } if (is_chromeos) { deps += [ "//chromeos/dbus/permission_broker", "//dbus", ] } } static_library("test_support") { testonly = true sources = [ "fake_usb_device_handle.cc", "fake_usb_device_handle.h", "mock_usb_device.cc", "mock_usb_device.h", "mock_usb_device_handle.cc", "mock_usb_device_handle.h", "mock_usb_service.cc", "mock_usb_service.h", ] deps = [ ":usb", "//base", "//testing/gtest", ] public_deps = [ "//testing/gmock" ] } fuzzer_test("webusb_descriptors_fuzzer") { sources = [ "webusb_descriptors_fuzzer.cc" ] deps = [ ":test_support", ":usb", "//base", "//base:i18n", "//testing/libfuzzer:libfuzzer_base_wrappers", ] seed_corpus = "fuzz_corpus" libfuzzer_options = [ "max_len=2048" ] } fuzzer_test("usb_descriptors_fuzzer") { sources = [ "usb_descriptors_fuzzer.cc" ] deps = [ ":usb", "//mojo/public/cpp/bindings", "//services/device/public/mojom:usb", "//services/device/usb/mojo", "//testing/libfuzzer:libfuzzer_base_wrappers", ] seed_corpus = "fuzz_corpus" libfuzzer_options = [ "max_len=2048" ] } fuzzer_test("usb_string_read_fuzzer") { sources = [ "usb_string_read_fuzzer.cc" ] deps = [ ":test_support", ":usb", "//base", "//testing/libfuzzer:libfuzzer_base_wrappers", ] seed_corpus = "fuzz_corpus" libfuzzer_options = [ "max_len=2048" ] } if (is_android) { java_sources_needing_jni = [ "android/java/src/org/chromium/device/usb/ChromeUsbConfiguration.java", "android/java/src/org/chromium/device/usb/ChromeUsbConnection.java", "android/java/src/org/chromium/device/usb/ChromeUsbDevice.java", "android/java/src/org/chromium/device/usb/ChromeUsbEndpoint.java", "android/java/src/org/chromium/device/usb/ChromeUsbInterface.java", "android/java/src/org/chromium/device/usb/ChromeUsbService.java", ] generate_jni("jni_headers") { sources = java_sources_needing_jni } android_library("java") { srcjar_deps = [ ":jni_headers" ] sources = java_sources_needing_jni deps = [ "//base:base_java", "//build/android:build_java", "//third_party/androidx:androidx_annotation_annotation_java", "//third_party/jni_zero:jni_zero_java", ] } }