# 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("//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_android && !is_ios) || 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_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",
  "safe_browsing_mode=$safe_browsing_mode",
  "optimize_webui=$optimize_webui",
]
