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

import("//build/config/chromeos/args.gni")
import("//ui/webui/webui_features.gni")

assert(is_win || is_mac || is_linux || is_chromeos || is_android)

# The public interface has no circular dependencies.
source_set("omnibox") {
  public = [
    "omnibox_controller.h",
    "omnibox_edit_model.h",
    "omnibox_next_features.h",
    "omnibox_pedal_implementations.h",
    "omnibox_popup_state_manager.h",
    "omnibox_view.h",
  ]
  sources = []
  deps = []
  public_deps = [
    "//base",
    "//chrome/browser/profiles:profile",
    "//components/contextual_search:public",
    "//components/contextual_tasks/public:query_contextualizer",
    "//components/omnibox/browser",
    "//components/search_engines",
  ]
  if (!is_android) {
    public += [
      "ai_mode_page_action_controller.h",
      "alternate_nav_infobar_delegate.h",
      "chrome_omnibox_client.h",
      "chrome_omnibox_navigation_observer.h",
      "clipboard_utils.h",
      "omnibox_context_menu_controller.h",
      "omnibox_everywhere_service.h",
      "omnibox_everywhere_service_factory.h",
      "omnibox_popup_view.h",
      "omnibox_tab_helper.h",
      "omnibox_theme.h",
    ]
    public_deps += [
      "//base",
      "//chrome/browser/bitmap_fetcher",
      "//chrome/browser/page_content_annotations:extraction_service",
      "//chrome/browser/ui/color:color_headers",
      "//chrome/browser/ui/page_action",
      "//chrome/browser/ui/webui/top_chrome",
      "//chrome/common",
      "//components/infobars/core",
      "//components/omnibox/browser",
      "//components/omnibox/browser:mojo_bindings_shared",
      "//components/omnibox/browser:mojo_bindings_shared_cpp_sources",
      "//components/omnibox/common",
      "//components/page_content_annotations/content",
      "//components/page_content_annotations/core",
      "//content/public/browser",
      "//services/network/public/mojom:url_loader_base",
      "//skia",
      "//ui/base",
      "//ui/base/accelerators/global_accelerator_listener",
      "//ui/base/unowned_user_data",
      "//ui/gfx",
      "//ui/gfx/geometry",
      "//ui/menus",
      "//ui/views",
      "//url",
    ]
  }
}

