910e62b5创建于 1月15日历史提交
# Copyright 2015 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/apple/compile_entitlements.gni")
import("//build/apple/tweak_info_plist.gni")
import("//build/buildflag_header.gni")
import("//build/config/apple/mobile_config.gni")
import("//build/config/ios/config.gni")
import("//build/config/ios/ios_sdk.gni")
import("//build/config/ios/rules.gni")
import("//build/ios/extension_bundle_data.gni")
import("//ios/build/chrome_build.gni")
import("//ios/build/config.gni")
import("//ios/chrome/app/chrome_app.gni")
import("//ios/chrome/features.gni")
import("//ios/features.gni")
import("//ios/public/provider/chrome/browser/build_config.gni")
import("//rlz/buildflags/buildflags.gni")

declare_args() {
  # Controls whether fast_app_terminate_buildflags is enabled
  # (see crbug.com/1328891 for details).
  fast_app_terminate_enabled = -1

  # Path to a PrivacyInfo.xcprivacy file to be included in the application.
  ios_chrome_privacy_manifest = ""

  # Path to an orderfile to be used when building the application binary.
  ios_chrome_orderfile = ""
}

# If fast_app_terminate_enabled is not enabled, default to true,
# except in debug mode (as this makes it difficult to debug the
# app termination crashes).
if (fast_app_terminate_enabled == -1) {
  fast_app_terminate_enabled = !is_debug
}

buildflag_header("background_mode_buildflags") {
  header = "background_mode_buildflags.h"
  flags = [ "IOS_BACKGROUND_MODE_ENABLED=$ios_enable_background_mode" ]
}

buildflag_header("fast_app_terminate_buildflags") {
  header = "fast_app_terminate_buildflags.h"
  flags = [ "FAST_APP_TERMINATE_ENABLED=$fast_app_terminate_enabled" ]
}

buildflag_header("ios_force_build_chrome_framework_buildflags") {
  header = "ios_force_build_chrome_framework_buildflags.h"
  flags =
      [ "IOS_FORCE_BUILD_CHROME_FRAMEWORK=$ios_force_build_chrome_framework" ]
}

source_set("app") {
  sources = [
    "app_startup_parameters.h",
    "app_startup_parameters.mm",
    "deferred_initialization_queue.h",
    "deferred_initialization_queue.mm",
    "deferred_initialization_runner.h",
    "deferred_initialization_runner.mm",
  ]

  deps = [
    "//base",
    "//ios/chrome/app/startup:utils",
    "//ios/chrome/browser/shared/model/url:constants",
    "//ios/chrome/browser/shared/public/features",
    "//ios/public/provider/chrome/browser/application_mode_fetcher:application_mode_fetcher_api",
    "//net",
    "//url",
  ]

  frameworks = [ "Foundation.framework" ]
}

