# 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/compiler/compiler.gni")
import("//build/config/features.gni")
import("//build/config/linux/gtk/gtk.gni")
import("//device/vr/features/features.gni")
import("//extensions/features/features.gni")
import("//media/media_options.gni")
import("//net/features.gni")
import("//ppapi/features/features.gni")
import("//printing/features/features.gni")
import("//ui/base/ui_features.gni")

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

# Please keep features in alphabetical order.
declare_args() {
  enable_app_list = is_chromeos

  # Enables support for background apps.
  enable_background = !is_android && !is_chromecast

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

  enable_captive_portal_detection = !is_android && !is_chromecast

  # Google Now is disabled to prepare for its removal.
  # http://crbug.com/539674
  enable_google_now = false

  # 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

  # 'Ok Google' hotwording is disabled to prepare for its removal.
  # http://crbug.com/755579
  enable_hotwording = false

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

  # Whether we should draw the minimize, maximize/restore, and close
  # buttons using the system theme.  Only used on Linux with GTK3.
  enable_native_window_nav_buttons =
      use_aura && !use_ozone && is_desktop_linux && use_gtk3

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

  # Indicates if Exo should use ozone gamepad. If this is false, exo will use
  # /device/gamepad as backend.
  enable_exo_ozone_gamepad = use_ozone

  # Set to true to bundle all the mash related mojo services into chrome.
  # Specify --mash to chrome to have chrome start the mash environment.
  enable_package_mash_services = is_chromeos

  enable_service_discovery = enable_mdns || 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_chromecast

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

  # Indicates if the build is using PGO.
  pgo_build = chrome_pgo_phase > 0

  # Optimize parts of Chrome's UI written with web technologies (HTML/CSS/JS)
  # for runtime performance purposes. This does more work at compile time for
  # speed benefits at runtime (so we skip in debug builds). TODO(dbeam): rename
  # this flag "optimize_web_uis" because we run more than vulcanize these days.
  use_vulcanize = !is_debug
}

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

_enable_printing = enable_basic_printing || enable_print_preview

# Every grit target in //chrome should apply these defines so that the
# proper build flags can be set.
chrome_grit_defines = [
  "enable_app_list=$enable_app_list",
  "enable_background=$enable_background",
  "enable_extensions=$enable_extensions",
  "enable_google_now=$enable_google_now",
  "enable_hangout_services_extension=$enable_hangout_services_extension",
  "enable_hotwording=$enable_hotwording",
  "enable_plugins=$enable_plugins",
  "enable_print_preview=$enable_print_preview",
  "enable_printing=$_enable_printing",
  "enable_service_discovery=$enable_service_discovery",
  "enable_webrtc=$enable_webrtc",
  "enable_vr=$enable_vr",
  "mac_views_browser=$mac_views_browser",
  "safe_browsing_mode=$safe_browsing_mode",
  "use_vulcanize=$use_vulcanize",
]
