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

import("//build/config/chrome_build.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/compiler/pgo/pgo.gni")
import("//build/config/features.gni")
import("//build/config/locales.gni")
import("//build/config/python.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//build/config/win/console_app.gni")
import("//build/config/win/manifest.gni")
import("//build/toolchain/toolchain.gni")
import("//chrome/chrome_paks.gni")
import("//chrome/common/features.gni")
import("//chrome/process_version_rc_template.gni")
import("//components/gwp_asan/buildflags/buildflags.gni")
import("//components/nacl/features.gni")
import("//extensions/buildflags/buildflags.gni")
import("//media/media_options.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//third_party/blink/public/public_features.gni")
import("//third_party/widevine/cdm/widevine.gni")
import("//tools/resources/generate_resource_allowlist.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
import("//ui/gl/features.gni")
import("//v8/gni/v8.gni")

if (is_android) {
  import("//build/config/android/rules.gni")
} else if (is_linux || is_chromeos) {
  import("//build/linux/extract_symbols.gni")
} else if (is_mac) {
  import("//build/apple/tweak_info_plist.gni")
  import("//build/compiled_action.gni")
  import("//build/config/mac/base_rules.gni")
  import("//build/config/mac/mac_sdk.gni")
  import("//build/config/mac/rules.gni")
  import("//build/config/mac/symbols.gni")
  import("//build/util/branding.gni")
  import("//build/util/version.gni")
  import("//chrome/browser/buildflags.gni")
  import("//chrome/updater/branding.gni")
  import("//content/public/app/mac_helpers.gni")
  import("//media/cdm/library_cdm/cdm_paths.gni")
  import("//third_party/icu/config.gni")
}

declare_args() {
  # Indicates whether keystone registration framework should be enabled (see
  # action("keystone_registration_framework") below).  There are some tests
  # where we'd like for it to be disabled. (https://crbug.com/909080)
  enable_keystone_registration_framework = true
}

assert(!is_ios, "Chromium/iOS shouldn't use anything in //chrome")

if (enable_resource_allowlist_generation) {
  chrome_resource_whitelist = "$target_gen_dir/chrome_resource_whitelist.txt"
}

if (is_win) {
  # TODO(crbug.com/1112471): Get this to run cleanly under Python 3.
  python2_action("reorder_imports") {
    script = "//build/win/reorder-imports.py"

    # See comment in chrome_dll.gypi in the hardlink_to_output
    # target for why this cannot be 'initial' like the DLL.
    inputs = [ "$root_out_dir/initialexe/chrome.exe" ]
    outputs = [
      "$root_out_dir/chrome.exe",
      "$root_out_dir/chrome.exe.pdb",
    ]
    args = [
      "-i",
      rebase_path("$root_out_dir/initialexe", root_build_dir),
      "-o",
      rebase_path("$root_out_dir", root_build_dir),
      "-a",
      current_cpu,
    ]
    deps = [ ":chrome_initial" ]
  }
}

# This target exists above chrome and it's main components in the dependency
# tree as a central place to put assert_no_deps annotations. Since this depends
# on Chrome and the main DLLs it uses, it will transitively assert that those
# targets also have no deps on disallowed things.
group("assert_no_deps") {
  deps = []

  if (is_android) {
    deps += [ "//chrome/android:chrome_public_apk" ]
  } else {
    deps += [ ":chrome" ]
  }

  if (is_win) {
    deps += [ ":chrome_dll" ]
  }

  # This should not pull in installer strings. This is will bloat the binary
  # for no reason and is easy to mess up. See the comment at the top of
  # //chrome/installer/util/BUILD.gn.
  assert_no_deps = [ "//chrome/installer/util:strings" ]
}
if (!is_android && !is_mac) {
  group("chrome") {
    public_deps = [ ":chrome_initial" ]
    data_deps = [ ":chrome_initial" ]

    # Do not add any more deps or data_deps to group("chrome").
    # Because chrome_initial sets its output name to "chrome", running commands
    # such as `ninja chrome` causes chrome_initial to be built instead. All
    # deps and data_deps should be added to the chrome_initial target instead.
    # Targets added here can only be built by explicitly using //chrome:chrome.
    # Windows-only deps are OK because chrome_initial uses initialexe/chrome as
    # the output name for that platform.
    # See crbug.com/1146571.
    if (is_win) {
      public_deps += [ ":reorder_imports" ]
      data_deps += [ ":reorder_imports" ]
    }
  }

  executable("chrome_initial") {
    if (is_win) {
      output_name = "initialexe/chrome"
    } else {
      output_name = "chrome"
    }

    # Because the sources list varies so significantly per-platform, generally
    # each platform lists its own files rather than relying on filtering or
    # removing unused files.
    sources = [ "app/chrome_exe_resource.h" ]
    defines = []
    public_deps = []
    deps = [
      "//build:chromeos_buildflags",
      "//printing/buildflags",
    ]
    data = [ "$root_out_dir/resources.pak" ]
    data_deps = []

    if (is_chromeos_ash) {
      data_deps += [ "//sandbox/linux:chrome_sandbox" ]
    }

    if (is_chromeos_lacros && also_build_ash_chrome) {
      data_deps += [ "//chrome:chrome(//build/toolchain/linux:ash_clang_x64)" ]
    }

    if (is_win) {
      sources += [
        "app/chrome_exe.rc",
        "app/chrome_exe_main_win.cc",
        "app/main_dll_loader_win.cc",
        "app/main_dll_loader_win.h",
        "common/crash_keys.cc",
        "common/crash_keys.h",
      ]

      deps += [
        ":chrome_dll",
        ":chrome_exe_version",
        ":copy_first_run",
        ":visual_elements_resources",
        "//base",
        "//build:branding_buildflags",
        "//chrome/app/version_assembly:chrome_exe_manifest",
        "//chrome/browser:active_use_util",
        "//chrome/browser:chrome_process_finder",
        "//chrome/browser/policy:path_parser",
        "//chrome/chrome_elf",
        "//chrome/common:constants",
        "//chrome/install_static:install_static_util",
        "//chrome/install_static:secondary_module",
        "//chrome/installer/util:constants",
        "//chrome/installer/util:did_run_support",
        "//components/browser_watcher:browser_watcher_client",
        "//components/crash/core/app",
        "//components/crash/core/app:run_as_crashpad_handler",
        "//components/crash/core/common",
        "//components/flags_ui:switches",
        "//content:sandbox_helper_win",
        "//content/public/common:static_switches",
        "//crypto",
        "//gpu/command_buffer/service",
        "//sandbox",
        "//sandbox/policy",
        "//third_party/breakpad:breakpad_handler",
        "//third_party/breakpad:breakpad_sender",
        "//third_party/crashpad/crashpad/util",
        "//ui/gl",
      ]
      data_deps = [
        "//chrome/app/version_assembly:version_assembly_manifest",
        "//chrome/browser/web_applications/chrome_pwa_launcher",
        "//chrome/chrome_proxy",
        "//chrome/elevation_service",
        "//chrome/notification_helper",
      ]

      if (win_console_app) {
        defines += [ "WIN_CONSOLE_APP" ]
      } else {
        # Set /SUBSYSTEM:WINDOWS for chrome.exe itself, unless a console build
        # has been requested.
        configs -= [ "//build/config/win:console" ]
        configs += [ "//build/config/win:windowed" ]
      }

      configs += [
        "//build/config/win:delayloads",
        "//build/config/win:delayloads_not_for_child_dll",
      ]

      if (current_cpu == "x86") {
        # Set the initial stack size to 0.5MiB, instead of the 1.5MiB needed by
        # Chrome's main thread. This saves significant memory on threads (like
        # those in the Windows thread pool, and others) whose stack size we can
        # only control through this setting. Because Chrome's main thread needs
        # a minimum 1.5 MiB stack, the main thread (in 32-bit builds only) uses
        # fibers to switch to a 1.5 MiB stack before running any other code.
        ldflags = [ "/STACK:0x80000" ]
      } else {
        # Increase the initial stack size. The default is 1MB, this is 8MB.
        ldflags = [ "/STACK:0x800000" ]
      }
    } else if (use_aura) {
      # Non-Windows aura entrypoint.
      sources += [ "app/chrome_exe_main_aura.cc" ]
    }

    if (is_linux || is_chromeos) {
      sources += [
        "app/chrome_dll_resource.h",
        "app/chrome_main.cc",
        "app/chrome_main_delegate.cc",
        "app/chrome_main_delegate.h",
      ]

      deps += [
        # On Linux, link the dependencies (libraries) that make up actual
        # Chromium functionality directly into the executable.
        ":browser_dependencies",
        ":child_dependencies",

        # For configuring PartitionAlloc
        "//base/allocator:buildflags",

        # For the sampling profiler.
        "//chrome/common/profiler",

        # Needed to use the master_preferences functions
        "//chrome/installer/util:with_no_strings",
        "//content/public/app",

        # For headless mode.
        "//headless:headless_shell_lib",
      ]

      public_deps = [
        ":xdg_mime",  # Needs to be public for installer to consume files.
        "//chrome/common:buildflags",
      ]

      ldflags = []

      # Chrome OS debug builds for arm need to pass --long-plt to the linker.
      # See https://bugs.chromium.org/p/chromium/issues/detail?id=583532
      if (is_chromeos_ash && is_debug && target_cpu == "arm") {
        ldflags += [ "-Wl,--long-plt" ]
      }

      if ((is_linux || is_chromeos_lacros) && !is_component_build &&
          !using_sanitizer) {
        version_script = "//build/linux/chrome.map"
        inputs = [ version_script ]
        ldflags += [ "-Wl,--version-script=" +
                     rebase_path(version_script, root_build_dir) ]
      }
    }

    if (is_chromeos_ash || is_win) {
      data_deps += [ "//mojo/core:shared_library" ]
    }

    if (is_chromeos_ash) {
      data_deps += [ "//mojo/core:shared_libraries_for_arc" ]
      if (is_chromeos_device) {
        configs += [ "//build/config/chromeos:print_orderfile" ]
        configs += [ "//build/config/compiler:chrome_orderfile_config" ]
      }
    }

    # These files are used by the installer so we need a public dep.
    public_deps += [ ":packed_resources" ]

    # The step's output are needed at runtime, so we also need a data_dep.
    data_deps += [ ":packed_resources" ]

    # ChromeOS by design is safe to have rpath=$ORIGIN. This simplifies shared
    # library usage.
    if (is_chromeos_ash && !is_component_build) {
      configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
    }

    data_deps += [
      "//chrome/browser/resources/media/mei_preload:component",
      "//third_party/widevine/cdm",
    ]
  }
}  # !is_android && !is_mac

if (is_win) {
  shared_library("chrome_dll") {
    configs += [ "//build/config/compiler:wexit_time_destructors" ]
    defines = []

    sources = [
      "//base/win/dllmain.cc",
      "app/chrome_main.cc",
      "app/chrome_main_delegate.cc",
      "app/chrome_main_delegate.h",
    ]

    output_name = "chrome"

    deps = [
      ":browser_dependencies",
      ":chrome_dll_manifest",
      ":chrome_dll_version",
      "//base/allocator:buildflags",
      "//chrome/app:chrome_dll_resources",
      "//chrome/app:command_ids",
      "//chrome/app/theme:chrome_unscaled_resources",
      "//chrome/chrome_elf",
      "//chrome/common:buildflags",
      "//chrome/common/profiler",
      "//chrome/install_static:install_static_util",
      "//chrome/install_static:secondary_module",
      "//components/browser_watcher:stability_client",
      "//components/crash/core/app",
      "//components/policy:generated",
      "//content/app/resources",
      "//crypto",
      "//headless:headless_shell_browser_lib",
      "//net:net_resources",
      "//ppapi/buildflags",
      "//sandbox/win:sandbox",
      "//third_party/cld_3/src/src:cld_3",
      "//third_party/wtl",
      "//ui/views",
    ]

    configs += [ "//build/config/win:delayloads" ]

    if (use_aura) {
      deps += [ "//ui/compositor" ]
    }

    deps += [
      ":child_dependencies",
      "//content/public/app",
      "//headless:headless_renderer",
    ]
  }

  copy("copy_first_run") {
    sources = [ "app/FirstRun" ]
    outputs = [ "$root_out_dir/First Run" ]
  }
} else if (is_mac) {
  chrome_helper_name = chrome_product_full_name + " Helper"
  chrome_framework_name = chrome_product_full_name + " Framework"
  chrome_framework_version = chrome_version_full

  verify_dynamic_libraries = !is_component_build && !is_asan
  if (host_os == "mac") {
    objdump_path = mac_bin_path
  } else {
    objdump_path = rebase_path("$clang_base_path/bin/", root_build_dir)
  }

  group("chrome") {
    deps = [ ":chrome_app" ]

    data_deps = [ ":chrome_app" ]

    if (verify_dynamic_libraries) {
      deps += [ ":verify_libraries_chrome_app" ]
    }

    if (is_chrome_branded && is_official_build) {
      deps += [
        ":chrome_dsym_archive",
        ":chrome_dump_syms",
      ]
    }
  }

  bundle_data("chrome_framework_services") {
    sources = [ "$root_out_dir/AlertNotificationService.xpc" ]

    outputs = [ "{{bundle_contents_dir}}/XPCServices/{{source_file_part}}" ]

    public_deps = [
      "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service",
    ]
  }

  tweak_info_plist("chrome_app_plist") {
    info_plist = "app/app-Info.plist"
    args = [
      "--breakpad=0",
      "--scm=1",
      "--bundle_id=$chrome_mac_bundle_id",
    ]
    if (is_chrome_branded) {
      args += [ "--keystone=1" ]
      if (current_cpu == "arm64") {
        args += [ "--keystone-base-tag=arm64" ]
      }
    } else {
      args += [ "--keystone=0" ]
    }
  }

  mac_app_bundle("chrome_app") {
    output_name = chrome_product_full_name

    info_plist_target = ":chrome_app_plist"
    extra_substitutions = [
      "CHROMIUM_BUNDLE_ID=$chrome_mac_bundle_id",
      "CHROMIUM_SHORT_NAME=$chrome_product_short_name",
      "CHROMIUM_CREATOR=$chrome_mac_creator_code",
    ]

    sources = [ "app/chrome_exe_main_mac.cc" ]

    extra_configs = [ "//build/config/compiler:wexit_time_destructors" ]

    deps = [
      ":chrome_app_strings_bundle_data",
      ":chrome_resources",
      ":chrome_versioned_bundle_data",
      "//chrome/common:buildflags",
      "//chrome/common:version_header",
    ]

    if (enable_stripping) {
      # At link time, preserve the global symbols specified in the .exports
      # file. All other global symbols will be marked as private. The default
      # //build/config/mac:strip_all config will then remove the remaining
      # local and debug symbols.
      ldflags = [ "-Wl,-exported_symbols_list," +
                  rebase_path("app/app.exports", root_build_dir) ]
    }

    if (is_component_build) {
      # The Framework is packaged inside the .app bundle. But when using the
      # component build, all the dependent shared libraries of :chrome_dll are
      # not packaged within the framework. This data_deps line makes all of
      # those dependent libraries runtime dependencies of the .app bundle.
      # This is a bit of a hack, since GN deliberately terminates its search
      # for runtime_deps at create_bundle nodes (https://crbug.com/1010347).
      data_deps = [ ":chrome_framework" ]
    }
  }

  if (verify_dynamic_libraries) {
    action("verify_libraries_chrome_app") {
      script = "//chrome/tools/build/mac/verify_dynamic_libraries.py"
      inputs = [ "${root_out_dir}/${chrome_product_full_name}.app/Contents/MacOS/${chrome_product_full_name}" ]
      outputs = [ "$target_out_dir/run_$target_name.stamp" ]
      args = [
        "--stamp",
        rebase_path(outputs[0], root_out_dir),
        "-B",
        objdump_path,
        "--image",
        rebase_path(inputs[0], root_out_dir),
        "--allow",
        "/usr/lib/libSystem.B.dylib",
      ]
      deps = [ ":chrome_app" ]
    }
  }

  compiled_action("chrome_app_strings") {
    tool = "//chrome/tools/build/mac:infoplist_strings_util"

    inputs = []

    outputs = []

    foreach(locale, locales) {
      if (is_chrome_branded) {
        _strings_file = "google_chrome_strings"
      } else {
        _strings_file = "chromium_strings"
      }

      inputs += [ "$root_gen_dir/chrome/${_strings_file}_${locale}.pak" ]
    }

    foreach(locale, locales_as_mac_outputs) {
      outputs += [
        "$target_gen_dir/app_infoplist_strings/$locale.lproj/InfoPlist.strings",
      ]
    }

    args =
        [
          "-b",
          "${branding_path_component}_strings",
          "-v",
          chrome_version_full,
          "-g",
          rebase_path("$root_gen_dir/chrome", root_build_dir),
          "-o",
          rebase_path("$target_gen_dir/app_infoplist_strings", root_build_dir),
          "-t",
          "main",
        ] + locales

    if (is_chrome_branded) {
      deps = [ "//chrome/app:google_chrome_strings" ]
    } else {
      deps = [ "//chrome/app:chromium_strings" ]
    }
  }

  foreach(locale, locales_as_mac_outputs) {
    bundle_data("chrome_app_strings_${locale}_bundle_data") {
      sources = [
        "$target_gen_dir/app_infoplist_strings/$locale.lproj/InfoPlist.strings",
      ]
      outputs =
          [ "{{bundle_resources_dir}}/$locale.lproj/{{source_file_part}}" ]
      public_deps = [ ":chrome_app_strings" ]
    }
  }
  group("chrome_app_strings_bundle_data") {
    public_deps = []
    foreach(locale, locales_as_mac_outputs) {
      public_deps += [ ":chrome_app_strings_${locale}_bundle_data" ]
    }
  }

  bundle_data("chrome_resources") {
    sources = [
      "$root_out_dir/$chrome_mac_bundle_id.manifest",
      "app/theme/$branding_path_component/mac/app.icns",
      "app/theme/$branding_path_component/mac/document.icns",
      "browser/ui/cocoa/applescript/scripting.sdef",
    ]
    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
    public_deps = [
      ":chrome_app_strings",
      "//components/policy:chrome_manifest_bundle",
    ]
  }

  bundle_data("chrome_versioned_bundle_data") {
    sources = [ "$root_out_dir/$chrome_framework_name.framework" ]
    outputs = [ "{{bundle_contents_dir}}/Frameworks/{{source_file_part}}" ]
    public_deps = [
      # Before bundling the versioned app components, delete any existing
      # versions.
      ":clean_up_old_versions",

      # verify_chrome_framework_order depends on :chrome_framework and, for
      # non-component builds, will ensure the export symbol table is correct.
      ":verify_chrome_framework_order",
    ]

    if (enable_widevine_cdm_host_verification) {
      # The :chrome_framework_widevine_signature target copies into the
      # :chrome_framework bundle. But because the signing file depends on the
      # framework itself, that would cause a cyclical dependency. Instead,
      # this dependency directly copies the file into the framework's
      # resources directory.
      public_deps += [ ":chrome_framework_widevine_signature" ]
    }
  }

  action("clean_up_old_versions") {
    script = "//chrome/tools/build/mac/clean_up_old_versions.py"

    _stamp_file = "$root_gen_dir/run_$target_name.stamp"

    outputs = [ _stamp_file ]

    _versions_dir = "$root_out_dir/$chrome_product_full_name.app/Contents/Frameworks/$chrome_framework_name.framework/Versions"

    args = [
      "--versions-dir",
      rebase_path(_versions_dir, root_build_dir),
      "--stamp",
      rebase_path(_stamp_file, root_build_dir),
      "--keep",
      chrome_version_full,
      "--keep",
      "Current",
    ]
  }

  tweak_info_plist("chrome_helper_plist") {
    info_plist = "app/helper-Info.plist"
    args = [
      "--breakpad=0",
      "--keystone=0",
      "--scm=0",
    ]
  }

  compile_entitlements("entitlements") {
    entitlements_templates = [ "app/app-entitlements.plist" ]
    if (is_chrome_branded) {
      # These entitlements are bound to the official Google Chrome signing
      # certificate and will not necessarily work in any other build.
      entitlements_templates += [ "app/app-entitlements-chrome.plist" ]
    }
    output_name = "$target_gen_dir/app-entitlements.plist"
    substitutions = [
      "CHROMIUM_BUNDLE_ID=$chrome_mac_bundle_id",
      "CHROMIUM_TEAM_ID=$chrome_mac_team_id",
    ]
    visibility = [ "//chrome/installer/mac:copies" ]
  }

  template("chrome_helper_app") {
    mac_app_bundle(target_name) {
      assert(defined(invoker.helper_name_suffix))
      assert(defined(invoker.helper_bundle_id_suffix))

      output_name = chrome_helper_name + invoker.helper_name_suffix

      info_plist_target = ":chrome_helper_plist"
      extra_substitutions = [
        "CHROMIUM_BUNDLE_ID=$chrome_mac_bundle_id",
        "CHROMIUM_SHORT_NAME=$chrome_product_short_name",
        "CHROMIUM_HELPER_SUFFIX=${invoker.helper_name_suffix}",
        "CHROMIUM_HELPER_BUNDLE_ID_SUFFIX=${invoker.helper_bundle_id_suffix}",
      ]

      sources = [ "app/chrome_exe_main_mac.cc" ]

      extra_configs = [ "//build/config/compiler:wexit_time_destructors" ]

      defines = [ "HELPER_EXECUTABLE" ]

      deps = [
        "//chrome/common:version_header",
        "//sandbox/mac:seatbelt",
      ]

      ldflags = []

      if (is_component_build) {
        ldflags += [
          # The helper is in Chromium.app/Contents/Frameworks/Chromium Framework.framework/Versions/X/Helpers/Chromium Helper.app/Contents/MacOS
          # so set rpath up to the base.
          "-rpath",
          "@loader_path/../../../../../../../../../..",
        ]
      }

      if (enable_stripping) {
        # At link time, preserve the global symbols specified in the .exports
        # file. All other global symbols will be marked as private. The default
        # //build/config/mac:strip_all config will then remove the remaining
        # local and debug symbols.
        ldflags += [ "-Wl,-exported_symbols_list," +
                     rebase_path("app/app.exports", root_build_dir) ]
      }
    }
  }

  foreach(helper_params, content_mac_helpers) {
    _helper_target = helper_params[0]
    _helper_bundle_id = helper_params[1]
    _helper_suffix = helper_params[2]
    chrome_helper_app("chrome_helper_app_${_helper_target}") {
      helper_name_suffix = _helper_suffix
      helper_bundle_id_suffix = _helper_bundle_id
    }

    if (verify_dynamic_libraries) {
      action("verify_libraries_chrome_helper_app_${_helper_target}") {
        script = "//chrome/tools/build/mac/verify_dynamic_libraries.py"
        inputs = [ "${root_out_dir}/${chrome_helper_name}${_helper_suffix}.app/Contents/MacOS/${chrome_helper_name}${_helper_suffix}" ]
        outputs = [ "$target_out_dir/run_$target_name.stamp" ]
        args = [
          "--stamp",
          rebase_path(outputs[0], root_out_dir),
          "-B",
          objdump_path,
          "--image",
          rebase_path(inputs[0], root_out_dir),

          # Do not --allow more libraries here without consulting with the
          # security team (security-dev@chromium.org).
          "--allow",
          "/usr/lib/libsandbox.1.dylib",
          "--allow",
          "/usr/lib/libSystem.B.dylib",
        ]
        deps = [ ":chrome_helper_app_${_helper_target}" ]
      }
    }
  }

  bundle_data("chrome_framework_helpers") {
    sources = [
      "$root_out_dir/app_mode_loader",
      "$root_out_dir/chrome_crashpad_handler",
    ]

    outputs = [ "{{bundle_contents_dir}}/Helpers/{{source_file_part}}" ]

    public_deps = [
      "//chrome/app_shim:app_mode_loader",
      "//components/crash/core/app:chrome_crashpad_handler",
    ]

    foreach(helper_params, content_mac_helpers) {
      sources +=
          [ "$root_out_dir/${chrome_helper_name}${helper_params[2]}.app" ]
      public_deps += [ ":chrome_helper_app_${helper_params[0]}" ]
      if (verify_dynamic_libraries) {
        public_deps +=
            [ ":verify_libraries_chrome_helper_app_${helper_params[0]}" ]
      }
    }

    if (enable_chromium_updater) {
      # A stable updater from CIPD is bundled with official builds only. For
      # local builds, a locally built updater will be bundled into the app.
      # TODO(crbug.com/1134642): Add ChromiumUpdater app to CIPD for use in
      # official builds.
      sources += [ "$root_out_dir/${updater_product_full_name}.app" ]

      public_deps += [
        "//chrome/updater/mac:browser_install_script",
        "//chrome/updater/mac:updater_bundle",
        "//chrome/updater/mac:updater_install_script",
      ]
    }

    if (is_asan) {
      # crashpad_handler requires the ASan runtime at its @executable_path.
      sources += [ "$root_out_dir/libclang_rt.asan_osx_dynamic.dylib" ]
      public_deps += [ "//build/config/sanitizers:copy_asan_runtime" ]
    }
  }

  bundle_data("chrome_framework_resources") {
    sources = [
      # This image is used to badge the lock icon in the
      # authentication dialogs, such as those used for installation
      # from disk image and Keystone promotion (if so enabled).  It
      # needs to exist as a file on disk and not just something in a
      # resource bundle because that's the interface that
      # Authorization Services uses.  Also, Authorization Services
      # can't deal with .icns files.
      "app/theme/default_100_percent/$branding_path_component/product_logo_32.png",
      "browser/mac/install.sh",
    ]

    outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]

    public_deps = [
      ":packed_resources",
      "//chrome/app_shim:app_mode_loader_plist_bundle_data",
    ]

    if (is_chrome_branded) {
      sources += [
        "browser/mac/keystone_promote_postflight.sh",
        "browser/mac/keystone_promote_preflight.sh",
      ]
    }

    if (icu_use_data_file) {
      sources += [ "$root_out_dir/icudtl.dat" ]
      public_deps += [ "//third_party/icu:icudata" ]
    }

    if (v8_use_external_startup_data) {
      public_deps += [ "//v8" ]
      if (use_v8_context_snapshot) {
        sources += [ "$root_out_dir/$v8_context_snapshot_filename" ]
        public_deps += [ "//tools/v8_context_snapshot" ]
      } else {
        sources += [ "$root_out_dir/snapshot_blob.bin" ]
      }
    }
  }

  if (enable_nacl) {
    bundle_data("chrome_framework_plugins") {
      sources = []
      outputs =
          [ "{{bundle_contents_dir}}/Internet Plug-Ins/{{source_file_part}}" ]
      public_deps = []

      if (enable_nacl) {
        if (current_cpu == "x86") {
          sources += [ "$root_out_dir/nacl_irt_x86_32.nexe" ]
        } else if (current_cpu == "x64") {
          sources += [ "$root_out_dir/nacl_irt_x86_64.nexe" ]
        }
        public_deps += [ "//ppapi/native_client:irt" ]
      }
    }
  } else {
    group("chrome_framework_plugins") {
    }
  }

  # EGL on MacOS ships with official chrome
  bundle_egl_libraries = use_egl

  if (bundle_egl_libraries) {
    # Add the ANGLE .dylibs in the MODULE_DIR of Chromium.app
    bundle_data("angle_binaries") {
      sources = [
        "$root_out_dir/egl_intermediates/libEGL.dylib",
        "$root_out_dir/egl_intermediates/libGLESv2.dylib",
      ]
      outputs = [ "{{bundle_contents_dir}}/Libraries/{{source_file_part}}" ]
      public_deps = [ "//ui/gl:angle_library_copy" ]
    }

    # Add the SwiftShader .dylibs in the MODULE_DIR of Chromium.app
    bundle_data("swiftshader_binaries") {
      sources = [
        "$root_out_dir/egl_intermediates/libswiftshader_libEGL.dylib",
        "$root_out_dir/egl_intermediates/libswiftshader_libGLESv2.dylib",
        "$root_out_dir/vk_intermediates/libvk_swiftshader.dylib",
        "$root_out_dir/vk_intermediates/vk_swiftshader_icd.json",
      ]
      outputs = [ "{{bundle_contents_dir}}/Libraries/{{source_file_part}}" ]
      public_deps = [
        "//ui/gl:swiftshader_egl_library_copy",
        "//ui/gl:swiftshader_vk_library_copy",
      ]
    }
  }

  group("angle_library") {
    if (bundle_egl_libraries) {
      deps = [ ":angle_binaries" ]
    }
  }

  group("swiftshader_library") {
    if (bundle_egl_libraries) {
      deps = [ ":swiftshader_binaries" ]
    }
  }

  if (bundle_widevine_cdm) {
    bundle_data("widevine_cdm_library_binaries") {
      sources = [ "$root_out_dir/$widevine_cdm_path/libwidevinecdm.dylib" ]
      if (enable_widevine_cdm_host_verification) {
        sources +=
            [ "$root_out_dir/$widevine_cdm_path/libwidevinecdm.dylib.sig" ]
      }
      outputs = [ "{{bundle_contents_dir}}/Libraries/$widevine_cdm_path/{{source_file_part}}" ]
      public_deps = [ "//third_party/widevine/cdm" ]
    }

    bundle_data("widevine_cdm_library_manifest_and_license_files") {
      sources = [
        "$root_out_dir/WidevineCdm/LICENSE",
        "$root_out_dir/WidevineCdm/manifest.json",
      ]
      outputs = [
        "{{bundle_contents_dir}}/Libraries/WidevineCdm/{{source_file_part}}",
      ]
      public_deps = [ "//third_party/widevine/cdm" ]
    }
  }

  group("widevine_cdm_library") {
    if (bundle_widevine_cdm) {
      deps = [
        ":widevine_cdm_library_binaries",
        ":widevine_cdm_library_manifest_and_license_files",
      ]
    }
  }

  if (enable_widevine_cdm_host_verification) {
    widevine_sign_file("sign_chrome_framework_for_widevine") {
      file = "$root_out_dir/$chrome_framework_name.framework/Versions/$chrome_framework_version/$chrome_framework_name"
      flags = 1
      signature_file = "$root_out_dir/$chrome_framework_name.sig"
      deps = [ ":chrome_framework" ]
    }

    copy("chrome_framework_widevine_signature") {
      deps = [ ":sign_chrome_framework_for_widevine" ]

      sources = [ "$root_out_dir/$chrome_framework_name.sig" ]

      outputs = [ "$root_out_dir/$chrome_framework_name.framework/Resources/{{source_file_part}}" ]
    }
  }

  if (is_chrome_branded && enable_keystone_registration_framework) {
    bundle_data("keystone_registration_framework") {
      sources = [ "//third_party/googlemac/Releases/Keystone/KeystoneRegistration.framework" ]

      outputs = [ "{{bundle_contents_dir}}/Frameworks/{{source_file_part}}" ]
    }
  } else {
    group("keystone_registration_framework") {
    }
  }

  tweak_info_plist("chrome_framework_plist") {
    info_plist = "app/framework-Info.plist"
    args = [
      "--breakpad=0",
      "--keystone=0",
      "--scm=1",
      "--branding",
      chrome_product_short_name,
    ]
  }

  # On Mac, speed up the component build by not re-bundling the framework
  # every time it changes. Instead, place all the sources and their deps in
  # a library that the bundled framework links (and re-exports). That way
  # only the library needs to be re-linked when it changes.
  if (is_component_build) {
    _dll_target_type = "shared_library"
  } else {
    _dll_target_type = "source_set"
  }
  target(_dll_target_type, "chrome_dll") {
    visibility = [
      ":chrome_framework",
      ":chrome_framework_create_bundle",
      ":chrome_framework_shared_library",
    ]

    sources = [
      "app/chrome_crash_reporter_client.cc",
      "app/chrome_crash_reporter_client.h",
      "app/chrome_crash_reporter_client_mac.mm",
      "app/chrome_dll_resource.h",
      "app/chrome_main.cc",
      "app/chrome_main_delegate.cc",
      "app/chrome_main_delegate.h",
      "app/chrome_main_mac.h",
      "app/chrome_main_mac.mm",
    ]

    deps = [
      ":browser_dependencies",
      ":child_dependencies",
      "//base/allocator:buildflags",
      "//build:chromeos_buildflags",
      "//chrome/app:command_ids",
      "//chrome/common:buildflags",
      "//chrome/common/profiler",
      "//components/crash/core/app",
      "//components/policy:generated",
      "//content/public/app",
      "//headless:headless_shell_lib",
      "//third_party/cld_3/src/src:cld_3",
    ]

    if (is_component_build) {
      frameworks = [ "Carbon.framework" ]
    }

    ldflags = [
      "-Wl,-order_file",
      "-Wl," + rebase_path("app/framework.order", root_build_dir),
      "-ObjC",
    ]

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

  mac_framework_bundle("chrome_framework") {
    output_name = chrome_framework_name

    framework_version = chrome_framework_version
    framework_contents = [
      "Helpers",
      "Libraries",
      "Resources",
      "XPCServices",
    ]

    if (is_chrome_branded) {
      framework_contents += [ "Default Apps" ]
      if (enable_keystone_registration_framework) {
        framework_contents +=
            [ "Frameworks" ]  # For KeystoneRegistration.framework.
      }
    }

    if (enable_nacl) {
      framework_contents += [ "Internet Plug-Ins" ]
    }

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

    info_plist_target = ":chrome_framework_plist"
    extra_substitutions = [
      "CHROMIUM_BUNDLE_ID=$chrome_mac_bundle_id",
      "CHROMIUM_SHORT_NAME=$chrome_product_short_name",
    ]

    public_deps = [ ":chrome_dll" ]

    deps = [
      ":angle_library",
      ":chrome_framework_helpers",
      ":chrome_framework_plugins",
      ":chrome_framework_resources",
      ":chrome_framework_services",
      ":keystone_registration_framework",
      ":swiftshader_library",
      ":widevine_cdm_library",
      "//chrome/browser/resources/media/mei_preload:component_bundle",
    ]

    if (is_chrome_branded) {
      deps += [ ":default_apps" ]
    }

    ldflags = [ "-Wl,-install_name,@executable_path/../Frameworks/$chrome_framework_name.framework/Versions/$chrome_version_full/$chrome_framework_name" ]

    ldflags += [
      "-compatibility_version",
      chrome_dylib_version,
      "-current_version",
      chrome_dylib_version,
      "-Wl,-order_file," + rebase_path("app/framework.order", root_build_dir),
    ]

    if (is_component_build) {
      ldflags += [
        "-rpath",
        "@loader_path/../../../../../..",
        "-Wl,-reexport_library,libchrome_dll.dylib",
      ]

      data_deps = [ ":chrome_dll" ]
    }
  }

  _framework_binary_path = "$root_out_dir/$chrome_framework_name.framework/Versions/$chrome_framework_version/$chrome_framework_name"
  assert(_framework_binary_path != "",
         "Ignore configuration-dependent unused variable warning")

  # TOOD(crbug/1163903#c8) - thakis@ look into why profile and coverage
  # instrumentation adds these symbols in different orders
  if (!is_component_build && chrome_pgo_phase != 1) {
    action("verify_chrome_framework_order") {
      script = "//chrome/tools/build/mac/verify_order.py"
      stamp_file = "$target_out_dir/run_$target_name.stamp"
      inputs = [ script ]
      args = [
        "--stamp=" + rebase_path(stamp_file, root_out_dir),
        "--binary=" + rebase_path(_framework_binary_path, root_out_dir),
        "--mac-bin-path=" + mac_bin_path,
        "--symbol-file=" + rebase_path("app/framework.order", root_build_dir),
      ]
      outputs = [ stamp_file ]
      public_deps = [ ":chrome_framework" ]
    }
  } else {
    group("verify_chrome_framework_order") {
      public_deps = [ ":chrome_framework" ]
    }
  }

  if (enable_dsyms && !is_component_build) {
    # It is possible to run dump_syms on unstripped products without dSYMs, but
    # doing so isn't logical and won't happen in practice. It's also pointless
    # to run dump_syms or archive dSYMs in a component build, where all of the
    # interesting symbols and debug info are tucked away in other libraries
    # beyond the set explicitly listed here.

    # This list must be updated with the two targets' deps list below, and
    # the list of _dsyms in :chrome_dsym_archive.
    _chrome_symbols_sources = [
      "$root_out_dir/$chrome_product_full_name.app/Contents/MacOS/$chrome_product_full_name",
      "$root_out_dir/AlertNotificationService.xpc/Contents/MacOS/AlertNotificationService",
      "$root_out_dir/chrome_crashpad_handler",
      "$root_out_dir/libEGL.dylib",
      "$root_out_dir/libGLESv2.dylib",
      "$root_out_dir/libswiftshader_libEGL.dylib",
      "$root_out_dir/libswiftshader_libGLESv2.dylib",
      _framework_binary_path,
    ]

    foreach(helper_params, content_mac_helpers) {
      _chrome_symbols_sources += [ "$root_out_dir/${chrome_helper_name}${helper_params[2]}.app/Contents/MacOS/${chrome_helper_name}${helper_params[2]}" ]
    }

    action_foreach("chrome_dump_syms") {
      script = "//build/redirect_stdout.py"

      sources = _chrome_symbols_sources

      outputs =
          [ "$root_out_dir/{{source_file_part}}-$chrome_version_full.breakpad" ]

      # Use an absolute path to dump_syms in case a user has it in their path.
      args = rebase_path(outputs, root_out_dir) + [
               rebase_path("$root_out_dir/dump_syms"),
               "-g",
               rebase_path(
                   "$root_out_dir/{{source_file_part}}.dSYM/Contents/Resources/DWARF/{{source_file_part}}",
                   root_out_dir),
               "{{source}}",
             ]

      deps = [
        ":chrome_app",
        ":chrome_framework",
        "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service",
        "//components/crash/core/app:chrome_crashpad_handler",
        "//third_party/angle:libEGL",
        "//third_party/angle:libGLESv2",
        "//third_party/breakpad:dump_syms",
        "//third_party/swiftshader/src/OpenGL/libEGL:swiftshader_libEGL",
        "//third_party/swiftshader/src/OpenGL/libGLESv2:swiftshader_libGLESv2",
      ]

      foreach(helper_params, content_mac_helpers) {
        deps += [ ":chrome_helper_app_${helper_params[0]}" ]
      }
    }

    action("chrome_dsym_archive") {
      script = "//chrome/tools/build/mac/archive_symbols.py"

      # These are the dSYMs that will be archived. The sources list must be
      # the target outputs that correspond to the dSYMs (since a dSYM is a
      # directory it cannot be listed as a source file). The targets that
      # generate both the dSYM and binary image are listed in deps.
      _dsyms = [
        "$root_out_dir/AlertNotificationService.dSYM",
        "$root_out_dir/$chrome_framework_name.dSYM",
        "$root_out_dir/$chrome_product_full_name.dSYM",
        "$root_out_dir/chrome_crashpad_handler.dSYM",
        "$root_out_dir/libEGL.dylib.dSYM",
        "$root_out_dir/libGLESv2.dylib.dSYM",
        "$root_out_dir/libswiftshader_libEGL.dylib.dSYM",
        "$root_out_dir/libswiftshader_libGLESv2.dylib.dSYM",
      ]

      deps = [
        ":chrome_app",
        ":chrome_framework",
        "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service",
        "//components/crash/core/app:chrome_crashpad_handler",
        "//third_party/angle:libEGL",
        "//third_party/angle:libGLESv2",
        "//third_party/swiftshader/src/OpenGL/libEGL:swiftshader_libEGL",
        "//third_party/swiftshader/src/OpenGL/libGLESv2:swiftshader_libGLESv2",
      ]

      foreach(helper_params, content_mac_helpers) {
        _dsyms +=
            [ "$root_out_dir/${chrome_helper_name}${helper_params[2]}.dSYM" ]
        deps += [ ":chrome_helper_app_${helper_params[0]}" ]
      }

      sources = _chrome_symbols_sources

      _output = "$root_out_dir/$chrome_product_full_name.dSYM.tar.bz2"

      outputs = [ _output ]

      args = [ rebase_path(_output, root_out_dir) ] +
             rebase_path(_dsyms, root_out_dir)
    }
  } else {
    group("chrome_dump_syms") {
    }
    group("chrome_dsym_archive") {
    }
  }
}

group("browser_dependencies") {
  public_deps = [
    "//build:branding_buildflags",
    "//build:chromeos_buildflags",
    "//chrome/app:shutdown_signal_handlers",
    "//chrome/browser",
    "//chrome/browser/policy:path_parser",
    "//chrome/common",
    "//components/crash/core/app",
    "//components/gwp_asan/buildflags",
    "//components/heap_profiling/in_process",
    "//components/startup_metric_utils/browser",
    "//components/sync",
    "//components/upload_list:upload_list",
    "//services/tracing/public/cpp",
  ]
  if (enable_plugins) {
    public_deps += [ "//ppapi/host" ]
  }

  if (enable_basic_printing) {
    public_deps += [ "//printing" ]
    if (enable_print_preview && !is_chromeos_ash) {
      public_deps += [ "//chrome/service" ]
    }
  }

  if (enable_gwp_asan) {
    public_deps += [ "//components/gwp_asan/client" ]
  }

  if (enable_nacl) {
    public_deps += [ "//components/nacl/browser" ]
  }

  if (is_chromeos_lacros) {
    public_deps += [ "//chromeos/lacros" ]
  }

  if (is_chromeos_ash) {
    public_deps += [
      "//chrome/browser/chromeos",
      "//chromeos",
      "//chromeos/constants",
      "//chromeos/dbus/constants",
      "//chromeos/memory",
    ]
  }

  if (!is_component_build) {
    assert_no_deps = [
      # Blink should not be used in the browser process. In component build this
      # is OK because all of content is linked into one library. Note that the
      # blink_headers target is OK, so we can't do a wildcard for all blink
      # targets.
      "//third_party/blink/public:blink",
    ]

    if (is_win) {
      assert_no_deps += [
        # V8/Gin should not be used in the browser DLL on Windows.
        "//gin",
        "//v8",

        # Ditto for PDFium.
        "//third_party/pdfium",
      ]
    }
  }
}

group("child_dependencies") {
  public_deps = [
    "//chrome/child",
    "//chrome/common",
    "//chrome/gpu",
    "//chrome/renderer",
    "//chrome/utility",
    "//components/gwp_asan/buildflags",
    "//components/services/heap_profiling",
    "//content/public/child",
    "//pdf",
    "//pdf:pdf_ppapi",
    "//services/tracing/public/cpp",
    "//third_party/blink/public:blink_devtools_frontend_resources",
    "//third_party/blink/public:blink_devtools_inspector_resources",
    "//v8:v8_headers",
  ]

  if (enable_nacl) {
    public_deps += [ "//components/nacl/renderer/plugin:nacl_trusted_plugin" ]
  }

  if (enable_gwp_asan) {
    public_deps += [ "//components/gwp_asan/client" ]
  }

  if (!is_component_build) {
    assert_no_deps = [
      # Browser code should not be used in child processes. In component builds,
      # this is OK because all of content is linked into one library.
      "//content/browser",
    ]
  }
}

if (is_win) {
  process_version_rc_template("chrome_exe_version") {
    sources = [ "app/chrome_exe.ver" ]
    output = "$target_gen_dir/chrome_exe_version.rc"
  }

  process_version_rc_template("chrome_dll_version") {
    sources = [ "app/chrome_dll.ver" ]
    output = "$target_gen_dir/chrome_dll_version.rc"
  }

  # This manifest matches what GYP produced. It may not even be necessary.
  windows_manifest("chrome_dll_manifest") {
    sources = [
      as_invoker_manifest,
      common_controls_manifest,
    ]
  }

  process_version_rc_template("nacl64_exe_version") {
    sources = [ "app/nacl64_exe.ver" ]
    output = "$target_gen_dir/nacl64_exe_version.rc"
  }

  process_version_rc_template("other_version") {
    sources = [ "app/other.ver" ]
    output = "$target_gen_dir/other_version.rc"
  }
}

copy("visual_elements_resources") {
  sources = [
    "//chrome/app/theme/$branding_path_component/win/tiles/Logo.png",
    "//chrome/app/theme/$branding_path_component/win/tiles/SmallLogo.png",
    "app/visual_elements_resources/chrome.VisualElementsManifest.xml",
  ]

  if (is_chrome_branded) {
    sources += [
      "//chrome/app/theme/$branding_path_component/win/tiles/LogoBeta.png",
      "//chrome/app/theme/$branding_path_component/win/tiles/LogoCanary.png",
      "//chrome/app/theme/$branding_path_component/win/tiles/LogoDev.png",
      "//chrome/app/theme/$branding_path_component/win/tiles/SmallLogoBeta.png",
      "//chrome/app/theme/$branding_path_component/win/tiles/SmallLogoCanary.png",
      "//chrome/app/theme/$branding_path_component/win/tiles/SmallLogoDev.png",
    ]
  }

  outputs = [ "$root_out_dir/{{source_file_part}}" ]
}

group("resources") {
  public_deps = [
    "//chrome/browser:resources",
    "//chrome/common:resources",
    "//chrome/renderer:resources",
  ]
}

group("extra_resources") {
  # Deps should be same as those in chrome_extra_paks() within chrome_paks.gni.
  public_deps = [
    "//chrome/browser/resources:resources",
    "//components/autofill/core/browser:autofill_address_rewriter_resources",
  ]

  if (is_chromeos_ash && !enable_use_media_app_ink) {
    # TODO(crbug/1150244): Remove when enable_use_media_app_ink is default true.
    public_deps += [ "//third_party/ink:ink_resources" ]
  }
}

if (is_chrome_branded && !is_android) {
  if (!is_mac) {
    _default_apps_target_type = "copy"
  } else {
    _default_apps_target_type = "bundle_data"
  }

  target(_default_apps_target_type, "default_apps") {
    visibility = [ ":packed_resources" ]
    if (is_mac) {
      visibility += [
        ":chrome_framework",
        ":chrome_framework_shared_library",
      ]
    }

    sources = [
      "browser/resources/default_apps/docs.crx",
      "browser/resources/default_apps/drive.crx",
      "browser/resources/default_apps/external_extensions.json",
      "browser/resources/default_apps/gmail.crx",
      "browser/resources/default_apps/youtube.crx",
    ]

    if (!is_mac) {
      outputs = [ "$root_out_dir/default_apps/{{source_file_part}}" ]
    } else {
      outputs = [ "{{bundle_contents_dir}}/Default Apps/{{source_file_part}}" ]
    }

    # Force anybody that depends on this to get the default apps as data files.
    data = process_file_template(sources, outputs)
  }
}

if (!is_android) {
  chrome_paks("packed_resources") {
    if (is_mac) {
      output_dir = "$root_gen_dir/repack"
      copy_data_to_bundle = true
    } else {
      output_dir = root_out_dir
    }

    if (enable_resource_allowlist_generation) {
      repack_allowlist = chrome_resource_whitelist
      deps = [ "//chrome:resource_whitelist" ]
    }

    if (is_chrome_branded && !is_mac) {
      public_deps = [ ":default_apps" ]
    }
  }
}

repack("unit_tests_pak") {
  sources = [ "$root_gen_dir/chrome/chrome_test_resources.pak" ]
  output = "$root_out_dir/unit_tests.pak"
  deps = [ "//chrome/test/data:chrome_test_resources" ]
}

repack("browser_tests_pak") {
  sources = [ "$root_gen_dir/chrome/webui_test_resources.pak" ]
  output = "$root_out_dir/browser_tests.pak"
  deps = [ "//chrome/test/data:webui_test_resources" ]
}

group("strings") {
  public_deps = [
    "//chrome/app:chromium_strings",
    "//chrome/app:generated_resources",
    "//chrome/app:google_chrome_strings",
    "//chrome/app/resources:locale_settings",
  ]
}

if (is_android) {
  java_cpp_enum("assist_ranker_prediction_enum_javagen") {
    sources = [
      "browser/android/contextualsearch/contextual_search_ranker_logger_impl.h",
    ]
  }

  java_cpp_enum("partner_bookmarks_javagen") {
    sources = [ "browser/android/bookmarks/partner_bookmarks_reader.h" ]
  }

  java_cpp_enum("quick_action_category_enum_javagen") {
    sources = [ "browser/android/contextualsearch/resolved_search_term.h" ]
  }

  java_cpp_enum("offline_pages_enum_javagen") {
    sources = [ "browser/offline_pages/offline_page_utils.h" ]
  }

  java_cpp_enum("download_enum_javagen") {
    sources = [
      "browser/download/download_dialog_types.h",
      "browser/download/download_prompt_status.h",
    ]
  }

  java_cpp_enum("instant_apps_reasons_enum_javagen") {
    sources = [ "browser/android/instantapps/instant_apps_settings.cc" ]
  }

  java_cpp_enum("supervised_user_url_filter_enum_javagen") {
    sources = [ "browser/supervised_user/supervised_user_url_filter.h" ]
  }

  java_cpp_enum("context_menu_image_format_enum_javagen") {
    sources =
        [ "browser/android/context_menu/context_menu_native_delegate_impl.h" ]
  }

  source_set("chrome_android_core") {
    sources = [
      "app/android/chrome_android_initializer.cc",
      "app/android/chrome_android_initializer.h",
      "app/android/chrome_jni_onload.cc",
      "app/android/chrome_jni_onload.h",
      "app/android/chrome_main_delegate_android.cc",
      "app/android/chrome_main_delegate_android.h",
      "app/chrome_main_delegate.cc",
      "app/chrome_main_delegate.h",
    ]

    libs = [
      "android",
      "jnigraphics",
    ]

    public_deps = [
      "//chrome/browser",
      "//chrome/utility",
    ]

    deps = [
      ":browser_dependencies",
      ":child_dependencies",
      "//chrome/browser/ui",
      "//chrome/child",
      "//chrome/common",
      "//chrome/common/profiler",
      "//chrome/gpu",
      "//chrome/renderer",
      "//components/gwp_asan/buildflags",
      "//components/heap_profiling/in_process",
      "//components/minidump_uploader",
      "//components/safe_browsing:buildflags",
      "//components/safe_browsing/android:safe_browsing_api_handler",
      "//components/safe_browsing/android:safe_browsing_mobile",
      "//components/services/heap_profiling",
      "//content/public/app",
    ]

    # Explicit dependency required for JNI registration to be able to
    # find the native side functions.
    if (is_android && is_component_build) {
      deps += [
        "//components/viz/service",
        "//device/gamepad",
        "//ui/events/devices",
      ]
    }

    if (enable_vr) {
      deps += [ "//third_party/gvr-android-sdk:gvr_shim" ]
    }

    if (enable_gwp_asan) {
      deps += [ "//components/gwp_asan/client" ]
    }
  }
}

if (enable_resource_allowlist_generation) {
  generate_resource_allowlist("resource_whitelist") {
    if (is_android) {
      deps = [ "//chrome/android:libchrome" ]
      inputs = [ "$root_out_dir/lib.unstripped/libchrome$shlib_extension" ]
    } else if (is_win) {
      deps = [ ":chrome_dll" ]
      inputs = [ "$root_out_dir/chrome.dll.pdb" ]
    } else {
      assert(false, "unsupported platform for whitelist generation")
    }
    output = chrome_resource_whitelist
  }
}

if (is_linux || is_chromeos) {
  if (is_official_build) {
    group("linux_symbols") {
      deps = [
        ":angle_egl_symbols",
        ":angle_gles_symbols",
        ":chrome_symbols",
        ":crashpad_symbols",
        ":swiftshader_egl_symbols",
        ":swiftshader_gles_symbols",
      ]
    }
    extract_symbols("chrome_symbols") {
      binary = "$root_out_dir/chrome"

      if (current_cpu == "x86") {
        # GYP used "ia32" so keep that naming for back-compat.
        symbol_file = "$root_out_dir/chrome.breakpad.ia32"
      } else {
        symbol_file = "$root_out_dir/chrome.breakpad.$current_cpu"
      }

      deps = [ ":chrome" ]
    }
    extract_symbols("crashpad_symbols") {
      binary = "$root_out_dir/crashpad_handler"

      if (current_cpu == "x86") {
        # GYP used "ia32" so keep that naming for back-compat.
        symbol_file = "$root_out_dir/crashpad.breakpad.ia32"
      } else {
        symbol_file = "$root_out_dir/crashpad.breakpad.$current_cpu"
      }

      deps = [ "//third_party/crashpad/crashpad/handler:crashpad_handler" ]
    }
    extract_symbols("swiftshader_egl_symbols") {
      binary = "$root_out_dir/swiftshader/libEGL.so"

      if (current_cpu == "x86") {
        # GYP used "ia32" so keep that naming for back-compat.
        symbol_file = "$root_out_dir/swiftshader_libegl.breakpad.ia32"
      } else {
        symbol_file = "$root_out_dir/swiftshader_libegl.breakpad.$current_cpu"
      }

      deps =
          [ "//third_party/swiftshader/src/OpenGL/libEGL:swiftshader_libEGL" ]
    }
    extract_symbols("swiftshader_gles_symbols") {
      binary = "$root_out_dir/swiftshader/libGLESv2.so"

      if (current_cpu == "x86") {
        # GYP used "ia32" so keep that naming for back-compat.
        symbol_file = "$root_out_dir/swiftshader_libgles.breakpad.ia32"
      } else {
        symbol_file = "$root_out_dir/swiftshader_libgles.breakpad.$current_cpu"
      }

      deps = [
        "//third_party/swiftshader/src/OpenGL/libGLESv2:swiftshader_libGLESv2",
      ]
    }
    extract_symbols("angle_egl_symbols") {
      binary = "$root_out_dir/libEGL.so"

      if (current_cpu == "x86") {
        # GYP used "ia32" so keep that naming for back-compat.
        symbol_file = "$root_out_dir/angle_libegl.breakpad.ia32"
      } else {
        symbol_file = "$root_out_dir/angle_libegl.breakpad.$current_cpu"
      }

      deps = [ "//third_party/angle:libEGL" ]
    }
    extract_symbols("angle_gles_symbols") {
      binary = "$root_out_dir/libGLESv2.so"

      if (current_cpu == "x86") {
        # GYP used "ia32" so keep that naming for back-compat.
        symbol_file = "$root_out_dir/angle_libgles.breakpad.ia32"
      } else {
        symbol_file = "$root_out_dir/angle_libgles.breakpad.$current_cpu"
      }

      deps = [ "//third_party/angle:libGLESv2" ]
    }
  }

  # Copies some scripts and resources that are used for desktop integration.
  copy("xdg_mime") {
    sources = [
      "//chrome/app/theme/$branding_path_component/product_logo_48.png",
      "//chrome/tools/build/linux/chrome-wrapper",
      "//third_party/xdg-utils/scripts/xdg-mime",
      "//third_party/xdg-utils/scripts/xdg-settings",
    ]
    outputs = [ "$root_out_dir/{{source_file_part}}" ]
  }
}
