# 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/buildflag_header.gni")
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("//extensions/features/features.gni")
import("//ppapi/features/features.gni")
import("//third_party/WebKit/public/public_features.gni")
import("//third_party/widevine/cdm/widevine.gni")
import("//tools/resources/generate_resource_whitelist.gni")
import("//v8/gni/v8.gni")

if (is_android) {
  import("//build/config/android/rules.gni")
} else if (is_mac) {
  import("//build/compiled_action.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("//media/cdm/ppapi/cdm_paths.gni")
  import("//third_party/icu/config.gni")
}

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",
      "$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",
      ":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" ]
    }
    if (use_aura && (is_win || is_linux)) {
      data_deps += [ "//chrome/app:service_manifests" ]
    }
  }

  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 = [
      "//build/config/sanitizers:deps",
      "//printing/features",
    ]

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

    data_deps = []

    if (is_win) {
      sources += [
        "app/chrome_exe.rc",
        "app/chrome_exe_load_config_win.cc",
        "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",
        ":file_pre_reader",
        ":visual_elements_resources",
        "//base",
        "//breakpad:breakpad_handler",
        "//breakpad:breakpad_sender",
        "//chrome/app/version_assembly:chrome_exe_manifest",
        "//chrome/browser:chrome_process_finder",
        "//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",
        "//chrome_elf",
        "//components/browser_watcher:browser_watcher_client",
        "//components/crash/content/app:run_as_crashpad_handler",
        "//components/flags_ui:switches",
        "//content:sandbox_helper_win",
        "//content/public/common:static_switches",
        "//crypto",
        "//sandbox",
      ]
      data_deps = [
        "//chrome/app/version_assembly:version_assembly_manifest",
      ]

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

      ldflags = [
        "/DELAYLOAD:dbghelp.dll",
        "/DELAYLOAD:dwmapi.dll",
        "/DELAYLOAD:uxtheme.dll",
        "/DELAYLOAD:ole32.dll",
        "/DELAYLOAD:oleaut32.dll",
      ]
    } 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",
        ":manpage",

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

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

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

      ldflags = [ "-pie" ]

      # 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 (use_pango || use_cairo) {
        # Needed for chrome_main.cc initialization of libraries.
        configs += [ "//build/config/linux/pangocairo" ]
      }

      if (use_x11) {
        configs += [
          "//build/config/linux:x11",
          "//build/config/linux:xext",
        ]
      }

      if (enable_package_mash_services) {
        deps += [ "//chrome/app/mash" ]
        data_deps += [ "//chrome/app:service_manifests" ]
      }
    }

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

    data_deps += [ "//third_party/widevine/cdm:widevinecdmadapter" ]

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

  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",
      "app/chrome_main_mac.h",
      "app/chrome_main_mac.mm",
    ]

    output_name = "chrome"

    deps = [
      ":browser_dependencies",
      ":chrome_dll_manifest",
      ":chrome_dll_version",
      "//base/trace_event/etw_manifest:chrome_events_win",
      "//build/config/sanitizers:deps",
      "//chrome/app:chrome_dll_resources",
      "//chrome/app:command_ids",
      "//chrome/app/theme:chrome_unscaled_resources",
      "//chrome/common:features",
      "//chrome/install_static:install_static_util",
      "//chrome/install_static:secondary_module",
      "//chrome_elf",
      "//components/crash/content/app",
      "//components/policy:generated",
      "//content/app/resources",
      "//crypto",
      "//net:net_resources",
      "//ppapi/features",
      "//third_party/cld",
      "//third_party/wtl",
      "//ui/views",
    ]

    ldflags = [
      "/DELAYLOAD:comdlg32.dll",
      "/DELAYLOAD:crypt32.dll",
      "/DELAYLOAD:cryptui.dll",
      "/DELAYLOAD:dhcpcsvc.dll",
      "/DELAYLOAD:dwmapi.dll",
      "/DELAYLOAD:imagehlp.dll",
      "/DELAYLOAD:imm32.dll",
      "/DELAYLOAD:iphlpapi.dll",
      "/DELAYLOAD:setupapi.dll",
      "/DELAYLOAD:urlmon.dll",
      "/DELAYLOAD:winhttp.dll",
      "/DELAYLOAD:wininet.dll",
      "/DELAYLOAD:winspool.drv",
      "/DELAYLOAD:ws2_32.dll",
      "/DELAYLOAD:wsock32.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/WebKit/public:blink",
        "//gin",
        "//v8",
      ]
    } else {
      deps += [
        ":child_dependencies",
        "//content/public/app:both",
        "//pdf",
      ]
    }

    if (enable_package_mash_services) {
      deps += [ "//chrome/app/mash" ]
    }
  }

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

    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",
        "//build/config/sanitizers:deps",
        "//chrome/browser/policy:path_parser",
        "//chrome/common:features",
        "//chrome/install_static:install_static_util",
        "//chrome/install_static:secondary_module",
        "//chrome_elf",
        "//components/browser_watcher:browser_watcher_client",
        "//components/crash/content/app",
        "//content/public/app:child",
        "//pdf",
      ]

      ldflags = [
        "/DELAYLOAD:d3d11.dll",
        "/DELAYLOAD:d3d9.dll",
        "/DELAYLOAD:dwmapi.dll",
        "/DELAYLOAD:dxva2.dll",
        "/DELAYLOAD:esent.dll",
        "/DELAYLOAD:wininet.dll",
      ]

      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 = "A"

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

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

      outputs = [
        "{{bundle_root_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.c",
    ]

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

    deps = [
      ":chrome_app_strings_bundle_data",
      ":chrome_resources",
      ":chrome_versioned_bundle_data",
      "//build/config/sanitizers:deps",
      "//chrome/common:version_header",
    ]

    # Remove the default strip configuration (which strips all symbols) so that
    # a saves file can be specified.
    if (enable_stripping) {
      remove_configs = [ "//build/config/mac:strip_all" ]

      ldflags =
          [ "-Wcrl,strip,-s," + rebase_path("app/app.saves", root_build_dir) ]
    }
  }

  compiled_action("chrome_app_strings") {
    tool = "//chrome/tools/mac_helpers: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",
      "$root_out_dir/$chrome_helper_name.app",
    ]
    outputs = [
      "{{bundle_root_dir}}/Versions/$chrome_version_full/{{source_file_part}}",
    ]
    public_deps = [
      ":chrome_helper_app",

      # Before bundling the versioned app components, delete any existing
      # versions.
      ":clean_up_old_versions",

      # keystone_registration_framework copies the framework into the framework
      # bundle via a script that performs additional actions, rather than
      # relying on a bundle_data to copy it.
      ":keystone_registration_framework",

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

    # Only official builds that include Widevine need the widevine
    # signature file.
    if (is_chrome_branded && enable_pepper_cdms) {
      sources += [ "$root_out_dir/$chrome_framework_name.sig" ]
      public_deps += [ ":sign_chrome_framework_for_widevine" ]
    }
  }

  action("clean_up_old_versions") {
    script = "//chrome/tools/build/mac/clean_up_old_versions.py"
    outputs = [
      "$root_gen_dir/run_$target_name.stamp",
    ]
    args = [
             rebase_path("$root_out_dir/$chrome_product_full_name.app",
                         root_build_dir),
             "$chrome_version_full",
           ] + rebase_path(outputs, root_build_dir)
  }

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

  mac_app_bundle("chrome_helper_app") {
    output_name = chrome_helper_name

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

    sources = [
      "app/chrome_exe_main_mac.c",
    ]

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

    defines = [ "HELPER_EXECUTABLE" ]

    deps = [
      "//build/config/sanitizers:deps",
      "//chrome/common:version_header",
    ]

    ldflags = []

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

    # Remove the default strip configuration (which strips all symbols) so that
    # a saves file can be specified.
    if (enable_stripping) {
      remove_configs = [ "//build/config/mac:strip_all" ]

      ldflags +=
          [ "-Wcrl,strip,-s," + rebase_path("app/app.saves", root_build_dir) ]
    }
  }

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

    outputs = [
      "{{bundle_root_dir}}/Helpers/{{source_file_part}}",
    ]

    public_deps = [
      "//third_party/crashpad/crashpad/handler:crashpad_handler",
    ]

    if (using_sanitizer) {
      # 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 = [
      "$root_out_dir/app_mode_loader.app",

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

    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) {
      sources += [
        "$root_out_dir/natives_blob.bin",
        "$root_out_dir/snapshot_blob.bin",
      ]
      public_deps += [ "//v8" ]
    }
  }

  # 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/Versions/$chrome_version_full/$chrome_framework_name.framework/Resources/inspector"),
      ]

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

  if (enable_nacl) {
    bundle_data("chrome_framework_plugins") {
      sources = []
      outputs = [
        "{{bundle_root_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") {
    }
  }

  _should_bundle_widevine =
      (is_chrome_branded || enable_widevine) && enable_pepper_cdms
  if (_should_bundle_widevine) {
    # The Widevine CDM and manifest are either the actual Widevine CDM and
    # manifest or stubs used for testing only. The choice is made within the
    # corresponding Widevine targets based on branding.
    bundle_data("widevine_cdm_library_binaries") {
      sources = [
        "$root_out_dir/$widevine_cdm_path/widevinecdmadapter.plugin",
        "$root_out_dir/libwidevinecdm.dylib",
      ]
      outputs = [
        "{{bundle_root_dir}}/Libraries/$widevine_cdm_path/{{source_file_part}}",
      ]
      public_deps = [
        # Need this intermediate dependency because "widevinecdm" is a
        # shared_library if !is_chrome_branded, and then depending on
        # "widevinecdm" directly would cause it to be linked into the Chromium
        # Framework, which we don't want.
        ":widevine_cdm_library_copy",
        "//third_party/widevine/cdm:widevinecdmadapter",
      ]

      # Signatures are only generated for official chrome.
      if (is_chrome_branded) {
        sources += [
          "$root_out_dir/$widevine_cdm_path/widevinecdmadapter.plugin.sig",
          "$root_out_dir/libwidevinecdm.dylib.sig",
        ]
        public_deps += [ ":sign_cdm_adapter_for_widevine" ]
      }
    }

    copy("widevine_cdm_library_copy") {
      sources = [
        "$root_out_dir/$widevine_cdm_path/libwidevinecdm.dylib",
      ]
      if (is_chrome_branded) {
        sources +=
            [ "$root_out_dir/$widevine_cdm_path/libwidevinecdm.dylib.sig" ]
      }
      outputs = [
        "$root_out_dir/{{source_file_part}}",
      ]
      deps = [
        "//third_party/widevine/cdm:widevinecdm",
      ]
    }

    bundle_data("widevine_cdm_library_manifest") {
      sources = [
        "$root_out_dir/WidevineCdm/manifest.json",
      ]
      outputs = [
        "{{bundle_root_dir}}/Libraries/WidevineCdm/{{source_file_part}}",
      ]
      public_deps = [
        "//third_party/widevine/cdm:widevine_cdm_manifest",
      ]
    }

    widevine_sign_file("sign_cdm_adapter_for_widevine") {
      file = "$root_out_dir/$widevine_cdm_path/widevinecdmadapter.plugin"
      flags = 0
      deps = [
        "//third_party/widevine/cdm:widevinecdmadapter",
      ]
    }

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

  group("widevine_cdm_library") {
    if (_should_bundle_widevine) {
      deps = [
        ":widevine_cdm_library_binaries",
        ":widevine_cdm_library_manifest",
      ]
    }
  }

  if (is_chrome_branded) {
    action("keystone_registration_framework") {
      script = "//chrome/tools/build/mac/copy_keystone_framework.py"

      framework_path = "//third_party/googlemac/Releases/Keystone/KeystoneRegistration.framework"
      output_path = "$root_out_dir/$chrome_framework_name.framework/"
      if (defined(chrome_framework_version)) {
        output_path += "/Versions/$chrome_framework_version/"
      }
      output_path += "Frameworks/"

      sources = [
        framework_path,
        script,
      ]

      args = [
        rebase_path(framework_path, root_out_dir),
        rebase_path(output_path, root_out_dir),
      ]

      if (!use_system_xcode) {
        args += [ hermetic_xcode_path ]
      }

      outputs = [
        "$output_path/KeystoneRegistration.framework",
      ]
    }
  } 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:features",
      "//components/crash/content/app",
      "//components/policy:generated",
      "//content/public/app:both",
      "//headless:headless_shell_lib",
      "//pdf",
      "//third_party/cld",
    ]

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

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

    if (enable_package_mash_services) {
      deps += [ "//chrome/app/mash" ]
    }

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

  mac_framework_bundle("chrome_framework") {
    output_name = chrome_framework_name

    if (defined(chrome_framework_version)) {
      framework_version = chrome_framework_version
      framework_contents = [
        "Helpers",
        "Resources",
      ]

      if (is_chrome_branded) {
        framework_contents += [
          "Default Apps",
          "Frameworks",  # For KeystoneRegistration.framework.
        ]
      }
      if (enable_nacl) {
        framework_contents += [ "Internet Plug-Ins" ]
      }
      if (_should_bundle_widevine) {
        framework_contents += [ "Libraries" ]
      }
      if (enable_xpc_notifications) {
        framework_contents += [ "XPCServices" ]
      }
    }

    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 = [
      ":chrome_framework_helpers",
      ":chrome_framework_plugins",
      ":chrome_framework_resources",
      ":packed_resources",
      ":widevine_cdm_library",
      "//build/config/sanitizers:deps",
      "//chrome/app/nibs:chrome_xibs",
    ]

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

    if (enable_xpc_notifications) {
      deps += [ ":chrome_framework_services" ]
    }

    ldflags = [
      "-Wl,-install_name,@executable_path/../Versions/$chrome_version_full/$chrome_framework_name.framework/$chrome_framework_name",
      "-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/"
  if (defined(chrome_framework_version)) {
    _framework_binary_path +=
        "Versions/$chrome_framework_version/$chrome_framework_name"
  } else {
    _framework_binary_path += "$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),
      ]
      if (!use_system_xcode) {
        args += [
          "--developer_dir",
          hermetic_xcode_path,
        ]
      }

      args += [
        "_ChromeMain",
        rebase_path(_framework_binary_path, root_out_dir),
      ]
      outputs = [
        stamp_file,
      ]
      public_deps = [
        ":chrome_framework",
      ]
    }
  } else {
    group("verify_chrome_framework_order") {
      public_deps = [
        ":chrome_framework",
      ]
    }
  }

  if (enable_dsyms) {
    # 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/$chrome_helper_name.app/Contents/MacOS/$chrome_helper_name",
      "$root_out_dir/$chrome_product_full_name.app/Contents/MacOS/$chrome_product_full_name",
      "$root_out_dir/crashpad_handler",
    ]

    if (enable_xpc_notifications) {
      _chrome_symbols_sources += [ "$root_out_dir/AlertNotificationService.xpc/Contents/MacOS/AlertNotificationService" ]
    }

    # It is possible to run dump_syms on unstripped products without dSYMs,
    # but doing so isn't logical and won't happen in practice.
    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_name_part}}.dSYM/Contents/Resources/DWARF/{{source_name_part}}",
                   root_out_dir),
               "{{source}}",
             ]

      deps = [
        ":chrome_app",
        ":chrome_framework",
        ":chrome_helper_app",
        "//breakpad:dump_syms",
        "//third_party/crashpad/crashpad/handler:crashpad_handler",
      ]

      if (enable_xpc_notifications) {
        deps += [ "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service" ]
      }
    }

    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/$chrome_framework_name.dSYM",
        "$root_out_dir/$chrome_helper_name.dSYM",
        "$root_out_dir/$chrome_product_full_name.dSYM",
        "$root_out_dir/crashpad_handler.dSYM",
      ]

      if (enable_xpc_notifications) {
        _dsyms += [ "$root_out_dir/AlertNotificationService.dSYM" ]
      }

      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)

      deps = [
        ":chrome_app",
        ":chrome_framework",
        ":chrome_helper_app",
        "//third_party/crashpad/crashpad/handler:crashpad_handler",
      ]

      if (enable_xpc_notifications) {
        deps += [ "//chrome/browser/ui/cocoa/notifications:alert_notification_xpc_service" ]
      }
    }
  } else {
    group("chrome_dump_syms") {
    }
    group("chrome_dsym_archive") {
    }
  }
}

