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

import("//pdf/features.gni")

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

source_set("page_content_annotations") {
  public = [ "page_content_annotations_service_factory.h" ]
  sources = [ "page_content_annotations_service_factory.cc" ]
  public_deps = [
    ":extraction_service",
    ":fetcher",
    ":page_embeddings",
    "//base",
    "//chrome/browser/profiles:profile",
    "//components/continuous_search/browser",
    "//components/continuous_search/common",
    "//components/optimization_guide/content/browser",
    "//components/optimization_guide/content/browser:page_context_eligibility",
    "//components/page_content_annotations/core",
    "//components/pdf/common:constants",
    "//content/public/browser",
    "//pdf:buildflags",
    "//services/metrics/public/cpp:metrics_cpp",
  ]
  deps = [
    "//chrome/browser:browser_process",
    "//chrome/browser/app_mode",
    "//chrome/browser/autocomplete",
    "//chrome/browser/history",
    "//chrome/browser/optimization_guide",
    "//chrome/browser/profiles:profile_manager",
    "//chrome/browser/profiles:profile_util",
    "//chrome/browser/search_engines",
    "//components/history/core/browser",
    "//components/keyed_service/core",
    "//components/leveldb_proto",
    "//components/omnibox/browser",
    "//components/optimization_guide/core",
    "//components/page_content_annotations/content",
    "//components/search_engines",
    "//components/variations/service",
  ]
  if (enable_pdf) {
    public_deps += [ "//components/pdf/browser" ]
  }
  if (is_chromeos) {
    deps += [ "//chrome/browser/ash/profiles" ]
  }
}

source_set("extraction_service") {
  public = [ "page_content_extraction_service_factory.h" ]
  sources = [ "page_content_extraction_service_factory.cc" ]
  public_deps = [
    "//base",
    "//chrome/browser/profiles:profile",
    "//components/keyed_service/core",
    "//components/optimization_guide/proto:optimization_guide_proto",
    "//components/page_content_annotations/core",
    "//content/public/browser",
  ]
  deps = [
    ":fetcher",
    "//build:buildflag_header_h",
    "//chrome/browser:browser_process",
    "//chrome/browser/app_mode",
    "//chrome/browser/feature_engagement",
    "//chrome/browser/profiles:profile_manager",
    "//chrome/browser/profiles:profile_util",
    "//components/page_content_annotations/content",
  ]
  if (is_android) {
    sources += [
      "android/page_content_extraction_service_android.cc",
      "android/page_content_extraction_service_android.h",
      "android/page_content_extraction_service_factory_android.cc",
      "android/page_content_extraction_tab_model_observer_android.cc",
      "android/page_content_extraction_tab_model_observer_android.h",
    ]
    deps += [
      ":factory_jni_headers",
      ":service_jni_headers",
      "//chrome/browser/android:tabs_public",
      "//chrome/browser/tabwindow",
      "//chrome/browser/ui/android/tab_model",
    ]
  }
  if (is_chromeos) {
    deps += [ "//chrome/browser/ash/profiles" ]
  }
}

source_set("fetcher") {
  public = [ "multi_source_page_context_fetcher.h" ]
  sources = [ "multi_source_page_context_fetcher.cc" ]
  public_deps = [
    "//base",
    "//components/content_extraction/content/browser",
    "//components/page_content_annotations/content",
  ]
  deps = [
    ":screenshot_service",
    "//chrome/browser/profiles:profile",
  ]
}

source_set("screenshot_service") {
  public = [ "page_content_screenshot_service_factory.h" ]
  sources = [ "page_content_screenshot_service_factory.cc" ]
  public_deps = [
    "//base",
    "//chrome/browser/profiles:profile",
    "//components/keyed_service/core",
    "//components/paint_preview/browser",
  ]
  deps = [ "//components/page_content_annotations/content" ]
}

source_set("page_embeddings") {
  public = [ "page_embeddings_service_factory.h" ]
  sources = [ "page_embeddings_service_factory.cc" ]
  public_deps = [
    "//base",
    "//chrome/browser/profiles:profile",
    "//components/page_content_annotations/content:page_embeddings",
  ]
  deps = [
    ":extraction_service",
    "//chrome/browser/passage_embeddings",
    "//components/keyed_service/core",
    "//components/passage_embeddings/core",
  ]
}

