# Copyright (c) 2023 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../../webrtc.gni")

rtc_library("force_test_environment") {
  visibility = webrtc_default_visibility
  sources = [
    "force_test_environment.cc",
    "force_test_environment.h",
  ]
}

rtc_source_set("environment") {
  visibility = [ "*" ]
  sources = [ "environment.h" ]
  deps = [
    "..:field_trials_view",
    "..:refcountedbase",
    "..:scoped_refptr",
    "../../rtc_base/system:rtc_export",
    "../../system_wrappers",
    "../rtc_event_log",
    "../task_queue",
    "//third_party/abseil-cpp/absl/base:nullability",
  ]
}

rtc_library("deprecated_global_field_trials") {
  visibility = [
    ":environment_factory",
    "../../sdk:peerconnectionfactory_base_objc",
    "../../sdk/android:peerconnection_jni",
  ]
  allow_poison = [ "environment_construction" ]
  sources = [
    "deprecated_global_field_trials.cc",
    "deprecated_global_field_trials.h",
  ]
  deps = [
    "..:field_trials_registry",
    "../../rtc_base:checks",
    "../../rtc_base:logging",
    "//third_party/abseil-cpp/absl/strings:string_view",
  ]
}

rtc_library("environment_factory") {
  visibility = [ "*" ]
  poisonous = [ "environment_construction" ]
  sources = [
    "environment_factory.cc",
    "environment_factory.h",
  ]
  deps = [
    ":deprecated_global_field_trials",
    ":environment",
    ":force_test_environment",
    "..:field_trials_view",
    "..:make_ref_counted",
    "..:refcountedbase",
    "..:scoped_refptr",
    "../../rtc_base:checks",
    "../../rtc_base/system:rtc_export",
    "../../system_wrappers",
    "../rtc_event_log",
    "../task_queue",
    "../task_queue:default_task_queue_factory",
    "//third_party/abseil-cpp/absl/base:nullability",
  ]
}

if (rtc_include_tests) {
  rtc_cc_test("environment_unittests") {
    sources = [ "environment_unittest.cc" ]
    deps = [
      ":environment",
      ":environment_factory",
      ":force_test_environment",
      "..:field_trials_view",
      "../../system_wrappers",
      "../../test:create_test_environment",
      "../../test:test_support",
      "../rtc_event_log",
      "../task_queue",
      "../units:timestamp",
      "//third_party/abseil-cpp/absl/functional:any_invocable",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }
}
