# Copyright 2022 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")

source_set("web_applications") {
  sources = []
  public_deps = []

  if (!is_android) {
    sources += [ "web_app_dialog_utils.h" ]
    public_deps += [
      "//base",
      "//chrome/browser/web_applications",
      "//components/webapps/common",
    ]
  }

  if (is_chromeos) {
    sources += [
      "web_app_relaunch_notification.h",
      "web_app_run_on_os_login_notification.h",
    ]
    public_deps +=
        [ "//chromeos/ash/components/system_web_apps:system_web_app_type" ]
  }

  if (toolkit_views) {
    sources += [ "pwa_install_page_action.h" ]
    public_deps += [ "//chrome/browser/ui/views/page_action" ]
  }

  if (enable_extensions) {
    sources += [
      "app_browser_controller.h",
      "diagnostics/app_type_initialized_event.h",
      "diagnostics/web_app_icon_health_checks.h",
      "navigation_capturing_process.h",
      "navigation_capturing_redirection_throttle.h",
      "navigation_handle_user_data_forwarder.h",
      "share_target_utils.h",
      "tabbed_web_app_navigation_throttle.h",
      "web_app_browser_controller.h",
      "web_app_dialogs.h",
      "web_app_info_image_source.h",
      "web_app_launch_navigation_handle_user_data.h",
      "web_app_launch_process.h",
      "web_app_menu_model.h",
      "web_app_metrics.h",
      "web_app_metrics_factory.h",
      "web_app_tabbed_utils.h",
      "web_app_ui_manager_impl.h",
      "web_app_ui_utils.h",
      "webui_web_app_navigation_throttle.h",
    ]
    public_deps += [
      "//chrome/browser/themes",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/page_action:icon_type",
      "//chrome/browser/ui/tabs:tab_strip_model_observer",
      "//components/keyed_service/content",
      "//components/keyed_service/core",
      "//components/site_engagement/content",
      "//components/url_formatter",
      "//components/user_education/common",
      "//components/webapps/browser",
      "//components/webapps/common",
      "//content/public/browser",
      "//skia:skia_core_public_headers",
      "//ui/actions:actions_headers",
      "//ui/base",
      "//ui/color:color_headers",
      "//ui/color:color_provider_key",
      "//ui/gfx",
      "//ui/views",
      "//url",
    ]
  }
}

source_set("launch_utils") {
  sources = []
  public_deps = []

  if (enable_extensions) {
    sources += [ "web_app_launch_utils.h" ]
    public_deps += [
      "//base",
      "//chrome/browser/web_applications",
      "//components/services/app_service/public/cpp:app_types",
      "//components/webapps/common",
      "//content/public/browser",
      "//third_party/blink/public/common",
      "//ui/gfx/geometry",
    ]
  }
}

