# 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("//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/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/hover_button.h",
    "cocoa/hover_button.mm",
    "cocoa/hover_image_button.h",
    "cocoa/hover_image_button.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_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_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/dialog_model.cc",
    "models/dialog_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",
    "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",
      "text/bytes_formatting.cc",
      "text/bytes_formatting.h",
      "touch/touch_device.h",
      "touch/touch_device_util.cc",
      "touch/touch_editing_controller.cc",
      "touch/touch_editing_controller.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 {
    sources += [ "accelerators/media_keys_listener_stub.cc" ]
  }

  if (is_win) {
    sources += [ "touch/touch_device_win.cc" ]
  } else if (is_android) {
    sources += [ "touch/touch_device_android.cc" ]
  } else if (is_ios) {
    sources += [ "touch/touch_device_ios.cc" ]
  } else if (is_linux) {
    sources += [ "touch/touch_device_linux.cc" ]
  } else {
    # Empty implementation for all other cases.
    sources += [ "touch/touch_device.cc" ]
    sources -= [ "touch/touch_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",
      "cursor/ozone/cursor_data_factory_ozone.cc",
      "cursor/ozone/cursor_data_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",
      "models/dialog_model.cc",
      "theme_provider.cc",
      "touch/touch_editing_controller.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}}",
  ]
}

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/hover_button_unittest.mm",
      "cocoa/hover_image_button_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",
      "test/data/resource.h",
      "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_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",
  ]

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