# Copyright 2016 The Chromium Embedded Framework Authors. Portions 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.
#
# This file provides the GN configuration for the CEF project. This is not a
# stand-alone configuration -- it must be built from inside the Chromium source
# tree. See https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding
# for complete CEF build instructions. See below for links to additional GN
# documentation.
#
# GN Setup:
#
#    Optionally configure GN by setting the `GN_DEFINES` and/or `GN_ARGUMENTS`
#    environment variables.
#
#    Example A: Create an official build on Windows:
#
#      > set GN_DEFINES=is_official_build=true
#
#    Example B: Generate VS2017 project files in addition to the default Ninja
#               build files on Windows:
#
#      > set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/*
#
#      After completing the "GN Automated Build" or "GN Manual Build" section
#      open "out\<build_dir>\cef.sln" for editing and debugging. Building must
#      still be performed using the Ninja command-line.
#
# GN Automated Build:
#
#    Run the `automate-git.py` script as described on the BranchesAndBuilding
#    Wiki page. GN, unlike GYP, supports parallel build configurations. The
#    following command-line flags have special meaning with GN builds:
#
#    --x64-build    Perform an x64 build if specified (requires out/*_GN_x64
#                   directories), otherwise perform an x86 build (requires
#                   out/*_GN_x86 directories).
#
#    Directories are created subject to your platform and `GN_DEFINES` settings.
#    See Step 1B in the "GN Manual Build" section below for details.
#
# GN Manual Build:
#
# 1. Run the `cef_create_projects.[bin|sh]` script. Upon successful completion
#    proceed to Step 2.
#
#    The `cef_create_projects.[bin|sh]` script will automatically do all of the
#    following:
#
#    A. Apply patch files to the Chromium source tree. This includes
#       `patch/patches/gn_config.patch` which is required for GN integration.
#
#    B. Create multiple build output directories appropriate to your platform
#       and `GN_DEFINES` settings. For example:
#
#         x86 debug build   -> out/Debug_GN_x86
#         x86 release build -> out/Release_GN_x86
#         x64 debug build   -> out/Debug_GN_x64
#         x64 release build -> out/Release_GN_x64
#
#       Build output directories will be created subject to the following rules
#       (defined in `tools/gn_args.py` GetAllPlatformConfigs):
#
#       - Debug and Release directories will be created on all platforms by
#         default. Debug directories will not be created when `is_asan=true`.
#       - x64 directories will always be created on all platforms.
#       - x86 directories will always be created on Windows.
#       - x86 directories will be created on Linux when `use_sysroot=true`.
#
#    C. Write the `args.gn` file for each build output directory using the
#       `tools/gn_args.py` script to determine the GN arguments. Some arguments
#       are required and some are optional. See script output for details in
#       case of conflicts or recommendations.
#
#    D. Run `gn gen` for each build output directory to generate project files.
#       Ninja files will be generated by default. Additional command-line
#       arguments (including other project formats) can be specified via the
#       `GN_ARGUMENTS` environment variable. Run `gn gen --help` for a list of
#       supported arguments.
#
# 2. Run Ninja from the command-line to build. If the build configuration has
#    changed it will automatically re-run `gn gen` with the same arguments.
#
#    > ninja -C out/<build_dir> cefclient cefsimple ceftests
#
# GN Manual Packaging:
#
#    Run the `make_distrib.[bat|sh]` script as described on the
#    BranchesAndBuilding Wiki page.
#
# Additional GN documentation:
# http://www.chromium.org/developers/gn-build-configuration
# https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/language.md
#

