# 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/config/ui.gni")

if (is_android) {
  import("//build/config/android/config.gni")
  import("//build/config/android/rules.gni")
}

declare_args() {
  ui_base_build_ime = true
}

component("base") {
  output_name = "ui_base"
  sources = [
    "accelerators/accelerator.cc",
    "accelerators/accelerator.h",
    "accelerators/accelerator_manager.cc",
    "accelerators/accelerator_manager.h",
    "accelerators/menu_label_accelerator_util_linux.cc",
    "accelerators/menu_label_accelerator_util_linux.h",
    "accelerators/platform_accelerator.h",
    "android/system_ui_resource_manager.h",
    "android/ui_base_jni_registrar.cc",
    "android/ui_base_jni_registrar.h",
    "android/view_android.cc",
    "android/view_android.h",
    "android/window_android.cc",
    "android/window_android.h",
    "android/window_android_compositor.h",
    "android/window_android_observer.h",
    "base_window.cc",
    "base_window.h",
    "clipboard/clipboard.cc",
    "clipboard/clipboard.h",
    "clipboard/clipboard_android.cc",
    "clipboard/clipboard_android.h",
    "clipboard/clipboard_constants.cc",
    "clipboard/clipboard_mac.h",
    "clipboard/clipboard_mac.mm",
    "clipboard/clipboard_types.h",
    "clipboard/clipboard_util_win.cc",
    "clipboard/clipboard_util_win.h",
    "clipboard/clipboard_win.cc",
    "clipboard/clipboard_win.h",
    "clipboard/custom_data_helper.cc",
    "clipboard/custom_data_helper.h",
    "clipboard/custom_data_helper_linux.cc",
    "clipboard/custom_data_helper_mac.mm",
    "clipboard/scoped_clipboard_writer.cc",
    "clipboard/scoped_clipboard_writer.h",
    "cursor/cursor.cc",
    "cursor/cursor.h",
    "cursor/cursor_android.cc",
    "cursor/cursor_loader.h",
    "cursor/cursor_util.cc",
    "cursor/cursor_util.h",
    "cursor/cursor_win.cc",
    "cursor/cursors_aura.cc",
    "cursor/cursors_aura.h",
    "cursor/image_cursors.cc",
    "cursor/image_cursors.h",
    "default_theme_provider.cc",
    "default_theme_provider.h",
    "default_theme_provider_mac.mm",
    "dragdrop/drag_drop_types.h",
    "dragdrop/drag_drop_types_win.cc",
    "dragdrop/drag_source_win.cc",
    "dragdrop/drag_source_win.h",
    "dragdrop/drag_utils.cc",
    "dragdrop/drag_utils.h",
    "dragdrop/drag_utils_aura.cc",
    "dragdrop/drag_utils_mac.mm",
    "dragdrop/drag_utils_win.cc",
    "dragdrop/drop_target_event.cc",
    "dragdrop/drop_target_event.h",
    "dragdrop/drop_target_win.cc",
    "dragdrop/drop_target_win.h",
    "dragdrop/file_info.cc",
    "dragdrop/file_info.h",
    "dragdrop/os_exchange_data.cc",
    "dragdrop/os_exchange_data.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_plurals.cc",
    "l10n/l10n_util_plurals.h",
    "l10n/l10n_util_posix.cc",
    "l10n/l10n_util_win.cc",
    "l10n/l10n_util_win.h",
    "l10n/time_format.cc",
    "l10n/time_format.h",
    "layout.cc",
    "layout.h",
    "layout_mac.mm",
    "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",
    "resource/data_pack.cc",
    "resource/data_pack.h",
    "resource/resource_bundle.cc",
    "resource/resource_bundle.h",
    "resource/resource_bundle_android.cc",
    "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/resource_handle.h",
    "text/bytes_formatting.cc",
    "text/bytes_formatting.h",
    "theme_provider.cc",
    "theme_provider.h",
    "touch/touch_device.h",
    "touch/touch_editing_controller.cc",
    "touch/touch_editing_controller.h",
    "touch/touch_enabled.cc",
    "touch/touch_enabled.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",
    "view_prop.cc",
    "view_prop.h",
    "win/accessibility_ids_win.h",
    "win/accessibility_misc_utils.cc",
    "win/accessibility_misc_utils.h",
    "win/atl_module.h",
    "win/dpi_setup.cc",
    "win/dpi_setup.h",
    "win/foreground_helper.cc",
    "win/foreground_helper.h",
    "win/hidden_window.cc",
    "win/hidden_window.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/open_file_name_win.cc",
    "win/open_file_name_win.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",
  ]

  if (is_win) {
    sources += [ "touch/touch_device_win.cc" ]
  } else if (is_android) {
    sources += [ "touch/touch_device_android.cc" ]
  } else if (use_ozone) {
    sources += [ "touch/touch_device_ozone.cc" ]
  } else if (use_aura && use_x11) {
    sources += [ "touch/touch_device_aurax11.cc" ]
  } else {
    # Empty implementation for all other cases.
    sources += [ "touch/touch_device.cc" ]
  }

  defines = [ "UI_BASE_IMPLEMENTATION" ]

  public_deps = [
    "//base",
    "//skia",
    "//ui/events/platform",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
  deps = [
    "//base/third_party/dynamic_annotations",
    "//base:base_static",
    "//base:i18n",
    "//net",
    "//third_party/icu",
    "//ui/resources",
    "//ui/strings",
    "//url",
  ]

  if (ui_base_build_ime) {
    if (!is_android) {
      deps += [
        "//ui/events",
      ]
    }

    sources += [
      "ime/candidate_window.cc",
      "ime/candidate_window.h",
      "ime/chromeos/character_composer.cc",
      "ime/chromeos/character_composer.h",
      "ime/chromeos/ime_bridge.cc",
      "ime/chromeos/ime_bridge.h",
      "ime/chromeos/ime_keymap.cc",
      "ime/chromeos/ime_keymap.h",
      "ime/chromeos/mock_ime_candidate_window_handler.cc",
      "ime/chromeos/mock_ime_candidate_window_handler.h",
      "ime/chromeos/mock_ime_engine_handler.cc",
      "ime/chromeos/mock_ime_engine_handler.h",
      "ime/chromeos/mock_ime_input_context_handler.cc",
      "ime/chromeos/mock_ime_input_context_handler.h",
      "ime/composition_text.cc",
      "ime/composition_text.h",
      "ime/composition_text_util_pango.cc",
      "ime/composition_text_util_pango.h",
      "ime/composition_underline.h",
      "ime/dummy_input_method_delegate.cc",
      "ime/dummy_input_method_delegate.h",
      "ime/infolist_entry.cc",
      "ime/infolist_entry.h",
      "ime/input_method.h",
      "ime/input_method_auralinux.cc",
      "ime/input_method_auralinux.h",
      "ime/input_method_base.cc",
      "ime/input_method_base.h",
      "ime/input_method_chromeos.cc",
      "ime/input_method_chromeos.h",
      "ime/input_method_delegate.h",
      "ime/input_method_factory.cc",
      "ime/input_method_factory.h",
      "ime/input_method_initializer.cc",
      "ime/input_method_initializer.h",
      "ime/input_method_mac.h",
      "ime/input_method_mac.mm",
      "ime/input_method_minimal.cc",
      "ime/input_method_minimal.h",
      "ime/input_method_observer.h",
      "ime/input_method_win.cc",
      "ime/input_method_win.h",
      "ime/linux/fake_input_method_context.cc",
      "ime/linux/fake_input_method_context.h",
      "ime/linux/fake_input_method_context_factory.cc",
      "ime/linux/fake_input_method_context_factory.h",
      "ime/linux/linux_input_method_context.h",
      "ime/linux/linux_input_method_context_factory.cc",
      "ime/linux/linux_input_method_context_factory.h",
      "ime/mock_input_method.cc",
      "ime/mock_input_method.h",
      "ime/remote_input_method_delegate_win.h",
      "ime/remote_input_method_win.cc",
      "ime/remote_input_method_win.h",
      "ime/text_input_client.cc",
      "ime/text_input_client.h",
      "ime/text_input_focus_manager.cc",
      "ime/text_input_focus_manager.h",
      "ime/text_input_type.h",
      "ime/win/imm32_manager.cc",
      "ime/win/imm32_manager.h",
      "ime/win/tsf_input_scope.cc",
      "ime/win/tsf_input_scope.h",
    ]

    if (!use_aura || (!is_linux && !use_ozone)) {
      sources -= [
        "ime/input_method_auralinux.cc",
        "ime/input_method_auralinux.h",
      ]
    }

    if (!toolkit_views && !use_aura) {
      sources -= [
        "ime/input_method_factory.cc",
        "ime/input_method_factory.h",
        "ime/input_method_minimal.cc",
        "ime/input_method_minimal.h",
      ]
    }

    if (is_chromeos) {
      deps += [
        "//chromeos",
      ]
    }

    if (use_pango) {
      configs += [ "//build/config/linux:pangocairo" ]
    } else {
      sources -= [
        "ime/composition_text_util_pango.cc",
        "ime/composition_text_util_pango.h",
      ]
    }
  }

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

  if (use_x11 && use_aura) {
    sources += [
      "x/selection_owner.cc",
      "x/selection_owner.h",
      "x/selection_requestor.cc",
      "x/selection_requestor.h",
      "x/selection_utils.cc",
      "x/selection_utils.h",
    ]
  }

  if (use_aura) {
    deps += [
      "//ui/events",
    ]
  } else {
    sources -= [
      "cursor/cursor.cc",
      "cursor/cursor.h",
      "dragdrop/drag_utils_aura.cc",
    ]
  }
  if (use_x11) {
    sources += [
      "x/x11_foreign_window_manager.cc",
      "x/x11_foreign_window_manager.h",
      "x/x11_menu_list.cc",
      "x/x11_menu_list.h",
      "x/x11_util.cc",
      "x/x11_util.h",
      "x/x11_util_internal.h",
    ]
    deps += [ "//ui/gfx/x" ]
  }

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

  if (use_aura && is_win) {
    sources -= [
      "dragdrop/drag_utils_aura.cc",
    ]
  }

  if (is_linux) {
    configs += [
      "//build/config/linux:fontconfig",
      "//build/config/linux:glib",
    ]
  }

  if ((is_linux && !is_chromeos) || is_chromeos) {
    if (!toolkit_views && !use_aura) {
      sources -= [
        "dragdrop/drag_utils.cc",
        "dragdrop/drag_utils.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",
    ]
  }

  libs = []
  if (is_win) {
    sources += [
      "cursor/cursor_loader_win.cc",
      "cursor/cursor_loader_win.h",
    ]
    cflags = [
      "/wd4267",  # TODO(jschuh): C4267: http://crbug.com/167187 size_t -> int.
      "/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",
      "imm32.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",
    ]

    sources -= [
      "cursor/image_cursors.cc",
      "cursor/image_cursors.h",
      "dragdrop/drag_utils.cc",
      "dragdrop/drag_utils.h",
    ]

    libs += [
      "Accelerate.framework",
      "AudioUnit.framework",
      "CoreVideo.framework",
    ]
  }

  if (use_x11) {
    #'all_dependent_settings': {
      #'ldflags': [
        #'-L<(PRODUCT_DIR)',
      #],
    #},
    configs += [
      "//build/config/linux:x11"
    ]
  }

  if (use_aura) {
    if (use_x11) {
      sources += [
        "cursor/cursor_loader_x11.cc",
        "cursor/cursor_loader_x11.h",
        "cursor/cursor_x11.cc",
      ]
      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_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/ozone:ozone_base",
    ]
  }

  if (!toolkit_views) {
    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",
      "nine_image_painter_factory.cc",
      "nine_image_painter_factory.h",
    ]
  }

  if (is_android) {
    sources -= [
      "default_theme_provider.cc",
      "dragdrop/drag_utils.cc",
      "dragdrop/drag_utils.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",
    ]

    deps += [
      ":ui_base_jni_headers",
    ]

    libs += [
      "jnigraphics",
    ]
  }

  if (is_android && is_android_webview_build) {
    deps += [
      #TODO(GYP): port this component to GN.
      #"//ui/android:ui_java",
    ]
  }

  if (is_android && !use_aura) {
    sources -= [
      "cursor/cursor_android.cc",
    ]
  }

  # Aura clipboard.
  if (use_aura) {
    if (use_x11) {
      sources += [ "clipboard/clipboard_aurax11.cc" ]
    } else if (!is_win) {
      # This file is used for all non-X11, non-Windows aura Builds.
      sources += [ "clipboard/clipboard_aura.cc" ]
    }
  }
}

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

  public_deps = [
    ":base",
  ]
  deps = [
    "//base",
    "//skia",
    "//testing/gtest",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

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

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",
      "../android/java/src/org/chromium/ui/base/ViewAndroid.java",
      "../android/java/src/org/chromium/ui/base/WindowAndroid.java",
    ]
    jni_package = "base"
  }
}

