# Copyright 2025 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") source_set("usb") { sources = [ "chrome_usb_delegate.h", "usb_blocklist.h", "usb_chooser_context.h", "usb_chooser_context_factory.h", "usb_chooser_controller.h", "usb_policy_allowed_devices.h", "web_usb_chooser.h", "web_usb_histograms.h", ] public_deps = [ "//base", "//chrome/browser/profiles:profile", "//components/permissions", "//components/prefs", "//content/public/browser", "//mojo/public/cpp/bindings", "//services/device/public/mojom:usb", "//url", # Note that `chrome_usb_delegate.h` and `usb_chooser_controller.h` both # include headers from `//third_party/blink/public/mojom/usb` GN target, # which should be explicitly listed here. # However, it causes a linking error on Windows bots (duplicated symbol), # given that this target is also implicitly included via the chain below. # # //chrome/browser/usb:usb --[public]--> # //content/public/browser:browser --[public]--> # //content/public/browser:browser_sources --[public]--> # //components/services/storage/privileged/mojom:mojom --[public]--> # # This also applies to other targets below, including `:browser_tests` and # `:unit_tests`. ] if (is_android) { sources += [ "android/web_usb_chooser_android.h" ] } else { sources += [ "usb_connection_tracker.h", "usb_connection_tracker_factory.h", "usb_system_tray_icon.h", "web_usb_chooser_desktop.h", "web_usb_detector.h", ] public_deps += [ "//chrome/browser/device_notifications", "//ui/gfx", ] if (!is_chromeos) { sources += [ "usb_status_icon.h" ] } else { sources += [ "usb_pinned_notification.h" ] } } } source_set("impl") { sources = [ "chrome_usb_delegate.cc", "usb_blocklist.cc", "usb_chooser_context.cc", "usb_chooser_context_factory.cc", "usb_chooser_controller.cc", "usb_policy_allowed_devices.cc", "web_usb_chooser.cc", "web_usb_histograms.cc", ] deps = [ ":usb", "//base", "//chrome/app:generated_resources", "//chrome/browser:browser_features", "//chrome/browser/chooser_controller", "//chrome/browser/content_settings:content_settings_factory", "//chrome/browser/notifications:system_notification_helper", "//chrome/browser/profiles:profile", "//chrome/browser/profiles:profile_manager", "//chrome/browser/ui", "//chrome/browser/ui/dialogs", "//chrome/common", "//chrome/common:chrome_features", "//components/content_settings/core/common", "//components/permissions", "//components/prefs", "//components/strings:components_strings", "//content/public/browser", "//services/device/public/cpp:device_features", "//services/device/public/cpp/usb", "//services/device/public/mojom:usb", "//services/network/public/mojom:mojom_permissions_policy_shared", "//services/network/public/mojom:mojom_permissions_policy_shared_cpp_sources", "//third_party/blink/public:runtime_features_for_public", "//ui/base", "//url", ] if (is_android) { sources += [ "android/usb_bridge.cc", "android/web_usb_chooser_android.cc", ] deps += [ "//chrome/browser/ui/android/device_dialog", "//chrome/browser/usb/android:jni_headers", ] } else { sources += [ "usb_connection_tracker.cc", "usb_connection_tracker_factory.cc", "usb_system_tray_icon.cc", "web_usb_chooser_desktop.cc", "web_usb_detector.cc", ] deps += [ "//chrome/app:branded_strings", "//chrome/app/vector_icons", "//chrome/browser:browser_process", "//chrome/browser/ui:browser_tab_strip", "//chrome/browser/ui:chrome_pages", "//chrome/browser/ui/browser_window", "//chrome/browser/ui/tab_contents", "//chrome/browser/ui/tabs:tab_strip", "//components/url_formatter", "//components/vector_icons", "//extensions/buildflags", "//services/network/public/cpp:is_potentially_trustworthy", "//ui/base:types", "//ui/gfx", "//ui/gfx:color_utils", "//ui/message_center/public/cpp", ] if (!is_chromeos) { sources += [ "usb_status_icon.cc" ] } else { sources += [ "usb_pinned_notification.cc" ] deps += [ "//ash/constants", "//chromeos/ash/components/settings", ] } } if (enable_extensions_core) { deps += [ "//extensions/browser", "//extensions/common", "//extensions/common:common_constants", ] } public_deps = [ "//chrome/browser:browser_public_dependencies" ] if (!is_android) { deps += [ "//chrome/browser/ui:browser_tab_strip_tracker" ] } } if (!is_android) { source_set("test_support") { testonly = true sources = [ "usb_test_utils.cc", "usb_test_utils.h", ] public_deps = [ ":usb", "//chrome/browser/device_notifications:test_support", ] } } source_set("unit_tests") { testonly = true sources = [ "chrome_usb_delegate_unittest.cc" ] deps = [ ":usb", "//base", "//base/test:test_support", "//chrome/test:test_support", "//content/test:test_support", "//services/device/public/cpp:test_support", ] if (enable_extensions_core) { deps += [ "//chrome/browser/extensions:test_support", "//extensions/browser", "//extensions/buildflags", ] } if (!is_android) { sources += [ "usb_blocklist_unittest.cc", "usb_chooser_context_mock_device_observer.cc", "usb_chooser_context_mock_device_observer.h", "usb_chooser_context_unittest.cc", "usb_chooser_controller_unittest.cc", "usb_policy_allowed_devices_unittest.cc", ] deps += [ ":test_support", "//chrome/browser/content_settings:content_settings_factory", "//chrome/browser/device_notifications:unit_tests", "//chrome/common:chrome_features", "//chrome/common:non_code_constants", "//components/content_settings/core/browser", "//components/content_settings/core/common", "//components/permissions:test_support", "//components/prefs", "//components/sync_preferences:test_support", "//content/public/browser", "//extensions:test_support", "//mojo/public/cpp/bindings", "//services/device/public/cpp:device_features", "//url", ] } if (!is_android && !is_chromeos) { sources += [ "usb_status_icon_unittest.cc" ] deps += [ "//chrome/app:branded_strings", "//chrome/app:command_ids", "//chrome/browser/device_notifications:unit_tests", "//extensions/common:common_constants", "//ui/base", ] } if (is_chromeos) { sources += [ "usb_pinned_notification_unittest.cc" ] deps += [ ":usb", "//chrome/app:branded_strings", "//chrome/browser/ash/settings", "//chrome/browser/ash/settings:test_support", "//chrome/browser/device_notifications:unit_tests", "//chromeos/ash/components/settings", "//extensions/common:common_constants", "//ui/base", ] } } if (is_linux || is_mac || is_win) { source_set("device_realtarget_browsertests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] sources = [ "chrome_usb_realtarget_browsertest.cc" ] deps = [ ":usb", "//base", "//chrome/browser/ui", "//chrome/browser/ui/tabs:tab_strip", "//chrome/test:test_support_ui", "//content/public/browser", "//content/public/common", "//content/test:test_support", ] } } # Shared test support across Win/Mac/Linux/ChromeOS/Android. source_set("browser_test_support") { testonly = true sources = [ "usb_browser_test_utils.cc", "usb_browser_test_utils.h", ] deps = [ ":usb", "//base", "//chrome/browser", "//chrome/browser:chrome_content_browser_client", ] } # Tests that run on Win/Mac/Linux/ChromeOS/Android. source_set("platform_browser_tests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] sources = [ "chrome_usb_browsertest.cc" ] deps = [ ":browser_test_support", ":usb", "//base", "//base/test:test_support", "//chrome/browser", "//chrome/browser:browser_process", "//chrome/browser:chrome_content_browser_client", "//chrome/browser/content_settings:content_settings_factory", "//chrome/browser/ui/navigator", "//chrome/test:test_support", ] if (!is_android) { deps += [ "//chrome/app:command_ids", "//chrome/browser/web_applications:web_applications_test_support", ] } if (is_chromeos) { deps += [ "//chrome/browser/ash/test:test_support" ] } } if (!is_android) { source_set("browser_tests") { testonly = true defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] sources = [ "usb_connection_tracker_browsertest.cc", "web_usb_detector_browsertest.cc", ] public_deps = [ ":usb", "//base", "//chrome/browser", ] deps = [ ":browser_test_support", ":test_support", "//base/test:test_support", "//chrome/app:command_ids", "//chrome/browser:browser_process", "//chrome/browser/content_settings:content_settings_factory", "//chrome/browser/device_notifications:browser_test_support", "//chrome/browser/device_notifications:test_support", "//chrome/browser/notifications", "//chrome/browser/notifications:system_notification_helper", "//chrome/browser/profiles:profile", "//chrome/browser/ui", "//chrome/browser/ui/tabs:tab_strip", "//chrome/browser/web_applications", "//chrome/browser/web_applications:web_applications_test_support", "//chrome/common:chrome_features", "//chrome/test:test_support", "//chrome/test:test_support_ui", "//components/account_id", "//components/content_settings/core/browser", "//components/content_settings/core/common", "//components/permissions", "//components/prefs", "//content/public/browser", "//content/public/common", "//content/test:test_support", "//extensions:test_support", "//extensions/buildflags", "//extensions/common", "//mojo/public/cpp/bindings", "//services/device/public/cpp:test_support", "//services/device/public/mojom:usb", "//services/service_manager/public/cpp", "//testing/gtest", "//ui/message_center/public/cpp", "//url", ] if (is_chromeos) { deps += [ "//chrome/browser/ash/test:test_support" ] } } }