source_set("app_trampoline") {
  sources = [ "chrome_exe_main.mm" ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "app_metrics_app_state_agent_unittest.mm",
    "app_startup_parameters_unittest.mm",
    "change_profile_animator_unittest.mm",
    "deferred_initialization_runner_unittest.mm",
    "safe_mode_app_state_agent_unittest.mm",
    "tab_opener_unittest.mm",
    "variations_app_state_agent_unittest.mm",
  ]
  deps = [
    ":app",
    ":app_internal",
    ":app_metrics_app_state_agent",
    ":change_profile_animator",
    ":safe_mode_app_state_agent",
    ":variations_app_state_agent",
    "//base",
    "//base/test:test_support",
    "//components/bookmarks/test",
    "//components/metrics",
    "//components/open_from_clipboard",
    "//components/open_from_clipboard:test_support",
    "//components/prefs",
    "//components/prefs:test_support",
    "//components/sync_preferences",
    "//components/sync_preferences:test_support",
    "//components/variations",
    "//components/variations/service",
    "//ios/chrome/app:enterprise_app_agent",
    "//ios/chrome/app/application_delegate",
    "//ios/chrome/app/application_delegate:app_state",
    "//ios/chrome/app/application_delegate:metrics_mediator",
    "//ios/chrome/app/application_delegate:startup_information",
    "//ios/chrome/app/application_delegate:tab_opening",
    "//ios/chrome/app/application_delegate:test_support",
    "//ios/chrome/app/application_delegate:url_opener",
    "//ios/chrome/app/application_delegate:url_opener_params",
    "//ios/chrome/app/profile",
    "//ios/chrome/app/profile:test_utils",
    "//ios/chrome/browser/bookmarks/model",
    "//ios/chrome/browser/bookmarks/model:test_support",
    "//ios/chrome/browser/browsing_data/model",
    "//ios/chrome/browser/first_run/ui_bundled:constants",
    "//ios/chrome/browser/main/ui_bundled",
    "//ios/chrome/browser/metrics/model",
    "//ios/chrome/browser/promos_manager/model",
    "//ios/chrome/browser/promos_manager/model:constants",
    "//ios/chrome/browser/promos_manager/model:test_support",
    "//ios/chrome/browser/reading_list/model",
    "//ios/chrome/browser/reading_list/model:test_support",
    "//ios/chrome/browser/safe_mode/ui_bundled",
    "//ios/chrome/browser/sessions/model",
    "//ios/chrome/browser/sessions/model:fake",
    "//ios/chrome/browser/shared/coordinator/scene",
    "//ios/chrome/browser/shared/coordinator/scene:scene_state_header",
    "//ios/chrome/browser/shared/coordinator/scene:scene_testing",
    "//ios/chrome/browser/shared/coordinator/scene/test",
    "//ios/chrome/browser/shared/model/application_context",
    "//ios/chrome/browser/shared/model/browser/test:test_support",
    "//ios/chrome/browser/shared/model/prefs:browser_prefs",
    "//ios/chrome/browser/shared/model/prefs:pref_names",
    "//ios/chrome/browser/shared/model/profile/test",
    "//ios/chrome/browser/shared/public/features",
    "//ios/chrome/browser/signin/model:test_support",
    "//ios/chrome/browser/tabs/model",
    "//ios/chrome/browser/variations/model:fetcher",
    "//ios/chrome/browser/web_state_list/model/web_usage_enabler",
    "//ios/chrome/common/app_group",
    "//ios/chrome/test:test_support",
    "//ios/chrome/test/providers/application_mode_fetcher",
    "//ios/public/provider/chrome/browser/app_distribution:app_distribution_api",
    "//ios/public/provider/chrome/browser/application_mode_fetcher:application_mode_fetcher_api",
    "//ios/testing:block_swizzler",
    "//ios/web/public/test",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
    "//url",
  ]
}

source_set("tests_hook") {
  # This target is intentionally not test-only, as the main app depends on it.
  sources = [ "tests_hook.h" ]
  deps = [ "//base" ]
}

source_set("tests_fake_hook") {
  # This target is intentionally not test-only, as the main app depends on it.
  sources = [ "tests_fake_hook.mm" ]
  deps = [
    ":tests_hook",
    "//components/commerce/core:shopping_service",
    "//components/feature_engagement/public",
    "//components/signin/internal/identity_manager",
    "//ios/chrome/browser/feature_engagement/model",
    "//ios/chrome/browser/shared/public/snackbar:constants",
  ]
}

source_set("perf_tests_hook") {
  sources = [
    "perf_tests_hook.mm",
    "perf_tests_hook_logging.mm",
  ]
  deps = [
    ":tests_hook",
    "//components/commerce/core:shopping_service",
    "//components/feature_engagement/public",
    "//components/signin/internal/identity_manager",
    "//ios/chrome/browser/feature_engagement/model",
    "//ios/chrome/browser/shared/public/snackbar:constants",
    "//ios/public/provider/chrome/browser/primes:primes_api",
  ]
}

