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

import("//components/optimization_guide/features.gni")

source_set("model") {
  sources = [
    "chrome_profile_download_service_tracker.h",
    "chrome_profile_download_service_tracker.mm",
    "ios_chrome_hints_manager.h",
    "ios_chrome_hints_manager.mm",
    "ios_model_quality_logs_uploader_service.h",
    "ios_model_quality_logs_uploader_service.mm",
    "optimization_guide_global_state.h",
    "optimization_guide_global_state.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",
  ]

  if (build_with_model_execution) {
    sources += [
      "ios_model_execution_manager_delegate.h",
      "ios_model_execution_manager_delegate.mm",
    ]
  }
  deps = [
    "//base",
    "//components/application_locale_storage",
    "//components/component_updater",
    "//components/download/public/background_service:public",
    "//components/leveldb_proto",
    "//components/metrics",
    "//components/metrics_services_manager",
    "//components/optimization_guide:optimization_guide_buildflags",
    "//components/optimization_guide/core",
    "//components/optimization_guide/core:model_execution",
    "//components/optimization_guide/core:prediction",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//components/prefs",
    "//components/services/unzip:in_process",
    "//components/signin/public/identity_manager",
    "//components/variations",
    "//components/variations/service",
    "//components/version_info",
    "//ios/chrome/browser/download/model/background_service",
    "//ios/chrome/browser/metrics/model:accessor",
    "//ios/chrome/browser/policy/model",
    "//ios/chrome/browser/shared/model/application_context",
    "//ios/chrome/browser/shared/model/browser",
    "//ios/chrome/browser/shared/model/paths",
    "//ios/chrome/browser/shared/model/profile",
    "//ios/chrome/browser/shared/model/profile:profile_keyed_service_factory",
    "//ios/chrome/browser/shared/model/web_state_list",
    "//ios/chrome/browser/signin/model",
    "//ios/chrome/common",
    "//ios/web",
    "//ios/web/public",
    "//ios/web/public:web_state_observer",
  ]

  if (build_with_model_execution) {
    deps += [
      "//components/private_ai",
      "//ios/chrome/browser/private_ai/model",
    ]
  }
  frameworks = [ "UIKit.framework" ]
  public_deps = [
    ":download_client_header",
    "//components/optimization_guide/proto:optimization_guide_proto",
  ]
}

source_set("download_client_header") {
  sources = [ "prediction_model_download_client.h" ]
  deps = [
    "//base",
    "//components/download/public/background_service:public",
    "//ios/chrome/browser/shared/model/profile",
  ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "fake_optimization_guide_service.h",
    "fake_optimization_guide_service.mm",
  ]
  deps = [
    ":model",
    "//base",
    "//components/optimization_guide/core",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//services/network/public/cpp",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "chrome_profile_download_service_tracker_unittest.mm",
    "ios_model_quality_logs_uploader_service_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 = [
    ":model",
    ":resources_unit_tests",
    "//base/test:test_support",
    "//components/component_updater",
    "//components/download/internal/background_service/ios:background_service",
    "//components/metrics",
    "//components/metrics:test_support",
    "//components/metrics_services_manager",
    "//components/optimization_guide/core",
    "//components/optimization_guide/core:prediction",
    "//components/optimization_guide/core:test_support",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//components/saved_tab_groups/test_support",
    "//components/sync_preferences",
    "//components/sync_preferences:test_support",
    "//components/ukm:test_support",
    "//components/unified_consent",
    "//components/variations",
    "//components/variations:test_support",
    "//components/variations/service",
    "//ios/chrome/browser/download/model/background_service",
    "//ios/chrome/browser/profile/model:test_support",
    "//ios/chrome/browser/push_notification/model:push_notification_client",
    "//ios/chrome/browser/saved_tab_groups/model",
    "//ios/chrome/browser/shared/model/application_context",
    "//ios/chrome/browser/shared/model/browser",
    "//ios/chrome/browser/shared/model/browser/test:test_support",
    "//ios/chrome/browser/shared/model/prefs:browser_prefs",
    "//ios/chrome/browser/shared/model/profile",
    "//ios/chrome/browser/shared/model/profile/test",
    "//ios/chrome/browser/shared/model/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",
    "//services/network:test_support",
    "//testing/gtest",
  ]
}

source_set("eg_app_support+eg2") {
  configs += [ "//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/model",
    "//ios/chrome/test/app:test_support",
  ]
}

source_set("eg_test_support+eg2") {
  configs += [ "//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/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/model: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}}" ]
}