group("browser_dependencies") {
  public_deps = [
    "//chrome/browser",
    "//chrome/common",
    "//components/sync",
  ]
  if (enable_plugins) {
    public_deps += [ "//ppapi/host" ]
  }

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

  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/WebKit/public:blink",
    ]

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

group("child_dependencies") {
  public_deps = [
    "//chrome/browser/devtools",
    "//chrome/child",
    "//chrome/common",
    "//chrome/gpu",
    "//chrome/renderer",
    "//chrome/utility",
    "//components/sync",
    "//content/public/child",
    "//third_party/WebKit/public:blink_devtools_frontend_resources",
  ]

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

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

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

  source_set("file_pre_reader") {
    sources = [
      "app/file_pre_reader_win.cc",
      "app/file_pre_reader_win.h",
    ]
    deps = [
      "//base",
    ]
  }
}

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/LogoCanary.png",
      "//chrome/app/theme/$branding_path_component/win/tiles/SmallLogoCanary.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:password_manager_internals_resources",
    "//chrome/browser/resources:policy_resources",
    "//chrome/browser/resources:quota_internals_resources",
    "//chrome/browser/resources:task_scheduler_internals_resources",
    "//chrome/browser/resources:translate_internals_resources",
    "//chrome/browser/resources:webapks_ui_resources",
  ]

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

  if (is_chromeos) {
    public_deps += [ "//chrome/browser/resources/chromeos/chromevox" ]
    public_deps += [ "//chrome/browser/resources/chromeos/select_to_speak" ]
    public_deps += [ "//chrome/browser/resources/chromeos/switch_access" ]
  }

  if (enable_extensions) {
    public_deps +=
        [ "//chrome/browser/resources:sync_file_system_internals_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_root_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)
  }
}

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 && !is_android) {
    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",
  ]
  if (!is_android && !is_ios) {
    sources += [ "$root_gen_dir/chrome/options_test_resources.pak" ]
    deps += [ "//chrome/browser/resources:options_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("data_use_ui_message_enum_javagen") {
    sources = [
      "browser/android/data_usage/data_use_tab_ui_manager_android.cc",
    ]
  }

  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("signin_metrics_enum_javagen") {
    sources = [
      "../components/signin/core/browser/signin_metrics.h",
    ]
  }

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

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

  java_cpp_enum("quick_action_category_enum_javagen") {
    sources = [
      "browser/android/contextualsearch/resolved_search_term.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",
    ]

    include_dirs = [ android_ndk_include_dir ]

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

    deps = [
      "//chrome/browser",
      "//chrome/browser/ui",
      "//chrome/child",
      "//chrome/common",
      "//chrome/gpu",
      "//chrome/renderer",
      "//chrome/utility",
      "//components/safe_browsing_db:safe_browsing_db_mobile",
      "//content/public/app:both",
    ]
  }
}