tweak_info_plist("info_plist") {
  info_plists = [
    "resources/Info.plist",
    "resources/ChromeAddition+Info.plist",
  ]
  if (ios_enable_background_mode) {
    info_plists += [ "resources/Background+Info.plist" ]
  }
  if (!ios_enable_liquid_glass) {
    info_plists += [ "resources/DisableLiquidGlassCompatibility+Info.plist" ]
  }
  if (target_environment == "catalyst") {
    info_plists += [ "resources/Environment+Catalyst.plist" ]
  } else {
    info_plists += [ "resources/Environment+Default.plist" ]
  }
  if (ios_chrome_info_plist_additions != []) {
    info_plists += ios_chrome_info_plist_additions
  }
  if (ios_encryption_export_compliance_code != "") {
    info_plists += [ "resources/EncryptionExportCompliance+Info.plist" ]
  }
  if (ios_chrome_info_plist_addition_targets != []) {
    if (!defined(deps)) {
      deps = []
    }
    deps += ios_chrome_info_plist_addition_targets
  }
  args = [
    "--branding=$chromium_short_name",
    "--add-gtm-metadata=1",
  ]
}

compile_entitlements("entitlements") {
  entitlements_templates = [ "resources/Chrome.entitlements" ]
  if (ios_chrome_entitlements_additions != []) {
    entitlements_templates += ios_chrome_entitlements_additions
  }
  if (target_environment == "catalyst") {
    entitlements_templates += [ "resources/Environment+Catalyst.entitlements" ]
  }
  if (use_blink) {
    entitlements_templates += [ "//content/app/ios/appex/app.entitlements" ]
  }
  substitutions = [ "IOS_BUNDLE_ID_PREFIX=$ios_app_bundle_id_prefix" ]
  output_name = "$target_gen_dir/$chromium_short_name.entitlements"
}

if (ios_enable_credential_provider_extension) {
  source_set("credential_provider_migrator_app_agent") {
    sources = [
      "credential_provider_migrator_app_agent.h",
      "credential_provider_migrator_app_agent.mm",
    ]
    deps = [
      "//components/webauthn/core/browser:passkey_model",
      "//ios/chrome/app/application_delegate:app_state",
      "//ios/chrome/app/application_delegate:observing_app_state_agent",
      "//ios/chrome/app/profile",
      "//ios/chrome/browser/credential_provider/model",
      "//ios/chrome/browser/passwords/model:store_factory",
      "//ios/chrome/browser/shared/coordinator/scene:scene_state_header",
      "//ios/chrome/browser/shared/model/application_context",
      "//ios/chrome/browser/shared/model/profile",
      "//ios/chrome/browser/shared/model/profile:features",
      "//ios/chrome/browser/sync/model",
      "//ios/chrome/browser/webauthn/model",
      "//ios/chrome/common/app_group",
      "//ios/chrome/common/credential_provider",
    ]
  }
}

source_set("app_metrics_app_state_agent") {
  sources = [
    "app_metrics_app_state_agent.h",
    "app_metrics_app_state_agent.mm",
  ]
  deps = [
    ":app",
    ":tests_hook",
    "//base",
    "//ios/chrome/app/application_delegate:app_state",
    "//ios/chrome/app/application_delegate:metrics_mediator",
    "//ios/chrome/app/application_delegate:observing_app_state_agent",
    "//ios/chrome/app/application_delegate:startup_information",
    "//ios/chrome/browser/shared/coordinator/scene:scene_state_header",
    "//ios/public/provider/chrome/browser/primes:primes_api",
  ]
}

source_set("safe_mode_app_state_agent") {
  sources = [
    "safe_mode_app_state_agent+private.h",
    "safe_mode_app_state_agent.h",
    "safe_mode_app_state_agent.mm",
  ]
  deps = [
    "//base",
    "//ios/chrome/app/application_delegate:app_state",
    "//ios/chrome/app/application_delegate:observing_app_state_agent",
    "//ios/chrome/browser/safe_mode/ui_bundled",
    "//ios/chrome/browser/shared/coordinator/scene:observing_scene_agent",
  ]
}

source_set("variations_app_state_agent") {
  sources = [
    "variations_app_state_agent+testing.h",
    "variations_app_state_agent.h",
    "variations_app_state_agent.mm",
  ]
  deps = [
    ":launch_screen_ui",
    "//base",
    "//components/prefs",
    "//components/variations",
    "//components/variations/service",
    "//ios/chrome/app/application_delegate:app_state",
    "//ios/chrome/app/application_delegate:observing_app_state_agent",
    "//ios/chrome/app/application_delegate:startup_information",
    "//ios/chrome/browser/first_run/ui_bundled:utils",
    "//ios/chrome/browser/shared/coordinator/scene:scene_state_header",
    "//ios/chrome/browser/shared/model/application_context",
    "//ios/chrome/browser/variations/model:fetcher",
    "//ios/chrome/browser/variations/model:store",
    "//ios/chrome/common",
  ]
}

