# Copyright 2014 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/features.gni")
import("//extensions/buildflags/buildflags.gni")
import("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

declare_args() {
  # You can set the variable 'use_official_google_api_keys' to true
  # to use the Google-internal file containing official API keys
  # for Google Chrome even in a developer build.  Setting this
  # variable explicitly to true will cause your build to fail if the
  # internal file is missing.
  #
  # The variable is documented here, but not handled in this file;
  # see //google_apis/determine_use_official_keys.gypi for the
  # implementation.
  #
  # Set the variable to false to not use the internal file, even when
  # it exists in your checkout.
  #
  # Leave it unset or set to "" to have the variable
  # implicitly set to true if you have
  # src/google_apis/internal/google_chrome_api_keys.h in your
  # checkout, and implicitly set to false if not.
  #
  # Note that official builds always behave as if the variable
  # was explicitly set to true, i.e. they always use official keys,
  # and will fail to build if the internal file is missing.
  use_official_google_api_keys = ""

  # Set these to bake the specified API keys and OAuth client
  # IDs/secrets into your build.
  #
  # If you create a build without values baked in, you can instead
  # set environment variables to provide the keys at runtime (see
  # src/google_apis/google_api_keys.h for details).  Features that
  # require server-side APIs may fail to work if no keys are
  # provided.
  #
  # Note that if you are building an official build or if
  # use_official_google_api_keys has been set to trie (explicitly or
  # implicitly), these values will be ignored and the official
  # keys will be used instead.
  google_api_key = ""

  # See google_api_key.
  google_default_client_id = ""

  # See google_api_key.
  google_default_client_secret = ""
}

if (use_official_google_api_keys == "") {
  # Default behavior, check if the key file exists.
  check_internal_result =
      exec_script("build/check_internal.py",
                  [ rebase_path("internal/google_chrome_api_keys.h",
                                root_build_dir) ],
                  "value")
  use_official_google_api_keys = check_internal_result == 1
}

config("key_defines") {
  defines = []

  # TODO(crbug.com/1171510): Refactor so use_official_google_api_keys can be
  # used for Fuchsia.
  if (!is_fuchsia && (is_chrome_branded || use_official_google_api_keys)) {
    defines += [ "USE_OFFICIAL_GOOGLE_API_KEYS=1" ]
  }
  if (google_api_key != "") {
    defines += [ "GOOGLE_API_KEY=\"$google_api_key\"" ]
  }
  if (google_default_client_id != "") {
    defines += [ "GOOGLE_DEFAULT_CLIENT_ID=\"$google_default_client_id\"" ]
  }
  if (google_default_client_secret != "") {
    defines +=
        [ "GOOGLE_DEFAULT_CLIENT_SECRET=\"$google_default_client_secret\"" ]
  }
}

# Variables:
#   deps: Extra dependencies
template("google_apis_tmpl") {
  source_set(target_name) {
    sources = [
      "gaia/core_account_id.cc",
      "gaia/core_account_id.h",
      "gaia/gaia_access_token_fetcher.cc",
      "gaia/gaia_access_token_fetcher.h",
      "gaia/gaia_auth_consumer.cc",
      "gaia/gaia_auth_consumer.h",
      "gaia/gaia_auth_fetcher.cc",
      "gaia/gaia_auth_fetcher.h",
      "gaia/gaia_auth_util.cc",
      "gaia/gaia_auth_util.h",
      "gaia/gaia_config.cc",
      "gaia/gaia_config.h",
      "gaia/gaia_constants.cc",
      "gaia/gaia_constants.h",
      "gaia/gaia_oauth_client.cc",
      "gaia/gaia_oauth_client.h",
      "gaia/gaia_switches.cc",
      "gaia/gaia_switches.h",
      "gaia/gaia_urls.cc",
      "gaia/gaia_urls.h",
      "gaia/google_service_auth_error.cc",
      "gaia/google_service_auth_error.h",
      "gaia/oauth2_access_token_consumer.cc",
      "gaia/oauth2_access_token_consumer.h",
      "gaia/oauth2_access_token_fetcher.cc",
      "gaia/oauth2_access_token_fetcher.h",
      "gaia/oauth2_access_token_fetcher_immediate_error.cc",
      "gaia/oauth2_access_token_fetcher_immediate_error.h",
      "gaia/oauth2_access_token_fetcher_impl.cc",
      "gaia/oauth2_access_token_fetcher_impl.h",
      "gaia/oauth2_access_token_manager.cc",
      "gaia/oauth2_access_token_manager.h",
      "gaia/oauth2_api_call_flow.cc",
      "gaia/oauth2_api_call_flow.h",
      "gaia/oauth2_id_token_decoder.cc",
      "gaia/oauth2_id_token_decoder.h",
      "gaia/oauth2_mint_token_flow.cc",
      "gaia/oauth2_mint_token_flow.h",
      "gaia/oauth_multilogin_result.cc",
      "gaia/oauth_multilogin_result.h",
      "gaia/oauth_request_signer.cc",
      "gaia/oauth_request_signer.h",
      "google_api_keys.cc",
      "google_api_keys.h",
    ]

    configs += [
      ":key_defines",
    ]

    deps = [
      ":oauth2_mint_token_consent_result_proto",
      "//base",
      "//base/third_party/dynamic_annotations",
      "//build:branding_buildflags",
      "//build:chromeos_buildflags",
      "//crypto",
      "//mojo/public/cpp/bindings:struct_traits",
      "//services/network/public/cpp",
    ]

    if (is_chrome_branded || use_official_google_api_keys) {
      deps += [ "internal:generate_metrics_key_header" ]
    }

    if (defined(invoker.deps)) {
      deps += invoker.deps
    }

    if (is_apple) {
      sources += [
        "google_api_keys_mac.h",
        "google_api_keys_mac.mm",
      ]

      frameworks = [ "Foundation.framework" ]
    }
  }
}

google_apis_tmpl("google_apis") {
  deps = [
    "//net",
    "//services/network/public/cpp",
    "//services/network/public/mojom",
  ]
}

proto_library("oauth2_mint_token_consent_result_proto") {
  sources = [ "gaia/oauth2_mint_token_consent_result.proto" ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "gaia/core_account_id_for_testing.cc",
    "gaia/fake_gaia.cc",
    "gaia/fake_gaia.h",
    "gaia/fake_oauth2_access_token_manager.cc",
    "gaia/fake_oauth2_access_token_manager.h",
    "gaia/oauth2_access_token_manager_test_util.cc",
    "gaia/oauth2_access_token_manager_test_util.h",
  ]

  public_deps = [
    ":google_apis",
    "//base",
    "//base/test:test_support",
    "//net:test_support",
    "//services/network:network_service",
    "//services/network:test_support",
    "//services/network/public/cpp",
  ]
}

source_set("run_all_unittests") {
  testonly = true
  sources = [ "run_all_unittests.cc" ]

  deps = [
    "//base/test:test_support",
    "//mojo/core/embedder",
  ]
}

test("google_apis_unittests") {
  sources = [
    "gaia/gaia_auth_fetcher_unittest.cc",
    "gaia/gaia_auth_util_unittest.cc",
    "gaia/gaia_config_unittest.cc",
    "gaia/gaia_oauth_client_unittest.cc",
    "gaia/gaia_urls_unittest.cc",
    "gaia/google_service_auth_error_unittest.cc",
    "gaia/oauth2_access_token_fetcher_impl_unittest.cc",
    "gaia/oauth2_access_token_manager_unittest.cc",
    "gaia/oauth2_api_call_flow_unittest.cc",
    "gaia/oauth2_id_token_decoder_unittest.cc",
    "gaia/oauth2_mint_token_flow_unittest.cc",
    "gaia/oauth_multilogin_result_unittest.cc",
    "gaia/oauth_request_signer_unittest.cc",
    "google_api_keys_unittest.cc",
    "google_api_keys_unittest.h",
  ]

  configs += [ ":key_defines" ]

  deps = [
    ":google_apis",
    ":oauth2_mint_token_consent_result_proto",
    ":run_all_unittests",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//build:branding_buildflags",
    "//build:chromeos_buildflags",
    "//google_apis/calendar:calendar_unittests",
    "//google_apis/common:common_unittests",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_ios) {
    deps += [ ":google_apis_unittest_bundle_data" ]
  } else {
    data = [ "test/" ]
  }

  if (is_android) {
    deps += [ "//net/android:net_java" ]
  }

  if (is_fuchsia) {
    additional_manifest_fragments =
        [ "//build/config/fuchsia/test/network_capabilities.test-cmx" ]
  }

  if (enable_extensions) {
    deps += [ "//google_apis/drive:drive_unittests" ]
  }

  if (is_apple) {
    sources += [ "google_api_keys_mac_unittest.mm" ]

    deps += [ "//third_party/ocmock" ]
  }
}

bundle_data("google_apis_unittest_bundle_data") {
  testonly = true
  sources = [
    "test/data/calendar/events.json",
    "test/data/calendar/invalid_events.json",
    "test/data/gaia/all_base_urls.json",
    "test/data/gaia/all_urls.json",
    "test/data/gaia/api_keys.json",
    "test/data/gaia/bad_url.json",
    "test/data/gaia/bad_url_key.json",
    "test/data/gaia/bad_urls_key.json",
    "test/data/gaia/not_a_json.txt",
    "test/data/gaia/one_base_url.json",
    "test/data/gaia/one_url.json",
  ]
  outputs = [ "{{bundle_resources_dir}}/" +
              "{{source_root_relative_dir}}/{{source_file_part}}" ]
}