if (enable_resource_whitelist_generation) {
  generate_resource_whitelist("resource_whitelist") {
    deps = [
      "//chrome/android:chrome",
    ]
    input = "$root_out_dir/libchrome$shlib_extension.whitelist"
    output = chrome_resource_whitelist
  }
}

if (is_linux) {
  action("manpage") {
    if (is_chrome_branded) {
      name = "Google Chrome"
      filename = "google-chrome"
      confdir = "google-chrome"
    } else {
      name = "Chromium"
      filename = "chromium-browser"
      confdir = "chromium"
    }

    script = "//chrome/tools/build/linux/sed.py"
    infile = "app/resources/manpage.1.in"
    inputs = [
      infile,
    ]

    outfile = "$root_out_dir/chrome.1"
    outputs = [
      outfile,
    ]

    args = [
      rebase_path(infile, root_build_dir),
      rebase_path(outfile, root_build_dir),
      "-e s/@@NAME@@/$name/",
      "-e s/@@FILENAME@@/$filename/",
      "-e s/@@CONFDIR@@/$confdir/",
    ]
  }

  if (is_official_build) {
    action("linux_symbols") {
      script = "//build/linux/dump_app_syms.py"

      dump_syms_label = "//breakpad:dump_syms($host_toolchain)"
      dump_syms_binary =
          get_label_info(dump_syms_label, "root_out_dir") + "/" + "dump_syms"

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

      inputs = [
        chrome_binary,
        dump_syms_binary,
      ]
      outputs = [
        symbol_file,
      ]

      args = [
        "./" + rebase_path(dump_syms_binary, root_build_dir),
        "0",  # strip_binary = false
        rebase_path(chrome_binary, root_build_dir),
        rebase_path(symbol_file, root_build_dir),
      ]

      deps = [
        ":chrome",
        dump_syms_label,
      ]
    }
  }

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