source_set("enterprise_app_agent") {
  sources = [
    "enterprise_app_agent.h",
    "enterprise_app_agent.mm",
  ]

  deps = [
    ":enterprise_app_agent_ui",
    "//base",
    "//components/policy/core/common",
    "//ios/chrome/app/application_delegate:app_state",
    "//ios/chrome/app/application_delegate:observing_app_state_agent",
    "//ios/chrome/app/application_delegate:startup_information",
    "//ios/chrome/browser/first_run/ui_bundled:constants",
    "//ios/chrome/browser/first_run/ui_bundled:utils",
    "//ios/chrome/browser/policy/model",
    "//ios/chrome/browser/shared/coordinator/scene:scene_state_header",
    "//ios/chrome/browser/shared/model/application_context",
  ]
}

source_set("launch_screen_ui") {
  sources = [
    "launch_screen_view_controller.h",
    "launch_screen_view_controller.mm",
  ]
  deps = [
    "//base",
    "//ios/chrome/browser/first_run/ui_bundled:constants",
    "//ios/chrome/common/ui/colors",
  ]
}

source_set("enterprise_app_agent_ui") {
  sources = [
    "enterprise_loading_screen_view_controller.h",
    "enterprise_loading_screen_view_controller.mm",
  ]
  deps = [
    ":launch_screen_ui",
    "//base",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser/first_run/ui_bundled:constants",
    "//ios/chrome/browser/shared/ui/util",
    "//ios/chrome/common/ui/colors",
    "//ios/chrome/common/ui/util",
    "//ios/chrome/common/ui/util:dynamic_type_util",
  ]
}

