# 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/dcheck_always_on.gni")
import("//build/config/features.gni")
import("//build/config/linux/gtk/gtk.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() {
  enable_app_list = is_chromeos

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

  # 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

  # 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_desktop_linux && use_dbus) || is_chromeos

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

  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

  # Enables embedding of the simple_browser service, a lightweight browser
  # application which consumes the Content Service. Useful primarily for
  # developer testing.
  enable_simple_browser_service_in_process =
      (use_aura || is_mac) && (is_debug || dcheck_always_on) && !is_chromecast
  enable_simple_browser_service_out_of_process =
      is_chromeos && (is_debug || dcheck_always_on)

  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_webui was moved to ui/base/ui_features.gni
}

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

# 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_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_vr=$enable_vr",
  "mac_views_browser=$mac_views_browser",
  "safe_browsing_mode=$safe_browsing_mode",
  "optimize_webui=$optimize_webui",
]