if (false) {

# TODO(GYP): Make this work on Android and reenable it.
if (!is_android) {
# TODO(tfarina): Rename this target to ui_base_unittests.
# In order to do this we will need to keep this target, add a dummy
# ui_base_unittests target that just points to ui_unittests, change
# buildbot code to reference the new 'ui_base_unittests' target.
# After buildbot is updated, we can make the changes in Chromium and
# remove 'ui_unittests' target. crbug.com/331829
# GYP version: ui/base/ui_base_tests.gyp:ui_unittests
test("ui_unittests") {
  sources = [
    "l10n/l10n_util_mac_unittest.mm",
    "l10n/l10n_util_unittest.cc",
    "l10n/l10n_util_win_unittest.cc",
    "l10n/time_format_unittest.cc",
    "layout_unittest.cc",
    "models/tree_node_iterator_unittest.cc",
    "resource/data_pack_literal.cc",
    "resource/data_pack_unittest.cc",
    "resource/resource_bundle_unittest.cc",
    "test/run_all_unittests.cc",
  ]

  sources += [
    "accelerators/accelerator_manager_unittest.cc",
    "accelerators/menu_label_accelerator_util_linux_unittest.cc",
    "clipboard/custom_data_helper_unittest.cc",
    "dragdrop/os_exchange_data_provider_aurax11_unittest.cc",
    "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",
    "view_prop_unittest.cc",
    "x/selection_requestor_unittest.cc",
  ]

  if (!use_x11) {
    if (is_chromeos) {
      # These were already removed in the chromeos case.
      sources -= [
        "ime/chromeos/character_composer_unittest.cc",
        "ime/input_method_chromeos_unittest.cc",
      ]
    }
  }

  if (ui_base_build_ime) {
    sources += [
      "ime/candidate_window_unittest.cc",
      "ime/chromeos/character_composer_unittest.cc",
      "ime/input_method_base_unittest.cc",
      "ime/input_method_chromeos_unittest.cc",
      "ime/remote_input_method_win_unittest.cc",
      "ime/win/imm32_manager_unittest.cc",
      "ime/win/tsf_input_scope_unittest.cc",
    ]
    if (use_x11) {
      sources += [ "ime/composition_text_util_pango_unittest.cc" ]
    }
  }

  deps = [
    "//base",
    "//base/allocator",
    "//base/test:test_support",
    "//net",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/icu",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/events:events_base",
    "//ui/events:test_support",
    "//ui/gfx:test_support",
    "//ui/resources",
    "//ui/resources:ui_test_pak",
    "//ui/strings",
    "//url",
  ]

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

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

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    cflags = [ "/wd4267" ]
  }

  if (is_android) {
    deps += [
      #"testing/android/native_test.gyp:native_test_native_code"  TODO(GYP)
    ]
  }

  if (use_pango) {
    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",
    ]

    datadeps = [
      "//tools/xdisplaycheck"
    ]
  }

  if (!is_win || !use_aura) {
    sources -= [
      "view_prop_unittest.cc"
    ]
  }

  if (is_mac) {
    deps += [
      "//third_party/mozilla",
      #'ui_unittests_bundle',  TODO(GYP)
    ]
  }

  if (use_aura || toolkit_views) {
    sources += [
      "dragdrop/os_exchange_data_unittest.cc"
    ]

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

  if (is_chromeos) {
    sources += [
      "../chromeos/touch_exploration_controller_unittest.cc",
    ]
    sources -= [
      "dragdrop/os_exchange_data_provider_aurax11_unittest.cc",
      "x/selection_requestor_unittest.cc",
    ]
    deps += [
      "//chromeos",
      "//ui/aura:test_support",
      "//ui/events:gesture_detection",
      "//ui/chromeos:ui_chromeos",
    ]
  }
}
}
}
# TODO(GYP) Mac (ui_unittest_bundle) and Android (ui_unittests_apk).
