# 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")

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
    deps = [
      "//base",
      "//base/third_party/dynamic_annotations",
      "//net",
      # '../third_party/libjingle/libjingle.gyp:libjingle',  # TODO(GYP)
    ]
    # 'export_dependent_settings': [
    #   '../third_party/libjingle/libjingle.gyp:libjingle',
    # ],

    # TODO(GYP): Replace this with a proper dependency on libjingle.
    direct_dependent_configs = [ "//content:libjingle_stub_config", ]
  }

  # 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.h",
      "notifier/base/notification_method.cc",
      "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_observer.cc",
      "notifier/listener/push_client_observer.h",
      "notifier/listener/push_client.cc",
      "notifier/listener/push_client.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",
    ]
    deps = [
      "//base",
      "//net",
      "//third_party/expat",
      "//url",
      ":jingle_glue",
      # '../third_party/libjingle/libjingle.gyp:libjingle',  # TODO(GYP)
    ]
    # 'export_dependent_settings': [
    #   '../third_party/libjingle/libjingle.gyp:libjingle',
    # ],
    # TODO(GYP): Replace this with a proper dependency on libjingle.
    direct_dependent_configs = [ "//content:libjingle_stub_config", ]
  }

  # GYP version: jingle/jingle.gyp:notifier_test_util
  static_library("notifier_test_util") {
    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",
    ]
    deps = [
      ":notifier",
      "//base",
      "//testing/gmock",
    ]
  }

  # GYP version: jingle/jingle.gyp:jingle_unittests
  # TODO(GYP): Convert to executable when its dependencies are linkable.
  source_set("jingle_unittests") {
    sources = [
      "glue/channel_socket_adapter_unittest.cc",
      "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/pseudotcp_adapter_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) {
      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",
      ]
    }

    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",
      # '../third_party/libjingle/libjingle.gyp:libjingle',  # TODO(GYP)
    ]
    # 'export_dependent_settings': [
    #   '../third_party/libjingle/libjingle.gyp:libjingle',
    # ],
    # TODO(GYP): Replace this with a proper dependency on libjingle.
    direct_dependent_configs = [ "//content:libjingle_stub_config", ]
  }
} 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.h",
      "notifier/base/notification_method.cc",
      "notifier/base/notifier_options.cc",
      "notifier/base/notifier_options.h",
    ]
    deps = [
      "//base",
      "//net"
    ]
  }

  source_set("notifier_test_util") { }
}