if (is_android) {
  android_library("java") {
    visibility = [
      ":*",
      "//chrome/android:chrome_java",
    ]
    srcjar_deps = [ ":service_jni_headers" ]
    sources = [ "android/java/src/org/chromium/chrome/browser/page_content_annotations/PageContentExtractionService.java" ]
    deps = [
      "//base:base_java",
      "//third_party/jni_zero:jni_zero_java",
    ]
  }

  generate_jni("service_jni_headers") {
    visibility = [
      ":*",
      "//chrome/browser/*",
    ]
    sources = [ "android/java/src/org/chromium/chrome/browser/page_content_annotations/PageContentExtractionService.java" ]
  }

  android_library("factory_java") {
    srcjar_deps = [ ":factory_jni_headers" ]
    sources = [ "android/java/src/org/chromium/chrome/browser/page_content_annotations/PageContentExtractionServiceFactory.java" ]
    deps = [
      ":java",
      "//base:base_java",
      "//chrome/browser/profiles/android:java",
      "//third_party/jni_zero:jni_zero_java",
    ]
  }

  generate_jni("factory_jni_headers") {
    visibility = [
      ":*",
      "//chrome/browser/*",
    ]
    sources = [ "android/java/src/org/chromium/chrome/browser/page_content_annotations/PageContentExtractionServiceFactory.java" ]
  }

  source_set("android_browser_tests") {
    testonly = true
    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
    sources = [ "android/page_content_cache_android_browsertest.cc" ]
    deps = [
      ":extraction_service",
      "//base",
      "//base/test:test_support",
      "//chrome/browser/android:tabs_public",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/ui/android/tab_model",
      "//chrome/test:test_support",
      "//components/optimization_guide/proto:optimization_guide_proto",
      "//components/page_content_annotations/content",
      "//components/page_content_annotations/core",
      "//content/public/browser",
      "//content/test:test_support",
      "//net:test_support",
      "//testing/gmock",
      "//testing/gtest",
      "//ui/base",
    ]
  }
} else {
  source_set("browser_tests") {
    testonly = true
    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
    sources = [
      "multi_source_page_context_fetcher_browsertest.cc",
      "page_content_annotations_service_browsertest.cc",
      "page_settled_monitor_chrome_browsertest.cc",
      "page_text_observer_browsertest.cc",
    ]
    deps = [
      ":extraction_service",
      ":fetcher",
      ":page_content_annotations",
      "//base",
      "//base/test:test_support",
      "//chrome/browser/history",
      "//chrome/browser/optimization_guide",
      "//chrome/browser/optimization_guide:test_support",
      "//chrome/browser/page_content_annotations:test_support",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/ui/browser_window",
      "//chrome/common:non_code_constants",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/history/core/browser",
      "//components/history/core/test",
      "//components/network_session_configurator/common",
      "//components/optimization_guide/content/browser",
      "//components/optimization_guide/content/browser:test_support",
      "//components/optimization_guide/content/mojom:mojo_interfaces",
      "//components/optimization_guide/core",
      "//components/optimization_guide/core:test_support",
      "//components/optimization_guide/proto:optimization_guide_proto",
      "//components/page_content_annotations/content",
      "//components/page_content_annotations/content:metrics",
      "//components/page_content_annotations/core",
      "//components/passage_embeddings/core:test_support",
      "//components/ukm:test_support",
      "//content/public/browser",
      "//content/test:browsertest_support",
      "//content/test:test_support",
      "//net:test_support",
      "//skia",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/blink/public/common",
      "//ui/gfx/codec",
    ]
  }
}

source_set("unit_tests") {
  testonly = true
  sources = [ "page_content_annotations_web_contents_observer_unittest.cc" ]
  deps = [
    ":extraction_service",
    ":page_content_annotations",
    "//base",
    "//base/test:test_support",
    "//chrome/browser/autocomplete",
    "//chrome/browser/history",
    "//chrome/browser/search_engine_choice",
    "//chrome/browser/search_engines",
    "//chrome/test:test_support",
    "//components/google/core/common",
    "//components/history/core/browser",
    "//components/history/core/test",
    "//components/omnibox/browser",
    "//components/optimization_guide/core:test_support",
    "//components/page_content_annotations/content",
    "//components/page_content_annotations/core",
    "//components/search_engines",
    "//components/ukm:test_support",
    "//content/test:test_support",
    "//services/metrics/public/cpp:ukm_builders",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/blink/public/common",
  ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "page_stability_test_utils.cc",
    "page_stability_test_utils.h",
  ]
  public_deps = [
    "//base",
    "//chrome/test:test_support",
    "//components/page_content_annotations/content/mojom",
    "//mojo/public/cpp/bindings",
  ]
  deps = [
    "//content/public/browser",
    "//content/test:test_support",
    "//net:test_support",
    "//testing/gtest",
    "//url",
  ]
}
