# 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/compiler/compiler.gni")
import("//build/config/compiler/pgo/pgo.gni")
import("//build/config/features.gni")
import("//build/config/locales.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_whitelist.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) {
  import("//build/linux/extract_symbols.gni")
} else if (is_mac) {
  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/mac/tweak_info_plist.gni")
  import("//build/util/branding.gni")
  import("//build/util/version.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_whitelist_generation) {
  chrome_resource_whitelist = "$target_gen_dir/chrome_resource_whitelist.txt"
}

if (is_win) {
  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",
    ]
    if (symbol_level != 0) {
      outputs += [ "$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",
    ]
  }

  if (!is_multi_dll_chrome) {
    # Remove the chrome_child.dll build artifacts from the build directory if
    # they're not needed to avoid packaging them in the installer.
    # TODO(sebmarchand): Remove this once the multi DLL build isn't supported.
    action("remove_chrome_child_artifacts") {
      script = "//build/rm.py"
      stamp = "$target_gen_dir/chrome_child_clean_up_stamp"
      outputs = [
        stamp,
      ]
      args = [
        "--stamp",
        rebase_path(stamp, root_build_dir),
        "-f",
        "chrome_child.dll",
        "chrome_child.dll.lib",
        "chrome_child.dll.pdb",
      ]
    }
  }
}

# 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",
      ":main_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",
    ]
    if (is_win) {
      public_deps += [ ":reorder_imports" ]
      data_deps += [ ":reorder_imports" ]
    }
    if (is_chromeos) {
      data_deps += [ "//sandbox/linux:chrome_sandbox" ]
    }
  }

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

    if (!is_win || is_clang) {
      # Normally, we need to pass specific flags to the linker to
      # create an executable that gathers profile data. However, when
      # using MSVC, we need to make sure we *don't* pass /GENPROFILE
      # when linking without generating any code, or else the linker
      # will give us fatal error LNK1264. So we add the PGO flags
      # on all configurations, execpt MSVC on Windows.
      configs += [ "//build/config/compiler/pgo:default_pgo_flags" ]
    }

    # 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 = [
      "//printing/buildflags",
    ]

    data = [
      "$root_out_dir/resources.pak",
    ]
    if (is_linux || is_win) {
      data += [
        "$root_out_dir/chrome_100_percent.pak",
        "$root_out_dir/locales/en-US.pak",
        "$root_out_dir/locales/fr.pak",
      ]
      if (enable_hidpi) {
        data += [ "$root_out_dir/chrome_200_percent.pak" ]
      }
    }

    data_deps = []

    if (is_win) {
      sources += [
        "app/chrome_exe.rc",
        "app/chrome_exe_main_win.cc",
        "app/chrome_watcher_client_win.cc",
        "app/chrome_watcher_client_win.h",
        "app/chrome_watcher_command_line_win.cc",
        "app/chrome_watcher_command_line_win.h",
        "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/chrome_elf",
        "//chrome/chrome_watcher",
        "//chrome/chrome_watcher:client",
        "//chrome/common:constants",
        "//chrome/common:metrics_constants_util_win",
        "//chrome/install_static:secondary_module",
        "//chrome/installer/util:with_no_strings",
        "//components/browser_watcher:browser_watcher_client",
        "//components/crash/content/app:run_as_crashpad_handler",
        "//components/crash/core/common",
        "//components/flags_ui:switches",
        "//content:sandbox_helper_win",
        "//content/public/common:static_switches",
        "//crypto",
        "//sandbox",
        "//services/service_manager/sandbox",
        "//third_party/breakpad:breakpad_handler",
        "//third_party/breakpad:breakpad_sender",
      ]
      data_deps = [
        "//chrome/app/version_assembly:version_assembly_manifest",
        "//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") {
        # Increase the initial stack size. The default is 1MB, this is 1.5MB.
        # To mitigate address space pressure, |CreateThreadInternal| sets the
        # default back to 1MB for non-main threads.
        ldflags = [ "/STACK:0x180000" ]
      } 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) {
      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 the sampling profiler.
        "//chrome/common/profiler",

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

        # For headless mode.
        "//headless:headless_shell_lib",
        "//services/service_manager/embedder",
      ]

      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 && is_debug && target_cpu == "arm") {
        ldflags += [ "-Wl,--long-plt" ]
      }

      if (is_desktop_linux && !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 (use_x11) {
        configs += [
          "//build/config/linux:x11",
          "//build/config/linux:xext",
        ]
      }
    }

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

    if (is_chromeos) {
      data_deps += [ "//mojo/core:shared_libraries_for_arc" ]
      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" ]

    # Only ChromeOS has precompiled Flash that needs to get copied to the output
    # directory. On other platforms, Flash is either component-updated only or
    # not supported at all.
    if (is_chromeos) {
      deps += [ "//third_party/adobe/flash:flapper_binaries" ]
    }

    # ChromeOS by design is safe to have rpath=$ORIGIN. This simplifies shared
    # library usage.
    if (is_chromeos && !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",
    ]

    if (is_multi_dll_chrome) {
      defines += [ "CHROME_MULTIPLE_DLL" ]
      data_deps += [ ":chrome_child" ]
    }
  }
}  # !is_android && !is_mac

