# Patch configuration file.
#
# Each dictionary entry passed to "register_google_patches" represents a single
# patch file. Supported key/value pairs are as follows:
#
# - 'name'       Required. The name of the patch file without the .patch
#                extension that will be read from the patches subdirectory.
# - 'path'       Optional. The repository root for the patch file. Defaults to
#                the Chromium "src" root. All patch file contents must be
#                relative to this repository root.
# - 'condition'  Optional. The patch file will only be applied if an environment
#                variable with this name exists.
#
# Each entry should also include a comment linking the bug the patch relates to.

register_google_patches(
  {
    # Make CEF compatible with google3 code
    #
    # This fixes the google3 incompatibilities in CEF -- such as conflicting
    # symbols, macros, and header guards -- to allow CEF and common google3
    # libraries like //base to be used in client apps.
    #
    #  - Do not check for Chromium header include guards when compiling
    #    //third_party/cef files in google3 (i.e., when USING_GOOGLE3_INCLUDES
    #    is defined).
    #
    #  - Replace the definitions in CEF's include/base/cef_atomicops.h header
    #    with the google3 definitions in //base/atomicops.h header.
    #
    #  - Replace the definitions in CEF's include/base/cef_basictypes.h header
    #    with the google3 definitions in //base/integral_types.h (and also
    #    define the char16 type required by CEF).
    #
    #  - Replace the definitions in CEF's include/base/cef_logging.h header with
    #    the google3 definitions in //base/logging.h (and also define the
    #    NOTREACHED and DCHECK_IS_ON macros required by CEF).
    #
    #  - Replace the definitions in CEF's include/base/cef_macros.h header with
    #    the google3 definitions in //base/macros.h.
    #
    #  - Add a kludge to CEF's include/base/cef_callback.h header to support its
    #    use in the same translation unit as the google3 //base/callback.h
    #    header.
    #
    # See go/thor-desktop-cef-google3-support for more details.
    #
    # Bug: b/132197443
    'name': 'google3_compatibility',
    'path': 'cef',
  },
  {
    # Include Piper changelist in CEF_VERSION and add CEF_PIPER_CL macro
    #
    # This updates the CEF_VERSION macro in cef_version.h to something like
    # "cef_binary_73.1.12+gee4b49f+chromium-73.0.3683.75+piper-240653526". It
    # also adds a CEF_PIPER_CL macro with just the changelist number.
    #
    # Bug: b/128862468
    'name': 'cef_version',
    'path': 'cef',
  },
  {
    # Prefer using non-Depot Tools clang-format for Linux builds
    #
    # The clang-format from Depot Tools fails on some Linux Kokoro machines
    # because of dynamic linker errors. This patch uses the clang-format we
    # explicitly install instead (if it is in fact installed on the machine).
    #
    # Bug: b/122266829
    'name': 'clang_format_fix',
    'path': 'cef',
  },
  {
    # Allow service account authentication when fetching the Mac toolchain
    #
    # Fetching the Mac toolchain requires cipd be authenticated. The scripts do
    # not have support for this in a build bot; to fix this, we reinstate a
    # temporary piece of code removed in
    # https://crrev.com/a459f7dc6f606c988d58d72e6c71dce69bf5727b.
    #
    # Bug: b/159071415
    'name': 'mac_toolchain_creds',
  },
  {
    # Temporary patch to remove reference to hermetic_xcode_path (now private
    # and no longer needed).
    #
    # Bug: b/159071415
    'name': 'private_hermetic_xcode',
    'path': 'cef',
  },
  {
    # Increase the symbol limit on a header included in the CEF sandbox build.
    # We hit this limit in our Windows build on the 4280 branch, but don't know
    # why.
    #
    # Bug: b/175682493
    'name': 'symbol_limit'
  },
)