# The implementation must be linked into the same binary as the public
# interface. This does have circular dependencies with //chrome/browser and
# //chrome/browser/ui.
source_set("impl") {
  sources = [
    "omnibox_controller.cc",
    "omnibox_edit_model.cc",
    "omnibox_next_features.cc",
    "omnibox_pedal_implementations.cc",
    "omnibox_popup_state_manager.cc",
    "omnibox_view.cc",
  ]
  public_deps = [ "//chrome/browser:browser_public_dependencies" ]
  deps = [
    ":omnibox",
    "//base",
    "//build:branding_buildflags",
    "//chrome/app/vector_icons",
    "//chrome/browser:file_select_helper",
    "//chrome/browser:shell_integration",
    "//chrome/browser/autocomplete",
    "//chrome/browser/autocomplete:aim_eligibility_service",
    "//chrome/browser/bitmap_fetcher",
    "//chrome/browser/bookmarks",
    "//chrome/browser/contextual_search",
    "//chrome/browser/contextual_tasks",
    "//chrome/browser/favicon",
    "//chrome/browser/feedback",
    "//chrome/browser/feedback:feedback_enum",
    "//chrome/browser/history",
    "//chrome/browser/preloading",
    "//chrome/browser/preloading/prefetch/search_prefetch",
    "//chrome/browser/preloading/prerender",
    "//chrome/browser/search_engines",
    "//chrome/common",
    "//chrome/common:chrome_features",
    "//components/bookmarks/browser",
    "//components/contextual_tasks/public",
    "//components/favicon/core",
    "//components/history/core/browser",
    "//components/navigation_metrics",
    "//components/omnibox/browser",
    "//components/omnibox/browser:vector_icons",
    "//components/omnibox/common",
    "//components/omnibox/common:features",
    "//components/omnibox/resources:omnibox_pedal_synonyms",
    "//components/omnibox/resources:omnibox_pedal_synonyms_grit",
    "//components/prefs",
    "//components/profile_metrics",
    "//components/search",
    "//components/search_engines",
    "//components/sessions",
    "//components/strings:components_strings",
    "//components/strings:components_strings_grit",
    "//components/vector_icons",
  ]
  if (!is_android) {
    sources += [
      "ai_mode_page_action_controller.cc",
      "alternate_nav_infobar_delegate.cc",
      "chrome_omnibox_client.cc",
      "chrome_omnibox_navigation_observer.cc",
      "clipboard_utils.cc",
      "omnibox_context_menu_controller.cc",
      "omnibox_everywhere_service.cc",
      "omnibox_everywhere_service_factory.cc",
      "omnibox_popup_view.cc",
      "omnibox_tab_helper.cc",
    ]
    deps += [
      "//chrome/app:command_ids",
      "//chrome/app/vector_icons",
      "//chrome/browser:browser_process",
      "//chrome/browser:global_features",
      "//chrome/browser:intranet_redirect_detector",
      "//chrome/browser:primitives",
      "//chrome/browser/extensions/api/omnibox",
      "//chrome/browser/feature_engagement",
      "//chrome/browser/history_embeddings",
      "//chrome/browser/omnibox",
      "//chrome/browser/predictors",
      "//chrome/browser/preloading/search_preload",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/profiles/keep_alive",
      "//chrome/browser/resources/omnibox_popup:resources_grit",
      "//chrome/browser/safe_browsing",
      "//chrome/browser/ssl",
      "//chrome/browser/ui:layout_constants",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/bookmarks",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/contextual_search",
      "//chrome/browser/ui/extensions/",
      "//chrome/browser/ui/hats",
      "//chrome/browser/ui/lens",
      "//chrome/browser/ui/location_bar",
      "//chrome/browser/ui/navigator",
      "//chrome/browser/ui/omnibox",
      "//chrome/browser/ui/omnibox/omnibox_everywhere:impl",
      "//chrome/browser/ui/search",
      "//chrome/browser/ui/search_engines",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/views/location_bar",
      "//chrome/browser/ui/views/search_engines",
      "//chrome/browser/ui/webui:webui_util",
      "//chrome/browser/ui/webui/cr_components/composebox",
      "//chrome/browser/ui/webui/omnibox_everywhere",
      "//chrome/browser/ui/webui/omnibox_popup",
      "//chrome/browser/ui/webui/top_chrome",
      "//chrome/browser/user_education",
      "//chrome/common",
      "//components/contextual_search:public",
      "//components/dom_distiller/core",
      "//components/favicon/content",
      "//components/history_embeddings/content",
      "//components/history_embeddings/core",
      "//components/infobars/content",
      "//components/infobars/core",
      "//components/resources:components_scaled_resources_grit",
      "//components/user_education/common",
      "//content/public/browser",
      "//extensions/buildflags",
      "//net",
      "//net/traffic_annotation",
      "//services/metrics/public/cpp:gen_ukm_builders",
      "//services/metrics/public/cpp:metrics_cpp",
      "//services/metrics/public/cpp:ukm_builders",
      "//services/network/public/cpp",
      "//services/network/public/mojom:url_loader_base",
      "//ui/base",
      "//ui/base:types",
      "//ui/base/clipboard",
      "//ui/base/data_transfer_policy",
      "//ui/display",
      "//ui/gfx",
      "//ui/menus",
      "//ui/views",
      "//ui/views/controls/webview",
      "//url",
    ]
  }
}

source_set("test_support") {
  testonly = true
  public = [
    "test_omnibox_edit_model.h",
    "test_omnibox_view.h",
  ]

  sources = [
    "test_omnibox_edit_model.cc",
    "test_omnibox_view.cc",
  ]

  public_deps = [
    "//components/prefs:test_support",
    "//ui/gfx:native_ui_types",
    "//ui/gfx/range",
  ]

  deps = [
    "//chrome/browser/ui/omnibox",
    "//components/omnibox/browser:test_support",
    "//testing/gmock",
  ]

  if (!is_android) {
    public += [
      "test_omnibox_popup_file_selector.h",
      "test_omnibox_popup_view.h",
    ]

    sources += [
      "test_omnibox_popup_file_selector.cc",
      "test_omnibox_popup_view.cc",
    ]

    deps += [ "//chrome/browser/ui/views/location_bar" ]
  }
}