source_set("impl") {
  sources = []
  deps = [
    "//chrome/browser/banners",
    "//chrome/browser/ui/browser_window:create_browser_window",
  ]

  if (!is_android) {
    sources += [ "web_app_dialog_utils.cc" ]
    deps += [
      ":web_applications",
      "//base",
      "//chrome/browser:after_startup_task_utils",
      "//chrome/browser/notifications:system_notification_helper",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/profiles/keep_alive",
      "//chrome/browser/ui:chrome_pages",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/color:mixers",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/tabs:tabs_public",
      "//chrome/browser/ui/user_education",
      "//chrome/browser/ui/views/web_apps:progress_delay",
      "//chrome/browser/web_applications",
      "//chrome/browser/web_applications/mojom:mojom_web_apps_enum",
      "//chrome/common:chrome_features",
      "//components/feature_engagement/public:feature_constants",
      "//components/webapps/browser",
      "//content/public/browser",
    ]
  }

  if (is_chromeos) {
    sources += [
      "web_app_relaunch_notification.cc",
      "web_app_run_on_os_login_notification.cc",
    ]
    deps += [ "//chromeos/strings:strings_grit" ]
  }

  if (toolkit_views) {
    sources += [ "pwa_install_page_action.cc" ]
  }

  if (enable_extensions) {
    sources += [
      "app_browser_controller.cc",
      "diagnostics/app_type_initialized_event.cc",
      "diagnostics/web_app_icon_health_checks.cc",
      "navigation_capturing_process.cc",
      "navigation_capturing_redirection_throttle.cc",
      "share_target_utils.cc",
      "tabbed_web_app_navigation_throttle.cc",
      "web_app_browser_controller.cc",
      "web_app_dialogs.cc",
      "web_app_info_image_source.cc",
      "web_app_launch_navigation_handle_user_data.cc",
      "web_app_launch_process.cc",
      "web_app_launch_utils.cc",
      "web_app_menu_model.cc",
      "web_app_metrics.cc",
      "web_app_metrics_factory.cc",
      "web_app_tabbed_utils.cc",
      "web_app_ui_manager_impl.cc",
      "web_app_ui_utils.cc",
      "webui_web_app_navigation_throttle.cc",
    ]

    deps += [
      ":launch_utils",
      "//chrome/browser:browser_process",
      "//chrome/browser/app_mode",
      "//chrome/browser/apps:icon_standardizer",
      "//chrome/browser/apps/app_service",
      "//chrome/browser/apps/link_capturing",
      "//chrome/browser/engagement",
      "//chrome/browser/infobars",
      "//chrome/browser/media/router:media_router_feature",
      "//chrome/browser/notifications",
      "//chrome/browser/permissions",
      "//chrome/browser/policy:policy_util",
      "//chrome/browser/ui:browser_init_state",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/extensions",
      "//chrome/browser/ui/profiles",
      "//chrome/browser/ui/tabs:tab_menu",
      "//chrome/browser/ui/views/web_apps:web_app_blocked_migration_infobar_delegate",
      "//chrome/browser/ui/window_metadata",
      "//chrome/browser/web_applications:features",
      "//chrome/browser/web_applications/app_service",
      "//chrome/browser/web_applications/isolated_web_apps/window_management",
      "//chrome/browser/web_share_target",
      "//components/infobars/content",
      "//components/keep_alive_registry",
      "//components/omnibox/browser:vector_icons",
      "//components/security_state/content",
      "//components/services/app_service",
      "//components/tabs:public",
      "//ui/native_window_tracker",
    ]
    if (is_chromeos) {
      deps += [
        "//chrome/browser/ash/app_list",
        "//chrome/browser/ash/apps",
        "//chrome/browser/ash/browser_delegate",
        "//chrome/browser/ash/file_manager",
        "//chrome/browser/ash/system_web_apps",
        "//chrome/browser/chromeos/app_mode",
        "//chrome/browser/ui/ash/shelf",
        "//chrome/browser/ui/ash/system_web_apps",
        "//chromeos/ash/components/browser_context_helper",
        "//chromeos/ash/components/nonclosable_app_ui",
        "//chromeos/ash/experiences/settings_ui",
        "//chromeos/ash/experiences/system_web_apps/types",
        "//chromeos/components/kiosk",
        "//chromeos/ui/frame",
      ]
    }
  }
  public_deps = [ "//chrome/browser:browser_public_dependencies" ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "app_browser_controller_unittest.cc",
    "share_target_utils_unittest.cc",
    "web_app_info_image_source_unittest.cc",
    "web_app_launch_utils_unittest.cc",
  ]

  deps = [
    ":launch_utils",
    ":web_applications",
    "//chrome/browser",
    "//chrome/browser/ui",
    "//chrome/browser/web_applications",
    "//chrome/browser/web_applications:web_app_test",
    "//chrome/browser/web_applications:web_applications_test_support",
    "//chrome/browser/web_applications:web_applications_unit_tests",
    "//chrome/test:test_support",
    "//components/services/app_service",
    "//components/webapps/common",
    "//content/test:test_support",
    "//storage/browser:test_support",
  ]
}

