chromium/chrome/browser/apps/app_service/BUILD.gn

# Copyright 2020 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/ui_mode.gni")
import("//extensions/buildflags/buildflags.gni")

assert(!is_android)

source_set("app_service") {
  sources = [
    "app_icon_source.cc",
    "app_icon_source.h",
    "app_service_proxy.h",
    "app_service_proxy_factory.cc",
    "app_service_proxy_factory.h",
    "app_service_proxy_forward.h",
    "browser_app_launcher.cc",
    "browser_app_launcher.h",
    "intent_util.cc",
    "intent_util.h",
    "launch_result_type.cc",
    "launch_result_type.h",
    "launch_utils.cc",
    "launch_utils.h",
    "metrics/app_service_metrics.cc",
    "metrics/app_service_metrics.h",
    "package_id_util.cc",
    "package_id_util.h",
    "paused_apps.cc",
    "paused_apps.h",
    "policy_util.cc",
    "policy_util.h",
    "publishers/app_publisher.cc",
    "publishers/app_publisher.h",
    "publishers/extension_apps_enable_flow.cc",
    "publishers/extension_apps_enable_flow.h",
    "publishers/extension_apps_util.cc",
    "publishers/extension_apps_util.h",
    "web_contents_app_id_utils.cc",
    "web_contents_app_id_utils.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  public_deps = [
    ":constants",
    "//chrome/browser:browser_public_dependencies",
  ]

  deps = [
    "//base",
    "//chrome/app/theme:chrome_unscaled_resources",
    "//chrome/browser/apps/app_service/app_icon",
    "//chrome/browser/apps/app_service/app_icon:util",
    "//chrome/browser/profiles",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/resources:app_icon_resources",
    "//chrome/browser/sync",
    "//chrome/browser/ui:browser_navigator_params_headers",
    "//chrome/browser/ui/tabs:tab_enums",
    "//chrome/browser/web_applications",
    "//components/app_constants",
    "//components/crx_file",
    "//components/keyed_service/content",
    "//components/services/app_service",
    "//components/web_package",
    "//components/webapps/common",
  ]

  # TODO(crbug.com/40251079): Remove circular dependencies. Possibly flip
  # dependency direction so AppService doesn't depend on extensions
  # (crbug.com/1402146).
  allow_circular_includes_from = []

  if (enable_extensions) {
    deps += [
      "//chrome/browser/extensions",
      "//chrome/browser/web_applications/extensions",
      "//extensions/browser",
      "//extensions/common",
    ]
    allow_circular_includes_from += [
      "//chrome/browser/extensions",
      "//chrome/browser/web_applications/extensions",
    ]
  }

  if (is_chromeos) {
    sources += [
      "app_notifications.cc",
      "app_notifications.h",
      "extension_apps_utils.cc",
      "extension_apps_utils.h",
      "media_requests.cc",
      "media_requests.h",
      "menu_item_constants.h",
      "webapk/webapk_utils.cc",
      "webapk/webapk_utils.h",
    ]

    deps += [
      "//ash/webui/projector_app/public/cpp",
      "//chrome/browser/apps/app_service/app_install",
      "//chrome/browser/apps/browser_instance",
      "//chrome/browser/chromeos/arc",
      "//chromeos/crosapi/mojom",
      "//chromeos/startup",
      "//components/webapk:proto",
      "//third_party/smhasher:murmurhash2",
      "//ui/wm/public",
    ]

    # Needed only to allow circular includes.
    deps += [ "//chrome/browser/chromeos/app_mode" ]

    allow_circular_includes_from += [
      "//chrome/browser/chromeos/app_mode",
      "//chrome/browser/chromeos/arc",
    ]
  }

  if (is_chromeos_ash) {
    sources += [
      "app_service_proxy_ash.cc",
      "app_service_proxy_ash.h",
      "app_shortcut_item.cc",
      "app_shortcut_item.h",
      "file_utils.cc",
      "file_utils.h",
      "instance_registry_updater.cc",
      "instance_registry_updater.h",
      "menu_util.cc",
      "menu_util.h",
      "metrics/app_discovery_metrics.cc",
      "metrics/app_discovery_metrics.h",
      "metrics/app_platform_input_metrics.cc",
      "metrics/app_platform_input_metrics.h",
      "metrics/app_platform_metrics.cc",
      "metrics/app_platform_metrics.h",
      "metrics/app_platform_metrics_service.cc",
      "metrics/app_platform_metrics_service.h",
      "metrics/app_platform_metrics_utils.cc",
      "metrics/app_platform_metrics_utils.h",
      "metrics/browser_to_tab_list.cc",
      "metrics/browser_to_tab_list.h",
      "metrics/shortcut_metrics.cc",
      "metrics/shortcut_metrics.h",
      "metrics/website_metrics.cc",
      "metrics/website_metrics.h",
      "promise_apps/promise_app.cc",
      "promise_apps/promise_app.h",
      "promise_apps/promise_app_almanac_connector.cc",
      "promise_apps/promise_app_almanac_connector.h",
      "promise_apps/promise_app_icon_cache.cc",
      "promise_apps/promise_app_icon_cache.h",
      "promise_apps/promise_app_metrics.cc",
      "promise_apps/promise_app_metrics.h",
      "promise_apps/promise_app_registry_cache.cc",
      "promise_apps/promise_app_registry_cache.h",
      "promise_apps/promise_app_service.cc",
      "promise_apps/promise_app_service.h",
      "promise_apps/promise_app_update.cc",
      "promise_apps/promise_app_update.h",
      "promise_apps/promise_app_utils.cc",
      "promise_apps/promise_app_utils.h",
      "promise_apps/promise_app_web_apps_utils.cc",
      "promise_apps/promise_app_web_apps_utils.h",
      "promise_apps/promise_app_wrapper.cc",
      "promise_apps/promise_app_wrapper.h",
      "publishers/arc_apps.cc",
      "publishers/arc_apps.h",
      "publishers/arc_apps_factory.cc",
      "publishers/arc_apps_factory.h",
      "publishers/borealis_apps.cc",
      "publishers/borealis_apps.h",
      "publishers/bruschetta_apps.cc",
      "publishers/bruschetta_apps.h",
      "publishers/built_in_chromeos_apps.cc",
      "publishers/built_in_chromeos_apps.h",
      "publishers/crostini_apps.cc",
      "publishers/crostini_apps.h",
      "publishers/extension_apps_chromeos.cc",
      "publishers/extension_apps_chromeos.h",
      "publishers/guest_os_apps.cc",
      "publishers/guest_os_apps.h",
      "publishers/plugin_vm_apps.cc",
      "publishers/plugin_vm_apps.h",
      "publishers/remote_apps.cc",
      "publishers/remote_apps.h",
      "publishers/standalone_browser_apps.cc",
      "publishers/standalone_browser_apps.h",
      "publishers/standalone_browser_extension_apps.cc",
      "publishers/standalone_browser_extension_apps.h",
      "publishers/standalone_browser_extension_apps_factory.cc",
      "publishers/standalone_browser_extension_apps_factory.h",
      "publishers/web_apps_crosapi.cc",
      "publishers/web_apps_crosapi.h",
      "publishers/web_apps_crosapi_factory.cc",
      "publishers/web_apps_crosapi_factory.h",
      "subscriber_crosapi.cc",
      "subscriber_crosapi.h",
      "subscriber_crosapi_factory.cc",
      "subscriber_crosapi_factory.h",
      "uninstall_dialog.cc",
      "uninstall_dialog.h",
      "webapk/webapk_install_queue.cc",
      "webapk/webapk_install_queue.h",
      "webapk/webapk_install_task.cc",
      "webapk/webapk_install_task.h",
      "webapk/webapk_manager.cc",
      "webapk/webapk_manager.h",
      "webapk/webapk_metrics.cc",
      "webapk/webapk_metrics.h",
      "webapk/webapk_prefs.cc",
      "webapk/webapk_prefs.h",
    ]

    deps += [
      "//ash",
      "//ash/components/arc",
      "//ash/components/arc:arc_base",
      "//ash/components/arc:arc_base_utils",
      "//ash/components/arc:arc_metrics_constants",
      "//ash/components/arc/mojom",
      "//ash/components/arc/session",
      "//ash/components/arc/session:connection_holder",
      "//ash/public/cpp",
      "//ash/webui/mall:app_id",
      "//ash/webui/system_apps/public:system_web_app_type",
      "//chrome/browser:browser_process",
      "//chrome/browser/apps/almanac_api_client",
      "//chrome/browser/apps/app_service/promise_apps/proto",
      "//chrome/browser/ash/android_sms",
      "//chrome/browser/ash/app_list",
      "//chrome/browser/ash/app_list/app_service",
      "//chrome/browser/ash/app_list/arc",
      "//chrome/browser/ash/app_list/internal_app",
      "//chrome/browser/ash/app_list/search",
      "//chrome/browser/ash/app_mode/web_app",
      "//chrome/browser/ash/app_restore",
      "//chrome/browser/ash/apps",
      "//chrome/browser/ash/arc",
      "//chrome/browser/ash/arc/app_shortcuts",
      "//chrome/browser/ash/arc/intent_helper",
      "//chrome/browser/ash/arc/nearby_share",
      "//chrome/browser/ash/arc/privacy_items",
      "//chrome/browser/ash/arc/session",
      "//chrome/browser/ash/arc/tracing",
      "//chrome/browser/ash/borealis",
      "//chrome/browser/ash/bruschetta",
      "//chrome/browser/ash/calendar",
      "//chrome/browser/ash/child_accounts",
      "//chrome/browser/ash/child_accounts/on_device_controls",
      "//chrome/browser/ash/child_accounts/time_limits",
      "//chrome/browser/ash/crosapi:browser_util",
      "//chrome/browser/ash/crostini",
      "//chrome/browser/ash/extensions",
      "//chrome/browser/ash/extensions/autotest_private",
      "//chrome/browser/ash/extensions/file_manager",
      "//chrome/browser/ash/file_manager",
      "//chrome/browser/ash/file_manager/virtual_tasks",
      "//chrome/browser/ash/file_system_provider",
      "//chrome/browser/ash/fusebox",
      "//chrome/browser/ash/guest_os",
      "//chrome/browser/ash/guest_os/public",
      "//chrome/browser/ash/login/demo_mode",
      "//chrome/browser/ash/mall",
      "//chrome/browser/ash/plugin_vm",
      "//chrome/browser/ash/policy/core",
      "//chrome/browser/ash/policy/dlp",
      "//chrome/browser/ash/policy/handlers",
      "//chrome/browser/ash/printing",
      "//chrome/browser/ash/profiles",
      "//chrome/browser/ash/remote_apps",
      "//chrome/browser/ash/scanning",
      "//chrome/browser/ash/system_logs",
      "//chrome/browser/ash/system_web_apps",
      "//chrome/browser/ash/system_web_apps/apps",
      "//chrome/browser/ash/system_web_apps/apps/camera_app",
      "//chrome/browser/ash/system_web_apps/apps/media_app",
      "//chrome/browser/ash/system_web_apps/types",
      "//chrome/browser/chromeos/extensions/login_screen/login/cleanup",
      "//chrome/browser/chromeos/extensions/web_file_handlers",
      "//chrome/browser/image_fetcher",
      "//chrome/browser/metrics/structured:features",
      "//chrome/browser/resources",
      "//chrome/browser/ui/ash/multi_user",
      "//chrome/browser/ui/ash/session",
      "//chrome/browser/ui/ash/shelf",
      "//chrome/browser/ui/ash/shelf/app_service",
      "//chrome/browser/ui/ash/system_web_apps",
      "//chrome/browser/ui/webui/ash/add_supervision",
      "//chrome/browser/ui/webui/ash/settings/app_management",
      "//chromeos/ash/components/browser_context_helper",
      "//chromeos/ash/components/login/login_state",
      "//chromeos/components/kiosk:kiosk",
      "//chromeos/components/mgs",
      "//components/app_restore",
      "//components/arc",
      "//components/arc/common",
      "//components/arc/common:arc_intent_helper_constants",
      "//components/exo",
      "//components/image_fetcher/core",
      "//components/metrics/structured:structured_events",
      "//components/resources:components_resources",
      "//components/services/app_service/public/cpp:instance_update",
      "//components/services/app_service/public/cpp:macros",
      "//components/ukm",
      "//components/webapps/browser",
      "//services/metrics/public/cpp:ukm_builders",
      "//ui/chromeos/styles:cros_tokens_color_mappings",
    ]

    # TODO(crbug.com/40251079): Remove circular dependencies.
    allow_circular_includes_from += [
      "//chrome/browser/ash/android_sms",
      "//chrome/browser/ash/app_list",
      "//chrome/browser/ash/app_list/arc",
      "//chrome/browser/ash/app_list/internal_app",
      "//chrome/browser/ash/app_list/search",
      "//chrome/browser/ash/app_restore",
      "//chrome/browser/ash/borealis",
      "//chrome/browser/ash/app_list/app_service",
      "//chrome/browser/ash/app_mode/web_app",
      "//chrome/browser/ash/apps",
      "//chrome/browser/ash/arc",
      "//chrome/browser/ash/arc/app_shortcuts",
      "//chrome/browser/ash/arc/intent_helper",
      "//chrome/browser/ash/arc/nearby_share",
      "//chrome/browser/ash/arc/privacy_items",
      "//chrome/browser/ash/arc/session",
      "//chrome/browser/ash/arc/tracing",
      "//chrome/browser/ash/calendar",
      "//chrome/browser/ash/child_accounts",
      "//chrome/browser/ash/child_accounts/on_device_controls",
      "//chrome/browser/ash/child_accounts/time_limits",
      "//chrome/browser/ash/file_manager",
      "//chrome/browser/ash/file_system_provider",
      "//chrome/browser/ash/guest_os",
      "//chrome/browser/ash/extensions",
      "//chrome/browser/ash/extensions/autotest_private",
      "//chrome/browser/ash/extensions/file_manager",
      "//chrome/browser/ash/login/demo_mode",
      "//chrome/browser/ash/policy/dlp",
      "//chrome/browser/ash/policy/handlers",
      "//chrome/browser/ash/printing",
      "//chrome/browser/ash/remote_apps",
      "//chrome/browser/ash/scanning",
      "//chrome/browser/ash/system_logs",
      "//chrome/browser/ash/system_web_apps/apps",
      "//chrome/browser/ash/system_web_apps/apps/camera_app",
      "//chrome/browser/ash/system_web_apps/apps/media_app",
      "//chrome/browser/chromeos/extensions/login_screen/login/cleanup",
      "//chrome/browser/ui/ash/shelf",
      "//chrome/browser/ui/ash/shelf/app_service",
      "//chrome/browser/ui/ash/system_web_apps",
      "//chrome/browser/ui/webui/ash/add_supervision",
    ]
  }

  if (is_chromeos_lacros) {
    sources += [
      "app_service_proxy_lacros.cc",
      "app_service_proxy_lacros.h",
      "metrics/website_metrics.cc",
      "metrics/website_metrics.h",
      "metrics/website_metrics_service_lacros.cc",
      "metrics/website_metrics_service_lacros.h",
    ]

    deps += [
      "//chromeos/lacros",
      "//components/keep_alive_registry",
      "//components/webapps/browser",
      "//services/metrics/public/cpp:ukm_builders",
      "//ui/wm",
    ]
  }

  if (!is_chromeos) {
    sources += [
      "app_service_proxy_desktop.cc",
      "app_service_proxy_desktop.h",
    ]
  }

  if (!is_chromeos_lacros) {
    sources += [
      # TODO(crbug.com/40251315): Make this safe to include in lacros by removing
      # redefinition of types in app_service_proxy_lacros.
      "app_service_proxy_base.cc",
      "app_service_proxy_base.h",
      "publisher_host.cc",
      "publisher_host.h",
      "publishers/extension_apps.cc",
      "publishers/extension_apps.h",
      "publishers/extension_apps_base.cc",
      "publishers/extension_apps_base.h",
    ]
  }
}

