# Copyright 2016 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/ios/ios_sdk.gni")
import("//build/config/mac/symbols.gni")

declare_args() {
  # Enable widget extensions.
  ios_enable_content_widget_extension = true
  ios_enable_search_widget_extension = true

  # Enable share extension.
  ios_enable_share_extension = true

  # Value of the encryption export compliance code. See "Cryptography and
  # U.S. Export Compliance" in "Submitting the App to App Review" in the
  # Apple developer documentation (https://goo.gl/yv1xEF).
  ios_encryption_export_compliance_code = ""

  # List of plist templates to merge when generating chrome Info.plist.
  ios_chrome_info_plist_additions = []

  # List of plist templates to merge when generating chrome entitlements.
  ios_chrome_entitlements_additions = []

  # List of plist templates to merge when generating EarlGrey tests
  # entitlements.
  ios_egtests_entitlements_additions = []

  # Overridable list of dependencies that are forbidden for
  # //ios/chrome/app:chrome target.
  ios_chrome_extra_assert_no_deps = []
}

# Configure whether breakpad support is enabled.
breakpad_enabled = is_official_build && is_chrome_branded

if (breakpad_enabled) {
  breakpad_enabled_as_int = 1
  is_official_release = enable_dsyms && !use_ios_simulator &&
                        current_toolchain == default_toolchain
} else {
  breakpad_enabled_as_int = 0
  is_official_release = false
}

chromium_bundle_id = "chrome.ios.herebedragons"
chromium_handoff_id = "$ios_app_bundle_id_prefix.chrome.handoff"

if (is_chrome_branded) {
  chromium_short_name = "Chrome"
  url_channel_scheme = "googlechrome-dev"
  url_secure_scheme = "googlechromes"
  url_ssoauth_scheme = "$ios_app_bundle_id_prefix.sso.chrome.stable"
  url_unsecure_scheme = "googlechrome"
  url_x_callback_scheme = "googlechrome-x-callback"
} else {
  chromium_short_name = "Chromium"
  url_channel_scheme = "chromium-dev"
  url_secure_scheme = "chromiums"
  url_ssoauth_scheme = "$ios_app_bundle_id_prefix.sso.chromium"
  url_unsecure_scheme = "chromium"
  url_x_callback_scheme = "chromium-x-callback"
}