source_set("app_internal") {
  sources = [
    "main_application_delegate.h",
    "main_application_delegate.mm",
    "main_application_delegate_testing.h",
    "main_controller.h",
    "main_controller.mm",
    "memory_monitor.h",
    "memory_monitor.mm",
    "startup_tasks.h",
    "startup_tasks.mm",
  ]

  if (ios_enable_sandbox_dump) {
    sources += [
      "dump_documents_statistics.h",
      "dump_documents_statistics.mm",
    ]
  }

  deps = [
    ":app",
    ":app_lifetime_observer",
    ":app_metrics_app_state_agent",
    ":blocking_scene_commands",
    ":change_profile_animator",
    ":change_profile_commands",
    ":change_profile_continuation",
    ":enterprise_app_agent",
    ":fast_app_terminate_buildflags",
    ":launch_screen_ui",
    ":mode",
    ":safe_mode_app_state_agent",
    ":task_names",
    ":tests_hook",
    ":variations_app_state_agent",
    "//base",
    "//build:branding_buildflags",
    "//components/application_locale_storage",
    "//components/bookmarks/browser",
    "//components/breadcrumbs/core",
    "//components/breadcrumbs/core:status",
    "//components/browser_sync",
    "//components/browsing_data/core",
    "//components/component_updater",
    "//components/component_updater/installer_policies",
    "//components/crash/core/common",
    "//components/download/public/background_service:public",
    "//components/enterprise/idle",
    "//components/favicon/core",
    "//components/favicon_base",
    "//components/handoff",
    "//components/history/core/browser",
    "//components/infobars/core",
    "//components/metrics",
    "//components/optimization_guide/core:features",
    "//components/password_manager/core/common",
    "//components/policy/core/common",
    "//components/prefs",
    "//components/prefs/ios",
    "//components/previous_session_info",
    "//components/proxy_config",
    "//components/search_engines",
    "//components/send_tab_to_self",
    "//components/signin/internal/identity_manager",
    "//components/sync",
    "//components/web_resource",
    "//ios/chrome/app/application_delegate",
    "//ios/chrome/app/application_delegate:app_state",
    "//ios/chrome/app/application_delegate:metrics_mediator",
    "//ios/chrome/app/application_delegate:startup_information",
    "//ios/chrome/app/application_delegate:tab_opening",
    "//ios/chrome/app/application_delegate:url_opener",
    "//ios/chrome/app/application_delegate:url_opener_params",
    "//ios/chrome/app/background_refresh",
    "//ios/chrome/app/profile",
    "//ios/chrome/app/profile:profile_controller",
    "//ios/chrome/app/startup",
    "//ios/chrome/app/startup:ios_enable_sandbox_dump_buildflags",
    "//ios/chrome/app/startup:startup_basic",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser/accessibility/model",
    "//ios/chrome/browser/appearance/ui_bundled",
    "//ios/chrome/browser/authentication/ui_bundled",
    "//ios/chrome/browser/banner_promo/model",
    "//ios/chrome/browser/bookmarks/model",
    "//ios/chrome/browser/browsing_data/model",
    "//ios/chrome/browser/commerce/model/push_notification",
    "//ios/chrome/browser/content_notification/model:util",
    "//ios/chrome/browser/content_settings/model",
    "//ios/chrome/browser/crash_report/model",
    "//ios/chrome/browser/crash_report/model:model_internal",
    "//ios/chrome/browser/crash_report/model/breadcrumbs",
    "//ios/chrome/browser/credential_provider/model:buildflags",
    "//ios/chrome/browser/cross_platform_promos/model",
    "//ios/chrome/browser/default_browser/model:features",
    "//ios/chrome/browser/default_browser/model:utils",
    "//ios/chrome/browser/default_browser/model/install_attribution",
    "//ios/chrome/browser/device_orientation/ui_bundled",
    "//ios/chrome/browser/discover_feed/model:discover_feed_app_agent",
    "//ios/chrome/browser/download/model",
    "//ios/chrome/browser/download/model/auto_deletion",
    "//ios/chrome/browser/download/model/background_service",
    "//ios/chrome/browser/download/ui",
    "//ios/chrome/browser/favicon/model",
    "//ios/chrome/browser/first_run/model",
    "//ios/chrome/browser/first_run/ui_bundled",
    "//ios/chrome/browser/first_run/ui_bundled:utils",
    "//ios/chrome/browser/geolocation/model",
    "//ios/chrome/browser/history/model",
    "//ios/chrome/browser/keyboard/ui_bundled",
    "//ios/chrome/browser/main/model",
    "//ios/chrome/browser/main/ui_bundled",
    "//ios/chrome/browser/memory/model",
    "//ios/chrome/browser/metrics/model",
    "//ios/chrome/browser/metrics/model:metrics_browser_agent",
    "//ios/chrome/browser/metrics/model:metrics_internal",
    "//ios/chrome/browser/ntp/ui_bundled:feature_flags",
    "//ios/chrome/browser/omaha/model",
    "//ios/chrome/browser/passwords/model",
    "//ios/chrome/browser/policy/model",
    "//ios/chrome/browser/promos_manager/model:factory",
    "//ios/chrome/browser/push_notification/model:push_notification_delegate",
    "//ios/chrome/browser/push_notification/model:push_notification_service",
    "//ios/chrome/browser/push_notification/model:push_notification_util",
    "//ios/chrome/browser/saved_tab_groups/model",
    "//ios/chrome/browser/screenshot/model",
    "//ios/chrome/browser/search_engines/model:search_engines_util",
    "//ios/chrome/browser/sessions/model:session_restoration_service",
    "//ios/chrome/browser/sessions/model:session_restoration_service_factory",
    "//ios/chrome/browser/sessions/model:session_util",
    "//ios/chrome/browser/share_extension/model:controller",
    "//ios/chrome/browser/shared/coordinator/scene",
    "//ios/chrome/browser/shared/coordinator/scene:scene_state_header",
    "//ios/chrome/browser/shared/model/application_context",
    "//ios/chrome/browser/shared/model/paths",
    "//ios/chrome/browser/shared/model/prefs:pref_names",
    "//ios/chrome/browser/shared/model/profile",
    "//ios/chrome/browser/shared/model/profile:features",
    "//ios/chrome/browser/shared/model/web_state_list",
    "//ios/chrome/browser/shared/public/commands",
    "//ios/chrome/browser/shared/public/features",
    "//ios/chrome/browser/shared/public/features:system_flags",
    "//ios/chrome/browser/shared/ui/chrome_overlay_window",
    "//ios/chrome/browser/shared/ui/table_view",
    "//ios/chrome/browser/shared/ui/util",
    "//ios/chrome/browser/signin/model",
    "//ios/chrome/browser/signin/model:system_identity_manager",
    "//ios/chrome/browser/sync/model",
    "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid",
    "//ios/chrome/browser/tab_switcher/ui_bundled/tab_grid:tab_grid_ui",
    "//ios/chrome/browser/tabs/ui_bundled",
    "//ios/chrome/browser/toolbar/ui_bundled:ui",
    "//ios/chrome/browser/upgrade/model:public",
    "//ios/chrome/browser/url_loading/model",
    "//ios/chrome/browser/variations/model:ios_chrome_ui_string_overrider_factory",
    "//ios/chrome/browser/voice/model",
    "//ios/chrome/browser/web/model",
    "//ios/chrome/browser/web/model/choose_file:choose_file_file_utils",
    "//ios/chrome/browser/web_state_list/model/web_usage_enabler",
    "//ios/chrome/browser/webui/ui_bundled:webui_internal",
    "//ios/chrome/common/app_group",
    "//ios/chrome/common/app_group:main_app",
    "//ios/chrome/common/intents",
    "//ios/components/cookie_util",
    "//ios/net",
    "//ios/public/provider/chrome/browser/app_distribution:app_distribution_api",
    "//ios/public/provider/chrome/browser/memory_experimenter:memory_experimenter_api",
    "//ios/public/provider/chrome/browser/overrides:overrides_api",
    "//ios/public/provider/chrome/browser/raccoon:raccoon_api",
    "//ios/public/provider/chrome/browser/signin:choice_api",
    "//ios/public/provider/chrome/browser/ui_utils:ui_utils_api",
    "//ios/public/provider/chrome/browser/user_feedback:user_feedback_api",
    "//ios/web/common:uikit",
    "//ios/web/public/webui",
    "//net",
    "//rlz/buildflags",
    "//skia",
    "//ui/base",
    "//ui/gfx",
    "//ui/resources",
    "//ui/strings:ui_strings",
  ]

  if (target_environment != "catalyst") {
    deps += [ "//ios/chrome/browser/default_browser/model/default_status" ]
  }

  if (ios_enable_credential_provider_extension) {
    deps += [ ":credential_provider_migrator_app_agent" ]
  }

  if (enable_rlz) {
    deps += [
      "//components/rlz",
      "//ios/chrome/browser/rlz",
    ]
  }

  frameworks = [ "MediaPlayer.framework" ]

  allow_circular_includes_from =
      [ "//ios/chrome/browser/shared/coordinator/scene" ]
}

