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

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

static_library("prefetch") {
  sources = [
    "add_unique_urls_task.cc",
    "add_unique_urls_task.h",
    "download_archives_task.cc",
    "download_archives_task.h",
    "download_cleanup_task.cc",
    "download_cleanup_task.h",
    "download_completed_task.cc",
    "download_completed_task.h",
    "finalize_dismissed_url_suggestion_task.cc",
    "finalize_dismissed_url_suggestion_task.h",
    "generate_page_bundle_reconcile_task.cc",
    "generate_page_bundle_reconcile_task.h",
    "generate_page_bundle_request.cc",
    "generate_page_bundle_request.h",
    "generate_page_bundle_task.cc",
    "generate_page_bundle_task.h",
    "get_operation_request.cc",
    "get_operation_request.h",
    "get_operation_task.cc",
    "get_operation_task.h",
    "import_archives_task.cc",
    "import_archives_task.h",
    "import_cleanup_task.cc",
    "import_cleanup_task.h",
    "import_completed_task.cc",
    "import_completed_task.h",
    "mark_operation_done_task.cc",
    "mark_operation_done_task.h",
    "metrics_finalization_task.cc",
    "metrics_finalization_task.h",
    "offline_metrics_collector.h",
    "page_bundle_update_task.cc",
    "page_bundle_update_task.h",
    "prefetch_background_task.cc",
    "prefetch_background_task.h",
    "prefetch_background_task_handler.h",
    "prefetch_configuration.cc",
    "prefetch_configuration.h",
    "prefetch_dispatcher.h",
    "prefetch_dispatcher_impl.cc",
    "prefetch_dispatcher_impl.h",
    "prefetch_downloader.h",
    "prefetch_downloader_impl.cc",
    "prefetch_downloader_impl.h",
    "prefetch_gcm_app_handler.cc",
    "prefetch_gcm_app_handler.h",
    "prefetch_gcm_handler.h",
    "prefetch_importer.cc",
    "prefetch_importer.h",
    "prefetch_importer_impl.cc",
    "prefetch_importer_impl.h",
    "prefetch_network_request_factory.h",
    "prefetch_network_request_factory_impl.cc",
    "prefetch_network_request_factory_impl.h",
    "prefetch_proto_utils.cc",
    "prefetch_proto_utils.h",
    "prefetch_request_fetcher.cc",
    "prefetch_request_fetcher.h",
    "prefetch_server_urls.cc",
    "prefetch_server_urls.h",
    "prefetch_service.h",
    "prefetch_service_impl.cc",
    "prefetch_service_impl.h",
    "prefetch_types.cc",
    "prefetch_types.h",
    "sent_get_operation_cleanup_task.cc",
    "sent_get_operation_cleanup_task.h",
    "stale_entry_finalizer_task.cc",
    "stale_entry_finalizer_task.h",
    "store/prefetch_downloader_quota.cc",
    "store/prefetch_downloader_quota.h",
    "store/prefetch_store.cc",
    "store/prefetch_store.h",
    "store/prefetch_store_schema.cc",
    "store/prefetch_store_schema.h",
    "store/prefetch_store_utils.cc",
    "store/prefetch_store_utils.h",
    "suggested_articles_observer.cc",
    "suggested_articles_observer.h",
    "suggestions_provider.cc",
    "suggestions_provider.h",
    "thumbnail_fetcher.h",
  ]

  public_deps = [
    ":proto",
  ]

  deps = [
    "//base",
    "//components/download/public/background_service:public",
    "//components/gcm_driver",
    "//components/gcm_driver/common",
    "//components/keyed_service/core",
    "//components/ntp_snippets",
    "//components/offline_pages/core",
    "//components/offline_pages/core:switches",
    "//components/offline_pages/task",
    "//components/variations:variations",
    "//components/version_info",
    "//google_apis",
    "//net:net",
    "//services/network/public/cpp:cpp",
    "//sql:sql",
    "//url",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "mock_prefetch_item_generator.cc",
    "mock_prefetch_item_generator.h",
    "mock_thumbnail_fetcher.cc",
    "mock_thumbnail_fetcher.h",
    "prefetch_item.cc",
    "prefetch_item.h",
    "prefetch_request_test_base.cc",
    "prefetch_request_test_base.h",
    "prefetch_service_test_taco.cc",
    "prefetch_service_test_taco.h",
    "prefetch_task_test_base.cc",
    "prefetch_task_test_base.h",
    "store/prefetch_store_test_util.cc",
    "store/prefetch_store_test_util.h",
    "stub_prefetch_service.cc",
    "stub_prefetch_service.h",
    "test_download_client.cc",
    "test_download_client.h",
    "test_download_service.cc",
    "test_download_service.h",
    "test_offline_metrics_collector.h",
    "test_prefetch_dispatcher.cc",
    "test_prefetch_dispatcher.h",
    "test_prefetch_downloader.cc",
    "test_prefetch_downloader.h",
    "test_prefetch_gcm_handler.cc",
    "test_prefetch_gcm_handler.h",
    "test_prefetch_importer.cc",
    "test_prefetch_importer.h",
    "test_prefetch_network_request_factory.cc",
    "test_prefetch_network_request_factory.h",
    "test_util.cc",
  ]

  deps = [
    ":prefetch",
    "//base",
    "//components/download/public/background_service:public",
    "//components/download/public/background_service/test:test_support",
    "//components/gcm_driver/instance_id",
    "//components/keyed_service/core",
    "//components/offline_pages/core",
    "//components/offline_pages/core:switches",
    "//components/offline_pages/core:test_support",
    "//components/offline_pages/task",
    "//components/offline_pages/task:test_support",
    "//components/prefs:test_support",
    "//components/version_info:channel",
    "//net:test_support",
    "//services/network:test_support",
    "//sql:sql",
    "//testing/gmock",
    "//url",
  ]
}