if (!is_android) {
  source_set("unit_tests") {
    testonly = true
    sources = [
      "alternate_nav_infobar_delegate_unittest.cc",
      "chrome_omnibox_navigation_observer_unittest.cc",
      "clipboard_utils_unittest.cc",
      "omnibox_context_menu_controller_unittest.cc",
      "omnibox_controller_unittest.cc",
      "omnibox_edit_model_unittest.cc",
      "omnibox_everywhere_service_unittest.cc",
      "omnibox_next_features_unittest.cc",
      "omnibox_pedal_implementations_unittest.cc",
      "omnibox_pedals_unittest.cc",
      "omnibox_view_unittest.cc",
    ]
    deps = [
      ":omnibox",
      ":test_support",
      "//base/test:test_support",
      "//chrome/browser/autocomplete:aim_eligibility_service",
      "//chrome/browser/contextual_search",
      "//chrome/browser/contextual_tasks",
      "//chrome/browser/optimization_guide:test_support",
      "//chrome/browser/search_engines",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/contextual_search",
      "//chrome/browser/ui/omnibox/omnibox_everywhere:prefs",
      "//chrome/browser/ui/views:layout_provider",
      "//chrome/browser/ui/webui:webui_util",
      "//chrome/browser/ui/webui/cr_components/searchbox",
      "//chrome/test:test_support",
      "//components/bookmarks/test",
      "//components/contextual_search:test_support",
      "//components/contextual_tasks/public:query_contextualizer",
      "//components/contextual_tasks/public:test_support",
      "//components/infobars/content",
      "//components/omnibox/browser",
      "//components/omnibox/browser:location_bar",
      "//components/omnibox/browser:test_support",
      "//components/omnibox/common",
      "//components/omnibox/common:features",
      "//components/open_from_clipboard:test_support",
      "//components/prefs",
      "//components/search_engines",
      "//components/sync_preferences:test_support",
      "//components/url_formatter",
      "//content/public/browser",
      "//content/test:test_support",
      "//extensions/buildflags",
      "//net",
      "//services/network:test_support",
      "//services/network/public/cpp",
      "//services/network/public/mojom:url_loader_base",
      "//skia:skia_core_public_headers",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/metrics_proto",
      "//third_party/omnibox_proto",
      "//ui/base",
      "//ui/base:types",
      "//ui/base/clipboard",
      "//ui/base/clipboard:clipboard_test_support",
      "//ui/gfx:test_support",
      "//ui/gfx/geometry",
    ]
  }

  source_set("browser_tests") {
    testonly = true
    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
    sources = [
      "alternate_nav_infobar_delegate_browsertest.cc",
      "omnibox_edit_model_browsertest.cc",
      "omnibox_metrics_browsertest.cc",
      "omnibox_search_aggregator_browsertest.cc",
    ]
    deps = [
      ":omnibox",
      "//base/test:test_support",
      "//chrome/browser/autocomplete",
      "//chrome/browser/contextual_search",
      "//chrome/browser/contextual_tasks",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/search_engines",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/contextual_search",
      "//chrome/browser/ui/location_bar",
      "//chrome/browser/ui/omnibox:test_support",
      "//chrome/browser/ui/search",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/test:browser_tests",
      "//chrome/browser/ui/test:test_support",
      "//chrome/browser/ui/views/drive_picker_host:mojo_bindings",
      "//chrome/browser/ui/views/location_bar",
      "//chrome/browser/ui/webui:webui_util",
      "//chrome/browser/ui/webui/cr_components/composebox",
      "//chrome/browser/ui/webui/searchbox:searchbox_test_utils",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/contextual_search/internal:test_support",
      "//components/infobars/core",
      "//components/omnibox/browser",
      "//components/omnibox/browser:location_bar",
      "//components/omnibox/common:features",
      "//components/policy:generated",
      "//components/policy:policy_code_generate",
      "//components/policy/core/browser",
      "//components/policy/core/common:test_support",
      "//components/search_engines",
      "//components/search_engines:search_engine_type",
      "//components/sessions",
      "//components/tabs:public",
      "//content/public/browser",
      "//content/test:test_support",
      "//net:test_support",
      "//third_party/metrics_proto",
      "//url",

      # This target has a circular dependency against
      # //chrome/test:browser_tests due to the inclusion of
      # `chrome/browser/ui/test/test_infobar.h`.
    ]

    # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
    # enable the diagnostic by removing this line.
    configs += [ "//build/config/compiler:no_exit_time_destructors" ]

    if (!is_android) {
      sources += [ "omnibox_context_menu_controller_browsertest.cc" ]
    }
  }

  if (!is_chromeos_device) {
    source_set("interactive_ui_tests") {
      testonly = true
      defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
      sources = [ "ai_mode_page_action_controller_interactive_uitest.cc" ]
      deps = [
        "//base/test:test_support",
        "//chrome/browser/autocomplete",
        "//chrome/browser/autocomplete:aim_eligibility_service",
        "//chrome/browser/bookmarks",
        "//chrome/browser/contextual_search",
        "//chrome/browser/contextual_tasks",
        "//chrome/browser/profiles:profile",
        "//chrome/browser/search_engines",
        "//chrome/browser/ui:ui_features",
        "//chrome/browser/ui/location_bar",
        "//chrome/browser/ui/search",
        "//chrome/test:test_support",
        "//chrome/test:test_support_ui",
        "//components/contextual_tasks/public:test_support",
        "//components/omnibox/browser",
        "//components/omnibox/browser:location_bar",
        "//components/omnibox/browser:test_support",
        "//components/search_engines",
        "//components/search_engines:search_engine_type",
        "//content/test:test_support",
        "//third_party/metrics_proto",
      ]

      if (!is_mac) {
        sources += [
          # TODO(crbug.com/40659953): Re-enable this test when history backend
          # failures are addressed.
          "omnibox_view_interactive_uitest.cc",
        ]
        deps += [
          ":omnibox",
          "//chrome/browser/history",
          "//chrome/browser/ui/browser_window",
          "//chrome/browser/ui/navigator",
        ]
      }
    }
  }
}