source_set("app_lifetime_observer") {
  sources = [ "app_lifetime_observer.h" ]
  frameworks = [ "UIKit.framework" ]
}

source_set("task_names") {
  sources = [
    "deferred_initialization_task_names.h",
    "deferred_initialization_task_names.mm",
  ]
}

source_set("change_profile_commands") {
  sources = [ "change_profile_commands.h" ]
  deps = [
    ":change_profile_continuation",
    "//base",
  ]
}

source_set("change_profile_continuation") {
  sources = [
    "change_profile_continuation.h",
    "change_profile_continuation.mm",
  ]
  deps = [ "//base" ]
}

source_set("change_profile_animator") {
  sources = [
    "change_profile_animator.h",
    "change_profile_animator.mm",
  ]
  deps = [
    ":change_profile_commands",
    ":change_profile_continuation",
    "//base",
    "//ios/chrome/app/profile",
    "//ios/chrome/browser/shared/coordinator/scene:scene_state_header",
    "//ios/chrome/browser/shared/ui/chrome_overlay_window",
  ]
}

source_set("blocking_scene_commands") {
  sources = [ "blocking_scene_commands.h" ]

  deps = [ "//base" ]
}

source_set("mode") {
  sources = [ "application_mode.h" ]

  deps = [ "//base" ]
}

