# 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/buildflag_header.gni") import("//build/config/compiler/compiler.gni") import("//build/config/dcheck_always_on.gni") import("//build/config/jumbo.gni") import("//build/config/linux/gtk/gtk.gni") import("//build/config/linux/pangocairo/pangocairo.gni") import("//build/config/ozone.gni") import("//build/config/sanitizers/sanitizers.gni") import("//build/config/ui.gni") import("//build/util/branding.gni") import("//components/system_media_controls/linux/buildflags/buildflags.gni") import("//testing/test.gni") import("//tools/grit/grit_rule.gni") import("//ui/base/ui_features.gni") if (is_android) { import("//build/config/android/config.gni") import("//build/config/android/rules.gni") } else if (is_mac) { import("//build/config/mac/rules.gni") } build_ime = !is_ios # As part of building Chrome on iOS, it is necessary to run a tool on # the host to load datapack and generate output in a format defined # by the platform (this is to support notifications). # # Introduce a standalone target that can build on both 'host' and 'target' # toolchains that just builds the support to load datapacks. The dependencies # should be kept minimal to not have to build too many targets with multiple # toolchains. component("ui_data_pack") { sources = [ "resource/data_pack.cc", "resource/data_pack.h", "resource/data_pack_export.h", "resource/resource_handle.h", "resource/scale_factor.cc", "resource/scale_factor.h", ] deps = [ "//base", "//net", "//third_party/zlib/google:compression_utils", ] defines = [ "UI_DATA_PACK_IMPLEMENTATION" ] configs += [ "//build/config/compiler:wexit_time_destructors" ] } buildflag_header("buildflags") { header = "buildflags.h" flags = [ "ENABLE_HIDPI=$enable_hidpi", "ENABLE_MESSAGE_CENTER=$enable_message_center", "USE_ATK=$use_atk", "USE_XKBCOMMON=$use_xkbcommon", "HAS_NATIVE_ACCESSIBILITY=$has_native_accessibility", "USE_GTK=$use_gtk", ] } source_set("hit_test") { sources = [ "hit_test.cc", "hit_test.h", ] if (use_x11 || use_ozone) { sources += [ "hit_test_x11.cc", "hit_test_x11.h", ] } } jumbo_component("base") { output_name = "ui_base" sources = [ "class_property.cc", "class_property.h", "default_style.h", "device_form_factor.h", "device_form_factor_desktop.cc", "dragdrop/drag_drop_types.h", "dragdrop/drop_target_event.cc", "dragdrop/drop_target_event.h", "dragdrop/os_exchange_data.cc", "dragdrop/os_exchange_data.h", "dragdrop/os_exchange_data_provider_factory.cc", "dragdrop/os_exchange_data_provider_factory.h", "ime/utf_offset.cc", "ime/utf_offset.h", "l10n/formatter.cc", "l10n/formatter.h", "l10n/l10n_font_util.cc", "l10n/l10n_font_util.h", "l10n/l10n_util.cc", "l10n/l10n_util.h", "l10n/l10n_util_collator.h", "l10n/time_format.cc", "l10n/time_format.h", "layout.cc", "layout.h", "models/button_menu_item_model.cc", "models/button_menu_item_model.h", "models/combobox_model.cc", "models/combobox_model.h", "models/combobox_model_observer.h", "models/dialog_model.cc", "models/dialog_model.h", "models/dialog_model_field.cc", "models/dialog_model_field.h", "models/dialog_model_host.h", "models/image_model.cc", "models/image_model.h", "models/list_model.h", "models/list_model_observer.h", "models/list_selection_model.cc", "models/list_selection_model.h", "models/menu_model.cc", "models/menu_model.h", "models/menu_model_delegate.h", "models/menu_separator_types.h", "models/simple_combobox_model.cc", "models/simple_combobox_model.h", "models/simple_menu_model.cc", "models/simple_menu_model.h", "models/table_model.cc", "models/table_model.h", "models/table_model_observer.h", "models/tree_model.cc", "models/tree_model.h", "models/tree_node_iterator.h", "models/tree_node_model.h", "nine_image_painter_factory.cc", "nine_image_painter_factory.h", "page_transition_types.cc", "page_transition_types.h", "pointer/touch_ui_controller.cc", "pointer/touch_ui_controller.h", "resource/allowlist.h", "resource/resource_bundle.cc", "resource/resource_bundle.h", "scoped_visibility_tracker.cc", "scoped_visibility_tracker.h", "template_expressions.cc", "template_expressions.h", "theme_provider.cc", "theme_provider.h", "ui_base_exports.cc", "ui_base_paths.cc", "ui_base_paths.h", "ui_base_switches.cc", "ui_base_switches.h", "ui_base_switches_util.cc", "ui_base_switches_util.h", "view_prop.cc", "view_prop.h", "webui/i18n_source_stream.cc", "webui/i18n_source_stream.h", "webui/jstemplate_builder.cc", "webui/jstemplate_builder.h", "webui/web_ui_util.cc", "webui/web_ui_util.h", "window_open_disposition.cc", "window_open_disposition.h", ] libs = [] if (is_android) { sources += [ "device_form_factor_android.cc", "l10n/l10n_util_android.cc", "l10n/l10n_util_android.h", "resource/resource_bundle_android.cc", "resource/resource_bundle_android.h", ] } if (is_win) { sources += [ "dragdrop/drag_drop_types_win.cc", "dragdrop/drag_source_win.cc", "dragdrop/drag_source_win.h", "dragdrop/drop_target_win.cc", "dragdrop/drop_target_win.h", "dragdrop/os_exchange_data_provider_win.cc", "dragdrop/os_exchange_data_provider_win.h", "l10n/l10n_util_win.cc", "l10n/l10n_util_win.h", "resource/resource_bundle_win.cc", "resource/resource_bundle_win.h", "resource/resource_data_dll_win.cc", "resource/resource_data_dll_win.h", "win/accessibility_ids_win.h", "win/accessibility_misc_utils.cc", "win/accessibility_misc_utils.h", "win/atl_module.h", "win/event_creation_utils.cc", "win/event_creation_utils.h", "win/foreground_helper.cc", "win/foreground_helper.h", "win/hidden_window.cc", "win/hidden_window.h", "win/hwnd_metrics.cc", "win/hwnd_metrics.h", "win/hwnd_subclass.cc", "win/hwnd_subclass.h", "win/internal_constants.cc", "win/internal_constants.h", "win/lock_state.cc", "win/lock_state.h", "win/message_box_win.cc", "win/message_box_win.h", "win/mouse_wheel_util.cc", "win/mouse_wheel_util.h", "win/power_setting_change_listener.cc", "win/power_setting_change_listener.h", "win/scoped_ole_initializer.cc", "win/scoped_ole_initializer.h", "win/session_change_observer.cc", "win/session_change_observer.h", "win/shell.cc", "win/shell.h", "win/touch_input.cc", "win/touch_input.h", "win/window_event_target.cc", "win/window_event_target.h", ] ldflags = [ "/DELAYLOAD:dwmapi.dll" ] libs += [ "dwmapi.lib", "wtsapi32.lib", ] } if (is_mac) { sources += [ "cocoa/accessibility_focus_overrider.h", "cocoa/accessibility_focus_overrider.mm", "cocoa/animation_utils.h", "cocoa/appkit_utils.h", "cocoa/appkit_utils.mm", "cocoa/base_view.h", "cocoa/base_view.mm", "cocoa/cocoa_base_utils.h", "cocoa/cocoa_base_utils.mm", "cocoa/command_dispatcher.h", "cocoa/command_dispatcher.mm", "cocoa/constrained_window/constrained_window_animation.h", "cocoa/constrained_window/constrained_window_animation.mm", "cocoa/controls/button_utils.h", "cocoa/controls/button_utils.mm", "cocoa/controls/textfield_utils.h", "cocoa/controls/textfield_utils.mm", "cocoa/defaults_utils.h", "cocoa/defaults_utils.mm", "cocoa/find_pasteboard.h", "cocoa/find_pasteboard.mm", "cocoa/flipped_view.h", "cocoa/flipped_view.mm", "cocoa/focus_tracker.h", "cocoa/focus_tracker.mm", "cocoa/focus_window_set.h", "cocoa/focus_window_set.mm", "cocoa/menu_controller.h", "cocoa/menu_controller.mm", "cocoa/permissions_utils.h", "cocoa/permissions_utils.mm", "cocoa/quartz_util.h", "cocoa/quartz_util.mm", "cocoa/remote_accessibility_api.h", "cocoa/remote_accessibility_api.mm", "cocoa/remote_layer_api.h", "cocoa/remote_layer_api.mm", "cocoa/secure_password_input.h", "cocoa/secure_password_input.mm", "cocoa/text_services_context_menu.cc", "cocoa/text_services_context_menu.h", "cocoa/tool_tip_base_view.h", "cocoa/tool_tip_base_view.mm", "cocoa/touch_bar_util.h", "cocoa/touch_bar_util.mm", "cocoa/tracking_area.h", "cocoa/tracking_area.mm", "cocoa/underlay_opengl_hosting_window.h", "cocoa/underlay_opengl_hosting_window.mm", "cocoa/user_interface_item_command_handler.h", "cocoa/views_hostable.h", "cocoa/weak_ptr_nsobject.h", "cocoa/weak_ptr_nsobject.mm", "cocoa/window_size_constants.h", "cocoa/window_size_constants.mm", "dragdrop/drag_drop_types_mac.mm", "dragdrop/os_exchange_data_provider_builder_mac.h", "dragdrop/os_exchange_data_provider_builder_mac.mm", "dragdrop/os_exchange_data_provider_mac.h", "dragdrop/os_exchange_data_provider_mac.mm", "l10n/l10n_util_mac.h", "l10n/l10n_util_mac.mm", "resource/resource_bundle_mac.mm", ] } if (is_ios) { sources += [ "device_form_factor_ios.mm", "resource/resource_bundle_ios.mm", ] } if (!is_ios) { sources += [ "accelerators/accelerator.cc", "accelerators/accelerator.h", "accelerators/accelerator_history.cc", "accelerators/accelerator_history.h", "accelerators/accelerator_manager.cc", "accelerators/accelerator_manager.h", "accelerators/media_keys_listener.cc", "accelerators/media_keys_listener.h", "accelerators/media_keys_util.cc", "accelerators/media_keys_util.h", "accelerators/menu_label_accelerator_util.cc", "accelerators/menu_label_accelerator_util.h", "accelerators/system_media_controls_media_keys_listener.cc", "accelerators/system_media_controls_media_keys_listener.h", "base_window.cc", "base_window.h", "emoji/emoji_panel_helper.h", "pointer/pointer_device.h", "pointer/pointer_device_util.cc", "pointer/touch_editing_controller.cc", "pointer/touch_editing_controller.h", "text/bytes_formatting.cc", "text/bytes_formatting.h", "ui_base_types.cc", "ui_base_types.h", "user_activity/user_activity_detector.cc", "user_activity/user_activity_detector.h", "user_activity/user_activity_observer.h", ] if (is_linux || is_chromeos) { sources += [ "accelerators/menu_label_accelerator_util_linux.cc", "accelerators/menu_label_accelerator_util_linux.h", ] } if (is_mac) { sources += [ "accelerators/platform_accelerator_cocoa.h", "accelerators/platform_accelerator_cocoa.mm", "cocoa/bubble_closer.h", "cocoa/bubble_closer.mm", "dragdrop/cocoa_dnd_util.h", "dragdrop/cocoa_dnd_util.mm", ] } } if (is_mac) { sources += [ "emoji/emoji_panel_helper_mac.mm" ] } else if (is_win) { sources += [ "emoji/emoji_panel_helper_win.cc" ] } else if (is_chromeos) { sources += [ "emoji/emoji_panel_helper_chromeos.cc" ] } else { # Empty implementation for all other platforms. sources += [ "emoji/emoji_panel_helper.cc" ] } if (is_mac) { sources += [ "accelerators/media_keys_listener_mac.mm" ] } else if (is_win) { sources += [ "accelerators/global_media_keys_listener_win.cc", "accelerators/global_media_keys_listener_win.h", "accelerators/media_keys_listener_win.cc", ] } else if (use_mpris) { sources += [ "accelerators/media_keys_listener_linux.cc" ] } else { sources += [ "accelerators/media_keys_listener_stub.cc" ] } if (is_win) { sources += [ "pointer/pointer_device_win.cc" ] } else if (is_android) { sources += [ "pointer/pointer_device_android.cc" ] } else if (is_ios) { sources += [ "pointer/pointer_device_ios.cc" ] } else if (is_linux || is_chromeos) { sources += [ "pointer/pointer_device_linux.cc" ] } else { # Empty implementation for all other cases. sources += [ "pointer/pointer_device.cc" ] sources -= [ "pointer/pointer_device_util.cc" ] } if (is_fuchsia) { sources += [ "resource/resource_bundle_fuchsia.cc" ] } configs += [ "//build/config/compiler:wexit_time_destructors" ] defines = [ "IS_UI_BASE_IMPL" ] public_deps = [ ":buildflags", ":features", ":hit_test", ":ui_data_pack", "//base", "//skia", "//third_party/abseil-cpp:absl", "//ui/gfx", "//ui/gfx/geometry", ] deps = [ "//base:base_static", "//base:i18n", "//base/third_party/dynamic_annotations", "//base/util/type_safety:type_safety", "//net", "//third_party/brotli:dec", "//third_party/icu", "//third_party/modp_b64", "//third_party/zlib:zlib", "//third_party/zlib/google:compression_utils", "//ui/base:data_exchange", "//ui/base/clipboard:clipboard_types", "//ui/display", "//ui/events", "//ui/events/devices", "//ui/resources:webui_generated_resources_grd", "//ui/resources:webui_resources_grd", "//ui/strings", "//url", ] if (is_debug || dcheck_always_on) { deps += [ "//third_party/re2" ] } if (!is_ios) { # iOS does not use Chromium-specific code for event handling. public_deps += [ "//ui/base/dragdrop/file_info", "//ui/events:events_base", "//ui/events/platform", ] } if (is_ios) { sources += [ "l10n/l10n_util_mac.h", "l10n/l10n_util_mac.mm", ] public_deps += [ "//ui/events:event_constants" ] deps -= [ "//ui/events", "//ui/events/devices", ] } if (toolkit_views) { deps += [ "//ui/events" ] } if ((is_linux || is_chromeos) && (use_x11 || ozone_platform_x11)) { public_deps += [ "//ui/base/x" ] # X11 drag and drop wants to use common drag and drop types. allow_circular_includes_from = [ "//ui/base/x" ] } if (use_xscrnsaver) { defines += [ "USE_XSCRNSAVER" ] deps += [ "//ui/gfx/x" ] } deps += [ "//components/system_media_controls" ] if (use_x11 && use_aura) { sources += [ "x/selection_requestor.cc", "x/selection_requestor.h", ] deps += [ "//ui/events/platform/x11", "//ui/gfx/x", ] if (!is_chromeos) { # These Aura X11 files aren't used on ChromeOS. sources += [ "dragdrop/os_exchange_data_provider_x11.cc", "dragdrop/os_exchange_data_provider_x11.h", ] } } if (use_aura && (is_linux || is_chromeos)) { sources += [ "resource/resource_bundle_auralinux.cc" ] } if (is_linux || is_chromeos) { deps += [ "//third_party/fontconfig" ] } if (use_glib) { configs += [ "//build/config/linux:glib" ] sources += [ "glib/glib_integers.h", "glib/glib_signal.h", "glib/scoped_gobject.h", ] } if (is_chromeos || (use_aura && is_linux)) { sources += [ "dragdrop/os_exchange_data_provider_non_backed.cc", "dragdrop/os_exchange_data_provider_non_backed.h", ] } if ((is_mac || is_win) && !use_qt) { deps += [ "//ui/base/clipboard" ] } if (!use_aura) { sources -= [ "view_prop.cc", "view_prop.h", ] } if (is_mac) { deps += [ "//third_party/mozilla" ] frameworks = [ "Accelerate.framework", "AppKit.framework", "QuartzCore.framework", "AudioUnit.framework", "Carbon.framework", "CoreVideo.framework", "Foundation.framework", ] } if (!toolkit_views && !use_aura) { sources -= [ "dragdrop/drag_drop_types.h", "dragdrop/drop_target_event.cc", "dragdrop/drop_target_event.h", "dragdrop/os_exchange_data.cc", "dragdrop/os_exchange_data.h", "dragdrop/os_exchange_data_provider_factory.cc", "dragdrop/os_exchange_data_provider_factory.h", "nine_image_painter_factory.cc", "nine_image_painter_factory.h", ] } if (is_android) { deps += [ ":ui_base_jni_headers" ] libs += [ "jnigraphics" ] sources -= [ "l10n/l10n_font_util.cc", "models/button_menu_item_model.cc", "pointer/touch_editing_controller.cc", "theme_provider.cc", "ui_base_types.cc", ] } if (is_android || is_ios) { sources -= [ "device_form_factor_desktop.cc" ] } if (use_qt) { if (toolkit_views || use_aura) { sources -= [ "dragdrop/os_exchange_data_provider_factory.cc", "dragdrop/os_exchange_data_provider_factory.h", ] } if (is_linux) { sources -= [ "resource/resource_bundle_auralinux.cc", ] if (use_x11) { sources -= [ "dragdrop/os_exchange_data_provider_aurax11.cc", "dragdrop/os_exchange_data_provider_aurax11.h", ] } } else if (is_mac) { sources -= [ "dragdrop/os_exchange_data_provider_builder_mac.h", "dragdrop/os_exchange_data_provider_builder_mac.mm", "dragdrop/os_exchange_data_provider_mac.mm", "dragdrop/os_exchange_data_provider_mac.h", "resource/resource_bundle_mac.mm", ] } else if (is_win) { sources -= [ "dragdrop/drag_source_win.cc", "dragdrop/drag_source_win.h", "dragdrop/os_exchange_data_provider_win.cc", "dragdrop/os_exchange_data_provider_win.h", "resource/resource_bundle_win.cc", "resource/resource_bundle_win.h", ] } } } component("data_exchange") { defines = [ "IS_UI_BASE_DATA_EXCHANGE_IMPL" ] sources = [ "dragdrop/download_file_info.cc", "dragdrop/download_file_info.h", "dragdrop/download_file_interface.h", "dragdrop/os_exchange_data_provider.h", "dragdrop/os_exchange_data_provider_factory_ozone.cc", "dragdrop/os_exchange_data_provider_factory_ozone.h", ] deps = [ "//base", "//ui/base/clipboard:clipboard_types", "//ui/base/dragdrop/file_info", "//ui/gfx", "//ui/gfx/geometry", "//url", ] public_deps = [ "//ui/base/data_transfer_policy" ] } component("features") { output_name = "ui_base_features" defines = [ "IS_UI_BASE_FEATURES_IMPL" ] sources = [ "ui_base_features.cc", "ui_base_features.h", ] deps = [ ":buildflags", "//base", "//build:chromeos_buildflags", ] } # TODO(crbug.com/1091985): Support CrOS. if (is_win || is_mac || (is_linux && !is_chromeos)) { jumbo_static_library("pixel_diff_test_support") { testonly = true sources = [ "test/skia_gold_matching_algorithm.cc", "test/skia_gold_matching_algorithm.h", "test/skia_gold_pixel_diff.cc", "test/skia_gold_pixel_diff.h", ] deps = [ "//base", "//base/test:test_config", "//testing/gtest", "//ui/gfx", "//ui/snapshot", ] if (!is_fuchsia) { data_deps = [ ":goldctl" ] } } } if (!is_ios) { group("goldctl") { data = [] # Because this links to a CIPD dependency, which is a symlink on Unix # platforms, refer to the actual executable rather than the whole directory; # copying the whole directory doesn't work, at least with "mb.py zip". if (is_win) { data += [ "//tools/skia_goldctl/win/goldctl.exe" ] } else if (is_mac) { data += [ "//tools/skia_goldctl/mac/goldctl" ] } else { data += [ "//tools/skia_goldctl/linux/goldctl" ] } } } jumbo_static_library("test_support") { testonly = true sources = [ "resource/mock_resource_bundle_delegate.cc", "resource/mock_resource_bundle_delegate.h", ] if (is_mac) { sources += [ "test/cocoa_helper.h", "test/cocoa_helper.mm", "test/menu_test_observer.h", "test/menu_test_observer.mm", "test/ns_ax_tree_validator.h", "test/ns_ax_tree_validator.mm", "test/nswindow_fullscreen_notification_waiter.h", "test/nswindow_fullscreen_notification_waiter.mm", "test/scoped_fake_full_keyboard_access.h", "test/scoped_fake_full_keyboard_access.mm", "test/scoped_fake_nswindow_focus.h", "test/scoped_fake_nswindow_focus.mm", "test/scoped_fake_nswindow_fullscreen.h", "test/scoped_fake_nswindow_fullscreen.mm", "test/scoped_preferred_scroller_style_mac.h", "test/scoped_preferred_scroller_style_mac.mm", "test/ui_controls_mac.mm", "test/view_tree_validator.mm", "test/windowed_nsnotification_observer.h", "test/windowed_nsnotification_observer.mm", ] } if (is_win) { sources += [ "test/ui_controls_internal_win.cc", "test/ui_controls_internal_win.h", ] } if (!is_ios) { sources += [ "accelerators/test_accelerator_target.cc", "accelerators/test_accelerator_target.h", "test/mock_base_window.cc", "test/mock_base_window.h", "test/ui_controls.h", "test/view_tree_validator.h", ] } else { sources += [ "test/ios/keyboard_appearance_listener.h", "test/ios/keyboard_appearance_listener.mm", "test/ios/ui_image_test_utils.h", "test/ios/ui_image_test_utils.mm", ] } if (use_aura) { sources += [ "test/ui_controls_aura.cc", "test/ui_controls_aura.h", ] } public_deps = [ ":base" ] deps = [ "//base", "//base/test:test_config", "//base/test:test_support", "//skia", "//testing/gmock", "//testing/gtest", "//ui/base:ui_data_pack", "//ui/display:test_support", "//ui/events:events_base", "//ui/events:test_support", "//ui/gfx", "//ui/gfx/geometry", ] if (is_ios) { deps -= [ "//ui/events:events_base", "//ui/events:test_support", ] } if (build_ime) { sources += [ "ime/dummy_input_method.cc", "ime/dummy_input_method.h", "ime/dummy_text_input_client.cc", "ime/dummy_text_input_client.h", ] deps += [ "//ui/base/ime", "//ui/events", ] if (is_win) { deps += [ "//ui/base/ime/win" ] } } if (is_chromeos) { sources += [ "ime/chromeos/input_method_allowlist.cc", "ime/chromeos/input_method_allowlist.h", "ime/chromeos/mock_input_method_manager.cc", "ime/chromeos/mock_input_method_manager.h", ] deps += [ # Generates a header used by input_method_allowlist.cc "//chromeos/ime:gencode", "//ui/base/ime/chromeos", ] } } if (is_android) { generate_jni("ui_base_jni_headers") { sources = [ "../android/java/src/org/chromium/ui/base/Clipboard.java", "../android/java/src/org/chromium/ui/base/DeviceFormFactor.java", "../android/java/src/org/chromium/ui/base/IdleDetector.java", "../android/java/src/org/chromium/ui/base/LocalizationUtils.java", "../android/java/src/org/chromium/ui/base/ResourceBundle.java", "../android/java/src/org/chromium/ui/base/SelectFileDialog.java", "../android/java/src/org/chromium/ui/base/TouchDevice.java", ] } } bundle_data("ui_base_unittests_bundle_data") { testonly = true sources = [ "test/data/data_pack_unittest/truncated-header.pak" ] outputs = [ "{{bundle_resources_dir}}/" + "{{source_root_relative_dir}}/{{source_file_part}}" ] } # The resource labels below should not end with "_resources" or the Android # build rules will look for a nonexistent __build_config label. grit("ui_base_test_resources_grit") { testonly = true source = "test/ui_base_test_resources.grd" outputs = [ "grit/ui_base_test_resources.h", "ui_base_test_resources.pak", ] } copy("ui_base_test_resources_pak") { testonly = true sources = [ "$target_gen_dir/ui_base_test_resources.pak" ] outputs = [ "$root_out_dir/ui_base_test_resources.pak" ] public_deps = [ ":ui_base_test_resources_grit" ] } if (is_android) { android_assets("ui_base_test_android_assets") { testonly = true # Use $target_gen_dir so the associated .pak.info file is available. sources = [ "$target_gen_dir/ui_base_test_resources.pak" ] deps = [ ":ui_base_test_resources_grit" ] } } if (is_ios) { bundle_data("ui_base_test_bundle_data") { testonly = true public_deps = [ ":ui_base_test_resources_grit" ] sources = [ "$target_gen_dir/ui_base_test_resources.pak" ] outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ] } } test("ui_base_unittests") { use_xvfb = use_xvfb_in_this_config sources = [ "class_property_unittest.cc", "ime/utf_offset_unittest.cc", "l10n/l10n_util_unittest.cc", "l10n/time_format_unittest.cc", "layout_unittest.cc", "models/image_model_unittest.cc", "models/simple_menu_model_unittest.cc", "models/tree_node_iterator_unittest.cc", "pointer/touch_ui_controller_unittest.cc", "prediction/empty_filter_unittests.cc", "prediction/input_filter_unittest_helpers.cc", "prediction/input_filter_unittest_helpers.h", "prediction/input_predictor_unittest_helpers.cc", "prediction/input_predictor_unittest_helpers.h", "prediction/kalman_predictor_unittest.cc", "prediction/least_squares_predictor_unittest.cc", "prediction/linear_predictor_unittest.cc", "prediction/linear_resampling_unittest.cc", "prediction/one_euro_filter_unittests.cc", "prediction/prediction_metrics_handler_unittest.cc", "prediction/prediction_unittest_helpers.h", "resource/data_pack_literal.cc", "resource/data_pack_literal.h", "resource/data_pack_unittest.cc", "resource/resource_bundle_unittest.cc", "resource/scale_factor_unittest.cc", "scoped_visibility_tracker_unittest.cc", "template_expressions_unittest.cc", "test/page_transition_types_unittest.cc", "test/run_all_unittests.cc", "webui/i18n_source_stream_unittest.cc", ] if (is_mac) { sources += [ "l10n/l10n_util_mac_unittest.mm" ] } if (!is_ios) { sources += [ "user_activity/user_activity_detector_unittest.cc" ] if (is_mac) { sources += [ "test/scoped_fake_nswindow_fullscreen_unittest.mm", "test/view_tree_validator_unittest.mm", ] } } data = [] data_deps = [] deps = [ ":ui_base_test_resources_grit", ":ui_base_unittests_bundle_data", "//base", "//base/test:test_support", "//mojo/core/embedder", "//net", "//net:test_support", "//skia", "//testing/gmock", "//testing/gtest", "//third_party/brotli:dec", "//third_party/icu", "//third_party/zlib/google:compression_utils", "//ui/base", "//ui/base:data_exchange", "//ui/base:test_support", "//ui/base:ui_data_pack", "//ui/base/clipboard:clipboard_test", "//ui/base/clipboard:clipboard_types", "//ui/base/cursor:unittests", "//ui/base/prediction:prediction", "//ui/display", "//ui/events:events_base", "//ui/events:test_support", "//ui/gfx:test_support", "//ui/resources", "//ui/resources:ui_test_pak", "//ui/strings", "//url", ] if (is_android) { sources -= [ "user_activity/user_activity_detector_unittest.cc" ] } if (is_ios) { sources += [ "l10n/l10n_util_mac_unittest.mm", "test/ios/ui_image_test_utils_unittest.mm", ] deps -= [ "//ui/events:events_base", "//ui/events:test_support", ] } else { # !is_ios sources += [ "accelerators/accelerator_history_unittest.cc", "accelerators/accelerator_manager_unittest.cc", "accelerators/accelerator_unittest.cc", "accelerators/menu_label_accelerator_util_unittest.cc", "accelerators/system_media_controls_media_keys_listener_unittest.cc", "models/list_model_unittest.cc", "models/list_selection_model_unittest.cc", "models/tree_node_model_unittest.cc", "text/bytes_formatting_unittest.cc", "webui/web_ui_util_unittest.cc", ] deps += [ "//components/system_media_controls:test_support" ] if (is_linux || is_chromeos) { sources += [ "accelerators/menu_label_accelerator_util_linux_unittest.cc" ] } if (is_mac) { sources += [ "accelerators/platform_accelerator_cocoa_unittest.mm", "cocoa/base_view_unittest.mm", "cocoa/bubble_closer_unittest.mm", "cocoa/cocoa_base_utils_unittest.mm", "cocoa/constrained_window/constrained_window_animation_unittest.mm", "cocoa/focus_tracker_unittest.mm", "cocoa/menu_controller_unittest.mm", "cocoa/touch_bar_util_unittest.mm", "cocoa/tracking_area_unittest.mm", "cocoa/weak_ptr_nsobject_unittest.mm", ] } } # TODO(crbug.com/1091985): Support CrOS. if (is_win || is_mac || (is_linux && !is_chromeos)) { sources += [ "test/skia_gold_matching_algorithm_unittest.cc", "test/skia_gold_pixel_diff_unittest.cc", ] deps += [ ":pixel_diff_test_support" ] } if (build_ime) { sources += [ "ime/candidate_window_unittest.cc", "ime/composition_text_unittest.cc", "ime/input_method_base_unittest.cc", "ime/mojom/ime_mojom_traits_unittest.cc", ] if (is_win) { sources += [ "ime/win/imm32_manager_unittest.cc", "ime/win/on_screen_keyboard_display_manager_unittest.cc", "ime/win/tsf_input_policy_unittest.cc", "ime/win/tsf_input_scope_unittest.cc", "ime/win/tsf_text_store_unittest.cc", ] deps += [ "//ui/base/ime/win" ] } if (is_chromeos) { sources += [ "ime/chromeos/extension_ime_util_unittest.cc", "ime/chromeos/ime_keyboard_unittest.cc", "ime/chromeos/input_method_chromeos_unittest.cc", "ime/chromeos/input_method_util_unittest.cc", ] deps += [ "//ui/base/ime/chromeos" ] } if (is_linux && use_aura && !is_chromeos) { if (use_x11 || use_ozone) { sources += [ "ime/linux/input_method_auralinux_unittest.cc" ] deps += [ "//ui/base/ime/init", "//ui/base/ime/linux", ] } if (!use_x11) { sources += [ "ime/input_method_minimal_unittest.cc" ] } } if (use_x11) { sources += [ "ime/linux/composition_text_util_pango_unittest.cc" ] } if (is_chromeos || use_ozone) { sources += [ "ime/character_composer_unittest.cc" ] } } # Include the correct ui_base_test resources per platform. if (is_android) { deps += [ ":ui_base_test_android_assets" ] data_deps += [ ":ui_base_test_resources_pak" ] } else if (is_ios) { deps += [ ":ui_base_test_bundle_data" ] } else { data += [ "$root_out_dir/ui_base_test_resources.pak" ] data_deps += [ ":ui_base_test_resources_pak" ] } if (build_ime) { deps += [ "//ui/base/ime", "//ui/base/ime/mojom:test_interfaces", ] } if (is_ios) { deps += [ "//ui/resources:ui_test_pak_bundle_data" ] } else { deps += [ "//ui/base/accelerators/mojom:unittests", "//ui/base/cursor/mojom:unittests", ] } if (is_win) { sources += [ "dragdrop/os_exchange_data_win_unittest.cc", "view_prop_unittest.cc", "win/hwnd_subclass_unittest.cc", ] } if (is_android) { deps += [ "//chrome:resources", "//ui/android:ui_java", ] } if (use_pangocairo) { configs += [ "//build/config/linux/pangocairo" ] } if (use_x11) { deps += [ "//ui/base/x:unittests", "//ui/events/platform/x11", "//ui/gfx/x", ] } if (is_mac) { deps += [ ":ui_unittests_framework", "//third_party/mozilla", ] } # TODO(crbug.com/980371): Implement OSExchangeDataProvider for Fuchsia. if ((use_aura || toolkit_views) && !is_fuchsia) { sources += [ "dragdrop/os_exchange_data_unittest.cc" ] deps += [ "//ui/events", "//ui/events/platform", ] } if (use_x11) { sources += [ "dragdrop/os_exchange_data_provider_x11_unittest.cc", "x/selection_requestor_unittest.cc", ] deps += [ "//ui/gfx/x:unit_test" ] } if (is_chromeos) { deps += [ "//ui/events:dom_keycode_converter" ] } if (is_android || is_linux || is_chromeos || is_mac || is_win || is_fuchsia) { # TODO(brettw): We should be able to depend on //ui/resources:ui_test_pak # instead of depending directly on the non-test .pak files, but depending # on ui_test_pak seems to have no effect. data += [ "test/data/data_pack_unittest/truncated-header.pak", "$root_out_dir/ui_test.pak", # TODO(brettw): remove this line. ] data_deps += [ "//third_party/mesa_headers", "//ui/resources:ui_test_pak", # TODO(brettw): this does nothing. ] } if (is_linux || is_chromeos || is_win || is_fuchsia) { data += [ # TODO(brettw): Remove these two lines. "$root_out_dir/ui/en-US.pak", "$root_gen_dir/ui/resources/ui_resources_100_percent.pak", ] } if (is_mac) { data += [ "$root_out_dir/ui_unittests Framework.framework/" ] } } if (is_mac) { mac_framework_bundle("ui_unittests_framework") { testonly = true framework_version = "U" framework_contents = [ "Resources" ] deps = [ "//ui/resources:ui_test_pak_bundle_data" ] info_plist = "test/framework-Info.plist" extra_substitutions = [ "CHROMIUM_BUNDLE_ID=$chrome_mac_bundle_id" ] output_name = "ui_unittests Framework" } } if (is_win) { # This source set is used by both //chrome/browser and # //chrome/installer/setup. It must have minimal dependencies for the latter # (e.g., no skia). source_set("fullscreen_win") { sources = [ "fullscreen_win.cc", "fullscreen_win.h", ] } } if (is_linux || is_chromeos) { # This source set defines linux wm role names and must not have any external # dependencies and be kept as minimal as possible. source_set("wm_role_names") { sources = [ "wm_role_names_linux.cc", "wm_role_names_linux.h", ] } } # This target is added as a dependency of browser interactive_ui_tests. It must # be source_set, otherwise the linker will drop the tests as dead code. source_set("base_interactive_ui_tests") { testonly = true if (is_win) { sources = [ "accelerators/global_media_keys_listener_win_interactive_test.cc" ] deps = [ ":base", ":test_support", "//base/test:test_support", "//testing/gtest", "//ui/events:events", ] } }