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

if (enable_webrtc || !is_android) {
  jingle_includes = exec_script("//build/gypi_to_gn.py",
                                [ rebase_path("jingle.gypi") ],
                                "scope",
                                [ "jingle.gypi" ])

  # GYP version: jingle/jingle.gyp:jingle_glue
  static_library("jingle_glue") {
    sources = jingle_includes.jingle_glue_sources
    public_deps = [
      "//third_party/libjingle",
    ]
    deps = [
      "//base",
      "//base/third_party/dynamic_annotations",
      "//net",
    ]

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

    if (is_nacl) {
      sources -= [
        "glue/chrome_async_socket.cc",
        "glue/proxy_resolving_client_socket.cc",
        "glue/xmpp_client_socket_factory.cc",
      ]
    }
  }

  # A library for sending and receiving peer-issued notifications.
  # GYP version: jingle/jingle.gyp:notifier
  static_library("notifier") {
    sources = [
      "notifier/base/const_communicator.h",
      "notifier/base/gaia_constants.cc",
      "notifier/base/gaia_constants.h",
      "notifier/base/gaia_token_pre_xmpp_auth.cc",
      "notifier/base/gaia_token_pre_xmpp_auth.h",
      "notifier/base/notification_method.cc",
      "notifier/base/notification_method.h",
      "notifier/base/notifier_options.cc",
      "notifier/base/notifier_options.h",
      "notifier/base/notifier_options_util.cc",
      "notifier/base/notifier_options_util.h",
      "notifier/base/server_information.cc",
      "notifier/base/server_information.h",
      "notifier/base/weak_xmpp_client.cc",
      "notifier/base/weak_xmpp_client.h",
      "notifier/base/xmpp_connection.cc",
      "notifier/base/xmpp_connection.h",
      "notifier/communicator/connection_settings.cc",
      "notifier/communicator/connection_settings.h",
      "notifier/communicator/login.cc",
      "notifier/communicator/login.h",
      "notifier/communicator/login_settings.cc",
      "notifier/communicator/login_settings.h",
      "notifier/communicator/single_login_attempt.cc",
      "notifier/communicator/single_login_attempt.h",
      "notifier/listener/non_blocking_push_client.cc",
      "notifier/listener/non_blocking_push_client.h",
      "notifier/listener/notification_constants.cc",
      "notifier/listener/notification_constants.h",
      "notifier/listener/notification_defines.cc",
      "notifier/listener/notification_defines.h",
      "notifier/listener/push_client.cc",
      "notifier/listener/push_client.h",
      "notifier/listener/push_client_observer.cc",
      "notifier/listener/push_client_observer.h",
      "notifier/listener/push_notifications_listen_task.cc",
      "notifier/listener/push_notifications_listen_task.h",
      "notifier/listener/push_notifications_send_update_task.cc",
      "notifier/listener/push_notifications_send_update_task.h",
      "notifier/listener/push_notifications_subscribe_task.cc",
      "notifier/listener/push_notifications_subscribe_task.h",
      "notifier/listener/send_ping_task.cc",
      "notifier/listener/send_ping_task.h",
      "notifier/listener/xml_element_util.cc",
      "notifier/listener/xml_element_util.h",
      "notifier/listener/xmpp_push_client.cc",
      "notifier/listener/xmpp_push_client.h",
    ]
    defines = [ "_CRT_SECURE_NO_WARNINGS" ]

    public_deps = [
      "//third_party/libjingle",
      "//third_party/webrtc/libjingle/xmllite",
      "//third_party/webrtc/libjingle/xmpp",
    ]
    deps = [
      ":jingle_glue",
      "//base",
      "//net",
      "//third_party/expat",
      "//url",
    ]
  }

  # GYP version: jingle/jingle.gyp:notifier_test_util
  static_library("notifier_test_util") {
    testonly = true
    sources = [
      "notifier/base/fake_base_task.cc",
      "notifier/base/fake_base_task.h",
      "notifier/listener/fake_push_client.cc",
      "notifier/listener/fake_push_client.h",
      "notifier/listener/fake_push_client_observer.cc",
      "notifier/listener/fake_push_client_observer.h",
    ]
    public_deps = [
      ":jingle_glue",
      ":notifier",
    ]
    deps = [
      "//base",
      "//testing/gmock",
    ]
  }

  # GYP version: jingle/jingle.gyp:jingle_unittests
  test("jingle_unittests") {
    sources = [
      "glue/chrome_async_socket_unittest.cc",
      "glue/fake_ssl_client_socket_unittest.cc",
      "glue/jingle_glue_mock_objects.cc",
      "glue/jingle_glue_mock_objects.h",
      "glue/logging_unittest.cc",
      "glue/mock_task.cc",
      "glue/mock_task.h",
      "glue/proxy_resolving_client_socket_unittest.cc",
      "glue/task_pump_unittest.cc",
      "glue/thread_wrapper_unittest.cc",
      "notifier/base/weak_xmpp_client_unittest.cc",
      "notifier/base/xmpp_connection_unittest.cc",
      "notifier/communicator/connection_settings_unittest.cc",
      "notifier/communicator/login_settings_unittest.cc",
      "notifier/communicator/single_login_attempt_unittest.cc",
      "notifier/listener/non_blocking_push_client_unittest.cc",
      "notifier/listener/notification_defines_unittest.cc",
      "notifier/listener/push_client_unittest.cc",
      "notifier/listener/push_notifications_send_update_task_unittest.cc",
      "notifier/listener/push_notifications_subscribe_task_unittest.cc",
      "notifier/listener/send_ping_task_unittest.cc",
      "notifier/listener/xml_element_util_unittest.cc",
      "notifier/listener/xmpp_push_client_unittest.cc",
    ]

    if (is_android || is_ios) {
      sources -= [
        # TODO(jrg):
        # EXPECT_DEBUG_DEATH() uses features not enabled.
        # Should we -std=c++0x or -std=gnu++0x?
        "glue/chrome_async_socket_unittest.cc",
        "notifier/base/xmpp_connection_unittest.cc",
      ]
    }

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

    public_deps = [
      "//third_party/libjingle",
      "//third_party/webrtc/libjingle/xmllite",
      "//third_party/webrtc/libjingle/xmpp",
    ]
    deps = [
      ":jingle_glue",
      ":notifier",
      ":notifier_test_util",
      "//base",
      "//base/test:run_all_unittests",
      "//base/test:test_support",
      "//net",
      "//net:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]
  }
} else {
  # !enable_webrtc and is_android
  # Stub targets as Android doesn't use libjingle when webrtc is disabled.
  source_set("jingle_glue") {
  }

  source_set("jingle_glue_test_util") {
  }

  # GYP version: jingle/jingle.gyp:notifier
  static_library("notifier") {
    sources = [
      "notifier/base/gaia_constants.cc",
      "notifier/base/gaia_constants.h",
      "notifier/base/notification_method.cc",
      "notifier/base/notification_method.h",
      "notifier/base/notifier_options.cc",
      "notifier/base/notifier_options.h",
    ]
    deps = [
      "//base",
      "//net",
    ]
  }

  source_set("notifier_test_util") {
  }
}
