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

component("gcm") {
  sources = [
    "base/gcm_util.cc",
    "base/gcm_util.h",
    "base/mcs_message.cc",
    "base/mcs_message.h",
    "base/mcs_util.cc",
    "base/mcs_util.h",
    "base/socket_stream.cc",
    "base/socket_stream.h",
    "engine/account_mapping.cc",
    "engine/account_mapping.h",
    "engine/checkin_request.cc",
    "engine/checkin_request.h",
    "engine/connection_factory.cc",
    "engine/connection_factory.h",
    "engine/connection_factory_impl.cc",
    "engine/connection_factory_impl.h",
    "engine/connection_handler.cc",
    "engine/connection_handler.h",
    "engine/connection_handler_impl.cc",
    "engine/connection_handler_impl.h",
    "engine/gcm_registration_request_handler.cc",
    "engine/gcm_registration_request_handler.h",
    "engine/gcm_store.cc",
    "engine/gcm_store.h",
    "engine/gcm_store_impl.cc",
    "engine/gcm_store_impl.h",
    "engine/gcm_unregistration_request_handler.cc",
    "engine/gcm_unregistration_request_handler.h",
    "engine/gservices_settings.cc",
    "engine/gservices_settings.h",
    "engine/gservices_switches.cc",
    "engine/gservices_switches.h",
    "engine/heartbeat_manager.cc",
    "engine/heartbeat_manager.h",
    "engine/instance_id_delete_token_request_handler.cc",
    "engine/instance_id_delete_token_request_handler.h",
    "engine/instance_id_get_token_request_handler.cc",
    "engine/instance_id_get_token_request_handler.h",
    "engine/mcs_client.cc",
    "engine/mcs_client.h",
    "engine/registration_request.cc",
    "engine/registration_request.h",
    "engine/unregistration_request.cc",
    "engine/unregistration_request.h",
    "monitoring/gcm_stats_recorder.h",
  ]

  defines = [ "GCM_IMPLEMENTATION" ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  public_deps = [
    ":proto",
  ]
  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//net",
    "//third_party/leveldatabase",
    "//url",
  ]
}

proto_library("proto") {
  # This is part of the gcm component.
  visibility = [ ":gcm" ]
  sources = [
    "protocol/android_checkin.proto",
    "protocol/checkin.proto",
    "protocol/mcs.proto",
  ]

  cc_generator_options = "dllexport_decl=GCM_EXPORT:"
  cc_include = "google_apis/gcm/base/gcm_export.h"
  component_build_force_source_set = true
  defines = [ "GCM_IMPLEMENTATION" ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "base/fake_encryptor.cc",
    "base/fake_encryptor.h",
    "engine/fake_connection_factory.cc",
    "engine/fake_connection_factory.h",
    "engine/fake_connection_handler.cc",
    "engine/fake_connection_handler.h",
    "monitoring/fake_gcm_stats_recorder.cc",
    "monitoring/fake_gcm_stats_recorder.h",
  ]

  public_deps = [
    ":gcm",
  ]
  deps = [
    "//base",
    "//net",
    "//testing/gtest",
  ]
}

# A standalone MCS (mobile connection server) client.
if (!is_ios) {
  executable("mcs_probe") {
    testonly = true
    sources = [
      "tools/mcs_probe.cc",
    ]

    deps = [
      ":gcm",
      ":test_support",
      "//base",
      "//build/config/sanitizers:deps",
      "//build/win:default_exe_manifest",
      "//net",
      "//net:test_support",
      "//third_party/protobuf:protobuf_lite",
    ]
  }
}

test("gcm_unit_tests") {
  sources = [
    "base/mcs_message_unittest.cc",
    "base/mcs_util_unittest.cc",
    "base/socket_stream_unittest.cc",
    "engine/account_mapping_unittest.cc",
    "engine/checkin_request_unittest.cc",
    "engine/connection_factory_impl_unittest.cc",
    "engine/connection_handler_impl_unittest.cc",
    "engine/gcm_request_test_base.cc",
    "engine/gcm_request_test_base.h",
    "engine/gcm_store_impl_unittest.cc",
    "engine/gservices_settings_unittest.cc",
    "engine/heartbeat_manager_unittest.cc",
    "engine/mcs_client_unittest.cc",
    "engine/registration_request_unittest.cc",
    "engine/unregistration_request_unittest.cc",
  ]

  deps = [
    ":gcm",
    ":test_support",
    "//base",
    "//base/test:run_all_unittests",
    "//net",
    "//net:test_support",
    "//testing/gtest",
    "//third_party/protobuf:protobuf_lite",
  ]
}