source_set("main") {
  sources = [ "chrome_main.mm" ]

  deps = [
    ":app_internal",
    ":ios_force_build_chrome_framework_buildflags",
    "//base",
    "//build:blink_buildflags",
    "//components/component_updater",
    "//components/crash/core/app",
    "//components/crash/core/common",
    "//ios/chrome/app:tests_hook",
    "//ios/chrome/app/startup:ios_enable_sandbox_dump_buildflags",
    "//ios/chrome/app/startup:startup_basic",
    "//ios/chrome/browser/crash_report/model",
    "//ios/chrome/browser/shared/model/paths",
    "//ios/chrome/common",
    "//ios/public/provider/chrome/browser/primes:primes_api",
  ]
  if (ios_chrome_privacy_manifest != "") {
    deps += [ ":privacy_manifest" ]
  }
  if (ios_enable_sandbox_dump) {
    deps += [ "//ios/chrome/app/startup:sandbox_dump" ]
  }
  if (ios_chrome_generate_order_file) {
    deps += [ "//ios/components/order_file" ]
  }
}

if (ios_chrome_privacy_manifest != "") {
  bundle_data("privacy_manifest") {
    sources = [ ios_chrome_privacy_manifest ]
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
  }
}

source_set("multitasking_test_app_delegate") {
  sources = [
    "multitasking_test_application_delegate.h",
    "multitasking_test_application_delegate.mm",
    "multitasking_test_scene_delegate.h",
    "multitasking_test_scene_delegate.mm",
  ]
  deps = [
    ":app_internal",
    "//base",
    "//ios/chrome/app/application_delegate:app_state",
    "//ios/chrome/browser/shared/coordinator/scene",
    "//ios/chrome/browser/shared/ui/chrome_overlay_window",
  ]
}

ios_framework_bundle("early_partition_alloc_framework") {
  output_name = "EarlyMallocZoneRegistration"
  sources = [ "early_pa_registration.cc" ]
  info_plist = "//ios/chrome/app/resources/EarlyPAFrameworkInfo.plist"
  extra_substitutions =
      [ "BUNDLE_IDENTIFIER=$ios_app_bundle_id_prefix.$output_name" ]

  deps = [
    "//base/allocator:early_zone_registration_apple",
    "//base/allocator/partition_allocator:buildflags",
  ]
}