proto_library("proto") {
  sources = [
    "proto/any.proto",
    "proto/offline_pages.proto",
    "proto/operation.proto",
    "proto/status.proto",
  ]
}

if (is_android) {
  proto_java_library("offline_prefetch_proto_java") {
    proto_path = "proto"
    sources = [
      "proto/any.proto",
      "proto/offline_pages.proto",
      "proto/operation.proto",
      "proto/status.proto",
    ]
  }
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "add_unique_urls_task_unittest.cc",
    "download_archives_task_unittest.cc",
    "download_cleanup_task_unittest.cc",
    "download_completed_task_unittest.cc",
    "finalize_dismissed_url_suggestion_task_unittest.cc",
    "generate_page_bundle_reconcile_task_unittest.cc",
    "generate_page_bundle_request_unittest.cc",
    "generate_page_bundle_task_unittest.cc",
    "get_operation_request_unittest.cc",
    "get_operation_task_unittest.cc",
    "import_archives_task_unittest.cc",
    "import_cleanup_task_unittest.cc",
    "import_completed_task_unittest.cc",
    "mark_operation_done_task_unittest.cc",
    "metrics_finalization_task_unittest.cc",
    "page_bundle_update_task_unittest.cc",
    "prefetch_dispatcher_impl_unittest.cc",
    "prefetch_download_flow_unittest.cc",
    "prefetch_downloader_impl_unittest.cc",
    "prefetch_gcm_app_handler_unittest.cc",
    "prefetch_importer_impl_unittest.cc",
    "prefetch_item_unittest.cc",
    "prefetch_network_request_factory_impl_unittest.cc",
    "prefetch_request_fetcher_unittest.cc",
    "prefetch_request_operation_response_unittest.cc",
    "prefetch_server_urls_unittest.cc",
    "prefetch_task_test_base_unittest.cc",
    "sent_get_operation_cleanup_task_unittest.cc",
    "stale_entry_finalizer_task_unittest.cc",
    "store/prefetch_downloader_quota_unittest.cc",
    "store/prefetch_store_schema_unittest.cc",
    "store/prefetch_store_unittest.cc",
    "suggested_articles_observer_unittest.cc",
  ]

  deps = [
    ":prefetch",
    ":test_support",
    "//base",
    "//components/download/public/background_service:public",
    "//components/download/public/background_service/test:test_support",
    "//components/gcm_driver/instance_id",
    "//components/offline_pages/core",
    "//components/offline_pages/core:switches",
    "//components/offline_pages/core:test_support",
    "//components/offline_pages/task",
    "//components/offline_pages/task:test_support",
    "//components/variations:test_support",
    "//components/version_info:channel",
    "//net:test_support",
    "//services/network:test_support",
    "//sql:sql",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]
}