if (is_win) {
  # This target is a forwarding target to compile the necessary DLLs used
  # by Chrome.
  group("chrome_dll") {
    data_deps = [
      ":main_dll",
    ]
    if (is_multi_dll_chrome) {
      data_deps += [ ":chrome_child" ]
    } else {
      deps = [
        ":remove_chrome_child_artifacts",
      ]
    }
  }

  shared_library("main_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/trace_event/etw_manifest:chrome_events_win",
      "//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/crash/content/app",
      "//components/policy:generated",
      "//content/app/resources",
      "//content/public/common:service_names",
      "//crypto",
      "//headless:headless_shell_browser_lib",
      "//net:net_resources",
      "//ppapi/buildflags",
      "//services/service_manager/embedder",
      "//third_party/cld_3/src/src:cld_3",
      "//third_party/wtl",
      "//ui/views",
    ]

    configs += [ "//build/config/win:delayloads" ]
    if (is_multi_dll_chrome) {
      configs += [ "//build/config/win:delayloads_not_for_child_dll" ]
    }

    if (!is_component_build) {
      # This is a large module that can't do incremental linking in some
      # cases.
      configs -= [ "//build/config/win:default_incremental_linking" ]
      configs +=
          [ "//build/config/win:default_large_module_incremental_linking" ]
    }

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

    if (is_multi_dll_chrome) {
      defines += [ "CHROME_MULTIPLE_DLL_BROWSER" ]
      deps += [ "//content/public/app:browser" ]
      assert_no_deps = [
        # The browser DLL may not depend on blink or v8.
        "//third_party/blink/public:blink",
        "//gin",
        "//v8",

        # Ditto for PDFium.
        "//third_party/pdfium",
      ]
    } else {
      deps += [
        ":child_dependencies",
        "//content/public/app:both",
        "//headless:headless_renderer",
      ]
    }

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

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

    shared_library("chrome_child") {
      sources = [
        "app/chrome_main.cc",
        "app/chrome_main_delegate.cc",
        "app/chrome_main_delegate.h",
      ]

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

      deps = [
        ":child_dependencies",
        ":chrome_child_manifest",
        ":chrome_dll_version",
        "//chrome/browser/policy:path_parser",
        "//chrome/chrome_elf",
        "//chrome/common:buildflags",
        "//chrome/common/profiler",
        "//chrome/install_static:install_static_util",
        "//chrome/install_static:secondary_module",
        "//components/browser_watcher:browser_watcher_client",
        "//components/crash/content/app",
        "//content/public/app:child",
        "//content/public/common:service_names",
        "//headless:headless_shell_child_lib",
        "//services/service_manager/embedder",
      ]

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

      if (is_clang && is_official_build) {
        orderfile = "build/chrome_child.$target_cpu.orderfile"
        rebased_orderfile = rebase_path(orderfile, root_build_dir)
        inputs = [
          orderfile,
        ]
        ldflags = [
          "/order:@$rebased_orderfile",

          # Ignore warnings about missing functions or functions not in their
          # own section.
          "/ignore:4037",
          "/ignore:4065",
        ]
      }

      if (symbol_level == 2) {
        # Incremental linking doesn't work on this target in debug mode with
        # full symbols, but does work in other cases, including minimal
        # symbols.
        configs -= [ "//build/config/win:default_incremental_linking" ]
        configs += [ "//build/config/win:no_incremental_linking" ]
      }
      configs += [ "//build/config/compiler/pgo:default_pgo_flags" ]
    }
  }
  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

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

    data_deps = [
      ":chrome_app",
    ]

    if (debug_devtools) {
      deps += [ ":devtools_debug_resources" ]
    }

    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"
    _keystone_arg = "0"
    if (is_chrome_branded) {
      _keystone_arg = "1"
    }
    args = [
      "--breakpad=0",
      "--keystone=$_keystone_arg",
      "--scm=1",
      "--bundle_id=$chrome_mac_bundle_id",
    ]
  }

  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",
      ]
    }
  }

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

    inputs = [
      chrome_version_file,
    ]

    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",
          rebase_path(chrome_version_file, root_build_dir),
          "-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,
    ]

    _old_versions_dir =
        "$root_out_dir/$chrome_product_full_name.app/Contents/Versions"
    _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",
      "--delete",
      rebase_path(_old_versions_dir, root_build_dir),
    ]
  }

  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" ]
    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
    }
  }

  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/content/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 (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.bin" ]
        public_deps += [ "//tools/v8_context_snapshot" ]
      } else {
        sources += [ "$root_out_dir/snapshot_blob.bin" ]
      }
    }
  }

  # When debug_devtools is enabled, symlink the inspector resources into the
  # framework bundle. The resources go into the final output directory for the
  # framework in the app bundle, rather than the framework bundle in
  # root_out_dir, since copy_bundle_data copies the contents of the link
  # rather than the link itself.
  if (debug_devtools) {
    action("devtools_debug_resources") {
      _stamp = "$target_out_dir/run_${target_name}.stamp"

      outputs = [
        _stamp,
      ]

      script = "//build/symlink.py"

      args = [
        "-f",
        "--touch",
        rebase_path(_stamp, root_out_dir),

        # Convert the symlink source and destination to an absolute paths, which
        # makes symlinking easier (now pwd manipulation).
        rebase_path("$root_out_dir/resources/inspector"),
        rebase_path(
            "$root_out_dir/$chrome_product_full_name.app/Contents/Frameworks/$chrome_framework_name.framework/Versions/$chrome_version_full/Resources/inspector"),
      ]

      deps = [
        # Depend on :chrome_app to ensure that the bundle is produced before
        # creating or destroying the symlink.
        ":chrome_app",
        "//third_party/blink/public:blink_devtools_frontend_resources",
      ]
    }
  } else {
    group("devtools_debug_resources") {
    }
  }

  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",
      ]
      outputs = [
        "{{bundle_contents_dir}}/Libraries/{{source_file_part}}",
      ]
      public_deps = [
        "//ui/gl:swiftshader_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",
      "//chrome/app:command_ids",
      "//chrome/common:buildflags",
      "//chrome/common/profiler",
      "//components/crash/content/app",
      "//components/policy:generated",
      "//content/public/app:both",
      "//content/public/common:service_names",
      "//headless:headless_shell_lib",
      "//services/service_manager/embedder",
      "//third_party/cld_3/src/src:cld_3",
    ]

    if (is_component_build) {
      libs = [ "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",
      ":packed_resources",
      ":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")

  if (!is_asan && !is_component_build) {
    action("verify_chrome_framework_order") {
      script = "//chrome/tools/build/mac/run_verify_order.py"
      stamp_file = "$target_out_dir/run_$target_name.stamp"
      inputs = [
        script,
        "//chrome/tools/build/mac/verify_order",
      ]
      args = [
        "--stamp",
        rebase_path(stamp_file, root_out_dir),
      ]
      args += [
        "_ChromeMain",
        rebase_path(_framework_binary_path, root_out_dir),
        mac_bin_path,
      ]
      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 = [
      _framework_binary_path,
      "$root_out_dir/AlertNotificationService.xpc/Contents/MacOS/AlertNotificationService",
      "$root_out_dir/$chrome_product_full_name.app/Contents/MacOS/$chrome_product_full_name",
      "$root_out_dir/chrome_crashpad_handler",
      "$root_out_dir/libswiftshader_libEGL.dylib",
      "$root_out_dir/libswiftshader_libGLESv2.dylib",
    ]

    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/content/app:chrome_crashpad_handler",
        "//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/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/content/app:chrome_crashpad_handler",
        "//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 = [
    "//chrome/browser",
    "//chrome/common",
    "//components/gwp_asan/buildflags",
    "//components/sync",
    "//services/tracing/public/cpp",
  ]
  if (enable_plugins) {
    public_deps += [ "//ppapi/host" ]
  }

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

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

  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",
    "//services/tracing/public/cpp",
    "//third_party/blink/public:blink_devtools_frontend_resources",
  ]

  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:invalidations_resources",
    "//chrome/browser/resources:net_internals_resources",
    "//chrome/browser/resources:quota_internals_resources",
    "//chrome/browser/resources:webapks_ui_resources",
    "//components/autofill/core/browser:autofill_address_rewriter_resources",
  ]

  if (!is_android) {
    public_deps += [
      "//chrome/browser/resources:component_extension_resources",
      "//chrome/browser/resources:dev_ui_paks",
      "//chrome/browser/resources:downloads_resources",
      "//chrome/browser/resources:local_ntp_resources",
      "//chrome/browser/resources:settings_resources",
    ]
  }

  if (is_chromeos) {
    public_deps += [
      "//chrome/browser/resources:os_settings_resources",
      "//chrome/browser/resources/chromeos:cellular_setup_resources",
      "//chrome/browser/resources/chromeos:multidevice_setup_resources",
      "//chrome/browser/resources/chromeos/autoclick:build",
      "//chrome/browser/resources/chromeos/chromevox",
      "//chrome/browser/resources/chromeos/select_to_speak:build",
      "//chrome/browser/resources/chromeos/switch_access:build",
      "//third_party/ink:ink_resources",
    ]
  }

  if (!is_android && !is_chromeos) {
    public_deps += [ "//chrome/browser/resources:welcome_resources" ]
  }

  if (enable_extensions) {
    public_deps += [
      "//chrome/browser/resources:extensions_resources",
      "//chrome/browser/resources:sync_file_system_internals_resources",
    ]
  }

  if (enable_print_preview) {
    public_deps += [ "//chrome/browser/resources:print_preview_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_whitelist_generation) {
      repack_whitelist = chrome_resource_whitelist
      deps = [
        "//chrome:resource_whitelist",
      ]
    }

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

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("content_setting_javagen") {
    sources = [
      "../components/content_settings/core/common/content_settings.h",
    ]
  }

  java_cpp_enum("content_settings_type_javagen") {
    sources = [
      "../components/content_settings/core/common/content_settings_types.h",
    ]
  }

  java_cpp_enum("credit_card_javagen") {
    sources = [
      "../components/autofill/core/browser/data_model/credit_card.h",
    ]
  }

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

  java_cpp_enum("page_info_connection_type_javagen") {
    sources = [
      "browser/ui/android/page_info/page_info_controller_android.h",
    ]
  }

  java_cpp_enum("page_info_action_javagen") {
    sources = [
      "browser/ui/page_info/page_info.h",
    ]
  }

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

  java_cpp_enum("payments_journey_logger_enum_javagen") {
    sources = [
      "../components/payments/core/journey_logger.h",
    ]
  }

  java_cpp_enum("pref_enum_javagen") {
    sources = [
      "browser/android/preferences/prefs.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_location_dialog_type.h",
      "browser/download/download_prompt_status.h",
    ]
  }

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

  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 = [
      "//chrome/browser/ui",
      "//chrome/child",
      "//chrome/common",
      "//chrome/common/profiler",
      "//chrome/gpu",
      "//chrome/renderer",
      "//components/gwp_asan/buildflags",
      "//components/minidump_uploader",
      "//components/safe_browsing:buildflags",
      "//components/safe_browsing/android:safe_browsing_mobile",
      "//components/services/heap_profiling",
      "//content/public/app:both",
      "//content/public/common:service_names",
      "//services/service_manager/embedder",
    ]

    # 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_whitelist_generation) {
  generate_resource_whitelist("resource_whitelist") {
    if (is_android) {
      deps = [
        "//chrome/android:libchrome",
      ]
      inputs = [
        "$root_out_dir/lib.unstripped/libchrome$shlib_extension",
      ]
    } else if (is_win) {
      deps = [
        ":main_dll",
      ]
      inputs = [
        "$root_out_dir/chrome.dll.pdb",
      ]
      if (is_multi_dll_chrome) {
        deps += [ ":chrome_child" ]
        inputs += [ "$root_out_dir/chrome_child.dll.pdb" ]
      }
    } else {
      assert(false, "unsupported platform for whitelist generation")
    }
    output = chrome_resource_whitelist
  }
}

if (is_linux) {
  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}}",
    ]
  }
}
