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

  defines = [ "UI_DATA_PACK_IMPLEMENTATION" ]

  configs += [
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
    "//build/config/compiler:wexit_time_destructors",
  ]
}

buildflag_header("ui_features") {
  header = "ui_features.h"
  flags = [
    "ENABLE_HIDPI=$enable_hidpi",
    "ENABLE_MESSAGE_CENTER=$enable_message_center",
    "ENABLE_MUS=$enable_mus",
    "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/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",
    "clipboard/clipboard_android.cc",
    "clipboard/clipboard_android.h",
    "clipboard/clipboard_mac.h",
    "clipboard/clipboard_mac.mm",
    "clipboard/clipboard_types.h",
    "clipboard/clipboard_util_mac.h",
    "clipboard/clipboard_util_mac.mm",
    "clipboard/clipboard_util_win.cc",
    "clipboard/clipboard_util_win.h",
    "clipboard/clipboard_win.cc",
    "clipboard/clipboard_win.h",
    "clipboard/custom_data_helper_mac.mm",
    "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/nib_loading.h",
    "cocoa/nib_loading.mm",
    "cocoa/ns_view_ids.h",
    "cocoa/ns_view_ids.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/remote_views_window.h",
    "cocoa/remote_views_window.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_data.cc",
    "cursor/cursor_data.h",
    "cursor/cursor_loader.h",
    "cursor/cursor_type.h",
    "cursor/cursor_win.cc",
    "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.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",
    "property_data.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_features.cc",
    "ui_base_features.h",
    "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/direct_manipulation.cc",
    "win/direct_manipulation.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/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",
      "clipboard/clipboard.cc",
      "clipboard/clipboard.h",
      "clipboard/clipboard_constants.cc",
      "clipboard/clipboard_monitor.cc",
      "clipboard/clipboard_monitor.h",
      "clipboard/clipboard_observer.h",
      "clipboard/custom_data_helper.cc",
      "clipboard/custom_data_helper.h",
      "clipboard/scoped_clipboard_writer.cc",
      "clipboard/scoped_clipboard_writer.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",
      "idle/idle.cc",
      "idle/idle.h",
      "idle/idle_chromeos.cc",
      "idle/idle_linux.cc",
      "idle/idle_mac.mm",
      "idle/idle_win.cc",
      "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" ]
  } 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 {
    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 += [
      "idle/idle_fuchsia.cc",
      "l10n/l10n_util_posix.cc",
      "resource/resource_bundle_fuchsia.cc",
    ]
  }

  configs += [
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
    "//build/config/compiler:wexit_time_destructors",
  ]

  defines = [ "UI_BASE_IMPLEMENTATION" ]

  public_deps = [
    ":ui_data_pack",
    ":ui_features",
    "//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",
    "//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) {
      sources += [
        "idle/idle_query_x11.cc",
        "idle/idle_query_x11.h",
        "idle/screensaver_window_finder_x11.cc",
        "idle/screensaver_window_finder_x11.h",
      ]
      configs += [ "//build/config/linux:xscrnsaver" ]
      deps += [ "//ui/gfx/x" ]
    }
  }

  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) {
    deps += [ "//ui/events" ]
    sources += [ "window_tracker_template.h" ]
  } else {
    sources -= [
      "cursor/cursor.cc",
      "cursor/cursor.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) {
    deps += [ "//chromeos" ]
    sources -= [ "idle/idle_linux.cc" ]
  }

  if (is_chromeos || (use_aura && is_linux && !use_x11)) {
    sources += [
      "dragdrop/os_exchange_data_provider_aura.cc",
      "dragdrop/os_exchange_data_provider_aura.h",
    ]
  }

  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",
    ]
  } else {
    if (!use_aura) {
      sources -= [
        "view_prop.cc",
        "view_prop.h",
      ]
    }
  }

  if (is_mac) {
    deps += [ "//third_party/mozilla" ]

    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",
      "idle/idle.cc",
      "idle/idle.h",
      "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) {
    # Aura clipboard.
    if (use_x11 && is_desktop_linux) {
      sources += [
        "clipboard/clipboard_aurax11.cc",
        "clipboard/clipboard_aurax11.h",
      ]
    } else if (!is_win) {
      # This file is used for all non-X11, non-Windows aura Builds.
      sources += [
        "clipboard/clipboard_aura.cc",
        "clipboard/clipboard_aura.h",
      ]
    }

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

jumbo_static_library("test_support") {
  testonly = true
  sources = [
    "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/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/test_clipboard.cc",
      "test/test_clipboard.h",
      "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/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_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",
    ]
  }

  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/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",
    ]
    jni_package = "base"
  }
}

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 = [
    "class_property_unittest.cc",
    "clipboard/clipboard_mac_unittest.mm",
    "clipboard/clipboard_util_mac_unittest.mm",
    "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/test_clipboard_unittest.cc",
      "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",
      "clipboard/custom_data_helper_unittest.cc",
      "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",
      "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",
    ]
  }

  if (build_ime) {
    sources += [
      "ime/candidate_window_unittest.cc",
      "ime/chromeos/character_composer_unittest.cc",
      "ime/chromeos/extension_ime_util_unittest.cc",
      "ime/chromeos/ime_keyboard_unittest.cc",
      "ime/chromeos/input_method_util_unittest.cc",
      "ime/composition_text_unittest.cc",
      "ime/input_method_base_unittest.cc",
      "ime/input_method_chromeos_unittest.cc",
      "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",
    ]
    if (is_linux && use_aura && !is_chromeos) {
      if (use_x11 || use_ozone) {
        sources += [ "ime/input_method_auralinux_unittest.cc" ]
      } else {
        sources += [ "ime/input_method_minimal_unittest.cc" ]
      }
    }
    if (use_x11) {
      sources += [ "ime/composition_text_util_pango_unittest.cc" ]
    }
  }

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  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/display",
    "//ui/events:events_base",
    "//ui/events:test_support",
    "//ui/gfx:test_support",
    "//ui/resources",
    "//ui/resources:ui_test_pak",
    "//ui/strings",
    "//url",
  ]

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

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

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

    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) {
    sources += [ "cursor/cursor_loader_x11_unittest.cc" ]

    configs += [ "//build/config/linux:x11" ]

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

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

  if (use_aura || toolkit_views) {
    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 (is_chromeos) {
    deps += [
      "//chromeos",
      "//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",
    ]
  }
}
