# 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.

# GYP version: //cc/blink/cc_blink.gyp:cc_blink
component("blink") {
  output_name = "cc_blink"

  public_deps = [
    "//skia",
  ]
  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//gpu",
    "//third_party/WebKit/public:blink",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  defines = [ "CC_BLINK_IMPLEMENTATION" ]

  sources = [
    "cc_blink_export.h",
    "scrollbar_impl.cc",
    "scrollbar_impl.h",
    "web_animation_curve_common.cc",
    "web_animation_curve_common.h",
    "web_animation_impl.cc",
    "web_animation_impl.h",
    "web_compositor_support_impl.cc",
    "web_compositor_support_impl.h",
    "web_content_layer_impl.cc",
    "web_content_layer_impl.h",
    "web_display_item_list_impl.cc",
    "web_display_item_list_impl.h",
    "web_external_bitmap_impl.cc",
    "web_external_bitmap_impl.h",
    "web_external_texture_layer_impl.cc",
    "web_external_texture_layer_impl.h",
    "web_filter_animation_curve_impl.cc",
    "web_filter_animation_curve_impl.h",
    "web_filter_operations_impl.cc",
    "web_filter_operations_impl.h",
    "web_float_animation_curve_impl.cc",
    "web_float_animation_curve_impl.h",
    "web_image_layer_impl.cc",
    "web_image_layer_impl.h",
    "web_layer_impl.cc",
    "web_layer_impl.h",
    "web_layer_impl_fixed_bounds.cc",
    "web_layer_impl_fixed_bounds.h",
    "web_nine_patch_layer_impl.cc",
    "web_nine_patch_layer_impl.h",
    "web_scroll_offset_animation_curve_impl.cc",
    "web_scroll_offset_animation_curve_impl.h",
    "web_scrollbar_layer_impl.cc",
    "web_scrollbar_layer_impl.h",
    "web_to_cc_animation_delegate_adapter.cc",
    "web_to_cc_animation_delegate_adapter.h",
    "web_transform_animation_curve_impl.cc",
    "web_transform_animation_curve_impl.h",
    "web_transform_operations_impl.cc",
    "web_transform_operations_impl.h",
  ]
}

# GYP version: //cc/blink/cc_blink_tests.gyp:cc_blink_unittests
# TODO(GYP): make linking work on the mac.
if (!is_mac) {
  test("cc_blink_unittests") {
    deps = [
      ":blink",
      "//base/test:run_all_unittests",
      "//base/third_party/dynamic_annotations",
      "//skia",
      "//testing/gtest",
      "//ui/gfx/geometry",
      "//ui/gfx:test_support",
      "//cc",
      "//cc:test_support",
    ]

    sources = [
      "web_animation_unittest.cc",
      "web_float_animation_curve_unittest.cc",
      "web_layer_impl_fixed_bounds_unittest.cc",
    ]
  }
}
