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

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

static_library("variations") {
  sources = [
    "active_field_trials.cc",
    "active_field_trials.h",
    "android/component_jni_registrar.cc",
    "android/component_jni_registrar.h",
    "android/variations_associated_data_android.cc",
    "android/variations_associated_data_android.h",
    "android/variations_seed_bridge.cc",
    "android/variations_seed_bridge.h",
    "caching_permuted_entropy_provider.cc",
    "caching_permuted_entropy_provider.h",
    "child_process_field_trial_syncer.cc",
    "child_process_field_trial_syncer.h",
    "entropy_provider.cc",
    "entropy_provider.h",
    "experiment_labels.cc",
    "experiment_labels.h",
    "metrics_util.cc",
    "metrics_util.h",
    "pref_names.cc",
    "pref_names.h",
    "processed_study.cc",
    "processed_study.h",
    "proto/client_variations.proto",
    "proto/permuted_entropy_cache.proto",
    "proto/study.proto",
    "proto/variations_seed.proto",
    "study_filtering.cc",
    "study_filtering.h",
    "synthetic_trials.cc",
    "synthetic_trials.h",
    "variations_associated_data.cc",
    "variations_associated_data.h",
    "variations_experiment_util.cc",
    "variations_experiment_util.h",
    "variations_http_header_provider.cc",
    "variations_http_header_provider.h",
    "variations_request_scheduler.cc",
    "variations_request_scheduler.h",
    "variations_seed_processor.cc",
    "variations_seed_processor.h",
    "variations_seed_simulator.cc",
    "variations_seed_simulator.h",
    "variations_seed_store.cc",
    "variations_seed_store.h",
    "variations_switches.cc",
    "variations_switches.h",
    "variations_url_constants.cc",
    "variations_url_constants.h",
    "variations_util.cc",
    "variations_util.h",
  ]

  if (is_android || is_ios) {
    sources += [
      "variations_request_scheduler_mobile.cc",
      "variations_request_scheduler_mobile.h",
    ]
  }

  deps = [
    "proto",
    "//base",
    "//components/crash/core/common",
    "//components/prefs",
    "//crypto",
    "//third_party/mt19937ar",
    "//third_party/protobuf:protobuf_lite",
    "//third_party/zlib:compression_utils",
  ]

  if (is_android) {
    deps += [ ":jni" ]
  }
}

if (is_android) {
  generate_jni("jni") {
    sources = [
      "android/java/src/org/chromium/components/variations/VariationsAssociatedData.java",
      "android/java/src/org/chromium/components/variations/firstrun/VariationsSeedBridge.java",
    ]
    jni_package = "variations"
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "variations_params_manager.cc",
    "variations_params_manager.h",
  ]

  public_deps = [
    ":variations",
  ]

  deps = [
    "//base/test:test_support",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "active_field_trials_unittest.cc",
    "caching_permuted_entropy_provider_unittest.cc",
    "child_process_field_trial_syncer_unittest.cc",
    "entropy_provider_unittest.cc",
    "experiment_labels_unittest.cc",
    "metrics_util_unittest.cc",
    "net/variations_http_headers_unittest.cc",
    "study_filtering_unittest.cc",
    "variations_associated_data_unittest.cc",
    "variations_http_header_provider_unittest.cc",
    "variations_request_scheduler_unittest.cc",
    "variations_seed_processor_unittest.cc",
    "variations_seed_simulator_unittest.cc",
    "variations_seed_store_unittest.cc",
  ]

  if (is_android || is_ios) {
    sources += [ "variations_request_scheduler_mobile_unittest.cc" ]
  }

  deps = [
    ":variations",
    "net",
    "proto",
    "//base/test:test_support",
    "//components/prefs:test_support",
    "//components/variations/field_trial_config:unit_tests",
    "//testing/gtest",
    "//third_party/zlib:compression_utils",
  ]
}
