# 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/jumbo.gni")
import("//build/config/linux/pangocairo/pangocairo.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//build/util/branding.gni")
import("//testing/test.gni")
import("//tools/grit/grit_rule.gni")
import("//ui/base/mpris/buildflags/buildflags.gni")
import("//ui/base/ui_features.gni")
import("//ui/ozone/ozone.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",
  ]

  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",
  ]
}

jumbo_component("base") {
  output_name = "ui_base"

  sources = [
    "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/menu_label_accelerator_util_linux.cc",
    "accelerators/menu_label_accelerator_util_linux.h",
    "accelerators/platform_accelerator_cocoa.h",
    "accelerators/platform_accelerator_cocoa.mm",
    "class_property.cc",
    "class_property.h",
    "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/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_forward_declarations.h",
    "cocoa/touch_bar_forward_declarations.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",
    "cursor/cursor.cc",
    "cursor/cursor.h",
    "cursor/cursor_android.cc",
    "cursor/cursor_loader.h",
    "cursor/cursor_size.h",
    "cursor/cursor_win.cc",
    "cursor/types/cursor_types.h",
    "default_style.h",
    "device_form_factor.h",
    "device_form_factor_android.cc",
    "device_form_factor_desktop.cc",
    "device_form_factor_ios.mm",
    "dragdrop/download_file_interface.h",
    "dragdrop/drag_drop_types.h",
    "dragdrop/drag_drop_types_mac.mm",
    "dragdrop/drag_drop_types_win.cc",
    "dragdrop/drag_source_win.cc",
    "dragdrop/drag_source_win.h",
    "dragdrop/drop_target_event.cc",
    "dragdrop/drop_target_event.h",
    "dragdrop/drop_target_win.cc",
    "dragdrop/drop_target_win.h",
    "dragdrop/os_exchange_data.cc",
    "dragdrop/os_exchange_data.h",
    "dragdrop/os_exchange_data_provider_builder_mac.h",
    "dragdrop/os_exchange_data_provider_builder_mac.mm",
    "dragdrop/os_exchange_data_provider_factory.cc",
    "dragdrop/os_exchange_data_provider_factory.h",
    "dragdrop/os_exchange_data_provider_mac.h",
    "dragdrop/os_exchange_data_provider_mac.mm",
    "dragdrop/os_exchange_data_provider_win.cc",
    "dragdrop/os_exchange_data_provider_win.h",
    "hit_test.cc",
    "hit_test.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_android.cc",
    "l10n/l10n_util_android.h",
    "l10n/l10n_util_collator.h",
    "l10n/l10n_util_mac.h",
    "l10n/l10n_util_mac.mm",
    "l10n/l10n_util_win.cc",
    "l10n/l10n_util_win.h",
    "l10n/time_format.cc",
    "l10n/time_format.h",
    "layout.cc",
    "layout.h",
    "material_design/material_design_controller.cc",
    "material_design/material_design_controller.h",
    "material_design/material_design_controller_observer.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/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",
    "platform_window_defaults.cc",
    "platform_window_defaults.h",
    "resource/resource_bundle.cc",
    "resource/resource_bundle.h",
    "resource/resource_bundle_android.cc",
    "resource/resource_bundle_android.h",
    "resource/resource_bundle_auralinux.cc",
    "resource/resource_bundle_ios.mm",
    "resource/resource_bundle_mac.mm",
    "resource/resource_bundle_win.cc",
    "resource/resource_bundle_win.h",
    "resource/resource_data_dll_win.cc",
    "resource/resource_data_dll_win.h",
    "resource/whitelist.h",
    "template_expressions.cc",
    "template_expressions.h",
    "theme_provider.cc",
    "theme_provider.h",
    "ui_base_export.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",
    "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",
    "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",
    "win/accessibility_ids_win.h",
    "win/accessibility_misc_utils.cc",
    "win/accessibility_misc_utils.h",
    "win/atl_module.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/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",
    "window_open_disposition.cc",
    "window_open_disposition.h",
  ]

  if (is_posix) {
    sources += [ "l10n/l10n_util_posix.cc" ]
  }

  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",
      "base_window.cc",
      "base_window.h",
      "cocoa/bubble_closer.h",
      "cocoa/bubble_closer.mm",
      "cursor/cursor_util.cc",
      "cursor/cursor_util.h",
      "default_theme_provider.cc",
      "default_theme_provider.h",
      "dragdrop/cocoa_dnd_util.h",
      "dragdrop/cocoa_dnd_util.mm",
      "dragdrop/file_info.cc",
      "dragdrop/file_info.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",
    ]
  }

  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",
      "accelerators/remote_command_media_keys_listener_mac.h",
      "accelerators/remote_command_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",
      "accelerators/system_media_controls_media_keys_listener.cc",
      "accelerators/system_media_controls_media_keys_listener.h",
    ]
  } else if (use_mpris) {
    sources += [
      "accelerators/media_keys_listener_linux.cc",
      "accelerators/mpris_media_keys_listener.cc",
      "accelerators/mpris_media_keys_listener.h",
    ]
  } 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) {
    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 += [
      "l10n/l10n_util_posix.cc",
      "resource/resource_bundle_fuchsia.cc",
    ]
  }

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  defines = [ "UI_BASE_IMPLEMENTATION" ]

  public_deps = [
    ":buildflags",
    ":features",
    ":ui_data_pack",
    "//base",
    "//skia",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
  deps = [
    "//base:base_static",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//net",
    "//third_party/icu",
    "//third_party/zlib:zlib",
    "//third_party/zlib/google:compression_utils",
    "//ui/base/clipboard:clipboard_types",
    "//ui/display",
    "//ui/events",
    "//ui/events/devices",
    "//ui/resources",
    "//ui/strings",
    "//url",
  ]

  if (!is_ios) {
    # iOS does not use Chromium-specific code for event handling.
    public_deps += [
      "//ui/events:events_base",
      "//ui/events/platform",
    ]
  }

  if (is_ios) {
    set_sources_assignment_filter([])
    sources += [
      "l10n/l10n_util_mac.h",
      "l10n/l10n_util_mac.mm",
    ]
    public_deps += [ "//ui/events:event_constants" ]

    set_sources_assignment_filter(sources_assignment_filter)
  }

  if (toolkit_views) {
    deps += [ "//ui/events" ]
  }

  if (use_x11) {
    public_deps += [ "//ui/base/x" ]
    configs += [ "//build/config/linux:x11" ]

    if (!is_chromeos) {
      configs += [ "//build/config/linux:xscrnsaver" ]
      deps += [ "//ui/gfx/x" ]
    }
  }

  if (is_win) {
    deps += [ "//ui/base/win/system_media_controls" ]
  }

  if (use_mpris) {
    deps += [
      "//dbus",
      "//ui/base/mpris",
    ]
  }

  if (use_x11 && use_aura) {
    sources += [
      "cursor/cursor_loader_x11.cc",
      "cursor/cursor_loader_x11.h",
      "cursor/cursor_x11.cc",
      "x/selection_owner.cc",
      "x/selection_owner.h",
      "x/selection_requestor.cc",
      "x/selection_requestor.h",
      "x/selection_utils.cc",
      "x/selection_utils.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_aurax11.cc",
        "dragdrop/os_exchange_data_provider_aurax11.h",
      ]
    }
  }

  if (!use_aura || !is_linux) {
    sources -= [ "resource/resource_bundle_auralinux.cc" ]
  }

  if (is_linux) {
    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 && !use_x11)) {
    sources += [
      "dragdrop/os_exchange_data_provider_aura.cc",
      "dragdrop/os_exchange_data_provider_aura.h",
    ]
  }

  if (is_mac || is_win) {
    deps += [ "//ui/base/clipboard" ]
  }

  libs = []
  if (is_win) {
    sources += [
      "cursor/cursor_loader_win.cc",
      "cursor/cursor_loader_win.h",
    ]
    deps += [ "//third_party/wtl" ]
    cflags = [ "/wd4324" ]  # Structure was padded due to __declspec(align()), which is
                            # uninteresting.

    ldflags = [
      "/DELAYLOAD:d2d1.dll",
      "/DELAYLOAD:d3d10_1.dll",
      "/DELAYLOAD:dwmapi.dll",
    ]
    libs += [
      "d2d1.lib",
      "d3d10_1.lib",
      "dwmapi.lib",
      "d2d1.lib",
      "dwmapi.lib",
      "oleacc.lib",
      "wtsapi32.lib",
    ]
  } else {
    if (!use_aura) {
      sources -= [
        "view_prop.cc",
        "view_prop.h",
      ]
    }
  }

  if (is_mac) {
    deps += [
      "//third_party/mozilla",
      "//ui/base/now_playing",
    ]

    libs += [
      "Accelerate.framework",
      "AppKit.framework",
      "QuartzCore.framework",
      "AudioUnit.framework",
      "Carbon.framework",
      "CoreVideo.framework",
      "Foundation.framework",
    ]
  }

  if (use_ozone) {
    sources += [
      "cursor/cursor_loader_ozone.cc",
      "cursor/cursor_loader_ozone.h",
      "cursor/cursor_ozone.cc",
      "cursor/ozone/bitmap_cursor_factory_ozone.cc",
      "cursor/ozone/bitmap_cursor_factory_ozone.h",
    ]

    deps += [
      "//ui/events/ozone:events_ozone_layout",
      "//ui/ozone:ozone_base",
    ]

    if (!is_fuchsia) {
      deps += [ "//ui/events/ozone:events_ozone_evdev" ]
    }
  }

  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 -= [
      "cursor/cursor_android.cc",
      "default_theme_provider.cc",
      "l10n/l10n_font_util.cc",
      "models/button_menu_item_model.cc",
      "pointer/touch_editing_controller.cc",
      "theme_provider.cc",
      "ui_base_types.cc",
    ]
  }

  if (use_aura) {
    # Cursor
    sources += [
      "cursor/cursors_aura.cc",
      "cursor/cursors_aura.h",
      "cursor/image_cursors.cc",
      "cursor/image_cursors.h",
    ]
  }

  if (is_android || is_ios) {
    sources -= [ "device_form_factor_desktop.cc" ]
  }
}

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",
  ]
}

