# Copyright 2017 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("//cc/cc.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

cc_component("paint") {
  output_name = "cc_paint"
  sources = [
    "decode_stashing_image_provider.cc",
    "decode_stashing_image_provider.h",
    "decoded_draw_image.cc",
    "decoded_draw_image.h",
    "discardable_image_map.cc",
    "discardable_image_map.h",
    "display_item_list.cc",
    "display_item_list.h",
    "draw_image.cc",
    "draw_image.h",
    "filter_operation.cc",
    "filter_operation.h",
    "filter_operations.cc",
    "filter_operations.h",
    "image_analysis_state.h",
    "image_animation_count.h",
    "image_id.h",
    "image_provider.cc",
    "image_provider.h",
    "image_transfer_cache_entry.cc",
    "image_transfer_cache_entry.h",
    "node_holder.cc",
    "node_holder.h",
    "paint_cache.cc",
    "paint_cache.h",
    "paint_canvas.h",
    "paint_export.h",
    "paint_filter.cc",
    "paint_filter.h",
    "paint_flags.cc",
    "paint_flags.h",
    "paint_image.cc",
    "paint_image.h",
    "paint_image_builder.cc",
    "paint_image_builder.h",
    "paint_image_generator.cc",
    "paint_image_generator.h",
    "paint_op_buffer.cc",
    "paint_op_buffer.h",
    "paint_op_buffer_serializer.cc",
    "paint_op_buffer_serializer.h",
    "paint_op_reader.cc",
    "paint_op_reader.h",
    "paint_op_writer.cc",
    "paint_op_writer.h",
    "paint_record.cc",
    "paint_record.h",
    "paint_recorder.cc",
    "paint_recorder.h",
    "paint_shader.cc",
    "paint_shader.h",
    "paint_worklet_input.h",
    "paint_worklet_layer_painter.h",
    "raw_memory_transfer_cache_entry.cc",
    "raw_memory_transfer_cache_entry.h",
    "record_paint_canvas.cc",
    "record_paint_canvas.h",
    "render_surface_filters.cc",
    "render_surface_filters.h",
    "scoped_raster_flags.cc",
    "scoped_raster_flags.h",
    "shader_transfer_cache_entry.cc",
    "shader_transfer_cache_entry.h",
    "skia_paint_canvas.cc",
    "skia_paint_canvas.h",
    "skia_paint_image_generator.cc",
    "skia_paint_image_generator.h",
    "skottie_wrapper.cc",
    "skottie_wrapper.h",
    "solid_color_analyzer.cc",
    "solid_color_analyzer.h",
    "text_holder.h",
    "transfer_cache_deserialize_helper.h",
    "transfer_cache_entry.cc",
    "transfer_cache_entry.h",
    "transfer_cache_serialize_helper.cc",
    "transfer_cache_serialize_helper.h",
  ]

  defines = [ "CC_PAINT_IMPLEMENTATION=1" ]

  # cc/paint is intended to be a separate component from cc that can be
  # included in Blink.  This component should never publicly include
  # anything that Blink core wouldn't include (e.g. base).
  public_deps = [
    "//cc/base",
    "//cc/debug",
    "//skia",
    "//ui/gfx:color_space",
    "//ui/gfx:geometry_skia",
    "//ui/gfx/geometry",
  ]

  deps = [
    "//base",
    "//ui/gfx/animation",
    "//ui/gfx/ipc/color",
  ]
}

fuzzer_test("paint_op_buffer_fuzzer") {
  sources = [
    "paint_op_buffer_fuzzer.cc",
  ]

  libfuzzer_options = [ "max_len=4096" ]

  deps = [
    "//cc:test_support",
    "//cc/paint",
    "//components/viz/test:test_support",
    "//gpu/command_buffer/service:gles2",
  ]
}

fuzzer_test("transfer_cache_fuzzer") {
  sources = [
    "transfer_cache_fuzzer.cc",
  ]

  libfuzzer_options = [ "max_len=4096" ]

  deps = [
    "//cc:test_support",
    "//cc/paint",
    "//components/viz/test:test_support",
  ]
}
