# 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/ozone.gni")
import("//build/config/ui.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

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

# Several targets want to include this header file, and some of them are
# child dependencies of "gfx". Therefore, we separate it out here so multiple
# targets can all have a dependency for header checking purposes without
# creating circular dependencies.
source_set("gfx_export") {
  sources = [ "gfx_export.h" ]
}

# Used for color generation at build time without importing all the gfx.
component("color_utils") {
  sources = [
    "color_palette.h",
    "color_utils.cc",
    "color_utils.h",
  ]
  defines = [ "GFX_IMPLEMENTATION" ]
  public_deps = [
    ":gfx_export",
    "//base",
    "//skia",
    "//ui/gfx/geometry",
  ]
}

component("gfx_skia") {
  sources = [
    "gfx_skia_export.h",
    "skia_util.cc",
    "skia_util.h",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  public_deps = [
    "//base",
    "//skia",
  ]
  defines = [ "GFX_SKIA_IMPLEMENTATION" ]
}

component("gfx") {
  sources = [
    "break_list.h",
    "color_analysis.cc",
    "color_analysis.h",
    "color_transform.cc",
    "color_transform.h",
    "decorated_text.cc",
    "decorated_text.h",
    "delegated_ink_metadata.cc",
    "delegated_ink_metadata.h",
    "delegated_ink_point.cc",
    "delegated_ink_point.h",
    "extension_set.cc",
    "extension_set.h",
    "favicon_size.cc",
    "favicon_size.h",
    "font.cc",
    "font.h",
    "font_fallback.h",
    "font_list.cc",
    "font_list.h",
    "font_list_impl.cc",
    "font_list_impl.h",
    "font_render_params.cc",
    "font_render_params.h",
    "font_util.cc",
    "font_util.h",
    "gdi_util.cc",
    "gdi_util.h",
    "gpu_extra_info.cc",
    "gpu_extra_info.h",
    "half_float.cc",
    "half_float.h",
    "icon_util.cc",
    "icon_util.h",
    "image/buffer_w_stream.cc",
    "image/buffer_w_stream.h",
    "image/image.cc",
    "image/image.h",
    "image/image_family.cc",
    "image/image_family.h",
    "image/image_platform.h",
    "image/image_png_rep.cc",
    "image/image_png_rep.h",
    "image/image_skia.cc",
    "image/image_skia.h",
    "image/image_skia_rep.h",
    "image/image_skia_source.cc",
    "image/image_skia_source.h",
    "image/image_util.cc",
    "image/image_util.h",
    "interpolated_transform.cc",
    "interpolated_transform.h",
    "nine_image_painter.cc",
    "nine_image_painter.h",
    "overlay_plane_data.cc",
    "overlay_plane_data.h",
    "overlay_transform_utils.cc",
    "overlay_transform_utils.h",
    "platform_font.h",
    "rendering_pipeline.cc",
    "rendering_pipeline.h",
    "rendering_stage_scheduler.cc",
    "rendering_stage_scheduler.h",
    "scrollbar_size.cc",
    "scrollbar_size.h",
    "selection_model.cc",
    "selection_model.h",
    "sequential_id_generator.cc",
    "sequential_id_generator.h",
    "shadow_value.cc",
    "shadow_value.h",
    "skbitmap_operations.cc",
    "skbitmap_operations.h",
    "swap_result.cc",
    "sys_color_change_listener.cc",
    "sys_color_change_listener.h",
    "text_constants.h",
    "text_elider.cc",
    "text_elider.h",
    "text_utils.cc",
    "text_utils.h",
    "ui_gfx_exports.cc",
    "utf16_indexing.cc",
    "utf16_indexing.h",
    "vector_icon_types.h",
    "vector_icon_utils.cc",
    "vector_icon_utils.h",
    "video_types.h",
    "vsync_provider.cc",
    "vsync_provider.h",
  ]
  if (is_android) {
    sources += [
      "android/android_surface_control_compat.cc",
      "android/android_surface_control_compat.h",
      "android/java_bitmap.cc",
      "android/java_bitmap.h",
      "android/view_configuration.cc",
      "android/view_configuration.h",
    ]
  }
  if (is_linux || is_chromeos) {
    sources += [
      "font_fallback_linux.cc",
      "font_fallback_linux.h",
      "font_render_params_linux.cc",
      "linux/fontconfig_util.cc",
      "linux/fontconfig_util.h",
    ]
  }
  if (is_mac) {
    sources += [
      "canvas_paint_mac.h",
      "canvas_paint_mac.mm",
      "decorated_text_mac.h",
      "decorated_text_mac.mm",
      "font_fallback_mac.mm",
      "font_render_params_mac.cc",
      "image/image_mac.mm",
      "image/image_skia_util_mac.h",
      "image/image_skia_util_mac.mm",
      "image/image_util_mac.mm",
      "mac/coordinate_conversion.h",
      "mac/coordinate_conversion.mm",
      "mac/nswindow_frame_controls.h",
      "mac/nswindow_frame_controls.mm",
      "mac/scoped_cocoa_disable_screen_updates.h",
      "mac/scoped_cocoa_disable_screen_updates.mm",
      "path_mac.h",
      "path_mac.mm",
      "platform_font_mac.h",
      "platform_font_mac.mm",
      "scoped_cg_context_save_gstate_mac.h",
      "scoped_ns_graphics_context_save_gstate_mac.h",
      "scoped_ns_graphics_context_save_gstate_mac.mm",
    ]
  }
  if (is_win) {
    sources += [
      "font_fallback_win.cc",
      "font_fallback_win.h",
      "font_render_params_win.cc",
      "path_win.cc",
      "path_win.h",
      "system_fonts_win.cc",
      "system_fonts_win.h",
      "win/crash_id_helper.cc",
      "win/crash_id_helper.h",
      "win/direct_write.cc",
      "win/direct_write.h",
      "win/hwnd_util.cc",
      "win/hwnd_util.h",
      "win/msg_util.h",
      "win/physical_size.cc",
      "win/physical_size.h",
      "win/rendering_window_manager.cc",
      "win/rendering_window_manager.h",
      "win/scoped_set_map_mode.h",
      "win/singleton_hwnd.cc",
      "win/singleton_hwnd.h",
      "win/singleton_hwnd_hot_key_observer.cc",
      "win/singleton_hwnd_hot_key_observer.h",
      "win/singleton_hwnd_observer.cc",
      "win/singleton_hwnd_observer.h",
      "win/text_analysis_source.cc",
      "win/text_analysis_source.h",
      "win/window_impl.cc",
      "win/window_impl.h",
    ]
  }
  if (is_ios) {
    sources += [
      "image/image_ios.mm",
      "image/image_skia_rep_ios.cc",
      "image/image_skia_rep_ios.h",
      "image/image_skia_util_ios.h",
      "image/image_skia_util_ios.mm",
      "image/image_util_ios.mm",
      "ios/NSString+CrStringDrawing.h",
      "ios/NSString+CrStringDrawing.mm",
      "ios/uikit_util.h",
      "ios/uikit_util.mm",
      "platform_font_ios.h",
      "platform_font_ios.mm",
      "scoped_ui_graphics_push_context_ios.h",
      "scoped_ui_graphics_push_context_ios.mm",
      "text_utils_ios.mm",
    ]
  }
  if (!is_ios) {
    sources += [
      "blit.cc",
      "blit.h",
      "canvas.cc",
      "canvas.h",
      "canvas_skia.cc",
      "canvas_skia_paint.h",
      "image/canvas_image_source.cc",
      "image/canvas_image_source.h",
      "image/image_generic.cc",
      "image/image_skia_operations.cc",
      "image/image_skia_operations.h",
      "image/image_skia_rep_default.cc",
      "image/image_skia_rep_default.h",
      "paint_throbber.cc",
      "paint_throbber.h",
      "scoped_canvas.cc",
      "scoped_canvas.h",
      "shadow_util.cc",
      "shadow_util.h",
      "skia_paint_util.cc",
      "skia_paint_util.h",
    ]
  }

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

  # This is part of the gfx component in the component build.
  defines = [ "GFX_IMPLEMENTATION" ]

  public_deps = [
    ":color_space",
    ":color_utils",
    ":gfx_skia",
    ":gfx_switches",
    ":memory_buffer_sources",
    ":native_widget_types",
    ":resize_image_dimensions",
    ":selection_bound_sources",
    "//base",
    "//skia",
    "//skia:skcms",
    "//third_party/icu",
    "//ui/gfx/animation",
    "//ui/gfx/codec",
    "//ui/gfx/geometry",
    "//ui/gfx/geometry:geometry_skia",
    "//ui/gfx/range",
  ]
  deps = [
    ":gfx_export",
    "//base",
    "//base:base_static",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//build:chromeos_buildflags",
    "//device/vr/buildflags",
    "//mojo/public/cpp/bindings:struct_traits",
    "//skia",
    "//third_party/zlib",
  ]

  if (!is_apple) {
    sources += [
      "platform_font_skia.cc",
      "platform_font_skia.h",
      "skia_font_delegate.cc",
      "skia_font_delegate.h",
    ]
  }

  # iOS.
  if (is_ios) {
    sources += [ "scoped_cg_context_save_gstate_mac.h" ]
  } else {
    public_deps += [ "//cc/paint" ]
    deps += [ "//third_party:freetype_harfbuzz" ]
  }

  # Android.
  if (is_android) {
    if (!is_debug) {
      configs -= [ "//build/config/compiler:default_optimization" ]
      configs += [ "//build/config/compiler:optimize_max" ]
    }

    deps += [ ":gfx_jni_headers" ]
    libs = [
      "android",
      "jnigraphics",
    ]
  }

  if (is_android || is_fuchsia) {
    sources += [
      "font_fallback_skia.cc",
      "font_render_params_skia.cc",
    ]
  }

  if (is_android || is_fuchsia || is_win || is_mac) {
    sources += [
      "font_fallback_skia_impl.cc",
      "font_fallback_skia_impl.h",
    ]
  }

  if (!is_ios) {
    sources += [
      "bidi_line_iterator.cc",
      "bidi_line_iterator.h",
      "harfbuzz_font_skia.cc",
      "harfbuzz_font_skia.h",
      "paint_vector_icon.cc",
      "paint_vector_icon.h",
      "render_text.cc",
      "render_text.h",
      "render_text_harfbuzz.cc",
      "render_text_harfbuzz.h",
      "text_utils_skia.cc",
    ]
  }

  # Windows.
  if (is_win) {
    libs = [
      "setupapi.lib",
      "dwrite.lib",
    ]
    deps += [ "//components/crash/core/common" ]
  } else {
    sources -= [
      "gdi_util.cc",
      "gdi_util.h",
      "icon_util.cc",
      "icon_util.h",
      "sys_color_change_listener.cc",
      "sys_color_change_listener.h",
    ]
  }

  # Linux.
  if (is_linux || is_chromeos) {
    deps += [ "//third_party/fontconfig" ]
  }

  if (is_mac) {
    frameworks = [
      "AppKit.framework",
      "CoreFoundation.framework",
      "CoreGraphics.framework",
      "CoreText.framework",
      "IOSurface.framework",
    ]
  }

  if ((!use_aura && !toolkit_views) || is_ios) {
    sources -= [
      "nine_image_painter.cc",
      "nine_image_painter.h",
    ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone:buildflags" ]
  }

  if (ozone_platform_x11 || use_x11) {
    deps += [ "//ui/gfx/x" ]
  }
}

component("color_space") {
  sources = [
    "color_space.cc",
    "color_space.h",
    "color_space_export.h",
    "display_color_spaces.cc",
    "display_color_spaces.h",
    "hdr_static_metadata.cc",
    "hdr_static_metadata.h",
    "icc_profile.cc",
    "icc_profile.h",
    "skia_color_space_util.cc",
    "skia_color_space_util.h",
  ]
  if (is_win) {
    sources += [
      "color_space_win.cc",
      "color_space_win.h",
    ]
  }
  deps = [
    "//build:chromeos_buildflags",
    "//skia:skcms",
    "//ui/gfx:buffer_types",
  ]
  public_deps = [
    "//base",
    "//skia",
  ]
  if (is_mac) {
    sources += [
      "mac/display_icc_profiles.cc",
      "mac/display_icc_profiles.h",
    ]
    frameworks = [
      "CoreFoundation.framework",
      "CoreGraphics.framework",
    ]
  }
  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
  }
  defines = [ "COLOR_SPACE_IMPLEMENTATION" ]
}

# Depend on this to use image/resize_image_dimensions.h without pulling in
# all of gfx.
source_set("resize_image_dimensions") {
  sources = [ "image/resize_image_dimensions.h" ]
}

# Depend on this to use native_widget_types.h without pulling in all of gfx.
source_set("native_widget_types") {
  public = [ "native_widget_types.h" ]

  public_deps = [
    ":gfx_export",
    "//base",
  ]

  deps = [ "//build:chromeos_buildflags" ]
}

group("selection_bound") {
  if (is_component_build) {
    public_deps = [ ":gfx" ]
  } else {
    public_deps = [ ":selection_bound_sources" ]
  }
}

# Depend on this to use selection_bound.h without pulling in all of gfx.
# Cannot be a static_library in component builds due to exported functions
source_set("selection_bound_sources") {
  visibility = [ ":*" ]

  sources = [
    "gfx_export.h",
    "selection_bound.cc",
    "selection_bound.h",
  ]

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

  defines = [ "GFX_IMPLEMENTATION" ]

  public_deps = [
    "//base",
    "//ui/gfx/geometry",
  ]
}

# Depend on this to use buffer_types.h without pulling in all of gfx.
source_set("buffer_types") {
  sources = [ "buffer_types.h" ]
}

# The GPU memory buffer stuff is separate from "gfx" to allow GPU-related
# things to use these files without pulling in all of gfx, which includes large
# things like Skia.
#
# The structure here allows the memory buffer to be part of the gfx component
# in the component build, but be a separate source set in a static build.
group("memory_buffer") {
  if (is_component_build) {
    public_deps = [ ":gfx" ]
  } else {
    public_deps = [ ":memory_buffer_sources" ]
  }
}

# Cannot be a static_library in component builds due to exported functions
source_set("memory_buffer_sources") {
  visibility = [ ":*" ]  # Depend on through ":memory_buffer".

  # TODO(brettw) refactor this so these sources are in a coherent directory
  # structure rather than random samplings of ui/gfx and ui/gfx/mac.
  sources = [
    "buffer_format_util.cc",
    "buffer_format_util.h",
    "buffer_usage_util.cc",
    "buffer_usage_util.h",
    "ca_layer_params.cc",
    "ca_layer_params.h",
    "client_native_pixmap.h",
    "client_native_pixmap_factory.h",
    "generic_shared_memory_id.cc",
    "generic_shared_memory_id.h",
    "gfx_export.h",
    "gpu_fence.cc",
    "gpu_fence.h",
    "gpu_fence_handle.cc",
    "gpu_fence_handle.h",
    "hdr_metadata.cc",
    "hdr_metadata.h",
    "native_pixmap.h",
    "overlay_priority_hint.h",
    "overlay_transform.h",
    "surface_origin.h",
  ]

  if (!is_ios) {
    sources += [
      "gpu_memory_buffer.cc",
      "gpu_memory_buffer.h",
    ]
  }

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

  defines = [ "GFX_IMPLEMENTATION" ]

  public_deps = [ ":buffer_types" ]

  deps = [
    ":gfx_switches",
    ":native_widget_types",
    "//base",
    "//build:chromecast_buildflags",
    "//build:chromeos_buildflags",
    "//ui/gfx/geometry",
  ]

  if (is_linux || is_chromeos) {
    sources += [
      "linux/client_native_pixmap_dmabuf.cc",
      "linux/client_native_pixmap_dmabuf.h",
      "linux/client_native_pixmap_factory_dmabuf.cc",
      "linux/client_native_pixmap_factory_dmabuf.h",
      "linux/native_pixmap_dmabuf.cc",
      "linux/native_pixmap_dmabuf.h",
    ]

    deps += [ "//build/config/linux/libdrm" ]
  }

  if (is_linux || is_chromeos || is_android) {
    deps += [ "//third_party/libsync" ]
  }

  if (is_mac) {
    sources += [
      "mac/io_surface.cc",
      "mac/io_surface.h",
    ]

    public_deps += [ "//ui/gfx:color_space" ]
  }

  if (is_win) {
    public_deps += [ "//ipc:message_support" ]
  }

  if ((is_linux || is_chromeos || use_ozone) && !is_nacl) {
    sources += [
      "native_pixmap_handle.cc",
      "native_pixmap_handle.h",
    ]
  }
}

# TODO(ccameron): This can be moved into a separate source_set.
component("gfx_switches") {
  sources = [
    "switches.cc",
    "switches.h",
    "switches_export.h",
  ]

  defines = [ "GFX_SWITCHES_IMPLEMENTATION" ]

  deps = [ "//base" ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "animation/animation_test_api.cc",
    "animation/animation_test_api.h",
    "animation/keyframe/test/animation_utils.cc",
    "animation/keyframe/test/animation_utils.h",
    "animation/test_animation_delegate.h",
    "geometry/test/rect_test_util.cc",
    "geometry/test/rect_test_util.h",
    "geometry/test/size_test_util.h",
    "geometry/test/transform_test_util.cc",
    "geometry/test/transform_test_util.h",
    "image/image_unittest_util.cc",
    "image/image_unittest_util.h",
    "test/font_fallback_test_data.cc",
    "test/font_fallback_test_data.h",
    "test/gfx_util.cc",
    "test/gfx_util.h",
    "test/icc_profiles.cc",
    "test/icc_profiles.h",
  ]
  if (is_ios) {
    sources += [ "image/image_unittest_util_ios.mm" ]
  }
  if (is_mac) {
    sources += [ "image/image_unittest_util_mac.mm" ]
  }

  public_deps = [ ":gfx" ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//skia",
    "//testing/gtest",
    "//ui/gfx/animation",
    "//ui/gfx/animation/keyframe",
    "//ui/gfx/geometry",
  ]

  if (!is_ios) {
    sources += [ "render_text_test_api.h" ]

    deps += [ "//third_party:freetype_harfbuzz" ]
  }
}

if (is_mac) {
  component("gfx_io_surface_hdr_metadata") {
    sources = [
      "mac/io_surface_hdr_metadata.cc",
      "mac/io_surface_hdr_metadata.h",
    ]
    defines = [ "IS_GFX_IO_SURFACE_HDR_METADATA_IMPL" ]

    # This is a separate component from the other sources because it depends on
    # the mojo serialize and deserialize methods.
    deps = [
      ":gfx",
      "//ui/gfx/mojom:mojom",
    ]
    frameworks = [
      "CoreFoundation.framework",
      "IOSurface.framework",
    ]
  }
}

test("gfx_unittests") {
  sources = [
    "animation/keyframe/keyframe_animation_unittest.cc",
    "animation/keyframe/keyframed_animation_curve_unittest.cc",
    "font_names_testing.cc",
    "font_names_testing.h",
    "font_unittest.cc",
    "geometry/rrect_f_unittest.cc",
    "geometry/transform_operations_unittest.cc",
    "geometry/transform_unittest.cc",
    "image/buffer_w_stream_unittest.cc",
    "image/image_family_unittest.cc",
    "image/image_skia_unittest.cc",
    "image/image_unittest.cc",
    "interpolated_transform_unittest.cc",
    "test/run_all_unittests.cc",
    "text_elider_unittest.cc",
    "text_utils_unittest.cc",
  ]
  if (is_linux || is_chromeos) {
    sources += [
      "font_fallback_linux_unittest.cc",
      "font_render_params_linux_unittest.cc",
    ]
  }
  if (is_mac) {
    sources += [
      "font_fallback_mac_unittest.cc",
      "image/image_mac_unittest.mm",
      "mac/coordinate_conversion_unittest.mm",
      "mac/io_surface_unittest.cc",
      "path_mac_unittest.mm",
      "platform_font_mac_unittest.mm",
      "range/range_mac_unittest.mm",
    ]
    frameworks = [ "IOSurface.framework" ]
  }
  if (is_win) {
    sources += [ "font_fallback_win_unittest.cc" ]
  }
  if (is_ios) {
    sources += [
      "image/image_ios_unittest.mm",
      "ios/NSString+CrStringDrawing_unittest.mm",
      "ios/uikit_util_unittest.mm",
    ]
  }
  if (is_android) {
    sources += [ "android/android_surface_control_compat_unittest.cc" ]
  }

  include_dirs = [ "//third_party/skia/include/private" ]

  data = [ "test/data/" ]

  if (!is_ios) {
    sources += [
      "animation/animation_container_unittest.cc",
      "animation/animation_runner_unittest.cc",
      "animation/animation_unittest.cc",
      "animation/multi_animation_unittest.cc",
      "animation/slide_animation_unittest.cc",
      "animation/tween_unittest.cc",
      "blit_unittest.cc",
      "break_list_unittest.cc",
      "canvas_unittest.cc",
      "codec/jpeg_codec_unittest.cc",
      "codec/png_codec_unittest.cc",
      "color_analysis_unittest.cc",
      "color_space_unittest.cc",
      "color_transform_unittest.cc",
      "color_utils_unittest.cc",
      "delegated_ink_unittest.cc",
      "font_fallback_unittest.cc",
      "font_list_unittest.cc",
      "geometry/axis_transform2d_unittest.cc",
      "geometry/box_unittest.cc",
      "geometry/cubic_bezier_unittest.cc",
      "geometry/insets_unittest.cc",
      "geometry/matrix3_unittest.cc",
      "geometry/point3_unittest.cc",
      "geometry/point_unittest.cc",
      "geometry/quad_unittest.cc",
      "geometry/quaternion_unittest.cc",
      "geometry/rect_f_unittest.cc",
      "geometry/rect_unittest.cc",
      "geometry/resize_utils_unittest.cc",
      "geometry/rounded_corners_f_unittest.cc",
      "geometry/size_unittest.cc",
      "geometry/transform_util_unittest.cc",
      "geometry/vector2d_unittest.cc",
      "geometry/vector3d_unittest.cc",
      "half_float_unittest.cc",
      "icc_profile_unittest.cc",
      "image/image_skia_operations_unittest.cc",
      "image/image_util_unittest.cc",
      "mojom/mojom_traits_unittest.cc",
      "nine_image_painter_unittest.cc",
      "overlay_transform_utils_unittest.cc",
      "paint_vector_icon_unittest.cc",
      "range/range_unittest.cc",
      "selection_bound_unittest.cc",
      "selection_model_unittest.cc",
      "sequential_id_generator_unittest.cc",
      "shadow_value_unittest.cc",
      "skbitmap_operations_unittest.cc",
      "skia_util_unittest.cc",
      "skrect_conversion_unittest.cc",
      "utf16_indexing_unittest.cc",
    ]
  }

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

  if (is_linux || is_chromeos || is_android || is_fuchsia || is_win) {
    sources += [ "platform_font_skia_unittest.cc" ]
  }

  deps = [
    ":gfx",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//build:chromeos_buildflags",
    "//skia",
    "//skia:skcms",
    "//testing/gtest",
    "//third_party/icu:icuuc",
    "//third_party/libpng",
    "//third_party/zlib",
    "//ui/base",
    "//ui/gfx/animation",
    "//ui/gfx/animation/keyframe",
    "//ui/gfx/geometry",
    "//ui/gfx/range",
  ]

  if (!is_ios) {
    sources += [
      "bidi_line_iterator_unittest.cc",
      "render_text_unittest.cc",
    ]
    deps += [ "//third_party:freetype_harfbuzz" ]
  }

  data_deps = [ "//ui/resources:ui_test_pak_data" ]

  if (is_apple) {
    deps += [ "//ui/resources:ui_test_pak_bundle_data" ]
  }

  if (is_mac) {
    deps += [ ":gfx_io_surface_hdr_metadata" ]
  }

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

  if (is_android || is_fuchsia) {
    sources += [ "font_fallback_skia_unittest.cc" ]
  }

  if (!use_aura && !is_ios) {
    sources -= [ "nine_image_painter_unittest.cc" ]
  }

  if (is_win) {
    sources += [
      "icon_util_unittest.cc",
      "icon_util_unittests.rc",
      "icon_util_unittests_resource.h",
      "path_win_unittest.cc",
      "win/crash_id_helper_unittest.cc",
      "win/direct_write_unittest.cc",
      "win/text_analysis_source_unittest.cc",
    ]

    ldflags = [
      "/DELAYLOAD:d2d1.dll",
      "/DELAYLOAD:d3d10_1.dll",
    ]

    libs = [
      "d2d1.lib",
      "d3d10_1.lib",
      "dwrite.lib",
      "imm32.lib",
      "oleacc.lib",
    ]
  }

  if (!is_ios) {
    deps += [
      "//cc/paint",
      "//mojo/core/embedder",
      "//mojo/public/cpp/bindings",
      "//mojo/public/cpp/test_support:test_utils",
      "//ui/gfx/geometry/mojom:unit_test",
      "//ui/gfx/image/mojom:unit_test",
      "//ui/gfx/mojom:test_interfaces",
      "//ui/gfx/range/mojom:unit_test",
    ]
  }

  if (is_linux || is_chromeos) {
    sources += [
      "linux/fontconfig_util_unittest.cc",
      "linux/native_pixmap_dmabuf_unittest.cc",
    ]
    deps += [ "//third_party/fontconfig" ]
  }

  if (is_fuchsia) {
    deps += [ "//skia:test_fonts" ]
  }
}

if (is_android) {
  generate_jni("gfx_jni_headers") {
    sources = [
      "../android/java/src/org/chromium/ui/gfx/AdpfRenderingStageScheduler.java",
      "../android/java/src/org/chromium/ui/gfx/Animation.java",
      "../android/java/src/org/chromium/ui/gfx/BitmapHelper.java",
      "../android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java",
    ]
  }
}

fuzzer_test("color_analysis_fuzzer") {
  sources = [ "color_analysis_fuzzer.cc" ]

  deps = [ ":gfx" ]
}

fuzzer_test("color_transform_fuzzer") {
  sources = [ "color_transform_fuzzer.cc" ]

  dict = "//testing/libfuzzer/fuzzers/dicts/icc.dict"

  deps = [ ":gfx" ]

  libfuzzer_options = [ "max_len=4194304" ]
}

fuzzer_test("render_text_fuzzer") {
  sources = [ "render_text_fuzzer.cc" ]

  deps = [
    ":gfx",
    "//base",
    "//base/test:test_support",
  ]

  dict = "test/data/render_text/unicode_text_fuzzer.dict"
}

fuzzer_test("render_text_api_fuzzer") {
  sources = [ "render_text_api_fuzzer.cc" ]

  deps = [
    ":gfx",
    "//base",
    "//base/test:test_support",
    "//build:chromeos_buildflags",
  ]

  dict = "test/data/render_text/unicode_text_fuzzer.dict"
}