chrome_app("chrome") {
  output_name = chromium_short_name

  entitlements_target = ":entitlements"
  info_plist_target = ":info_plist"
  bundle_identifier = "$ios_chromium_bundle_id"
  if (ios_chrome_orderfile != "") {
    orderfile_path = ios_chrome_orderfile
  }

  link_framework_first = "EarlyMallocZoneRegistration"

  bundle_deps = [
    "//ios/chrome/app/resources",
    "//ios/chrome/app/resources:settings_resources",
  ]
  if (!is_chrome_branded || ios_chrome_app_variants == []) {
    assert(ios_application_icons_target != "",
           "ios_application_icons_target must be defined.")
    bundle_deps += [ ios_application_icons_target ]
    bundle_deps += [ ios_application_icons_target_legacy ]
    bundle_deps += ios_providers_resources_targets
  } else {
    _variants = []
    foreach(_variant, ios_chrome_app_variants) {
      _variants += [
        {
          forward_variables_from(_variant, "*", [ "cpe_bundle_deps" ])
          if (ios_enable_credential_provider_extension) {
            if (!defined(bundle_deps)) {
              bundle_deps = []
            }
            bundle_deps += [
              ":credential_provider_extension_bundle_variants_${_variant.name}",
            ]
          }
        },
      ]
    }
    variants = _variants
  }

  xcode_extra_attributes = {
    SUPPORTS_MACCATALYST = "YES"
  }

  deps = [
    ":main",

    # Use the provider API controlled by args.gn.
    ios_provider_target,
  ]

  if (ios_is_perf_test) {
    deps += [ ":perf_tests_hook" ]
  } else {
    deps += [ ":tests_fake_hook" ]
  }

  if (current_toolchain == default_toolchain) {
    if (ios_enable_share_extension) {
      bundle_deps += [ ":share_extension_bundle" ]
    }
    if (ios_enable_open_extension) {
      bundle_deps += [ ":open_extension_bundle" ]
    }
    if (ios_enable_credential_provider_extension) {
      if (!is_chrome_branded || ios_chrome_app_variants == []) {
        bundle_deps += [ ":credential_provider_extension_bundle" ]
      }
    }
    if (ios_enable_widget_kit_extension) {
      bundle_deps += [ ":widget_kit_extension_bundle" ]
    }
    if (ios_enable_intents_extension) {
      bundle_deps += [ ":intents_extension_bundle" ]
    }
    if (ios_enable_push_notification_service_extension) {
      bundle_deps += [ ":push_notification_service_extension_bundle" ]
    }
  }

  extra_substitutions = [
    "CHROMIUM_BUNDLE_ID=$ios_chromium_bundle_id",
    "CHROMIUM_HANDOFF_ID=$chromium_handoff_id",
    "CHROMIUM_SHORT_NAME=$chromium_short_name",
    "CHROMIUM_URL_SCHEME_1=$url_unsecure_scheme",
    "CHROMIUM_URL_SCHEME_2=$url_secure_scheme",
    "CHROMIUM_URL_SCHEME_3=$url_x_callback_scheme",
    "CHROMIUM_URL_CHANNEL_SCHEME=$url_channel_scheme",
    "SSOAUTH_URL_SCHEME=$url_ssoauth_scheme",
    "IOS_MOVE_TAB_ACTIVITY_TYPE=$ios_move_tab_activity_type",
  ]

  if (ios_encryption_export_compliance_code != "") {
    extra_substitutions += [ "ENCRYPTION_EXPORT_COMPLIANCE_CODE=" +
                             ios_encryption_export_compliance_code ]
  }

  assert_no_deps = ios_assert_no_deps + ios_chrome_extra_assert_no_deps

  # Lottie links with GLKit which does not support macCatalyst environment
  # (see https://crbug.com/1394553 for details of the build failure). This
  # is a stop-gap solution.
  if (target_environment == "catalyst" ||
      ios_provider_target !=
      "//ios/chrome/browser/providers:chromium_providers") {
    assert_no_deps += [
      "//ios/third_party/lottie:lottie+bundle",
      "//ios/third_party/lottie:lottie+link",
    ]
  }
}

if (current_toolchain == default_toolchain && !ios_chrome_generate_order_file) {
  _extension_toolchain = "${current_toolchain}_app_ext"
  if (ios_enable_share_extension) {
    extension_bundle_data("share_extension_bundle") {
      extension_name = "share_extension.appex"
      extension_target =
          "//ios/chrome/share_extension/appex(${_extension_toolchain})"
    }
  }

  if (ios_enable_open_extension) {
    extension_bundle_data("open_extension_bundle") {
      extension_name = "open_extension.appex"
      extension_target =
          "//ios/chrome/open_extension/appex(${_extension_toolchain})"
    }
  }

  if (ios_enable_credential_provider_extension) {
    extension_bundle_data("credential_provider_extension_bundle") {
      extension_name = "credential_provider_extension.appex"
      extension_target = "//ios/chrome/credential_provider_extension/appex(${_extension_toolchain})"
      if (is_chrome_branded && ios_chrome_app_variants != []) {
        variants = ios_chrome_app_variants
      }
    }
  }

  if (ios_enable_widget_kit_extension) {
    extension_bundle_data("widget_kit_extension_bundle") {
      extension_name = "widget_kit_extension.appex"
      extension_target =
          "//ios/chrome/widget_kit_extension/appex(${_extension_toolchain})"
    }
  }

  if (ios_enable_intents_extension) {
    extension_bundle_data("intents_extension_bundle") {
      extension_name = "intents_extension.appex"
      extension_target =
          "//ios/chrome/intents_extension/appex(${_extension_toolchain})"
    }
  }

  if (ios_enable_push_notification_service_extension) {
    extension_bundle_data("push_notification_service_extension_bundle") {
      extension_name = "push_notification_service_extension.appex"
      extension_target = "//ios/chrome/push_notification_service_extension/appex(${_extension_toolchain})"
    }
  }
}

source_set("constants") {
  sources = [
    "background_refresh_constants.h",
    "background_refresh_constants.mm",
  ]
  deps = [ "//base" ]
}