source_set("browser_tests") {
  testonly = true

  sources = [
    "app_browser_controller_browsertest.cc",
    "app_browser_document_picture_in_picture_browsertest.cc",
    "pwa_mixed_content_browsertest.cc",
    "status_bar_browsertest.cc",
    "web_app_browsertest.cc",
    "web_app_dark_mode_browsertest.cc",
    "web_app_engagement_browsertest.cc",
    "web_app_file_handling_browsertest.cc",
    "web_app_launch_handler_browsertest.cc",
    "web_app_launch_prevent_close_browsertest.cc",
    "web_app_launch_utils_browsertest.cc",
    "web_app_link_capturing_browsertest.cc",
    "web_app_menu_model_browsertest.cc",
    "web_app_navigate_browsertest.cc",
    "web_app_profile_deletion_browsertest.cc",
    "web_app_title_browsertest.cc",
    "web_app_ui_manager_impl_browsertest.cc",
    "web_app_uninstall_browsertest.cc",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  deps = [
    ":launch_utils",
    ":web_applications",
    "//base",
    "//chrome/app:command_ids",
    "//chrome/browser:browser_features",
    "//chrome/browser:shell_integration",
    "//chrome/browser/apps/app_service",
    "//chrome/browser/apps/app_service:app_registry_cache_waiter",
    "//chrome/browser/apps/app_service:test_support",
    "//chrome/browser/apps/link_capturing",
    "//chrome/browser/apps/link_capturing:test_support",
    "//chrome/browser/banners",
    "//chrome/browser/browsing_data:constants",
    "//chrome/browser/devtools",
    "//chrome/browser/metrics/structured:test_support",
    "//chrome/browser/permissions",
    "//chrome/browser/picture_in_picture",
    "//chrome/browser/picture_in_picture:test_support_ui",
    "//chrome/browser/policy:policy_util",
    "//chrome/browser/preloading:test_support",
    "//chrome/browser/shortcuts",
    "//chrome/browser/themes",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/ui/browser_ui_controller",
    "//chrome/browser/ui/browser_web_contents_delegate",
    "//chrome/browser/ui/page_info",
    "//chrome/browser/ui/startup",
    "//chrome/browser/ui/window_metadata",
    "//chrome/browser/ui/window_sizer",
    "//chrome/browser/web_applications:prevent_close_test_support",
    "//chrome/browser/web_applications:web_applications_test_support",
    "//chrome/test:test_support",
    "//chrome/test:test_support_ui",
    "//components/embedder_support",
    "//components/metrics/structured:structured_events",
    "//components/metrics/structured:test_support",
    "//components/page_load_metrics/browser:test_support",
    "//components/services/app_service",
    "//components/site_engagement/content",
    "//components/webapps/browser",
    "//components/webapps/common",
    "//components/webapps/isolated_web_apps/test_support",
    "//ui/base/clipboard:clipboard_test_support",
    "//ui/native_theme:test_support",
  ]

  if (is_chromeos) {
    sources += [
      "app_browser_controller_browsertest_chromeos.cc",
      "create_shortcut_browsertest.cc",
      "web_app_guest_session_browsertest_chromeos.cc",
    ]

    deps += [
      "//chrome/browser/ash/app_list",
      "//chrome/browser/ash/browser_delegate",
      "//chrome/browser/ash/file_manager",
      "//chrome/browser/ash/file_manager:test_support",
      "//chrome/browser/ash/system_web_apps/test_support",
      "//chrome/browser/ui/ash/shelf",
      "//chrome/browser/ui/ash/system_web_apps",
      "//chrome/browser/ui/extensions",
      "//chromeos/ash/components/browser_context_helper",
      "//chromeos/constants",
      "//components/session_manager/core",
      "//components/user_manager",
    ]
  }

  if (!is_android) {
    deps += [
      "//chrome/browser/ui:browser_init_state",
      "//chrome/browser/ui/window_feature_controller",
    ]
  }
}

source_set("app_service_browser_tests") {
  testonly = true

  sources = [
    "launch_web_app_browsertest.cc",
    "web_app_badging_browsertest.cc",
    "web_app_protocol_handling_browsertest.cc",
    "web_app_tab_restore_browsertest.cc",
    "web_app_window_controls_overlay_browsertest.cc",
  ]

  if (is_chromeos) {
    sources += [
      "share_to_target_browsertest.cc",
      "web_app_relaunch_notification_browsertest.cc",
      "web_share_target_browsertest.cc",
    ]
  }

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  deps = [
    ":web_applications",
    "//chrome/app:command_ids",
    "//chrome/browser/apps/app_service",
    "//chrome/browser/apps/app_service:app_registry_cache_waiter",
    "//chrome/browser/apps/link_capturing",
    "//chrome/browser/apps/link_capturing:test_support",
    "//chrome/browser/badging:test_support",
    "//chrome/browser/browsing_data:constants",
    "//chrome/browser/ui/web_applications/diagnostics:app_service_browser_tests",
    "//chrome/browser/web_applications",
    "//chrome/browser/web_applications:web_applications_test_support",
    "//chrome/test:test_support",
    "//chrome/test:test_support_ui",
    "//components/app_constants",
    "//components/embedder_support",
    "//components/page_load_metrics/browser:test_support",
    "//components/services/app_service",
    "//components/webapps/browser:test_support",
    "//components/webapps/common",
  ]

  if (!is_android) {
    deps += [ "//chrome/browser/ui:browser_init_state" ]
  }

  if (is_chromeos) {
    deps += [
      "//chrome/browser/ash/fileapi",
      "//chrome/browser/sharesheet",
    ]
  }
}
