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

import("//build/config/chrome_build.gni")
import("//build/config/chromecast_build.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/dcheck_always_on.gni")
import("//build/config/features.gni")
import("//components/feed/features.gni")
import("//components/safe_browsing/buildflags.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
import("//media/media_options.gni")
import("//net/features.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//printing/buildflags/buildflags.gni")
import("//ui/base/ui_features.gni")
import("//ui/webui/webui_features.gni")

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

# Please keep features in alphabetical order.
declare_args() {
  # Platforms where the BuiltinCertificateVerifierEnabled enterprise policy is
  # supported. This must must match the supported_on list of the policy in
  # policy_templates.json and be a subset of the
  # builtin_cert_verifier_feature_supported platforms.
  # See crbug.com/410574.  This can be removed when the builtin verifier is
  # unconditionally enabled on all platforms.
  builtin_cert_verifier_policy_supported = is_mac

  # Enables support for background apps.
  enable_background_contents = !is_android && !is_chromecast
  enable_background_mode = !is_android && !is_chromecast && !is_chromeos_ash

  # Enable the printing system dialog for platforms that support printing
  # and have a system dialog.
  enable_basic_print_dialog = enable_basic_printing && !is_chromeos_ash

  # Enables the Click to Call feature on desktop platforms.
  enable_click_to_call = is_mac || is_win || is_linux || is_chromeos

  # Hangout services is an extension that adds extra features to Hangouts.
  # It is enableable separately to facilitate testing.
  enable_hangout_services_extension = is_chrome_branded

  # Enables usage of the system-provided notification center.
  enable_native_notifications =
      is_android || is_mac || is_win ||
      ((is_linux || is_chromeos_lacros) && use_dbus) || is_chromeos

  enable_one_click_signin =
      is_win || is_mac || ((is_linux || is_chromeos_lacros) && !is_chromecast)

  enable_service_discovery = (enable_mdns && !is_android) || is_mac

  # Enables use of the session service, which is enabled by default.
  # Android stores them separately on the Java side.
  enable_session_service = !is_android && !is_chromecast

  enable_supervised_users = is_chromeos_ash || is_android

  # Indicates if Wayland display server support is enabled.
  enable_wayland_server = is_chromeos_ash

  # optimize_webui was moved to ui/base/ui_features.gni
}

# Use brlapi from brltty for braille display support.
use_brlapi = is_chromeos_ash

# Every grit target in //chrome should apply these defines so that the
# proper build flags can be set.
chrome_grit_defines = [
  "enable_arcore=$enable_arcore",
  "enable_background_mode=$enable_background_mode",
  "enable_background_contents=$enable_background_contents",
  "enable_extensions=$enable_extensions",
  "enable_hangout_services_extension=$enable_hangout_services_extension",
  "enable_plugins=$enable_plugins",
  "enable_print_preview=$enable_print_preview",
  "enable_printing=$enable_basic_printing",
  "enable_service_discovery=$enable_service_discovery",
  "enable_supervised_users=$enable_supervised_users",
  "enable_vr=$enable_vr",
  "enable_webui_tab_strip=$enable_webui_tab_strip",
  "safe_browsing_mode=$safe_browsing_mode",
  "optimize_webui=$optimize_webui",
  "enable_feed_v2=$enable_feed_v2",
]
