# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

source_set("optimization_guide") {
  sources = [
    "ios_chrome_hints_manager.h",
    "ios_chrome_hints_manager.mm",
    "optimization_guide_push_notification_client.h",
    "optimization_guide_push_notification_client.mm",
    "optimization_guide_service.h",
    "optimization_guide_service.mm",
    "optimization_guide_service_factory.h",
    "optimization_guide_service_factory.mm",
    "optimization_guide_tab_helper.h",
    "optimization_guide_tab_helper.mm",
    "optimization_guide_validation_tab_helper.h",
    "optimization_guide_validation_tab_helper.mm",
    "prediction_model_download_client.mm",
    "tab_url_provider_impl.h",
    "tab_url_provider_impl.mm",
  ]
  deps = [
    "//base",
    "//components/component_updater",
    "//components/download/public/background_service:public",
    "//components/keyed_service/core",
    "//components/keyed_service/ios",
    "//components/leveldb_proto",
    "//components/optimization_guide/core",
    "//components/optimization_guide/core:prediction",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//components/prefs",
    "//components/variations",
    "//ios/chrome/browser/application_context",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/download/background_service",
    "//ios/chrome/browser/main:public",
    "//ios/chrome/browser/metrics:accessor",
    "//ios/chrome/browser/paths",
    "//ios/chrome/browser/push_notification:push_notification_client",
    "//ios/chrome/browser/web_state_list",
    "//ios/web",
  ]
  configs += [ "//build/config/compiler:enable_arc" ]
  frameworks = [ "UIKit.framework" ]
  public_deps = [
    ":download_client_header",
    "//components/optimization_guide/proto:optimization_guide_proto",
  ]
}

source_set("download_client_header") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [ "prediction_model_download_client.h" ]
  deps = [
    "//base",
    "//components/download/public/background_service:public",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "optimization_guide_push_notification_client_unittest.mm",
    "optimization_guide_service_factory_unittest.mm",
    "optimization_guide_service_unittest.mm",
    "optimization_guide_tab_helper_unittest.mm",
    "optimization_guide_test_utils.h",
    "optimization_guide_test_utils.mm",
    "optimization_guide_validation_tab_helper_unittest.mm",
    "prediction_manager_browsertest.mm",
    "tab_url_provider_impl_unittest.mm",
  ]
  deps = [
    ":optimization_guide",
    ":resources_unit_tests",
    "//base/test:test_support",
    "//components/component_updater",
    "//components/download/internal/background_service/ios:background_service",
    "//components/optimization_guide/core",
    "//components/optimization_guide/core:test_support",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//components/sync_preferences",
    "//components/sync_preferences:test_support",
    "//components/ukm:test_support",
    "//components/unified_consent",
    "//components/variations",
    "//components/variations:test_support",
    "//ios/chrome/browser/application_context",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/chrome/browser/main:public",
    "//ios/chrome/browser/main:test_support",
    "//ios/chrome/browser/prefs:browser_prefs",
    "//ios/chrome/browser/push_notification:push_notification_client",
    "//ios/chrome/browser/web_state_list",
    "//ios/chrome/test:test_support",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//net:test_support",
    "//services/metrics/public/cpp:ukm_builders",
    "//testing/gtest",
  ]
}

source_set("eg_app_support+eg2") {
  configs += [
    "//build/config/compiler:enable_arc",
    "//build/config/ios:xctest_config",
  ]
  testonly = true
  sources = [
    "optimization_guide_test_app_interface.h",
    "optimization_guide_test_app_interface.mm",
  ]
  deps = [
    "//base",
    "//base/test:test_support",
    "//components/optimization_guide/core",
    "//components/optimization_guide/core:test_support",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//ios/chrome/browser/optimization_guide",
    "//ios/chrome/test/app:test_support",
  ]
}

source_set("eg_test_support+eg2") {
  configs += [
    "//build/config/compiler:enable_arc",
    "//build/config/ios:xctest_config",
  ]
  testonly = true
  sources = [
    "optimization_guide_test_app_interface.h",
    "optimization_guide_test_app_interface_stub.mm",
  ]
  deps = [
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//ios/testing/earl_grey:eg_test_support+eg2",
  ]
}

source_set("eg2_tests") {
  configs += [
    "//build/config/compiler:enable_arc",
    "//build/config/ios:xctest_config",
  ]
  testonly = true
  sources = [ "hints_fetcher_egtest.mm" ]
  deps = [
    ":eg_test_support+eg2",
    "//base/test:test_support",
    "//components/optimization_guide/core:eg_test_support+eg2",
    "//ios/chrome/browser/metrics:eg_test_support+eg2",
    "//ios/chrome/test/earl_grey:eg_test_support+eg2",
    "//ios/testing/earl_grey:eg_test_support+eg2",
    "//net:test_support",
  ]
  frameworks = [ "UIKit.framework" ]
}

bundle_data("resources_unit_tests") {
  visibility = [ ":unit_tests" ]
  testonly = true
  sources = [
    "//ios/chrome/test/data/optimization_guide/additional_file_doesnt_exist.crx3",
    "//ios/chrome/test/data/optimization_guide/additional_file_exists.crx3",
    "//ios/chrome/test/data/optimization_guide/amp.html",
    "//ios/chrome/test/data/optimization_guide/empty.html",
    "//ios/chrome/test/data/optimization_guide/english_page.html",
    "//ios/chrome/test/data/optimization_guide/hello.html",
    "//ios/chrome/test/data/optimization_guide/hello_world.html",
    "//ios/chrome/test/data/optimization_guide/signed_valid_model.crx3",
  ]
  outputs = [ "{{bundle_resources_dir}}/ios/chrome/test/data/optimization_guide/{{source_file_part}}" ]
}