source_set("constants") {
  sources = [
    "app_launch_params.cc",
    "app_launch_params.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  deps = [
    "//base",
    "//components/services/app_service",
    "//ui/base:types",
    "//ui/display/types",
    "//ui/gfx/geometry",
    "//url",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "app_service_proxy_unittest.cc",
    "intent_util_unittest.cc",
    "launch_utils_unittest.cc",
    "publishers/publisher_unittest.cc",
  ]

  deps = [
    ":app_service",
    ":constants",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//build:chromeos_buildflags",
    "//cc:test_support",
    "//chrome/app/theme:chrome_unscaled_resources_grit",
    "//chrome/browser/apps:icon_standardizer",
    "//chrome/browser/apps/app_service/app_icon",
    "//chrome/browser/apps/app_service/app_icon:unit_tests",
    "//chrome/browser/apps/app_service/app_icon:util",
    "//chrome/browser/apps/link_capturing:test_support",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/resources:component_extension_resources",
    "//chrome/browser/ui",
    "//chrome/browser/web_applications",
    "//chrome/browser/web_applications:web_applications_test_support",
    "//chrome/common:chrome_features",
    "//chrome/common:non_code_constants",
    "//chrome/test:test_support",
    "//components/account_id",
    "//components/app_constants",
    "//components/services/app_service",
    "//components/services/app_service/public/cpp:test_support",
    "//components/user_manager",
    "//content/test:test_support",
    "//mojo/public/cpp/bindings:bindings_base",
    "//net",
    "//services/data_decoder/public/cpp:test_support",
    "//skia",
    "//storage/browser",
    "//storage/common",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base",
    "//ui/display/types",
    "//ui/gfx",
    "//ui/gfx:test_support",
    "//ui/gfx/codec",
    "//ui/gfx/geometry",
    "//url",
  ]

  if (enable_extensions) {
    deps += [
      "//chrome/browser/extensions",
      "//extensions:test_support",
      "//extensions/common",
    ]
  }

  if (is_chromeos) {
    deps += [ "//chromeos/crosapi/mojom" ]
  }

  if (is_chromeos_ash) {
    sources += [
      "file_utils_unittest.cc",
      "metrics/app_platform_metrics_service_unittest.cc",
      "promise_apps/promise_app_almanac_connector_unittest.cc",
      "promise_apps/promise_app_icon_cache_unittest.cc",
      "promise_apps/promise_app_registry_cache_unittest.cc",
      "promise_apps/promise_app_service_unittest.cc",
      "promise_apps/promise_app_unittest.cc",
      "promise_apps/promise_app_update_unittest.cc",
      "promise_apps/promise_app_wrapper_unittest.cc",
      "publishers/arc_apps_unittest.cc",
      "publishers/bruschetta_apps_unittest.cc",
      "publishers/crostini_apps_unittest.cc",
      "publishers/guest_os_apps_unittest.cc",
      "publishers/plugin_vm_apps_unittest.cc",
      "webapk/webapk_install_task_unittest.cc",
      "webapk/webapk_manager_unittest.cc",
    ]

    deps += [
      "//ash/components/arc:arc_test_support",
      "//ash/constants",
      "//chrome/browser/apps/app_service/app_install:unit_tests",
      "//chrome/browser/apps/app_service/promise_apps/proto",
      "//chrome/browser/ash/app_list/arc",
      "//chrome/browser/ash/app_list/arc:test_support",
      "//chrome/browser/ash/app_list/internal_app",
      "//chrome/browser/ash/apps",
      "//chrome/browser/ash/arc",
      "//chrome/browser/ash/arc/fileapi",
      "//chrome/browser/ash/borealis",
      "//chrome/browser/ash/borealis/testing:test_support",
      "//chrome/browser/ash/bruschetta",
      "//chrome/browser/ash/bruschetta:test_support",
      "//chrome/browser/ash/crosapi:browser_util",
      "//chrome/browser/ash/crosapi:test_support",
      "//chrome/browser/ash/crostini:test_support",
      "//chrome/browser/ash/file_manager",
      "//chrome/browser/ash/fusebox",
      "//chrome/browser/ash/guest_os",
      "//chrome/browser/ash/guest_os:test_support",
      "//chrome/browser/ash/guest_os/public",
      "//chrome/browser/ash/login/users:test_support",
      "//chrome/browser/ash/plugin_vm",
      "//chrome/browser/ash/plugin_vm:test_support",
      "//chrome/browser/metrics/structured:features",
      "//chrome/browser/resources:app_icon_resources_grit",
      "//chrome/browser/web_applications/app_service:unit_tests",
      "//chromeos/ash/components/dbus/chunneld",
      "//chromeos/ash/components/dbus/cicerone",
      "//chromeos/ash/components/dbus/seneschal",
      "//chromeos/ash/components/login/login_state",
      "//chromeos/ash/components/standalone_browser",
      "//chromeos/ash/components/system",
      "//chromeos/components/mgs:test_support",
      "//chromeos/dbus/power:power_manager_proto",
      "//components/arc",
      "//components/arc:arc_test_support",
      "//components/image_fetcher/core",
      "//components/image_fetcher/core:test_support",
      "//components/metrics/structured:common",
      "//components/metrics/structured:structured_events",
      "//components/metrics/structured:structured_metrics_features",
      "//components/metrics/structured:test_support",
      "//components/services/app_service/public/cpp/shortcut",
      "//components/webapk:proto",
    ]
  }

  if (is_chromeos_lacros) {
    sources += [
      "app_service_proxy_lacros_unittest.cc",
      "metrics/website_metrics_service_lacros_unittest.cc",
    ]
  } else {
    sources += [ "publishers/app_publisher_unittest.cc" ]
  }
}

source_set("test_support") {
  testonly = true

  sources = [
    "app_service_test.cc",
    "app_service_test.h",
  ]

  public_deps = [ ":app_service" ]

  deps = [
    "//build:chromeos_buildflags",
    "//chrome/browser/sync",
    "//chrome/test:test_support",
    "//components/services/app_service",
    "//skia",
  ]

  if (is_chromeos_ash) {
    sources += [
      "metrics/app_platform_metrics_service_test_base.cc",
      "metrics/app_platform_metrics_service_test_base.h",
      "webapk/webapk_test_server.cc",
      "webapk/webapk_test_server.h",
    ]

    deps += [
      "//chrome/browser/ash/login/users:test_support",
      "//components/webapk:proto",
    ]
  }

  if (is_chromeos_lacros) {
    sources += [
      "mock_crosapi_app_service_proxy.cc",
      "mock_crosapi_app_service_proxy.h",
    ]
  }
}

source_set("app_registry_cache_waiter") {
  testonly = true

  sources = [
    "app_registry_cache_waiter.cc",
    "app_registry_cache_waiter.h",
  ]

  public_deps = [ "//components/services/app_service" ]

  deps = [
    ":app_service",
    "//build:chromeos_buildflags",
    "//url",
  ]
}