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

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

static_library("favicon_base") {
  sources = [
    "fallback_icon_style.cc",
    "fallback_icon_style.h",
    "favicon_callback.h",
    "favicon_types.cc",
    "favicon_types.h",
    "favicon_url_parser.cc",
    "favicon_url_parser.h",
    "favicon_usage_data.cc",
    "favicon_usage_data.h",
    "favicon_util.cc",
    "favicon_util.h",
    "select_favicon_frames.cc",
    "select_favicon_frames.h",
  ]

  deps = [
    "//base",
    "//net",
    "//ui/base",
    "//ui/base:ui_data_pack",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//url",
  ]
  public_deps = [
    "//skia",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "favicon_url_parser_unittest.cc",
    "select_favicon_frames_unittest.cc",
  ]

  deps = [
    ":favicon_base",
    "//testing/gtest",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//url",
  ]
}

if (is_android) {
  java_cpp_enum("favicon_base_enums_java") {
    sources = [
      "favicon_types.h",
    ]
  }
}