import("//base/allocator/allocator.gni")
import("//build/config/features.gni")
import("//build/config/locales.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//cef/cef_repack_locales.gni")
import("//chrome/common/features.gni")
import("//content/public/app/mac_helpers.gni")
import("//extensions/buildflags/buildflags.gni")
import("//media/media_options.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//printing/buildflags/buildflags.gni")
import("//testing/test.gni")
import("//third_party/icu/config.gni")
import("//third_party/widevine/cdm/widevine.gni")
import("//tools/grit/repack.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
import("//ui/gl/features.gni")
import("//v8/gni/v8.gni")
if (is_clang) {
  import("//build/config/clang/clang.gni")
}
if (is_linux) {
  import("//build/config/linux/pkg_config.gni")
  import("//third_party/fontconfig/fontconfig.gni")
}
if (is_mac) {
  import("//build/config/mac/rules.gni")
  import("//build/mac/tweak_info_plist.gni")
  import("//build/util/version.gni")
  import("//media/cdm/library_cdm/cdm_paths.gni")
  import("//build/config/mac/base_rules.gni")

  # Template to compile .xib and .storyboard files.
  #
  # Arguments
  #
  #     sources:
  #         list of string, sources to compile
  #
  #     ibtool_flags:
  #         (optional) list of string, additional flags to pass to the ibtool
  template("compile_ib_files") {
    action_foreach(target_name) {
      forward_variables_from(invoker,
                            [
                              "testonly",
                              "visibility",
                            ])
      assert(defined(invoker.sources),
            "sources must be specified for $target_name")
      assert(defined(invoker.output_extension),
            "output_extension must be specified for $target_name")

      ibtool_flags = []
      if (defined(invoker.ibtool_flags)) {
        ibtool_flags = invoker.ibtool_flags
      }

      _output_extension = invoker.output_extension

      script = "//cef/tools/compile_ib_files.py"
      sources = invoker.sources
      outputs = [
        "$target_gen_dir/$target_name/{{source_name_part}}.$_output_extension",
      ]
      args = [
        "--input",
        "{{source}}",
        "--output",
        rebase_path(
            "$target_gen_dir/$target_name/{{source_name_part}}.$_output_extension",
            root_build_dir),
      ]
      if (!use_system_xcode) {
        args += [
          "--developer_dir",
          hermetic_xcode_path,
        ]
      }
      args += ibtool_flags
    }
  }

  # Template to compile and package Mac XIB files as bundle data.
  #
  # Arguments
  #
  #     sources:
  #         list of string, sources to comiple
  #
  #     output_path:
  #         (optional) string, the path to use for the outputs list in the
  #         bundle_data step. If unspecified, defaults to bundle_resources_dir.
  template("mac_xib_bundle_data") {
    _target_name = target_name
    _compile_target_name = _target_name + "_compile_ibtool"

    compile_ib_files(_compile_target_name) {
      forward_variables_from(invoker, [ "testonly" ])
      visibility = [ ":$_target_name" ]
      sources = invoker.sources
      output_extension = "nib"
      ibtool_flags = [
        "--minimum-deployment-target",
        mac_deployment_target,

        # TODO(rsesek): Enable this once all the bots are on Xcode 7+.
        # "--target-device",
        # "mac",
      ]
    }

    bundle_data(_target_name) {
      forward_variables_from(invoker,
                            [
                              "testonly",
                              "visibility",
                            ])

      public_deps = [
        ":$_compile_target_name",
      ]
      sources = get_target_outputs(":$_compile_target_name")

      _output_path = "{{bundle_resources_dir}}"
      if (defined(invoker.output_path)) {
        _output_path = invoker.output_path
      }

      outputs = [
        "$_output_path/{{source_file_part}}",
      ]
    }
  }
}
if (is_win) {
  import("//build/config/win/console_app.gni")
  import("//build/config/win/manifest.gni")
}

if (is_linux) {
  declare_args() {
    # The cefclient target depends on GTK packages that are not available in the
    # default sysroot environment. So we should only use them when we are not
    # using the sysroot. Alternatively, the developer might not want to use the
    # GTK dependencies at all, in which case they can set `cef_use_gtk=false`.
    cef_use_gtk = !use_sysroot
  }
}

#
# Verify required global arguments configured via `gn args`.
# Set by GetRequiredArgs() in //cef/tools/gn_args.py.
#

# Set ENABLE_PRINTING=1 ENABLE_BASIC_PRINTING=1.
assert(enable_basic_printing)
assert(enable_print_preview)

# Enable support for Widevine CDM.
assert(enable_widevine)

if (is_clang) {
  # Don't use the chrome style plugin.
  assert(!clang_use_chrome_plugins)
}

if (is_mac) {
  # Always generate dSYM files. The make_distrib script will fail if
  # enable_dsyms=true is not explicitly set when is_official_build=false.
  assert(enable_dsyms)
}


#
# Local variables.
#

if (is_mac) {
  # The tweak_info_plist.py script requires a version number with 4 parts. CEF
  # uses a version number with 3 parts so just set the last part to 0.
  cef_plist_version = exec_script(
    "//cef/tools/cef_version.py", [ "plist" ], "trim string", [])

  # Need to be creative to match dylib version formatting requirements.
  cef_dylib_version = exec_script(
    "//cef/tools/cef_version.py", [ "dylib" ], "trim string", [])
}

# Read file lists from gypi files. The gypi_to_gn.py script does not support
# variable references so all required variables must be explicitly specified in
# the below configurations.
gypi_paths = exec_script("//cef/tools/gypi_to_gn.py",
                         [ rebase_path("cef_paths.gypi") ],
                         "scope",
                         [ "cef_paths.gypi" ])
gypi_paths2 = exec_script("//cef/tools/gypi_to_gn.py",
                          [ rebase_path("cef_paths2.gypi") ],
                          "scope",
                          [ "cef_paths2.gypi" ])

includes_common = gypi_paths2.includes_common + gypi_paths2.includes_common_capi
includes_mac = gypi_paths2.includes_mac + gypi_paths2.includes_mac_capi
includes_linux = gypi_paths2.includes_linux + gypi_paths2.includes_linux_capi
includes_win = gypi_paths2.includes_win + gypi_paths2.includes_win_capi

#
# Targets that will be built when depending on "//cef".
#

group("cef") {
  testonly = true
  deps = [
    ":cefsimple",
    ":ceftests",
    ":libcef_static_unittests",
  ]

  if (!is_linux || use_x11) {
    deps += [ ":cefclient" ]
  }
}


#
# libcef static target.
#

if (is_win) {
  # Target for building code that accesses chrome_elf internals. Included from
  # the //chrome_elf:crash target. Defined as a static_library instead of a
  # source_set because (a) the source files don't export any symbols and (b)
  # *_switches.cc duplication otherwise causes linker errors.
  static_library("chrome_elf_set") {
    sources = [
      "libcef/common/crash_reporter_client.cc",
      "libcef/common/crash_reporter_client.h",

      # Required for crash_keys::GetChromeCrashKeys.
      # Otherwise we need to copy this array into CEF, which would be difficult
      # to maintain.
      "//chrome/common/crash_keys.cc",
      "//chrome/common/chrome_switches.cc",
      "//components/flags_ui/flags_ui_switches.cc",
      "//content/public/common/content_switches.cc",
    ]

    configs += [
      "libcef/features:config",
      "//build/config:precompiled_headers",
    ]

    if (is_component_build) {
      # Avoid linker errors with content_switches.cc in component build by not
      # defining CONTENT_EXPORT.
      defines = ["COMPILE_CONTENT_STATICALLY"]
    }

    deps = [
      "//components/crash/core/common",  # crash_keys

      # Required by chrome_switches.cc
      "//chrome/common:buildflags",
      "//ppapi/buildflags:buildflags",
      "//printing/buildflags:buildflags",
      "//ui/base:buildflags",

      # Required by content_switches.cc
      "//media:media_buildflags",
    ]
  }
}

# libcef_static source files that have unit tests.
source_set("libcef_static_unittested") {
  sources = [
    "libcef/browser/devtools/devtools_util.cc",
    "libcef/browser/devtools/devtools_util.h",
  ]

  deps = [
    "//base",
  ]

  configs += [
    "libcef/features:config",
    "//build/config:precompiled_headers",
  ]
}

# Executable target for libcef_static unit tests.
test("libcef_static_unittests") {
  sources = [
    "libcef/browser/devtools/devtools_util_unittest.cc",
  ]

  deps = [
    ":libcef_static_unittested",
    "//base/test:run_all_unittests",
    "//testing/gtest",
  ]

  configs += [
    "libcef/features:config",
    "//build/config:precompiled_headers",
  ]
}

static_library("libcef_static") {
  sources = includes_common +
            gypi_paths.autogen_cpp_includes + [
    "libcef/browser/audio_capturer.cc",
    "libcef/browser/audio_capturer.h",
    "libcef/browser/browser_context.cc",
    "libcef/browser/browser_context.h",
    "libcef/browser/browser_context_keyed_service_factories.cc",
    "libcef/browser/browser_context_keyed_service_factories.h",
    "libcef/browser/browser_host_impl.cc",
    "libcef/browser/browser_host_impl.h",
    "libcef/browser/browser_info.cc",
    "libcef/browser/browser_info.h",
    "libcef/browser/browser_info_manager.cc",
    "libcef/browser/browser_info_manager.h",
    "libcef/browser/browser_main.cc",
    "libcef/browser/browser_main.h",
    "libcef/browser/browser_message_filter.cc",
    "libcef/browser/browser_message_filter.h",
    "libcef/browser/browser_message_loop.cc",
    "libcef/browser/browser_message_loop.h",
    "libcef/browser/browser_platform_delegate.cc",
    "libcef/browser/browser_platform_delegate.h",
    "libcef/browser/browser_platform_delegate_create.cc",
    "libcef/browser/browser_util.cc",
    "libcef/browser/browser_util.h",
    "libcef/browser/chrome_browser_process_stub.cc",
    "libcef/browser/chrome_browser_process_stub.h",
    "libcef/browser/chrome_crash_reporter_client_stub.cc",
    "libcef/browser/chrome_profile_manager_stub.cc",
    "libcef/browser/chrome_profile_manager_stub.h",
    "libcef/browser/chrome_profile_stub.cc",
    "libcef/browser/chrome_profile_stub.h",
    "libcef/browser/content_browser_client.cc",
    "libcef/browser/content_browser_client.h",
    "libcef/browser/context.cc",
    "libcef/browser/context.h",
    "libcef/browser/context_menu_params_impl.cc",
    "libcef/browser/context_menu_params_impl.h",
    "libcef/browser/devtools/devtools_controller.cc",
    "libcef/browser/devtools/devtools_controller.h",
    "libcef/browser/devtools/devtools_file_manager.cc",
    "libcef/browser/devtools/devtools_file_manager.h",
    "libcef/browser/devtools/devtools_frontend.cc",
    "libcef/browser/devtools/devtools_frontend.h",
    "libcef/browser/devtools/devtools_manager.cc",
    "libcef/browser/devtools/devtools_manager.h",
    "libcef/browser/devtools/devtools_manager_delegate.cc",
    "libcef/browser/devtools/devtools_manager_delegate.h",
    "libcef/browser/download_item_impl.cc",
    "libcef/browser/download_item_impl.h",
    "libcef/browser/download_manager_delegate.cc",
    "libcef/browser/download_manager_delegate.h",
    "libcef/browser/extension_impl.cc",
    "libcef/browser/extension_impl.h",
    "libcef/browser/extensions/api/storage/sync_value_store_cache.cc",
    "libcef/browser/extensions/api/storage/sync_value_store_cache.h",
    "libcef/browser/extensions/api/tabs/tabs_api.cc",
    "libcef/browser/extensions/api/tabs/tabs_api.h",
    "libcef/browser/extensions/browser_extensions_util.cc",
    "libcef/browser/extensions/browser_extensions_util.h",
    "libcef/browser/extensions/browser_platform_delegate_background.cc",
    "libcef/browser/extensions/browser_platform_delegate_background.h",
    "libcef/browser/extensions/chrome_api_registration.cc",
    "libcef/browser/extensions/chrome_api_registration.h",
    "libcef/browser/extensions/component_extension_resource_manager.cc",
    "libcef/browser/extensions/component_extension_resource_manager.h",
    "libcef/browser/extensions/extensions_api_client.cc",
    "libcef/browser/extensions/extensions_api_client.h",
    "libcef/browser/extensions/extensions_browser_api_provider.cc",
    "libcef/browser/extensions/extensions_browser_api_provider.h",
    "libcef/browser/extensions/extensions_browser_client.cc",
    "libcef/browser/extensions/extensions_browser_client.h",
    "libcef/browser/extensions/extension_background_host.cc",
    "libcef/browser/extensions/extension_background_host.h",
    "libcef/browser/extensions/extension_function_details.cc",
    "libcef/browser/extensions/extension_function_details.h",
    "libcef/browser/extensions/extension_host_delegate.cc",
    "libcef/browser/extensions/extension_host_delegate.h",
    "libcef/browser/extensions/extension_system.cc",
    "libcef/browser/extensions/extension_system.h",
    "libcef/browser/extensions/extension_system_factory.cc",
    "libcef/browser/extensions/extension_system_factory.h",
    "libcef/browser/extensions/extension_view_host.cc",
    "libcef/browser/extensions/extension_view_host.h",
    "libcef/browser/extensions/extension_web_contents_observer.cc",
    "libcef/browser/extensions/extension_web_contents_observer.h",
    "libcef/browser/extensions/mime_handler_view_guest_delegate.cc",
    "libcef/browser/extensions/mime_handler_view_guest_delegate.h",
    "libcef/browser/extensions/pdf_extension_util.cc",
    "libcef/browser/extensions/pdf_extension_util.h",
    "libcef/browser/extensions/pdf_web_contents_helper_client.cc",
    "libcef/browser/extensions/pdf_web_contents_helper_client.h",
    "libcef/browser/extensions/value_store/cef_value_store.cc",
    "libcef/browser/extensions/value_store/cef_value_store.h",
    "libcef/browser/extensions/value_store/cef_value_store_factory.cc",
    "libcef/browser/extensions/value_store/cef_value_store_factory.h",
    "libcef/browser/file_dialog_runner.h",
    "libcef/browser/file_dialog_manager.cc",
    "libcef/browser/file_dialog_manager.h",
    "libcef/browser/frame_host_impl.cc",
    "libcef/browser/frame_host_impl.h",
    "libcef/browser/image_impl.cc",
    "libcef/browser/image_impl.h",
    "libcef/browser/javascript_dialog_runner.h",
    "libcef/browser/javascript_dialog_manager.cc",
    "libcef/browser/javascript_dialog_manager.h",
    "libcef/browser/media_capture_devices_dispatcher.cc",
    "libcef/browser/media_capture_devices_dispatcher.h",
    "libcef/browser/media_router/media_route_impl.cc",
    "libcef/browser/media_router/media_route_impl.h",
    "libcef/browser/media_router/media_router_impl.cc",
    "libcef/browser/media_router/media_router_impl.h",
    "libcef/browser/media_router/media_router_manager.cc",
    "libcef/browser/media_router/media_router_manager.h",
    "libcef/browser/media_router/media_sink_impl.cc",
    "libcef/browser/media_router/media_sink_impl.h",
    "libcef/browser/media_router/media_source_impl.cc",
    "libcef/browser/media_router/media_source_impl.h",
    "libcef/browser/menu_manager.cc",
    "libcef/browser/menu_manager.h",
    "libcef/browser/menu_model_impl.cc",
    "libcef/browser/menu_model_impl.h",
    "libcef/browser/menu_runner.h",
    "libcef/browser/native/browser_platform_delegate_native.cc",
    "libcef/browser/native/browser_platform_delegate_native.h",
    "libcef/browser/navigate_params.cc",
    "libcef/browser/navigate_params.h",
    "libcef/browser/navigation_entry_impl.cc",
    "libcef/browser/navigation_entry_impl.h",
    "libcef/browser/net/chrome_scheme_handler.cc",
    "libcef/browser/net/chrome_scheme_handler.h",
    "libcef/browser/net/crlset_file_util_impl.cc",
    "libcef/browser/net/devtools_scheme_handler.cc",
    "libcef/browser/net/devtools_scheme_handler.h",
    "libcef/browser/net/internal_scheme_handler.cc",
    "libcef/browser/net/internal_scheme_handler.h",
    "libcef/browser/net/scheme_handler.cc",
    "libcef/browser/net/scheme_handler.h",
    "libcef/browser/net_service/browser_urlrequest_impl.cc",
    "libcef/browser/net_service/browser_urlrequest_impl.h",
    "libcef/browser/net_service/cookie_helper.cc",
    "libcef/browser/net_service/cookie_helper.h",
    "libcef/browser/net_service/cookie_manager_impl.cc",
    "libcef/browser/net_service/cookie_manager_impl.h",
    "libcef/browser/net_service/login_delegate.cc",
    "libcef/browser/net_service/login_delegate.h",
    "libcef/browser/net_service/proxy_url_loader_factory.cc",
    "libcef/browser/net_service/proxy_url_loader_factory.h",
    "libcef/browser/net_service/resource_handler_wrapper.cc",
    "libcef/browser/net_service/resource_handler_wrapper.h",
    "libcef/browser/net_service/resource_request_handler_wrapper.cc",
    "libcef/browser/net_service/resource_request_handler_wrapper.h",
    "libcef/browser/net_service/response_filter_wrapper.cc",
    "libcef/browser/net_service/response_filter_wrapper.h",
    "libcef/browser/net_service/stream_reader_url_loader.cc",
    "libcef/browser/net_service/stream_reader_url_loader.h",
    "libcef/browser/net_service/url_loader_factory_getter.cc",
    "libcef/browser/net_service/url_loader_factory_getter.h",
    "libcef/browser/origin_whitelist_impl.cc",
    "libcef/browser/origin_whitelist_impl.h",
    "libcef/browser/osr/browser_platform_delegate_osr.cc",
    "libcef/browser/osr/browser_platform_delegate_osr.h",
    "libcef/browser/osr/host_display_client_osr.cc",
    "libcef/browser/osr/host_display_client_osr.h",
    "libcef/browser/osr/motion_event_osr.cc",
    "libcef/browser/osr/motion_event_osr.h",
    "libcef/browser/osr/osr_accessibility_util.cc",
    "libcef/browser/osr/osr_accessibility_util.h",
    "libcef/browser/osr/osr_util.cc",
    "libcef/browser/osr/osr_util.h",
    "libcef/browser/osr/render_widget_host_view_osr.cc",
    "libcef/browser/osr/render_widget_host_view_osr.h",
    "libcef/browser/osr/synthetic_gesture_target_osr.cc",
    "libcef/browser/osr/synthetic_gesture_target_osr.h",
    "libcef/browser/osr/video_consumer_osr.cc",
    "libcef/browser/osr/video_consumer_osr.h",
    "libcef/browser/osr/web_contents_view_osr.cc",
    "libcef/browser/osr/web_contents_view_osr.h",
    "libcef/browser/path_util_impl.cc",
    "libcef/browser/plugins/plugin_service_filter.cc",
    "libcef/browser/plugins/plugin_service_filter.h",
    "libcef/browser/prefs/browser_prefs.cc",
    "libcef/browser/prefs/browser_prefs.h",
    "libcef/browser/prefs/pref_store.cc",
    "libcef/browser/prefs/pref_store.h",
    "libcef/browser/prefs/renderer_prefs.cc",
    "libcef/browser/prefs/renderer_prefs.h",
    "libcef/browser/print_settings_impl.cc",
    "libcef/browser/print_settings_impl.h",
    "libcef/browser/printing/constrained_window_views_client.cc",
    "libcef/browser/printing/constrained_window_views_client.h",
    "libcef/browser/printing/printing_message_filter.cc",
    "libcef/browser/printing/printing_message_filter.h",
    "libcef/browser/printing/print_view_manager.cc",
    "libcef/browser/printing/print_view_manager.h",
    "libcef/browser/process_util_impl.cc",
    "libcef/browser/resource_context.cc",
    "libcef/browser/resource_context.h",
    "libcef/browser/request_context_handler_map.cc",
    "libcef/browser/request_context_handler_map.h",
    "libcef/browser/request_context_impl.cc",
    "libcef/browser/request_context_impl.h",
    "libcef/browser/scheme_impl.cc",
    "libcef/browser/server_impl.cc",
    "libcef/browser/server_impl.h",
    "libcef/browser/speech_recognition_manager_delegate.cc",
    "libcef/browser/speech_recognition_manager_delegate.h",
    "libcef/browser/ssl_host_state_delegate.cc",
    "libcef/browser/ssl_host_state_delegate.h",
    "libcef/browser/ssl_info_impl.cc",
    "libcef/browser/ssl_info_impl.h",
    "libcef/browser/ssl_status_impl.cc",
    "libcef/browser/ssl_status_impl.h",
    "libcef/browser/stream_impl.cc",
    "libcef/browser/stream_impl.h",
    "libcef/browser/trace_impl.cc",
    "libcef/browser/trace_subscriber.cc",
    "libcef/browser/trace_subscriber.h",
    "libcef/browser/thread_util.h",
    "libcef/browser/web_contents_dialog_helper.cc",
    "libcef/browser/web_contents_dialog_helper.h",
    "libcef/browser/web_plugin_impl.cc",
    "libcef/browser/web_plugin_impl.h",
    "libcef/browser/x509_certificate_impl.cc",
    "libcef/browser/x509_certificate_impl.h",
    "libcef/browser/x509_cert_principal_impl.cc",
    "libcef/browser/x509_cert_principal_impl.h",
    "libcef/browser/xml_reader_impl.cc",
    "libcef/browser/xml_reader_impl.h",
    "libcef/browser/zip_reader_impl.cc",
    "libcef/browser/zip_reader_impl.h",
    "libcef/common/base_impl.cc",
    "libcef/common/cef_message_generator.cc",
    "libcef/common/cef_message_generator.h",
    "libcef/common/cef_messages.cc",
    "libcef/common/cef_messages.h",
    "libcef/common/cef_switches.cc",
    "libcef/common/cef_switches.h",
    "libcef/common/command_line_impl.cc",
    "libcef/common/command_line_impl.h",
    "libcef/common/content_client.cc",
    "libcef/common/content_client.h",
    "libcef/common/crash_reporter_client.cc",
    "libcef/common/crash_reporter_client.h",
    "libcef/common/crash_reporting.cc",
    "libcef/common/crash_reporting.h",
    "libcef/common/drag_data_impl.cc",
    "libcef/common/drag_data_impl.h",
    "libcef/common/extensions/chrome_generated_schemas.cc",
    "libcef/common/extensions/chrome_generated_schemas.h",
    "libcef/common/extensions/extensions_api_provider.cc",
    "libcef/common/extensions/extensions_api_provider.h",
    "libcef/common/extensions/extensions_client.cc",
    "libcef/common/extensions/extensions_client.h",
    "libcef/common/extensions/extensions_util.cc",
    "libcef/common/extensions/extensions_util.h",
    "libcef/common/file_util_impl.cc",
    "libcef/common/frame_util.cc",
    "libcef/common/frame_util.h",
    "libcef/common/json_impl.cc",
    "libcef/common/main_delegate.cc",
    "libcef/common/main_delegate.h",
    "libcef/common/net/http_header_utils.cc",
    "libcef/common/net/http_header_utils.h",
    "libcef/common/net/net_resource_provider.cc",
    "libcef/common/net/net_resource_provider.h",
    "libcef/common/net/scheme_registration.cc",
    "libcef/common/net/scheme_registration.h",
    "libcef/common/net/upload_data.cc",
    "libcef/common/net/upload_data.h",
    "libcef/common/net/upload_element.cc",
    "libcef/common/net/upload_element.h",
    "libcef/common/net_service/net_service_util.cc",
    "libcef/common/net_service/net_service_util.h",
    "libcef/common/parser_impl.cc",
    "libcef/common/process_message_impl.cc",
    "libcef/common/process_message_impl.h",
    "libcef/common/request_impl.cc",
    "libcef/common/request_impl.h",
    "libcef/common/resource_bundle_delegate.cc",
    "libcef/common/resource_bundle_delegate.h",
    "libcef/common/resource_bundle_impl.cc",
    "libcef/common/resource_bundle_impl.h",
    "libcef/common/response_impl.cc",
    "libcef/common/response_impl.h",
    "libcef/common/response_manager.cc",
    "libcef/common/response_manager.h",
    "libcef/common/scheme_registrar_impl.cc",
    "libcef/common/scheme_registrar_impl.h",
    "libcef/common/string_list_impl.cc",
    "libcef/common/string_map_impl.cc",
    "libcef/common/string_multimap_impl.cc",
    "libcef/common/string_types_impl.cc",
    "libcef/common/task_impl.cc",
    "libcef/common/task_runner_impl.cc",
    "libcef/common/task_runner_impl.h",
    "libcef/common/test/translator_test_impl.cc",
    "libcef/common/thread_impl.cc",
    "libcef/common/thread_impl.h",
    "libcef/common/time_impl.cc",
    "libcef/common/time_util.h",
    "libcef/common/tracker.cc",
    "libcef/common/tracker.h",
    "libcef/common/urlrequest_impl.cc",
    "libcef/common/value_base.cc",
    "libcef/common/value_base.h",
    "libcef/common/values_impl.cc",
    "libcef/common/values_impl.h",
    "libcef/common/waitable_event_impl.cc",
    "libcef/common/waitable_event_impl.h",
    "libcef/common/widevine_loader.cc",
    "libcef/common/widevine_loader.h",
    "libcef/renderer/browser_impl.cc",
    "libcef/renderer/browser_impl.h",
    "libcef/renderer/content_renderer_client.cc",
    "libcef/renderer/content_renderer_client.h",
    "libcef/renderer/dom_document_impl.cc",
    "libcef/renderer/dom_document_impl.h",
    "libcef/renderer/dom_node_impl.cc",
    "libcef/renderer/dom_node_impl.h",
    "libcef/renderer/extensions/extensions_dispatcher_delegate.cc",
    "libcef/renderer/extensions/extensions_dispatcher_delegate.h",
    "libcef/renderer/extensions/extensions_renderer_client.cc",
    "libcef/renderer/extensions/extensions_renderer_client.h",
    "libcef/renderer/extensions/print_render_frame_helper_delegate.cc",
    "libcef/renderer/extensions/print_render_frame_helper_delegate.h",
    "libcef/renderer/frame_impl.cc",
    "libcef/renderer/frame_impl.h",
    "libcef/renderer/render_frame_observer.cc",
    "libcef/renderer/render_frame_observer.h",
    "libcef/renderer/render_frame_util.cc",
    "libcef/renderer/render_frame_util.h",
    "libcef/renderer/render_thread_observer.cc",
    "libcef/renderer/render_thread_observer.h",
    "libcef/renderer/render_urlrequest_impl.cc",
    "libcef/renderer/render_urlrequest_impl.h",
    "libcef/renderer/thread_util.h",
    "libcef/renderer/url_loader_throttle_provider_impl.cc",
    "libcef/renderer/url_loader_throttle_provider_impl.h",
    "libcef/renderer/v8_impl.cc",
    "libcef/renderer/v8_impl.h",
  ]

  configs += [
    "libcef/features:config",
    "//build/config:precompiled_headers",

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]

  public_configs = [
    "libcef/features:config",
  ]

  include_dirs = [
    # Crashpad code uses paths relative to this directory.
    "//third_party/crashpad/crashpad",
  ]

  public_deps = [
    # Bring in feature flag defines.
    "//cef/libcef/features",
  ]

  deps = [
    ":cef_make_headers",
    ":cef_service_manifests",

    ":libcef_static_unittested",

    # Generate API bindings for extensions.
    # TODO(cef): Enable if/when CEF exposes its own Mojo APIs. See
    # libcef/common/extensions/api/README.txt for details.
    #"libcef/common/extensions/api",
    #"libcef/common/extensions/api:api_registration",
    "libcef/common/extensions/api:extensions_features",

    # Normal build dependencies. Should be sorted alphabetically.
    "//base",
    "//base:base_static",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//chrome/browser",
    "//chrome/child",
    "//chrome/common",
    "//chrome/renderer",
    "//chrome/services/printing:lib",
    "//chrome/utility",
    "//components/cdm/renderer",
    "//components/certificate_transparency",
    "//components/content_settings/core/browser",
    "//components/content_settings/core/common",
    "//components/crx_file",
    "//components/data_use_measurement/core",
    "//components/google/core/common",
    "//components/keyed_service/content:content",
    "//components/keyed_service/core:core",
    "//components/navigation_interception",
    "//components/network_session_configurator/browser",
    "//components/pdf/browser",
    "//components/pdf/renderer",
    "//components/plugins/renderer",
    "//components/pref_registry",
    "//components/printing/browser",
    "//components/printing/common",
    "//components/printing/renderer",
    "//components/proxy_config",
    "//components/safe_browsing/core/db:test_database_manager",
    "//components/services/print_compositor/public/cpp",
    "//components/services/print_compositor/public/mojom",
    "//components/update_client",
    "//components/url_formatter",
    "//components/user_prefs",
    "//components/version_info",
    "//components/visitedlink/browser",
    "//components/visitedlink/common",
    "//components/visitedlink/renderer",
    "//components/viz/service",
    "//components/web_cache/renderer",
    "//content/public/app:both",
    "//content/public/browser",
    "//content/public/child",
    "//content/public/common",
    "//content/public/gpu",
    "//content/public/renderer",
    "//content/public/utility",
    "//crypto",
    "//device/base",
    "//extensions/browser",
    "//extensions/browser:core_api_provider",
    "//extensions/buildflags",
    "//extensions/common/api",
    "//extensions/common:core_api_provider",
    "//extensions/renderer",
    "//gpu",
    "//ipc",
    "//media",
    "//media/blink",
    "//net",
    "//pdf",
    "//ppapi/buildflags",
    "//printing/buildflags",
    "//services/network:network_service",
    "//services/network/public/cpp",
    "//services/service_manager/embedder",
    "//services/service_manager/public/cpp",
    "//skia",
    "//storage/browser",
    "//third_party/blink/public:blink",
    "//third_party/brotli:dec",
    "//third_party/cld_3/src/src:cld_3",
    "//third_party/hunspell",
    "//third_party/leveldatabase",
    "//third_party/libxml:libxml",
    "//third_party/widevine/cdm:headers",
    "//third_party/widevine/cdm",
    "//third_party/icu",
    "//third_party/zlib:minizip",
    "//ui/base",
    "//ui/base/ime",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gfx/ipc",
    "//ui/gfx/ipc/geometry",
    "//ui/gfx/ipc/skia",
    "//ui/gl",
    "//url",
    "//v8",
  ]

  if (is_win) {
    sources += includes_win + [
      "libcef/browser/browser_main_win.cc",
      "libcef/browser/native/browser_platform_delegate_native_win.cc",
      "libcef/browser/native/browser_platform_delegate_native_win.h",
      "libcef/browser/native/file_dialog_runner_win.cc",
      "libcef/browser/native/file_dialog_runner_win.h",
      "libcef/browser/native/javascript_dialog_runner_win.cc",
      "libcef/browser/native/javascript_dialog_runner_win.h",
      "libcef/browser/native/menu_2.cc",
      "libcef/browser/native/menu_2.h",
      "libcef/browser/native/menu_runner_win.cc",
      "libcef/browser/native/menu_runner_win.h",
      "libcef/browser/native/menu_wrapper.h",
      "libcef/browser/native/native_menu_win.cc",
      "libcef/browser/native/native_menu_win.h",
      "libcef/browser/osr/browser_platform_delegate_osr_win.cc",
      "libcef/browser/osr/browser_platform_delegate_osr_win.h",
      "libcef/browser/osr/render_widget_host_view_osr_win.cc",

      # Part of //chrome/utility.
      "//chrome/utility/printing_handler.cc",
      "//chrome/utility/printing_handler.h",
    ]

    deps += [
      "//chrome/install_static:secondary_module",
      "//chrome/chrome_elf",
    ]

    if (is_component_build) {
      deps += [ "//content:sandbox_helper_win" ]
    }

    libs = [
      "comctl32.lib",
      # For D3D11_DECODER_PROFILE_H264_VLD_NOFGT.
      "dxguid.lib",
    ]

    data_deps = [
      "//chrome/elevation_service",
    ]
  }

  if (is_linux) {
    sources += includes_linux + [
      "libcef/browser/native/browser_platform_delegate_native_linux.cc",
      "libcef/browser/native/browser_platform_delegate_native_linux.h",
      "libcef/browser/native/menu_runner_linux.cc",
      "libcef/browser/native/menu_runner_linux.h",
      "libcef/browser/osr/browser_platform_delegate_osr_linux.cc",
      "libcef/browser/osr/browser_platform_delegate_osr_linux.h",
      "libcef/browser/osr/render_widget_host_view_osr_linux.cc",
      "libcef/browser/printing/print_dialog_linux.cc",
      "libcef/browser/printing/print_dialog_linux.h",
    ]

    if (use_x11) {
      sources += [
        "libcef/browser/native/window_x11.cc",
        "libcef/browser/native/window_x11.h",
      ]
    }

    deps += [
      "//build/config/freetype",
      "//third_party/fontconfig",
    ]

    if (is_linux && !use_x11) {
      deps += [
        "//third_party/angle:libEGL",
      ]
    }
  }

  if (is_mac) {
    sources += includes_mac + [
      "libcef/browser/native/browser_platform_delegate_native_mac.h",
      "libcef/browser/native/browser_platform_delegate_native_mac.mm",
      "libcef/browser/native/file_dialog_runner_mac.h",
      "libcef/browser/native/file_dialog_runner_mac.mm",
      "libcef/browser/native/javascript_dialog_runner_mac.h",
      "libcef/browser/native/javascript_dialog_runner_mac.mm",
      "libcef/browser/native/menu_runner_mac.h",
      "libcef/browser/native/menu_runner_mac.mm",
      "libcef/browser/osr/browser_platform_delegate_osr_mac.h",
      "libcef/browser/osr/browser_platform_delegate_osr_mac.mm",
      "libcef/common/util_mac.h",
      "libcef/common/util_mac.mm",
    ]
  }

  if (is_win || is_mac) {
    deps += [ "//third_party/crashpad/crashpad/handler" ]
  }

  if (use_x11) {
    deps += [ "//ui/events/devices/x11" ]
  }

  if (is_posix && !is_mac) {
    sources += [
      "libcef/common/cef_crash_report_utils.cc",
      "libcef/common/cef_crash_report_utils.h",
    ]

    deps += [
      "//components/crash/core/app",
      "//components/crash/content/browser",
    ]
  }

  if (v8_use_external_startup_data && use_v8_context_snapshot) {
    deps += [ "//tools/v8_context_snapshot" ]
  }

  if (toolkit_views) {
    deps += [
      "//ui/views",
    ]
  }

  if (use_aura) {
    sources += [
      "libcef/browser/native/window_delegate_view.cc",
      "libcef/browser/native/window_delegate_view.h",
      "libcef/browser/views/basic_label_button_impl.cc",
      "libcef/browser/views/basic_label_button_impl.h",
      "libcef/browser/views/basic_label_button_view.cc",
      "libcef/browser/views/basic_label_button_view.h",
      "libcef/browser/views/basic_panel_impl.cc",
      "libcef/browser/views/basic_panel_impl.h",
      "libcef/browser/views/basic_panel_view.cc",
      "libcef/browser/views/basic_panel_view.h",
      "libcef/browser/views/box_layout_impl.cc",
      "libcef/browser/views/box_layout_impl.h",
      "libcef/browser/views/browser_platform_delegate_views.cc",
      "libcef/browser/views/browser_platform_delegate_views.h",
      "libcef/browser/views/browser_view_impl.cc",
      "libcef/browser/views/browser_view_impl.h",
      "libcef/browser/views/browser_view_view.cc",
      "libcef/browser/views/browser_view_view.h",
      "libcef/browser/views/button_impl.h",
      "libcef/browser/views/button_view.h",
      "libcef/browser/views/display_impl.cc",
      "libcef/browser/views/display_impl.h",
      "libcef/browser/views/fill_layout_impl.cc",
      "libcef/browser/views/fill_layout_impl.h",
      "libcef/browser/views/label_button_impl.h",
      "libcef/browser/views/label_button_view.h",
      "libcef/browser/views/layout_impl.h",
      "libcef/browser/views/layout_adapter.cc",
      "libcef/browser/views/layout_adapter.h",
      "libcef/browser/views/layout_util.cc",
      "libcef/browser/views/layout_util.h",
      "libcef/browser/views/menu_button_impl.cc",
      "libcef/browser/views/menu_button_impl.h",
      "libcef/browser/views/menu_button_view.cc",
      "libcef/browser/views/menu_button_view.h",
      "libcef/browser/views/menu_runner_views.cc",
      "libcef/browser/views/menu_runner_views.h",
      "libcef/browser/views/panel_impl.h",
      "libcef/browser/views/panel_view.h",
      "libcef/browser/views/scroll_view_impl.cc",
      "libcef/browser/views/scroll_view_impl.h",
      "libcef/browser/views/scroll_view_view.cc",
      "libcef/browser/views/scroll_view_view.h",
      "libcef/browser/views/textfield_impl.cc",
      "libcef/browser/views/textfield_impl.h",
      "libcef/browser/views/textfield_view.cc",
      "libcef/browser/views/textfield_view.h",
      "libcef/browser/views/view_adapter.cc",
      "libcef/browser/views/view_adapter.h",
      "libcef/browser/views/view_impl.h",
      "libcef/browser/views/view_util.cc",
      "libcef/browser/views/view_util.h",
      "libcef/browser/views/view_view.h",
      "libcef/browser/views/window_impl.cc",
      "libcef/browser/views/window_impl.h",
      "libcef/browser/views/window_view.cc",
      "libcef/browser/views/window_view.h",

      # Part of //ui/views:test_support which is testingonly.
      "//ui/views/test/desktop_test_views_delegate.h",
      "//ui/views/test/desktop_test_views_delegate_aura.cc",
      "//ui/views/test/test_views_delegate.h",
      "//ui/views/test/test_views_delegate_aura.cc",

      # Support for UI input events.
      # Part of //ui/base:test_support which is testingonly.
      "//ui/base/test/ui_controls.h",
      "//ui/base/test/ui_controls_aura.cc",
      "//ui/aura/test/ui_controls_factory_aura.h",
    ]

    if (is_linux && !use_x11) {
      sources += [
        "//ui/aura/test/ui_controls_factory_ozone.cc",
        "//ui/events/test/events_test_utils.cc"
      ]
    }

    deps += [
      "//ui/aura",
      "//ui/events",
      "//ui/strings",
      "//ui/wm",
      "//ui/wm/public",
    ]

    if (toolkit_views) {
      deps += [
        "//ui/views/controls/webview",
      ]
    }
    
    if (is_win) {
      sources += [
        # Support for UI input events.
        # Part of //base/test:test_config which is testingonly.
        "//base/test/test_switches.cc",
        "//base/test/test_switches.h",
        "//base/test/test_timeouts.cc",
        "//base/test/test_timeouts.h",
        # Part of //ui/aura:test_support which is testingonly.
        "//ui/aura/test/ui_controls_factory_aurawin.cc",
        # Part of //ui/base:test_support which is testingonly.
        "//ui/base/test/ui_controls_internal_win.cc",
        "//ui/base/test/ui_controls_internal_win.h",
      ]
    }

    if (is_linux) {
      sources += [
        # Support for UI input events.
        # Part of //ui/aura:test_support which is testingonly.
        "//ui/aura/test/aura_test_utils.cc",
        "//ui/aura/test/aura_test_utils.h",
        # Part of //ui/events:test_support which is testingonly.
        "//ui/events/test/x11_event_waiter.cc",
        "//ui/events/test/x11_event_waiter.h",
      ]

      if (use_x11) {
        sources += [
          # Support for UI input events.
          # Part of //ui/aura:test_support which is testingonly.
          "//ui/aura/test/ui_controls_factory_aurax11.cc",
          "//ui/aura/test/x11_event_sender.cc",
          "//ui/aura/test/x11_event_sender.h",
          # Part of //ui/views:test_support which is testingonly.
          "//ui/views/test/ui_controls_factory_desktop_aurax11.cc",
          "//ui/views/test/ui_controls_factory_desktop_aurax11.h",
        ]
      }
    }

    if (is_win || is_linux) {
      sources += [
        "libcef/browser/native/browser_platform_delegate_native_aura.cc",
        "libcef/browser/native/browser_platform_delegate_native_aura.h",
      ]
    }
  } else {
    sources += [
      # Provides stub implementations for the views static methods.
      "libcef_dll/views_stub.cc",
    ]
  }
}


#
# libcef_dll_wrapper static targets.
#

# Configuration that will be applied to all targets that depend on
# libcef_dll_wrapper.
config("libcef_dll_wrapper_config") {
  include_dirs = [
    # CEF sources use include paths relative to the CEF root directory.
    ".",
    # CEF generates some header files that also need to be discoverable.
    # They will be copied to the include/ directory in the binary distribution.
    "$root_out_dir/includes",
  ]
}

# libcef_dll_wrapper target.
static_library("libcef_dll_wrapper") {
  sources = includes_common +
            gypi_paths.autogen_cpp_includes +
            gypi_paths2.includes_capi +
            gypi_paths.autogen_capi_includes +
            gypi_paths2.includes_wrapper +
            gypi_paths2.libcef_dll_wrapper_sources_base +
            gypi_paths2.libcef_dll_wrapper_sources_common +
            gypi_paths.autogen_client_side

  if (is_mac) {
    sources += gypi_paths2.libcef_dll_wrapper_sources_mac
  }

  defines = [ "WRAPPING_CEF_SHARED" ]

  configs += [ ":libcef_dll_wrapper_config" ]
  public_configs = [ ":libcef_dll_wrapper_config" ]
}


#
# cef_sandbox target.
#

if (is_win) {
  static_library("cef_sandbox") {
    sources = [ "libcef_dll/sandbox/sandbox_win.cc" ]
    # CEF sources use include paths relative to the CEF root directory.
    include_dirs = [ "." ]
    deps = [ "//sandbox" ]
  }
}

if (is_mac) {
  static_library("cef_sandbox") {
    sources = [ "libcef_dll/sandbox/sandbox_mac.mm" ]
    # CEF sources use include paths relative to the CEF root directory.
    include_dirs = [ "." ]
    deps = [ "//sandbox/mac:seatbelt" ]
  }
}

#
# Service manifests.
#

source_set("cef_content_browser_overlay_manifest") {
  sources = [
    "libcef/common/service_manifests/cef_content_browser_overlay_manifest.cc",
    "libcef/common/service_manifests/cef_content_browser_overlay_manifest.h",
  ]

  configs += [
    "libcef/features:config"
  ]

  deps = [
    "//base",
    "//extensions/buildflags",
    "//extensions/common:mojom",
    "//extensions/common/api:mojom",
    "//services/service_manager/public/cpp",
    "//third_party/blink/public/common",
  ]
}

source_set("cef_content_renderer_overlay_manifest") {
  sources = [
    "libcef/common/service_manifests/cef_content_renderer_overlay_manifest.h",
  ]

  configs += [
    "libcef/features:config"
  ]

  deps = [
    "//base",
    "//components/subresource_filter/content/mojom",
    "//extensions/buildflags",
    "//extensions/common:mojom",
    "//services/service_manager/public/cpp",
    "//third_party/blink/public/common",
  ]
}

source_set("cef_service_manifests") {
  public_deps = [
    ":cef_content_browser_overlay_manifest",
    ":cef_content_renderer_overlay_manifest",
  ]
}

#
# Resource grit/pack targets.
#

# Helper for generating scaled resource packs.
template("cef_pak_scaled") {
  percent = invoker.percent

  repack("pak_${target_name}") {
    # Each input pak file should also have a deps line for completeness.
    # Add associated .h files in the make_pack_header("resources") target.
    sources = [
      "$root_gen_dir/chrome/renderer_resources_${percent}_percent.pak",
      "$root_gen_dir/components/components_resources_${percent}_percent.pak",
      "$root_gen_dir/content/app/resources/content_resources_${percent}_percent.pak",
      "$root_gen_dir/extensions/extensions_browser_resources_${percent}_percent.pak",
      "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_${percent}_percent.pak",
      "$root_gen_dir/ui/resources/ui_resources_${percent}_percent.pak",
    ]

    # Use public_deps so that generated grit headers are discoverable from
    # the libcef_static target. Grit deps that generate .cc files must be
    # listed both here and in the libcef_static target.
    public_deps = [
      "//chrome/renderer:resources",
      "//components/resources:components_scaled_resources",
      "//content/app/resources",
      "//extensions:extensions_browser_resources",
      "//third_party/blink/public:scaled_resources",
      "//ui/resources:ui_resources_grd",
    ]

    deps = [
      # This repack target generates the blink_scaled_resources_*_percent.pak
      # file but doesn't expose the public_deps required by make_pack_header.
      "//third_party/blink/public:scaled_resources_${percent}_percent",
    ]

    if (toolkit_views) {
      sources += [
        "$root_gen_dir/ui/views/resources/views_resources_${percent}_percent.pak"
      ]

      public_deps += [
        "//ui/views/resources:resources_grd"
      ]
    }

    output = "$root_out_dir/cef_${percent}_percent.pak"
  }
}

# Generate cef_100_percent.pak.
cef_pak_scaled("100_percent") {
  percent = "100"
}

# Generate cef_200_percent.pak.
cef_pak_scaled("200_percent") {
  percent = "200"
}

# Generate devtools_resources.pak.
repack("pak_devtools") {
  # Each input pak file should also have a deps line for completeness.
  # Add associated .h files in the make_pack_header("resources") target.
  sources = [
    "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
  ]

  # Use public_deps so that generated grit headers are discoverable from
  # the libcef_static target. Grit deps that generate .cc files must be
  # listed both here and in the libcef_static target.
  public_deps = [
    "//content/browser/devtools:resources",
  ]

  output = "$root_out_dir/devtools_resources.pak"
}

# Generate cef_extensions.pak.
repack("pak_extensions") {
  # Each input pak file should also have a deps line for completeness.
  # Add associated .h files in the make_pack_header("resources") target.
  sources = [
    "$root_gen_dir/chrome/component_extension_resources.pak",
    "$root_gen_dir/content/browser/resources/media/media_internals_resources.pak",
    "$root_gen_dir/content/browser/webrtc/resources/webrtc_internals_resources.pak",
    "$root_gen_dir/extensions/extensions_renderer_resources.pak",
    "$root_gen_dir/extensions/extensions_resources.pak",
    "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak",
    "$root_gen_dir/ui/resources/webui_resources.pak",
  ]

  # Use public_deps so that generated grit headers are discoverable from
  # the libcef_static target. Grit deps that generate .cc files must be
  # listed both here and in the libcef_static target.
  public_deps = [
    "//chrome/browser/resources:component_extension_resources",
    "//content/browser/resources/media:media_internals_resources",
    "//content/browser/webrtc/resources",
    "//extensions:extensions_renderer_resources",
    "//extensions:extensions_resources_grd",
    "//mojo/public/js:resources",
    "//ui/resources:webui_resources_grd",
  ]

  output = "$root_out_dir/cef_extensions.pak"
}

grit("cef_strings") {
  visibility = [ ":*" ]

  source = "libcef/resources/cef_strings.grd"
  outputs = [
    "grit/cef_strings.h",
  ]
  all_locales = locales + [ "fake-bidi" ]
  foreach(locale, all_locales) {
    outputs += [ "cef_strings_${locale}.pak" ]
  }
}

# Generate locales/<locale>.pak.
# See cef_repack_locales.gni for the list of input pak files and deps.
cef_repack_locales("repack_locales_pack") {
  visibility = [ ":*" ]

  input_locales = locales

  if (is_mac) {
    output_locales = locales_as_mac_outputs
  } else {
    output_locales = locales
  }
}

grit("cef_resources") {
  visibility = [ ":*" ]
  source = "libcef/resources/cef_resources.grd"
  outputs = [
    "grit/cef_resources.h",
    "cef_resources.pak",
  ]
  grit_flags = [
    "-E",
    "root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
  ]
}

# Generate cef.pak.
repack("pak") {
  # Each input pak file should also have a deps line for completeness.
  # Add associated .h files in the make_pack_header("resources") target.
  sources = [
    "$root_gen_dir/chrome/browser_resources.pak",
    "$root_gen_dir/chrome/dev_ui_browser_resources.pak",
    "$root_gen_dir/chrome/net_internals_resources.pak",
    "$root_gen_dir/chrome/print_preview_resources.pak",
    "$root_gen_dir/chrome/common_resources.pak",
    "$root_gen_dir/components/components_resources.pak",
    "$root_gen_dir/components/dev_ui_components_resources.pak",
    "$root_gen_dir/cef/cef_resources.pak",
    "$root_gen_dir/content/browser/tracing/tracing_resources.pak",
    "$root_gen_dir/content/content_resources.pak",
    "$root_gen_dir/content/dev_ui_content_resources.pak",
    "$root_gen_dir/net/net_resources.pak",
    "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak",
  ]

  # Use public_deps so that generated grit headers are discoverable from
  # the libcef_static target. Grit deps that generate .cc files must be
  # listed both here and in the libcef_static target.
  public_deps = [
    "//chrome/browser:dev_ui_browser_resources",
    "//chrome/browser:resources",
    "//chrome/browser/resources/net_internals:net_internals_resources",
    "//chrome/browser/resources:print_preview_resources",
    "//chrome/common:resources",
    "//components/resources:components_resources",
    "//components/resources:dev_ui_components_resources",
    ":cef_resources",
    "//content/browser/tracing:resources",
    "//content:content_resources",
    "//content:dev_ui_content_resources",
    "//net:net_resources",
    "//third_party/blink/public:resources",
  ]

  output = "$root_out_dir/cef.pak"
}

# Helper for generating pack header files.
template("make_pack_header") {
  assert(defined(invoker.header))
  assert(defined(invoker.inputs))

  action("make_pack_header_${target_name}") {
    script = "tools/make_pack_header.py"

    inputs = invoker.inputs
    outputs = [ invoker.header ]

    args = rebase_path(outputs, root_build_dir) +
           rebase_path(inputs, root_build_dir)

    deps = [
      # List all targets that generate pack files here. The grit targets that
      # generate |inputs| will be picked up via public_deps.
      ":pak",
      ":pak_100_percent",
      ":pak_200_percent",
      ":pak_devtools",
      ":pak_extensions",
      ":repack_locales_pack",
    ]
  }
}

# Generate cef_pack_resources.h.
make_pack_header("resources") {
  header = "$root_out_dir/includes/include/cef_pack_resources.h"
  inputs = [
    "$root_gen_dir/cef/grit/cef_resources.h",
    "$root_gen_dir/chrome/grit/browser_resources.h",
    "$root_gen_dir/chrome/grit/common_resources.h",
    "$root_gen_dir/chrome/grit/component_extension_resources.h",
    "$root_gen_dir/chrome/grit/dev_ui_browser_resources.h",
    "$root_gen_dir/chrome/grit/net_internals_resources.h",
    "$root_gen_dir/chrome/grit/renderer_resources.h",
    "$root_gen_dir/components/grit/components_resources.h",
    "$root_gen_dir/components/grit/dev_ui_components_resources.h",
    "$root_gen_dir/content/browser/devtools/grit/devtools_resources.h",
    "$root_gen_dir/content/browser/tracing/grit/tracing_resources.h",
    "$root_gen_dir/content/grit/content_resources.h",
    "$root_gen_dir/content/grit/dev_ui_content_resources.h",
    "$root_gen_dir/extensions/grit/extensions_browser_resources.h",
    "$root_gen_dir/extensions/grit/extensions_renderer_resources.h",
    "$root_gen_dir/extensions/grit/extensions_resources.h",
    "$root_gen_dir/net/grit/net_resources.h",
    "$root_gen_dir/third_party/blink/public/resources/grit/blink_resources.h",
    "$root_gen_dir/ui/resources/grit/ui_resources.h",
    "$root_gen_dir/ui/resources/grit/webui_resources.h",
    "$root_gen_dir/ui/views/resources/grit/views_resources.h",
  ]
}

# Generate cef_pack_strings.h.
make_pack_header("strings") {
  header = "$root_out_dir/includes/include/cef_pack_strings.h"
  inputs = [
    "$root_gen_dir/cef/grit/cef_strings.h",
    "$root_gen_dir/chrome/grit/chromium_strings.h",
    "$root_gen_dir/chrome/grit/generated_resources.h",
    "$root_gen_dir/chrome/grit/locale_settings.h",
    "$root_gen_dir/chrome/grit/platform_locale_settings.h",
    "$root_gen_dir/components/strings/grit/components_strings.h",
    "$root_gen_dir/extensions/strings/grit/extensions_strings.h",
    "$root_gen_dir/services/strings/grit/services_strings.h",
    "$root_gen_dir/third_party/blink/public/strings/grit/blink_strings.h",
    "$root_gen_dir/ui/strings/grit/ui_strings.h",
  ]
}

# Generate cef_api_hash.h.
action("make_api_hash_header") {
  script = "tools/make_api_hash_header.py"

  # List of all C API files that will be checked for changes by cef_api_hash.py.
  inputs = gypi_paths2.includes_common_capi +
           gypi_paths2.includes_linux_capi +
           gypi_paths2.includes_mac_capi +
           gypi_paths2.includes_win_capi +
           gypi_paths2.includes_capi +
           gypi_paths.autogen_capi_includes
  include_dir = [ "include" ]
  outputs = [ "$root_out_dir/includes/include/cef_api_hash.h" ]

  args = rebase_path(outputs + include_dir, root_build_dir)
}

# Generate pack files and associated CEF header files.
group("cef_make_headers") {
  deps = [
    ":make_pack_header_resources",
    ":make_pack_header_strings",
    ":make_api_hash_header",
  ]
}


#
# libcef dll/framework target.
#

if (is_mac) {
  cef_framework_name = "Chromium Embedded Framework"

  tweak_info_plist("cef_framework_plist") {
    info_plist = "libcef/resources/framework-Info.plist"
    args = [
      "--breakpad=0",
      "--keystone=0",
      "--scm=1",
      "--version",
      cef_plist_version,
      "--branding",
      cef_framework_name,
    ]
  }

  bundle_data("cef_framework_locales") {
    sources = []
    foreach(locale, locales_as_mac_outputs) {
      sources += [ "$root_gen_dir/repack/locales/$locale.pak" ]
    }

    public_deps = [
      ":repack_locales_pack",
    ]

    outputs = [
      "{{bundle_resources_dir}}/{{source_name_part}}.lproj/locale.pak",
    ]
  }

  bundle_data("cef_framework_resources") {
    sources = [
      "$root_out_dir/cef.pak",
      "$root_out_dir/cef_100_percent.pak",
      "$root_out_dir/cef_200_percent.pak",
      "$root_out_dir/cef_extensions.pak",
      "$root_out_dir/devtools_resources.pak",
    ]

    public_deps = [
      ":pak",
      ":pak_100_percent",
      ":pak_200_percent",
      ":pak_devtools",
      ":pak_extensions",
    ]

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

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

  if (use_egl) {
    # Add the ANGLE .dylibs in the MODULE_DIR of the Framework app bundle.
    bundle_data("cef_framework_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 the Framework app bundle.
    bundle_data("cef_framework_swiftshader_binaries") {
      sources = [
        "$root_out_dir/egl_intermediates/libswiftshader_libEGL.dylib",
        "$root_out_dir/egl_intermediates/libswiftshader_libGLESv2.dylib",
        "$root_out_dir/vk_intermediates/libvk_swiftshader.dylib",
        "$root_out_dir/vk_intermediates/vk_swiftshader_icd.json",
      ]
      outputs = [
        "{{bundle_contents_dir}}/Libraries/{{source_file_part}}",
      ]
      public_deps = [
        "//ui/gl:swiftshader_egl_library_copy",
        "//ui/gl:swiftshader_vk_library_copy",
      ]
    }
  }

  group("cef_framework_angle_library") {
    if (use_egl) {
      deps = [
        ":cef_framework_angle_binaries",
      ]
    }
  }

  group("cef_framework_swiftshader_library") {
    if (use_egl) {
      deps = [
        ":cef_framework_swiftshader_binaries",
      ]
    }
  }

  mac_framework_bundle("cef_framework") {
    output_name = cef_framework_name

    framework_version = "A"
    framework_contents = [
      "Libraries",
      "Resources",
    ]

    sources = includes_common +
              includes_mac +
              gypi_paths.autogen_cpp_includes +
              gypi_paths2.includes_capi +
              gypi_paths.autogen_capi_includes +
              gypi_paths2.libcef_sources_common +
              gypi_paths.autogen_library_side

    # TODO(rsesek): Handle these missing pieces:
    #   - crash_inspector
    #   - crash_report_sender.app

    deps = [
      ":cef_framework_angle_library",
      ":cef_framework_locales",
      ":cef_framework_resources",
      ":cef_framework_swiftshader_library",
      ":libcef_static",
    ]

    # We don't link the framework so just use the path from the main executable.
    ldflags = [
      "-Wl,-install_name,@executable_path/../Frameworks/$output_name.framework/$output_name",
      "-compatibility_version",
      cef_dylib_version,
      "-current_version",
      cef_dylib_version,
    ]

    if (is_component_build) {
      # Set up the rpath for the framework so that it can find dylibs in the
      # root output directory. The framework is at
      # $app_name.app/Contents/Frameworks/$output_name.framework/Versions/A/$output_name
      # so use loader_path to go back to the root output directory.
      ldflags += [
        "-rpath",
        "@loader_path/../../../../../..",
      ]
    }

    info_plist_target = ":cef_framework_plist"
  }
} else {
  shared_library("libcef") {
    sources = includes_common +
              gypi_paths.autogen_cpp_includes +
              gypi_paths2.includes_capi +
              gypi_paths.autogen_capi_includes +
              gypi_paths2.libcef_sources_common +
              gypi_paths.autogen_library_side

    deps = [
      ":libcef_static",
    ]

    if (is_win) {
      sources += includes_win + [
        "libcef_dll/libcef_dll.rc",
      ]

      deps += [ 
        # Bring in ui_unscaled_resources.rc which contains custom cursors.
        # TODO(cef): Remove this once custom cursors can be loaded via
        # ResourceBundle. See crbug.com/147663.
        "//ui/resources:ui_unscaled_resources_grd",
      ]
    }

    if (is_linux && !is_debug && use_allocator=="none") {
      # Only export necessary symbols from libcef.so.
      # Don't do this in Debug builds because it causes the resulting
      # application to crash.
      # Also need to do this for ASAN builds to work around
      # https://crbug.com/832808.
      ldflags = [ "-Wl,--version-script=" +
                  rebase_path("//cef/libcef_dll/libcef.lst") ]
    }
  }
}


#
# Executable/app targets.
#

if (is_mac) {
  # Helper for generating the CEF app bundle.
  template("cef_app") {
    assert(defined(invoker.helper_info_plist))
    assert(defined(invoker.helper_sources))
    assert(defined(invoker.info_plist))
    assert(defined(invoker.sources))

    app_name = target_name
    app_helper_name = "$app_name Helper"
    app_testonly = defined(invoker.testonly) && invoker.testonly

    tweak_info_plist("${app_name}_helper_plist") {
      testonly = app_testonly
      info_plist = invoker.helper_info_plist
      args = [
        "--breakpad=0",
        "--keystone=0",
        "--scm=0",
        "--version",
        cef_plist_version,
      ]
    }

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

        testonly = app_testonly
        output_name = app_helper_name + invoker.helper_name_suffix

        sources = invoker.helper_sources

        extra_substitutions = [
          "BUNDLE_ID_SUFFIX=${invoker.helper_bundle_id_suffix}",
        ]

        deps = [
          ":cef_make_headers",
          ":cef_sandbox",
          ":libcef_dll_wrapper",
        ]
        if (defined(invoker.helper_deps)) {
          deps += invoker.helper_deps
        }

        ldflags = [
          # The helper is in $app_name.app/Contents/Frameworks/$app_name Helper.app/Contents/MacOS/
          # so set rpath up to the base.
          "-rpath",
           "@executable_path/../../../../../..",
        ]

        info_plist_target = ":${app_name}_helper_plist"

        if (defined(invoker.helper_defines)) {
          defines = invoker.helper_defines
        }
      }
    }

    foreach(helper_params, content_mac_helpers) {
      _helper_target = helper_params[0]
      _helper_bundle_id = helper_params[1]
      _helper_suffix = helper_params[2]
      cef_helper_app("${app_name}_helper_app_${_helper_target}") {
        helper_sources = invoker.helper_sources
        if (defined(invoker.helper_deps)) {
          helper_deps = invoker.helper_deps
        }
        if (defined(invoker.helper_defines)) {
          helper_defines = invoker.helper_defines
        }

        helper_name_suffix = _helper_suffix
        helper_bundle_id_suffix = _helper_bundle_id
      }
    }

    bundle_data("${app_name}_framework_bundle_data") {
      testonly = app_testonly
      sources = [
        "$root_out_dir/$cef_framework_name.framework",
      ]

      public_deps = [
        ":cef_framework",
      ]

      foreach(helper_params, content_mac_helpers) {
        sources += [
          "$root_out_dir/${app_helper_name}${helper_params[2]}.app",
        ]
        public_deps += [ ":${app_name}_helper_app_${helper_params[0]}" ]
      }

      outputs = [
        "{{bundle_contents_dir}}/Frameworks/{{source_file_part}}",
      ]
    }

    tweak_info_plist("${app_name}_plist") {
      testonly = app_testonly
      info_plist = invoker.info_plist
      args = [
        "--scm=1",
        "--version",
        cef_plist_version,
      ]
    }

    mac_app_bundle(app_name) {
      testonly = app_testonly
      output_name = app_name

      sources = invoker.sources

      deps = [
        ":libcef_dll_wrapper",
        ":${app_name}_framework_bundle_data",
      ]
      if (defined(invoker.deps)) {
        deps += invoker.deps
      }

      if (defined(invoker.libs)) {
        libs = invoker.libs
      }

      if (defined(invoker.defines)) {
        defines = invoker.defines
      }

      info_plist_target = ":${app_name}_plist"
    }
  }


  #
  # cefclient app targets.
  #

  bundle_data("cefclient_resources_bundle_data") {
    sources = gypi_paths2.shared_sources_resources +
              gypi_paths2.cefclient_sources_resources + [
      "tests/cefclient/resources/mac/cefclient.icns",
    ]

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

  bundle_data("cefclient_resources_bundle_data_extensions_set_page_color") {
    sources = gypi_paths2.cefclient_sources_resources_extensions_set_page_color
    outputs = [
      "{{bundle_resources_dir}}/extensions/set_page_color/{{source_file_part}}",
    ]
  }

  bundle_data("cefclient_resources_bundle_data_english") {
    sources = [
      "tests/cefclient/resources/mac/English.lproj/InfoPlist.strings",
    ]

    outputs = [
      "{{bundle_resources_dir}}/English.lproj/{{source_file_part}}",
    ]
  }

  mac_xib_bundle_data("cefclient_xibs") {
    sources = [
      "tests/cefclient/resources/mac/English.lproj/MainMenu.xib",
    ]

    output_path = "{{bundle_resources_dir}}/English.lproj"
  }

  cef_app("cefclient") {
    helper_info_plist = "tests/cefclient/resources/mac/helper-Info.plist"
    helper_sources = includes_common +
                     includes_mac +
                     gypi_paths2.includes_wrapper +
                     gypi_paths2.includes_wrapper_mac +
                     gypi_paths2.shared_sources_common +
                     gypi_paths2.shared_sources_renderer +
                     gypi_paths2.shared_sources_mac_helper +
                     gypi_paths2.cefclient_sources_common +
                     gypi_paths2.cefclient_sources_renderer
    helper_defines = [
      "CEF_USE_SANDBOX",
    ]

    info_plist = "tests/cefclient/resources/mac/Info.plist"
    sources = includes_common +
              includes_mac +
              gypi_paths2.includes_wrapper +
              gypi_paths2.includes_wrapper_mac +
              gypi_paths2.shared_sources_browser +
              gypi_paths2.shared_sources_common +
              gypi_paths2.shared_sources_mac +
              gypi_paths2.cefclient_sources_browser +
              gypi_paths2.cefclient_sources_common +
              gypi_paths2.cefclient_sources_mac
    deps = [
      ":cefclient_resources_bundle_data",
      ":cefclient_resources_bundle_data_extensions_set_page_color",
      ":cefclient_resources_bundle_data_english",
      ":cefclient_xibs",
    ]
    libs = [
      "AppKit.framework",
      "OpenGL.framework",
    ]
    defines = [
      "CEF_USE_SANDBOX",
    ]
  }


  #
  # cefsimple app targets.
  #

  bundle_data("cefsimple_resources_bundle_data") {
    sources = [
      "tests/cefsimple/mac/cefsimple.icns",
    ]

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

  bundle_data("cefsimple_resources_bundle_data_english") {
    sources = [
      "tests/cefsimple/mac/English.lproj/InfoPlist.strings",
    ]

    outputs = [
      "{{bundle_resources_dir}}/English.lproj/{{source_file_part}}",
    ]
  }

  mac_xib_bundle_data("cefsimple_xibs") {
    sources = [
      "tests/cefsimple/mac/English.lproj/MainMenu.xib",
    ]
    output_path = "{{bundle_resources_dir}}/English.lproj"
  }

  cef_app("cefsimple") {
    helper_info_plist = "tests/cefsimple/mac/helper-Info.plist"
    helper_sources = includes_common +
                     includes_mac +
                     gypi_paths2.includes_wrapper +
                     gypi_paths2.includes_wrapper_mac +
                     gypi_paths2.cefsimple_sources_mac_helper
    helper_defines = [
      "CEF_USE_SANDBOX",
    ]

    info_plist = "tests/cefsimple/mac/Info.plist"
    sources = includes_common +
              includes_mac +
              gypi_paths2.includes_wrapper +
              gypi_paths2.includes_wrapper_mac +
              gypi_paths2.cefsimple_sources_common +
              gypi_paths2.cefsimple_sources_mac
    deps = [
      ":cefsimple_resources_bundle_data",
      ":cefsimple_resources_bundle_data_english",
      ":cefsimple_xibs",
    ]
    libs = [
      "AppKit.framework",
    ]
    defines = [
      "CEF_USE_SANDBOX",
    ]
  }


  #
  # ceftests app targets.
  #

  bundle_data("ceftests_resources_bundle_data") {
    sources = gypi_paths2.shared_sources_resources + [
      "tests/ceftests/resources/mac/ceftests.icns",
    ]

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

  bundle_data("ceftests_resources_bundle_data_english") {
    sources = [
      "tests/ceftests/resources/mac/English.lproj/InfoPlist.strings",
    ]

    outputs = [
      "{{bundle_resources_dir}}/English.lproj/{{source_file_part}}",
    ]
  }

  mac_xib_bundle_data("ceftests_xibs") {
    sources = [
      "tests/ceftests/resources/mac/English.lproj/MainMenu.xib",
    ]
    output_path = "{{bundle_resources_dir}}/English.lproj"
  }

  cef_app("ceftests") {
    testonly = true

    helper_info_plist = "tests/ceftests/resources/mac/helper-Info.plist"
    helper_sources = gypi_paths2.shared_sources_common +
                     gypi_paths2.shared_sources_renderer +
                     gypi_paths2.shared_sources_mac_helper +
                     gypi_paths2.ceftests_sources_mac_helper
    helper_deps = [
      "//testing/gtest",
    ]
    helper_defines = [
      "CEF_USE_SANDBOX",
    ]

    info_plist = "tests/ceftests/resources/mac/Info.plist"
    sources = includes_common +
              includes_mac +
              gypi_paths2.includes_wrapper +
              gypi_paths2.includes_wrapper_mac +
              gypi_paths2.shared_sources_browser +
              gypi_paths2.shared_sources_common +
              gypi_paths2.shared_sources_mac +
              gypi_paths2.ceftests_sources_common +
              gypi_paths2.ceftests_sources_mac
    deps = [
      ":ceftests_resources_bundle_data",
      ":ceftests_resources_bundle_data_english",
      ":ceftests_xibs",
      "//testing/gtest",
    ]
    libs = [
      "AppKit.framework",
    ]
    defines = [
      "CEF_USE_SANDBOX",
    ]
  }
} else {
  #
  # cefclient targets.
  #

  # The cefclient target depends on packages that are not available in the
  # default sysroot environment.
  if (is_linux && !use_sysroot) {
    pkg_config("glib") {
      packages = [
        "glib-2.0",
      ]
    }
  }

  if (is_linux && cef_use_gtk) {
    pkg_config("gtk") {
      packages = [
        "gmodule-2.0",
        "gtk+-2.0",
        "gthread-2.0",
        "gtk+-unix-print-2.0",
        "xi",
      ]
    }

    pkg_config("gtkglext") {
      packages = [
        "gtkglext-1.0",
      ]
    }
  }

  if (is_linux) {
    copy("copy_cefclient_files") {
      sources = gypi_paths2.shared_sources_resources +
                gypi_paths2.cefclient_sources_resources
      outputs = [ "${root_out_dir}/cefclient_files/{{source_file_part}}" ]
    }

    copy("copy_cefclient_files_extensions_set_page_color") {
      sources = gypi_paths2.cefclient_sources_resources_extensions_set_page_color
      outputs = [ "${root_out_dir}/cefclient_files/extensions/set_page_color/{{source_file_part}}" ]
    }
  }

  executable("cefclient") {
    sources = includes_common +
              gypi_paths2.includes_wrapper +
              gypi_paths2.shared_sources_browser +
              gypi_paths2.shared_sources_common +
              gypi_paths2.shared_sources_renderer +
              gypi_paths2.cefclient_sources_browser +
              gypi_paths2.cefclient_sources_common +
              gypi_paths2.cefclient_sources_renderer

    deps = [
      ":libcef",
      ":libcef_dll_wrapper",
    ]

    defines = [
      "CEF_USE_SANDBOX",
    ]

    if (is_win) {
      sources += includes_win +
                 gypi_paths2.shared_sources_win +
                 gypi_paths2.cefclient_sources_win

      # Set /SUBSYSTEM:WINDOWS.
      configs -= [ "//build/config/win:console" ]
      configs += [ "//build/config/win:windowed" ]

      defines += [
        "CEF_USE_ATL",
      ]

      deps += [
        ":cef_sandbox",
        "//build/win:default_exe_manifest",
      ]

      libs = [
        "comctl32.lib",
        "d3d11.lib",
        "imm32.lib",
        "oleacc.lib",
        "rpcrt4.lib",
        "shlwapi.lib",
      ]

      if (target_cpu != "arm64") {
        libs += [
          "opengl32.lib",
          "glu32.lib"
        ]
      }
    }

    if (is_linux) {
      sources += includes_linux +
                 gypi_paths2.shared_sources_linux +
                 gypi_paths2.cefclient_sources_linux

      deps += [
        ":copy_cefclient_files",
        ":copy_cefclient_files_extensions_set_page_color",
      ]

      libs = [
        "X11",
      ]

      if (cef_use_gtk) {
        configs += [
          ":gtk",
          ":gtkglext",
        ]
      }

      if (is_component_build) {
        if (use_allocator=="tcmalloc") {
          # Link to base to initialize tcmalloc allocator shims, otherwise
          # base::allocator::IsAllocatorInitialized check fails
          deps += [ "//base" ]
        }
      } else {
        # Set rpath to find our own libfreetype even in a non-component build.
        configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
      }
    }
  }


  #
  # cefsimple targets.
  #

  executable("cefsimple") {
    sources = includes_common +
              gypi_paths2.includes_wrapper +
              gypi_paths2.cefsimple_sources_common

    deps = [
      ":libcef",
      ":libcef_dll_wrapper",
    ]

    defines = [
      "CEF_USE_SANDBOX",
    ]

    if (is_win) {
      sources += includes_win +
                 gypi_paths2.cefsimple_sources_win

      # Set /SUBSYSTEM:WINDOWS.
      configs -= [ "//build/config/win:console" ]
      configs += [ "//build/config/win:windowed" ]

      deps += [
        ":cef_sandbox",
        "//build/win:default_exe_manifest",
      ]

      libs = [
        "comctl32.lib",
        "shlwapi.lib",
        "rpcrt4.lib",
      ]
    }

    if (is_linux) {
      sources += includes_linux +
                 gypi_paths2.cefsimple_sources_linux

      if (use_x11) {
        libs = [
          "X11",
        ]
      }

      if (!is_component_build) {
        # Set rpath to find our own libfreetype even in a non-component build.
        configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
      }
    }
  }


  #
  # ceftests targets.
  #
  
  if (is_linux) {
    copy("copy_ceftests_files") {
      sources = gypi_paths2.shared_sources_resources
      outputs = [ "${root_out_dir}/ceftests_files/{{source_file_part}}" ]
    }
  }

  executable("ceftests") {
    testonly = true

    sources = includes_common +
              gypi_paths2.includes_wrapper +
              gypi_paths2.shared_sources_browser +
              gypi_paths2.shared_sources_common +
              gypi_paths2.shared_sources_renderer +
              gypi_paths2.ceftests_sources_common +
              gypi_paths2.ceftests_sources_views

    deps = [
      ":libcef",
      ":libcef_dll_wrapper",
      "//testing/gtest",
    ]

    defines = [
      "CEF_USE_SANDBOX",
    ]

    if (is_win) {
      sources += gypi_paths2.shared_sources_win +
                 gypi_paths2.ceftests_sources_win

      deps += [
        ":cef_sandbox",
        "//build/win:default_exe_manifest",
      ]
    }

    if (is_linux) {
      sources += gypi_paths2.shared_sources_linux +
                 gypi_paths2.ceftests_sources_linux

      if (use_x11) {
        libs = [
          "X11",
        ]
      } else {
        if (!use_sysroot) {
          configs += [ ":glib" ]
        }
      }

      deps += [
        ":copy_ceftests_files",
      ]
    }

    if (is_linux && !is_component_build) {
      # Set rpath to find our own libfreetype even in a non-component build.
      configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
    }
  }
}
