# 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.

# GYP version: components/gcm_driver.gypi:gcm_driver
static_library("gcm_driver") {
  sources = [
    "android/component_jni_registrar.cc",
    "android/component_jni_registrar.h",
    "default_gcm_app_handler.cc",
    "default_gcm_app_handler.h",
    "gcm_activity.cc",
    "gcm_activity.h",
    "gcm_account_mapper.cc",
    "gcm_account_mapper.h",
    "gcm_app_handler.cc",
    "gcm_app_handler.h",
    "gcm_backoff_policy.cc",
    "gcm_backoff_policy.h",
    "gcm_channel_status_request.cc",
    "gcm_channel_status_request.h",
    "gcm_channel_status_syncer.cc",
    "gcm_channel_status_syncer.h",
    "gcm_client.cc",
    "gcm_client.h",
    "gcm_client_factory.cc",
    "gcm_client_factory.h",
    "gcm_client_impl.cc",
    "gcm_client_impl.h",
    "gcm_connection_observer.cc",
    "gcm_connection_observer.h",
    "gcm_delayed_task_controller.cc",
    "gcm_delayed_task_controller.h",
    "gcm_driver.cc",
    "gcm_driver.h",
    "gcm_driver_android.cc",
    "gcm_driver_android.h",
    "gcm_driver_desktop.cc",
    "gcm_driver_desktop.h",
    "gcm_stats_recorder_impl.cc",
    "gcm_stats_recorder_impl.h",
    "system_encryptor.cc",
    "system_encryptor.h",
  ]

  deps = [
    "//base",
    "//components/os_crypt",
    "//google_apis/gcm",
    "//net",
    "//sync/protocol",
  ]

  if (is_android) {
    sources -= [
      "gcm_account_mapper.cc",
      "gcm_account_mapper.h",
      "gcm_channel_status_request.cc",
      "gcm_channel_status_request.h",
      "gcm_channel_status_syncer.cc",
      "gcm_channel_status_syncer.h",
      "gcm_client_factory.cc",
      "gcm_client_factory.h",
      "gcm_client_impl.cc",
      "gcm_client_impl.h",
      "gcm_delayed_task_controller.cc",
      "gcm_delayed_task_controller.h",
      "gcm_driver_desktop.cc",
      "gcm_driver_desktop.h",
      "gcm_stats_recorder_impl.cc",
      "gcm_stats_recorder_impl.h",
    ]
    deps -= [
      "//components/gcm_driver/proto",
      "//google_apis/gcm",
    ]
    deps += [ ":jni_headers" ]
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "fake_gcm_app_handler.cc",
    "fake_gcm_app_handler.h",
    "fake_gcm_client.cc",
    "fake_gcm_client.h",
    "fake_gcm_client_factory.cc",
    "fake_gcm_client_factory.h",
    "fake_gcm_driver.cc",
    "fake_gcm_driver.h",
  ]

  deps = [
    ":gcm_driver",
    "//base",
    "//google_apis/gcm",
    "//testing/gtest",
  ]

  if (is_android) {
    sources -= [
      "fake_gcm_client.cc",
      "fake_gcm_client.h",
      "fake_gcm_client_factory.cc",
      "fake_gcm_client_factory.h",
    ]
    deps -= [ "//google_apis/gcm" ]
  }
}

if (is_android) {
  import("//build/config/android/rules.gni")

  # GYP version: components/gcm_driver.gypi:gcm_driver_jni_headers
  generate_jni("jni_headers") {
    sources = [
      "android/java/src/org/chromium/components/gcm_driver/GCMDriver.java",
    ]
    jni_package = "components/gcm_driver"
  }
}