jumbo_static_library("test_support") {
  testonly = true
  sources = [
    "resource/mock_resource_bundle_delegate.cc",
    "resource/mock_resource_bundle_delegate.h",
    "test/material_design_controller_test_api.cc",
    "test/material_design_controller_test_api.h",
    "test/ui_controls.h",
    "test/ui_controls_aura.cc",
    "test/ui_controls_aura.h",
    "test/ui_controls_internal_win.cc",
    "test/ui_controls_internal_win.h",
    "test/ui_controls_mac.mm",
    "test/ui_controls_win.cc",
  ]

  if (!is_ios) {
    sources += [
      "accelerators/test_accelerator_target.cc",
      "accelerators/test_accelerator_target.h",
      "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/view_tree_validator.h",
      "test/view_tree_validator.mm",
      "test/windowed_nsnotification_observer.h",
      "test/windowed_nsnotification_observer.mm",
    ]
  } 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",
    ]
  }

  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 (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",
      "ime/win/mock_tsf_bridge.cc",
      "ime/win/mock_tsf_bridge.h",
    ]

    deps += [
      "//ui/base/ime",
      "//ui/events",
    ]

    if (is_win) {
      deps += [ "//ui/base/ime/win" ]
    }
  }

  if (is_chromeos) {
    sources += [
      "ime/chromeos/input_method_whitelist.cc",
      "ime/chromeos/input_method_whitelist.h",
      "ime/chromeos/mock_input_method_manager.cc",
      "ime/chromeos/mock_input_method_manager.h",
    ]
    deps += [
      # Generates a header used by input_method_whitelist.cc
      "//chromeos/ime:gencode",
      "//ui/base/ime/chromeos",
    ]
  }

  if (!use_aura) {
    sources -= [
      "test/ui_controls_aura.cc",
      "test/ui_controls_aura.h",
    ]
  } else if (is_win) {
    sources -= [ "test/ui_controls_win.cc" ]
  }
}

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",
    ]
  }

  java_cpp_enum("ui_base_cursor_type_java_enums_srcjar") {
    sources = [
      "./cursor/types/cursor_types.h",
    ]
  }
}

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") {
  sources = [
    "accelerators/remote_command_media_keys_listener_mac_unittest.mm",
    "class_property_unittest.cc",
    "l10n/l10n_util_mac_unittest.mm",
    "l10n/l10n_util_unittest.cc",
    "l10n/time_format_unittest.cc",
    "layout_unittest.cc",
    "material_design/material_design_controller_unittest.cc",
    "models/simple_menu_model_unittest.cc",
    "models/tree_node_iterator_unittest.cc",
    "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",
    "template_expressions_unittest.cc",
    "test/page_transition_types_unittest.cc",
    "test/run_all_unittests.cc",
    "user_activity/user_activity_detector_unittest.cc",
    "webui/i18n_source_stream_unittest.cc",
  ]
  if (!is_ios) {
    sources += [
      "test/scoped_fake_nswindow_fullscreen_unittest.mm",
      "test/view_tree_validator_unittest.mm",
    ]
  }

  data = []
  data_deps = []

  if (is_android) {
    sources -= [ "user_activity/user_activity_detector_unittest.cc" ]
  }

  if (is_ios) {
    # Compile this Mac file on iOS as well.
    set_sources_assignment_filter([])
    sources += [
      "l10n/l10n_util_mac_unittest.mm",
      "test/ios/ui_image_test_utils_unittest.mm",
    ]
    set_sources_assignment_filter(sources_assignment_filter)
  } else {  # !is_ios
    sources += [
      "accelerators/accelerator_history_unittest.cc",
      "accelerators/accelerator_manager_unittest.cc",
      "accelerators/accelerator_unittest.cc",
      "accelerators/menu_label_accelerator_util_linux_unittest.cc",
      "accelerators/menu_label_accelerator_util_unittest.cc",
      "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",
      "cursor/cursor_unittest.cc",
      "cursor/cursor_util_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 = [
    ":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/icu",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/base:ui_data_pack",
    "//ui/base/clipboard:clipboard_test",
    "//ui/base/clipboard:clipboard_types",
    "//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 (build_ime) {
    sources += [
      "ime/candidate_window_unittest.cc",
      "ime/composition_text_unittest.cc",
      "ime/input_method_base_unittest.cc",
      "ime/mojo/ime_struct_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_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/mojo:test_interfaces",
    ]
  }

  if (is_ios) {
    deps += [ "//ui/resources:ui_test_pak_bundle_data" ]
  } else {
    deps += [
      "//ui/base/accelerators/mojo:unittests",
      "//ui/base/mojom:unittests",
    ]
  }

  if (is_win) {
    sources += [
      "accelerators/system_media_controls_media_keys_listener_unittest.cc",
      "dragdrop/os_exchange_data_win_unittest.cc",
      "win/hwnd_subclass_unittest.cc",
    ]

    deps += [ "//ui/base/win/system_media_controls:test_support" ]

    ldflags = [
      "/DELAYLOAD:d2d1.dll",
      "/DELAYLOAD:d3d10_1.dll",
    ]
    libs = [
      "d2d1.lib",
      "d3d10_1.lib",
      "imm32.lib",
      "oleacc.lib",
    ]
  }

  if (is_win) {
    sources += [ "view_prop_unittest.cc" ]
  }

  if (is_android) {
    deps += [
      "//chrome:resources",
      "//ui/android:ui_java",
    ]
  }

  if (use_pangocairo) {
    configs += [ "//build/config/linux/pangocairo" ]
  }

  if (use_x11) {
    configs += [ "//build/config/linux:x11" ]

    deps += [
      "//ui/events/platform/x11",
      "//ui/gfx/x",
    ]
  }

  if (is_mac) {
    deps += [
      ":ui_unittests_framework",
      "//third_party/mozilla",
      "//ui/base/now_playing:test_support",
    ]
  }

  # 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_aurax11_unittest.cc",
      "x/selection_requestor_unittest.cc",
    ]
  }

  if (use_mpris) {
    sources += [ "accelerators/mpris_media_keys_listener_unittest.cc" ]
    deps += [
      "//ui/base/mpris:test_support",
      "//ui/base/mpris:unit_tests",
    ]
  }

  if (is_chromeos) {
    deps += [ "//ui/events:dom_keycode_converter" ]
  }

  if (is_android || is_linux || 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 += [
      "//ui/resources:ui_test_pak",  # TODO(brettw): this does nothing.
      "//third_party/mesa_headers",
    ]
  }
  if (is_linux || 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_asan && symbol_level == 0) {
      # TODO(crbug.com/330301): make this conditional on mac_strip_release.
      # data += [ "$root_out_dir/ui_base_unittests.dSYM/" ]
    }
  }
}

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",
    ]
  }
}

# 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",
    ]
  }
}
