# 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("//build/config/ui.gni")
import("//extensions/buildflags/buildflags.gni")

assert(enable_extensions_core)

source_set("extension_enable_flow_delegate") {
  sources = [ "extension_enable_flow_delegate.h" ]
}

source_set("extension_popup_types") {
  sources = [ "extension_popup_types.h" ]
  public_deps = [ "//base" ]
}

source_set("extensions_menu_handler") {
  sources = [ "extensions_menu_handler.h" ]
  deps = [
    "//extensions/browser",
    "//extensions/common",
  ]
}

source_set("extensions") {
  sources = [
    "confirm_protocol_handler_dialog.h",
    "controlled_home_dialog.h",
    "controlled_home_dialog_controller.h",
    "controlled_home_dialog_controller_interface.h",
    "download_danger_dialog.h",
    "download_open_dialog.h",
    "extension_action_view_model.h",
    "extension_dialog_utils.h",
    "extension_install_ask_parent_dialog.h",
    "extension_install_blocked_dialog.h",
    "extension_install_friction_dialog.h",
    "extension_install_ui.h",
    "extension_installed_watcher.h",
    "extension_multiple_uninstall_dialog.h",
    "extension_post_install_dialog.h",
    "extension_post_install_dialog_model.h",
    "extensions_container.h",
    "extensions_menu_view_model.h",
    "extensions_toolbar_view_model.h",
    "icon_with_badge_image_source.h",
    "reload_page_dialog_controller.h",
    "settings_overridden_dialog.h",
    "upload_extension_to_account_dialog.h",
  ]

  public_deps = []

  if (is_android) {
    sources += [ "extension_install_ui_android.h" ]
    public_deps += [ "//components/messages/android" ]
  }

  if (is_win || is_mac || is_linux || is_chromeos) {
    sources += [ "extension_install_ui_desktop.h" ]
  }
  public_deps += [
    ":extension_popup_types",
    "//base",
    "//chrome/browser/download",
    "//chrome/browser/tab_list",
    "//chrome/browser/ui/browser_window",
    "//chrome/browser/ui/toolbar",
    "//extensions/browser",
    "//extensions/common",
    "//skia",
    "//ui/base:types",
    "//ui/base/interaction",
    "//ui/base/mojom:ui_base_types",
    "//ui/base/unowned_user_data",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (enable_extensions) {
    sources += [
      "accelerator_priority.h",
      "app_launch_params.h",
      "application_launch.h",
      "extension_action_delegate.h",
      "extension_enable_flow.h",
      "extension_side_panel_utils.h",
      "extensions_overrides/simple_overrides.h",
      "hosted_app_browser_controller.h",
      "installation_error_infobar_delegate.h",
      "settings_api_bubble_helpers.h",
      "settings_overridden_dialog_controller.h",
      "settings_overridden_params_providers.h",
      "web_file_handlers/multiclient_util.h",
    ]

    public_deps += [
      "//base",
      "//chrome/browser/ui/tabs:tab_strip_model_observer",
      "//chrome/browser/ui/toolbar",
      "//chrome/browser/ui/web_applications",
      "//components/infobars/core",
      "//components/omnibox/browser",
      "//components/services/app_service",
      "//components/services/app_service/public/cpp:app_types",
      "//extensions/browser",
      "//extensions/browser/install",
      "//extensions/buildflags",
      "//extensions/common",
      "//skia",
      "//ui/base",
      "//ui/base:types",
      "//ui/base/mojom:ui_base_types",
      "//ui/gfx",
      "//ui/gfx/geometry",
      "//url",
    ]
  }
}

source_set("extension_post_install_dialog") {
  sources = [
    "extension_post_install_dialog.cc",
    "extension_post_install_dialog.h",
  ]
  public_deps = [ ":extensions" ]
  deps = [
    "//base:i18n",
    "//chrome/browser/extensions",
    "//chrome/browser/profiles:profile",
    "//chrome/common",
    "//ui/base",
    "//ui/strings",
  ]
  if (is_android) {
    deps += [ "//components/prefs" ]
  }
  if (toolkit_views) {
    deps += [ "//chrome/browser/ui/views/extensions:extension_post_install_dialog_view_utils" ]
  }
}

source_set("impl") {
  sources = [
    "controlled_home_dialog.cc",
    "controlled_home_dialog_controller.cc",
    "download_danger_dialog.cc",
    "download_open_dialog.cc",
    "extension_action_view_model.cc",
    "extension_install_ask_parent_dialog.cc",
    "extension_install_blocked_dialog.cc",
    "extension_install_friction_dialog.cc",
    "extension_install_ui.cc",
    "extension_installed_watcher.cc",
    "extension_multiple_uninstall_dialog.cc",
    "extension_post_install_dialog_model.cc",
    "extension_uninstall_dialog_impl.cc",
    "extensions_container.cc",
    "extensions_menu_view_model.cc",
    "extensions_toolbar_view_model.cc",
    "icon_with_badge_image_source.cc",
    "reload_page_dialog_controller.cc",
    "settings_overridden_dialog.cc",
    "upload_extension_to_account_dialog.cc",
  ]
  deps = [
    ":extension_post_install_dialog",
    ":extensions",
    "//chrome/browser/extensions",
    "//chrome/browser/image_fetcher",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/profiles:profile_util",
    "//chrome/browser/safe_browsing:advanced_protection",
    "//chrome/browser/signin",
    "//chrome/browser/supervised_user",
    "//chrome/browser/tab_list",
    "//chrome/browser/ui:simple_message_box_headers",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/ui/browser_window",
    "//chrome/browser/ui/browser_window:create_browser_window",
    "//chrome/browser/ui/color:color_headers",
    "//chrome/browser/ui/dialogs",
    "//chrome/browser/ui/toolbar",
    "//components/image_fetcher/core",
    "//components/sessions",
    "//components/tabs:public",
    "//components/vector_icons",
    "//extensions/common",
    "//ui/strings",
  ]

  if (is_win || is_mac || is_linux || is_chromeos) {
    sources += [ "extension_install_ui_desktop.cc" ]
    deps += [
      "//chrome/app:generated_resources",
      "//chrome/browser/prefs",
      "//chrome/browser/themes",
      "//chrome/browser/ui/navigator",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/user_education",
      "//chrome/browser/ui/views/toolbar",
      "//chrome/browser/ui/webui/extensions",
      "//chrome/common",
      "//components/custom_handlers",
      "//components/infobars/content",
      "//content/public/browser",
      "//extensions/browser/install",
      "//extensions/common",
      "//ui/base",
    ]
  }
  if (is_android) {
    sources += [
      "extension_dialog_utils_android.cc",
      "extension_install_ui_android.cc",
    ]
    deps += [
      "//chrome/browser/ui/android/tab_model",
      "//extensions/common",
      "//ui/android",
    ]
  }
  if (toolkit_views) {
    sources += [ "extension_dialog_utils_views.cc" ]
    deps += [
      "//chrome/browser/ui/views/extensions:extensions_container_views",
      "//chrome/browser/ui/views/frame:toolbar_button_provider",
    ]
  }
  if (is_win || is_mac) {
    deps += [ "//chrome/browser/ui/views/extensions:settings_overridden_dialog_view_utils" ]
  }

  if (enable_extensions) {
    sources += [
      "app_launch_params.cc",
      "application_launch.cc",
      "confirm_protocol_handler_dialog.cc",
      "extension_enable_flow.cc",
      "extension_settings_overridden_dialog.cc",
      "extension_side_panel_utils.cc",
      "extensions_overrides/simple_overrides.cc",
      "hosted_app_browser_controller.cc",
      "installation_error_infobar_delegate.cc",
      "settings_api_bubble_helpers.cc",
      "settings_overridden_dialog_controller.cc",
      "settings_overridden_params_providers.cc",
      "web_file_handlers/multiclient_util.cc",
    ]

    deps += [
      ":extension_enable_flow_delegate",
      ":extension_popup_types",
      "//apps",
      "//chrome/browser/app_mode",
      "//chrome/browser/apps/app_service",
      "//chrome/browser/apps/platform_apps",
      "//chrome/browser/extensions",
      "//chrome/browser/favicon",
      "//chrome/browser/infobars",
      "//chrome/browser/search_engines",
      "//chrome/browser/tab_list",
      "//chrome/browser/ui:browser_init_state",
      "//chrome/browser/ui/location_bar",
      "//chrome/browser/ui/profiles",
      "//chrome/browser/ui/side_panel:side_panel_views_dependent",
      "//chrome/browser/ui/startup",
      "//chrome/browser/ui/web_applications:launch_utils",
      "//chrome/browser/ui/window_metadata",
      "//chrome/browser/web_applications",
      "//components/prefs",
      "//components/security_state/content",
      "//components/services/app_service",
      "//components/signin/public/base:signin_switches",
    ]
  }
  public_deps = [ "//chrome/browser:browser_public_dependencies" ]
}

source_set("test_support") {
  testonly = true
  sources = []
  public_deps = []

  if (toolkit_views) {
    sources += [ "extension_action_test_helper.h" ]

    public_deps += [
      ":extensions",
      "//extensions/common",
      "//ui/gfx",
    ]
  }
}

source_set("unit_tests") {
  testonly = true
  sources = []
  deps = []

  if (!is_android) {
    sources += [
      "extension_post_install_dialog_model_unittest.cc",
      "extension_settings_overridden_dialog_unittest.cc",
      "extensions_overrides/simple_overrides_unittest.cc",
      "settings_api_bubble_helpers_unittest.cc",
      "settings_overridden_params_providers_unittest.cc",
    ]
    deps += [
      ":extensions",
      "//base",
      "//base/test:test_support",
      "//chrome/browser/extensions",
      "//chrome/browser/extensions:test_support",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/profiles/keep_alive",
      "//chrome/browser/search_engines",
      "//chrome/common",
      "//chrome/common/extensions",
      "//chrome/test:test_support",
      "//components/crx_file",
      "//components/custom_handlers:test_support",
      "//components/proxy_config",
      "//components/search_engines",
      "//components/signin/public/base",
      "//content/public/browser",
      "//content/test:test_support",
      "//extensions:test_support",
      "//extensions/browser",
      "//extensions/common",
      "//testing/gtest",
      "//ui/base",
    ]
  }
}

source_set("browser_tests") {
  testonly = true
  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  # Tests for Win, Mac, Linux, Chrome OS and desktop Android.
  sources = [
    "extension_action_view_model_browsertest.cc",
    "extensions_menu_view_model_browsertest.cc",
    "extensions_toolbar_view_model_browsertest.cc",
  ]

  deps = [
    ":extensions",
    "//base/test:test_support",
    "//chrome/browser/extensions",
    "//chrome/browser/ui/browser_window",
    "//chrome/test:test_support",
    "//content/test:test_support",
    "//extensions:test_support",
    "//net:test_support",
    "//testing/gtest",
  ]

  if (!is_android) {
    sources += [
      "controlled_home_dialog_controller_browsertest.cc",
      "extension_enable_flow_browsertest.cc",
      "extension_enable_flow_test_delegate.cc",
      "extension_enable_flow_test_delegate.h",
      "extension_image_util_browsertest.cc",
      "extension_install_blocked_dialog_browsertest.cc",
      "extension_installed_watcher_browsertest.cc",
      "extension_multiple_uninstall_dialog_browsertest.cc",
      "extension_uninstall_dialog_impl_browsertest.cc",
      "hosted_app_browsertest.cc",
      "notifications_custom_bindings_browsertest.cc",
      "reload_page_dialog_controller_browsertest.cc",
      "settings_overridden_params_providers_browsertest.cc",
    ]

    public_deps = [
      ":extension_enable_flow_delegate",
      "//chrome/browser/ui/views/extensions:test_support",
    ]

    deps += [
      "//chrome/app:command_ids",
      "//chrome/browser:chrome_content_browser_client",
      "//chrome/browser/apps/app_service:test_support",
      "//chrome/browser/extensions:test_support",
      "//chrome/browser/preloading/prerender",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/search_engines",
      "//chrome/browser/themes",
      "//chrome/browser/ui/color:color_headers",
      "//chrome/browser/ui/views/toolbar",
      "//chrome/browser/ui/web_applications",
      "//chrome/browser/ui/web_applications:launch_utils",
      "//chrome/browser/web_applications",
      "//chrome/browser/web_applications:features",
      "//chrome/browser/web_applications:web_applications_test_support",
      "//chrome/browser/web_applications/mojom:mojom_web_apps_enum",
      "//chrome/common",
      "//chrome/common:chrome_features",
      "//chrome/common:non_code_constants",
      "//chrome/common/extensions",
      "//chrome/common/extensions/api",
      "//chrome/test:test_support_ui",
      "//components/proxy_config",
      "//components/search_engines",
      "//components/search_engines:test_support",
      "//components/sessions",
      "//components/webapps/browser",
      "//components/webapps/common",
      "//content/public/browser",
      "//content/public/common",
      "//extensions/browser",
      "//extensions/common",
      "//extensions/common:common_constants",
      "//extensions/common:extension_features",
      "//extensions/common:mojom_shared",
      "//extensions/common:mojom_shared_cpp_sources",
      "//net",
      "//pdf:buildflags",
      "//pdf:features",
      "//third_party/blink/public/common",
      "//third_party/blink/public/common:headers",
      "//ui/base",
      "//ui/base:buildflags",
      "//ui/base:features",
      "//ui/color:color_headers",
      "//ui/gfx",
      "//ui/native_theme",
      "//ui/native_theme:test_support",
    ]

    if (is_linux) {
      deps += [ "//ui/linux:linux_ui" ]
    }

    if (is_chromeos) {
      sources += [ "application_launch_browsertest.cc" ]
    } else {
      sources += [ "upload_extension_to_account_dialog_browsertest.cc" ]
    }
  }
}
