# 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",
    "field_trial.cc",
    "field_trial.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 = [
    "//components/data_use_measurement/core",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/google/core/browser",
    "//components/image_fetcher/core",
    "//components/pref_registry",
    "//components/prefs",
    "//components/rappor/public",
    "//components/resources",
    "//components/search_engines",
    "//components/url_formatter",
    "//components/variations",
    "//components/variations/service",
    "//ui/base",
  ]

  if (is_android) {
    deps += [ "android:ntp_tiles_jni_headers" ]
  }
}

# If you want to use this, let us (ntp-dev@chromium.org) know. In that case, it
# should be moved to a more common location as it has 2+ callers already.
# Note that you probably shouldn't be using it outside of ios or tests.
source_set("json_unsafe_parser") {
  testonly = !is_ios

  sources = [
    "json_unsafe_parser.cc",
    "json_unsafe_parser.h",
  ]

  public_deps = [
    "//base",
  ]
}

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

  deps = [
    ":json_unsafe_parser",
    ":ntp_tiles",
    "//base/test:test_support",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/image_fetcher/core",
    "//components/pref_registry:pref_registry",
    "//components/rappor:test_support",
    "//components/sync_preferences:test_support",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base",
    "//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",
    ]
  }
}
