# Copyright 2016 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("ntp_tiles") {
  sources = [
    "constants.cc",
    "constants.h",
    "country_code_ios.h",
    "country_code_ios.mm",
    "custom_links_manager.h",
    "custom_links_manager_impl.cc",
    "custom_links_manager_impl.h",
    "custom_links_store.cc",
    "custom_links_store.h",
    "features.cc",
    "features.h",
    "icon_cacher.h",
    "icon_cacher_impl.cc",
    "icon_cacher_impl.h",
    "metrics.cc",
    "metrics.h",
    "most_visited_sites.cc",
    "most_visited_sites.h",
    "ntp_tile.cc",
    "ntp_tile.h",
    "ntp_tile_impression.cc",
    "ntp_tile_impression.h",
    "popular_sites.h",
    "popular_sites_impl.cc",
    "popular_sites_impl.h",
    "pref_names.cc",
    "pref_names.h",
    "section_type.h",
    "switches.cc",
    "switches.h",
    "tile_source.h",
    "tile_title_source.h",
    "tile_visual_type.h",
    "webui/ntp_tiles_internals_message_handler.cc",
    "webui/ntp_tiles_internals_message_handler.h",
    "webui/ntp_tiles_internals_message_handler_client.cc",
    "webui/ntp_tiles_internals_message_handler_client.h",
  ]

  public_deps = [
    "//base",
    "//components/history/core/browser",
    "//components/suggestions",
  ]
  deps = [
    "//build:branding_buildflags",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/google/core/common",
    "//components/image_fetcher/core",
    "//components/pref_registry",
    "//components/prefs",
    "//components/rappor/public",
    "//components/resources",
    "//components/search_engines",
    "//components/strings",
    "//components/url_formatter",
    "//components/variations",
    "//components/variations/service",
    "//services/network/public/cpp",
    "//ui/base",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "custom_links_manager_impl_unittest.cc",
    "custom_links_store_unittest.cc",
    "icon_cacher_impl_unittest.cc",
    "metrics_unittest.cc",
    "most_visited_sites_unittest.cc",
    "popular_sites_impl_unittest.cc",
  ]

  deps = [
    ":ntp_tiles",
    "//base/test:test_support",
    "//build:branding_buildflags",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/history/core/test",
    "//components/image_fetcher/core",
    "//components/image_fetcher/core:test_support",
    "//components/pref_registry:pref_registry",
    "//components/rappor:test_support",
    "//components/sync_preferences:test_support",
    "//net:test_support",
    "//services/data_decoder/public/cpp:test_support",
    "//services/network:test_support",
    "//services/network/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/gfx:test_support",
  ]
}

if (is_android) {
  java_cpp_enum("ntp_tiles_enums_java") {
    sources = [
      "section_type.h",
      "tile_source.h",
      "tile_title_source.h",
      "tile_visual_type.h",
    ]
  }
}
