# 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/features.gni")
import("//extensions/features/features.gni")
import("//testing/test.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 = []
  if (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/account_tracker.cc",
      "gaia/account_tracker.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_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/identity_provider.cc",
      "gaia/identity_provider.h",
      "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_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/oauth2_token_service.cc",
      "gaia/oauth2_token_service.h",
      "gaia/oauth2_token_service_delegate.cc",
      "gaia/oauth2_token_service_delegate.h",
      "gaia/oauth2_token_service_request.cc",
      "gaia/oauth2_token_service_request.h",
      "gaia/oauth_request_signer.cc",
      "gaia/oauth_request_signer.h",
      "gaia/ubertoken_fetcher.cc",
      "gaia/ubertoken_fetcher.h",
      "google_api_keys.cc",
      "google_api_keys.h",
    ]

    configs += [
      ":key_defines",
      "//build/config/compiler:no_size_t_to_int_warning",
    ]

    deps = [
      "//base",
      "//base/third_party/dynamic_annotations",
      "//crypto",
      "//mojo/public/cpp/bindings:struct_traits",
    ]

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

    if (enable_extensions) {
      sources += [
        "drive/auth_service.cc",
        "drive/auth_service.h",
        "drive/auth_service_interface.h",
        "drive/auth_service_observer.h",
        "drive/base_requests.cc",
        "drive/base_requests.h",
        "drive/drive_api_error_codes.cc",
        "drive/drive_api_error_codes.h",
        "drive/drive_api_parser.cc",
        "drive/drive_api_parser.h",
        "drive/drive_api_requests.cc",
        "drive/drive_api_requests.h",
        "drive/drive_api_url_generator.cc",
        "drive/drive_api_url_generator.h",
        "drive/drive_common_callbacks.h",
        "drive/drive_switches.cc",
        "drive/drive_switches.h",
        "drive/files_list_request_runner.cc",
        "drive/files_list_request_runner.h",
        "drive/request_sender.cc",
        "drive/request_sender.h",
        "drive/request_util.cc",
        "drive/request_util.h",
        "drive/task_util.cc",
        "drive/task_util.h",
        "drive/time_util.cc",
        "drive/time_util.h",
      ]
    }

    if (is_mac || is_ios) {
      set_sources_assignment_filter([])
      sources += [
        "google_api_keys_mac.h",
        "google_api_keys_mac.mm",
      ]
      set_sources_assignment_filter(sources_assignment_filter)

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

google_apis_tmpl("google_apis") {
  deps = [
    "//net",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "gaia/fake_gaia.cc",
    "gaia/fake_gaia.h",
    "gaia/fake_identity_provider.cc",
    "gaia/fake_identity_provider.h",
    "gaia/fake_oauth2_token_service.cc",
    "gaia/fake_oauth2_token_service.h",
    "gaia/fake_oauth2_token_service_delegate.cc",
    "gaia/fake_oauth2_token_service_delegate.h",
    "gaia/mock_url_fetcher_factory.h",
    "gaia/oauth2_token_service_test_util.cc",
    "gaia/oauth2_token_service_test_util.h",
  ]

  public_deps = [
    ":google_apis",
    "//base",
    "//base/test:test_support",
    "//net:test_support",
  ]

  if (enable_extensions) {
    sources += [
      "drive/dummy_auth_service.cc",
      "drive/dummy_auth_service.h",
      "drive/test_util.cc",
      "drive/test_util.h",
    ]
  }
}

test("google_apis_unittests") {
  sources = [
    "gaia/account_tracker_unittest.cc",
    "gaia/gaia_auth_fetcher_unittest.cc",
    "gaia/gaia_auth_util_unittest.cc",
    "gaia/gaia_oauth_client_unittest.cc",
    "gaia/google_service_auth_error_unittest.cc",
    "gaia/oauth2_access_token_fetcher_impl_unittest.cc",
    "gaia/oauth2_api_call_flow_unittest.cc",
    "gaia/oauth2_id_token_decoder_unittest.cc",
    "gaia/oauth2_mint_token_flow_unittest.cc",
    "gaia/oauth2_token_service_request_unittest.cc",
    "gaia/oauth2_token_service_unittest.cc",
    "gaia/oauth_request_signer_unittest.cc",
    "gaia/ubertoken_fetcher_unittest.cc",
    "google_api_keys_unittest.cc",
    "google_api_keys_unittest.h",
  ]

  data = [
    "test/",
  ]

  configs += [ ":key_defines" ]

  deps = [
    ":google_apis",
    ":test_support",
    "//base",
    "//base/test:run_all_unittests",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (enable_extensions) {
    sources += [
      "drive/base_requests_server_unittest.cc",
      "drive/base_requests_unittest.cc",
      "drive/drive_api_parser_unittest.cc",
      "drive/drive_api_requests_unittest.cc",
      "drive/drive_api_url_generator_unittest.cc",
      "drive/files_list_request_runner_unittest.cc",
      "drive/request_sender_unittest.cc",
      "drive/request_util_unittest.cc",
      "drive/time_util_unittest.cc",
    ]
  }

  if (is_mac || is_ios) {
    set_sources_assignment_filter([])
    sources += [ "google_api_keys_mac_unittest.mm" ]
    set_sources_assignment_filter(sources_assignment_filter)

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