WebRTC-DeprecateGlobalFieldTrialString/Enabled/ - part 12/inf

rename WebRtcKeyValueConfig to FieldTrialsView

Bug: webrtc:10335
Change-Id: If725bd498c4c3daf144bee638230fa089fdde833
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/256965
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36365}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index b736f93..c3f3051 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -171,6 +171,7 @@
     ":audio_options_api",
     ":callfactory_api",
     ":fec_controller_api",
+    ":field_trials_view",
     ":frame_transformer_interface",
     ":libjingle_logging_api",
     ":media_stream_interface",
@@ -200,7 +201,6 @@
     "transport:enums",
     "transport:network_control",
     "transport:sctp_transport_factory_interface",
-    "transport:webrtc_key_value_config",
     "transport/rtp:rtp_source",
     "units:data_rate",
     "units:timestamp",
@@ -1224,9 +1224,15 @@
   }
 }
 
+rtc_source_set("field_trials_view") {
+  visibility = [ "*" ]
+  sources = [ "field_trials_view.h" ]
+  deps = [ "../rtc_base/system:rtc_export" ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+}
+
 rtc_source_set("webrtc_key_value_config") {
   visibility = [ "*" ]
   sources = [ "webrtc_key_value_config.h" ]
-  deps = [ "../rtc_base/system:rtc_export" ]
-  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+  deps = [ ":field_trials_view" ]
 }
diff --git a/api/audio_codecs/BUILD.gn b/api/audio_codecs/BUILD.gn
index 3c84af8..4fd30ce 100644
--- a/api/audio_codecs/BUILD.gn
+++ b/api/audio_codecs/BUILD.gn
@@ -32,7 +32,7 @@
     "..:array_view",
     "..:bitrate_allocation",
     "..:scoped_refptr",
-    "../../api:webrtc_key_value_config",
+    "../../api:field_trials_view",
     "../../rtc_base:checks",
     "../../rtc_base:rtc_base_approved",
     "../../rtc_base:sanitizer",
diff --git a/api/audio_codecs/L16/BUILD.gn b/api/audio_codecs/L16/BUILD.gn
index 9e4a0f1..b35e67b 100644
--- a/api/audio_codecs/L16/BUILD.gn
+++ b/api/audio_codecs/L16/BUILD.gn
@@ -21,7 +21,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:pcm16b",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base:safe_minmax",
@@ -42,7 +42,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:pcm16b",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/L16/audio_decoder_L16.cc b/api/audio_codecs/L16/audio_decoder_L16.cc
index 874a8a5..a03abe2 100644
--- a/api/audio_codecs/L16/audio_decoder_L16.cc
+++ b/api/audio_codecs/L16/audio_decoder_L16.cc
@@ -38,7 +38,7 @@
 std::unique_ptr<AudioDecoder> AudioDecoderL16::MakeAudioDecoder(
     const Config& config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   if (!config.IsOk()) {
     return nullptr;
   }
diff --git a/api/audio_codecs/L16/audio_decoder_L16.h b/api/audio_codecs/L16/audio_decoder_L16.h
index ade8f98..5a01b7d 100644
--- a/api/audio_codecs/L16/audio_decoder_L16.h
+++ b/api/audio_codecs/L16/audio_decoder_L16.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -41,7 +41,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const Config& config,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/L16/audio_encoder_L16.cc b/api/audio_codecs/L16/audio_encoder_L16.cc
index 3994f5c..20259b9 100644
--- a/api/audio_codecs/L16/audio_encoder_L16.cc
+++ b/api/audio_codecs/L16/audio_encoder_L16.cc
@@ -60,7 +60,7 @@
     const AudioEncoderL16::Config& config,
     int payload_type,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   AudioEncoderPcm16B::Config c;
   c.sample_rate_hz = config.sample_rate_hz;
   c.num_channels = config.num_channels;
diff --git a/api/audio_codecs/L16/audio_encoder_L16.h b/api/audio_codecs/L16/audio_encoder_L16.h
index e0916df..4750984 100644
--- a/api/audio_codecs/L16/audio_encoder_L16.h
+++ b/api/audio_codecs/L16/audio_encoder_L16.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -46,7 +46,7 @@
       const Config& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/audio_decoder_factory_template.h b/api/audio_codecs/audio_decoder_factory_template.h
index 4badd82..4e39365 100644
--- a/api/audio_codecs/audio_decoder_factory_template.h
+++ b/api/audio_codecs/audio_decoder_factory_template.h
@@ -15,8 +15,8 @@
 #include <vector>
 
 #include "api/audio_codecs/audio_decoder_factory.h"
+#include "api/field_trials_view.h"
 #include "api/scoped_refptr.h"
-#include "api/webrtc_key_value_config.h"
 #include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
@@ -34,7 +34,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const SdpAudioFormat& format,
       absl::optional<AudioCodecPairId> codec_pair_id,
-      const WebRtcKeyValueConfig* field_trials) {
+      const FieldTrialsView* field_trials) {
     return nullptr;
   }
 };
@@ -58,7 +58,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const SdpAudioFormat& format,
       absl::optional<AudioCodecPairId> codec_pair_id,
-      const WebRtcKeyValueConfig* field_trials) {
+      const FieldTrialsView* field_trials) {
     auto opt_config = T::SdpToConfig(format);
     return opt_config ? T::MakeAudioDecoder(*opt_config, codec_pair_id)
                       : Helper<Ts...>::MakeAudioDecoder(format, codec_pair_id,
@@ -69,7 +69,7 @@
 template <typename... Ts>
 class AudioDecoderFactoryT : public AudioDecoderFactory {
  public:
-  explicit AudioDecoderFactoryT(const WebRtcKeyValueConfig* field_trials) {
+  explicit AudioDecoderFactoryT(const FieldTrialsView* field_trials) {
     field_trials_ = field_trials;
   }
 
@@ -90,7 +90,7 @@
                                            field_trials_);
   }
 
-  const WebRtcKeyValueConfig* field_trials_;
+  const FieldTrialsView* field_trials_;
 };
 
 }  // namespace audio_decoder_factory_template_impl
@@ -127,7 +127,7 @@
 // how it is used.
 template <typename... Ts>
 rtc::scoped_refptr<AudioDecoderFactory> CreateAudioDecoderFactory(
-    const WebRtcKeyValueConfig* field_trials = nullptr) {
+    const FieldTrialsView* field_trials = nullptr) {
   // There's no technical reason we couldn't allow zero template parameters,
   // but such a factory couldn't create any decoders, and callers can do this
   // by mistake by simply forgetting the <> altogether. So we forbid it in
diff --git a/api/audio_codecs/audio_encoder_factory_template.h b/api/audio_codecs/audio_encoder_factory_template.h
index ceefab2..8490f46 100644
--- a/api/audio_codecs/audio_encoder_factory_template.h
+++ b/api/audio_codecs/audio_encoder_factory_template.h
@@ -15,8 +15,8 @@
 #include <vector>
 
 #include "api/audio_codecs/audio_encoder_factory.h"
+#include "api/field_trials_view.h"
 #include "api/scoped_refptr.h"
-#include "api/webrtc_key_value_config.h"
 #include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
@@ -38,7 +38,7 @@
       int payload_type,
       const SdpAudioFormat& format,
       absl::optional<AudioCodecPairId> codec_pair_id,
-      const WebRtcKeyValueConfig* field_trials) {
+      const FieldTrialsView* field_trials) {
     return nullptr;
   }
 };
@@ -66,7 +66,7 @@
       int payload_type,
       const SdpAudioFormat& format,
       absl::optional<AudioCodecPairId> codec_pair_id,
-      const WebRtcKeyValueConfig* field_trials) {
+      const FieldTrialsView* field_trials) {
     auto opt_config = T::SdpToConfig(format);
     if (opt_config) {
       return T::MakeAudioEncoder(*opt_config, payload_type, codec_pair_id);
@@ -80,7 +80,7 @@
 template <typename... Ts>
 class AudioEncoderFactoryT : public AudioEncoderFactory {
  public:
-  explicit AudioEncoderFactoryT(const WebRtcKeyValueConfig* field_trials) {
+  explicit AudioEncoderFactoryT(const FieldTrialsView* field_trials) {
     field_trials_ = field_trials;
   }
 
@@ -103,7 +103,7 @@
                                            field_trials_);
   }
 
-  const WebRtcKeyValueConfig* field_trials_;
+  const FieldTrialsView* field_trials_;
 };
 
 }  // namespace audio_encoder_factory_template_impl
@@ -145,7 +145,7 @@
 // how it is used.
 template <typename... Ts>
 rtc::scoped_refptr<AudioEncoderFactory> CreateAudioEncoderFactory(
-    const WebRtcKeyValueConfig* field_trials = nullptr) {
+    const FieldTrialsView* field_trials = nullptr) {
   // There's no technical reason we couldn't allow zero template parameters,
   // but such a factory couldn't create any encoders, and callers can do this
   // by mistake by simply forgetting the <> altogether. So we forbid it in
diff --git a/api/audio_codecs/builtin_audio_encoder_factory.cc b/api/audio_codecs/builtin_audio_encoder_factory.cc
index 4433893..530d64b 100644
--- a/api/audio_codecs/builtin_audio_encoder_factory.cc
+++ b/api/audio_codecs/builtin_audio_encoder_factory.cc
@@ -48,7 +48,7 @@
       const Config& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr) {
+      const FieldTrialsView* field_trials = nullptr) {
     return T::MakeAudioEncoder(config, payload_type, codec_pair_id,
                                field_trials);
   }
diff --git a/api/audio_codecs/g711/BUILD.gn b/api/audio_codecs/g711/BUILD.gn
index 1f0b7df..faac047 100644
--- a/api/audio_codecs/g711/BUILD.gn
+++ b/api/audio_codecs/g711/BUILD.gn
@@ -21,7 +21,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:g711",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base:safe_minmax",
@@ -42,7 +42,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:g711",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/g711/audio_decoder_g711.cc b/api/audio_codecs/g711/audio_decoder_g711.cc
index b34b464..838f7e9 100644
--- a/api/audio_codecs/g711/audio_decoder_g711.cc
+++ b/api/audio_codecs/g711/audio_decoder_g711.cc
@@ -48,7 +48,7 @@
 std::unique_ptr<AudioDecoder> AudioDecoderG711::MakeAudioDecoder(
     const Config& config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/g711/audio_decoder_g711.h b/api/audio_codecs/g711/audio_decoder_g711.h
index 62b0f88..0f7a98d 100644
--- a/api/audio_codecs/g711/audio_decoder_g711.h
+++ b/api/audio_codecs/g711/audio_decoder_g711.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -41,7 +41,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       const Config& config,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/g711/audio_encoder_g711.cc b/api/audio_codecs/g711/audio_encoder_g711.cc
index 8c60304..1dca3b8 100644
--- a/api/audio_codecs/g711/audio_encoder_g711.cc
+++ b/api/audio_codecs/g711/audio_encoder_g711.cc
@@ -65,7 +65,7 @@
     const Config& config,
     int payload_type,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/g711/audio_encoder_g711.h b/api/audio_codecs/g711/audio_encoder_g711.h
index c2750e2..4b3eb84 100644
--- a/api/audio_codecs/g711/audio_encoder_g711.h
+++ b/api/audio_codecs/g711/audio_encoder_g711.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -46,7 +46,7 @@
       const Config& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/g722/BUILD.gn b/api/audio_codecs/g722/BUILD.gn
index fbce2c5..1441e6d 100644
--- a/api/audio_codecs/g722/BUILD.gn
+++ b/api/audio_codecs/g722/BUILD.gn
@@ -27,7 +27,7 @@
   deps = [
     ":audio_encoder_g722_config",
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:g722",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base:safe_minmax",
@@ -48,7 +48,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:g722",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/g722/audio_decoder_g722.cc b/api/audio_codecs/g722/audio_decoder_g722.cc
index 8f3a5c0..ed71634 100644
--- a/api/audio_codecs/g722/audio_decoder_g722.cc
+++ b/api/audio_codecs/g722/audio_decoder_g722.cc
@@ -37,7 +37,7 @@
 std::unique_ptr<AudioDecoder> AudioDecoderG722::MakeAudioDecoder(
     Config config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/g722/audio_decoder_g722.h b/api/audio_codecs/g722/audio_decoder_g722.h
index 05e6130..6f7b253 100644
--- a/api/audio_codecs/g722/audio_decoder_g722.h
+++ b/api/audio_codecs/g722/audio_decoder_g722.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -35,7 +35,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/g722/audio_encoder_g722.cc b/api/audio_codecs/g722/audio_encoder_g722.cc
index 812d66f..56a6c4d 100644
--- a/api/audio_codecs/g722/audio_encoder_g722.cc
+++ b/api/audio_codecs/g722/audio_encoder_g722.cc
@@ -63,7 +63,7 @@
     const AudioEncoderG722Config& config,
     int payload_type,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/g722/audio_encoder_g722.h b/api/audio_codecs/g722/audio_encoder_g722.h
index 14ddff7..78ceddd 100644
--- a/api/audio_codecs/g722/audio_encoder_g722.h
+++ b/api/audio_codecs/g722/audio_encoder_g722.h
@@ -19,7 +19,7 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/g722/audio_encoder_g722_config.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -36,7 +36,7 @@
       const AudioEncoderG722Config& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/ilbc/BUILD.gn b/api/audio_codecs/ilbc/BUILD.gn
index 1cac7ed..8dab307 100644
--- a/api/audio_codecs/ilbc/BUILD.gn
+++ b/api/audio_codecs/ilbc/BUILD.gn
@@ -27,7 +27,7 @@
   deps = [
     ":audio_encoder_ilbc_config",
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:ilbc",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base:safe_minmax",
@@ -47,7 +47,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:ilbc",
     "../../../rtc_base:rtc_base_approved",
   ]
diff --git a/api/audio_codecs/ilbc/audio_decoder_ilbc.cc b/api/audio_codecs/ilbc/audio_decoder_ilbc.cc
index 9a291ee..c583169 100644
--- a/api/audio_codecs/ilbc/audio_decoder_ilbc.cc
+++ b/api/audio_codecs/ilbc/audio_decoder_ilbc.cc
@@ -35,7 +35,7 @@
 std::unique_ptr<AudioDecoder> AudioDecoderIlbc::MakeAudioDecoder(
     Config config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   return std::make_unique<AudioDecoderIlbcImpl>();
 }
 
diff --git a/api/audio_codecs/ilbc/audio_decoder_ilbc.h b/api/audio_codecs/ilbc/audio_decoder_ilbc.h
index 4d9a4b7..60566c8 100644
--- a/api/audio_codecs/ilbc/audio_decoder_ilbc.h
+++ b/api/audio_codecs/ilbc/audio_decoder_ilbc.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 
 namespace webrtc {
 
@@ -31,7 +31,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/ilbc/audio_encoder_ilbc.cc b/api/audio_codecs/ilbc/audio_encoder_ilbc.cc
index 6525887..b497948 100644
--- a/api/audio_codecs/ilbc/audio_encoder_ilbc.cc
+++ b/api/audio_codecs/ilbc/audio_encoder_ilbc.cc
@@ -77,7 +77,7 @@
     const AudioEncoderIlbcConfig& config,
     int payload_type,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/ilbc/audio_encoder_ilbc.h b/api/audio_codecs/ilbc/audio_encoder_ilbc.h
index 8dd4928..a530684 100644
--- a/api/audio_codecs/ilbc/audio_encoder_ilbc.h
+++ b/api/audio_codecs/ilbc/audio_encoder_ilbc.h
@@ -19,7 +19,7 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/ilbc/audio_encoder_ilbc_config.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 
 namespace webrtc {
 
@@ -35,7 +35,7 @@
       const AudioEncoderIlbcConfig& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/BUILD.gn b/api/audio_codecs/isac/BUILD.gn
index b6aa810..2231371 100644
--- a/api/audio_codecs/isac/BUILD.gn
+++ b/api/audio_codecs/isac/BUILD.gn
@@ -65,7 +65,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:isac_fix",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -85,7 +85,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:isac_fix",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -105,7 +105,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:isac",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -125,7 +125,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:isac",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/isac/audio_decoder_isac_fix.cc b/api/audio_codecs/isac/audio_decoder_isac_fix.cc
index 8927a16..b3ab91d 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_fix.cc
+++ b/api/audio_codecs/isac/audio_decoder_isac_fix.cc
@@ -34,7 +34,7 @@
 std::unique_ptr<AudioDecoder> AudioDecoderIsacFix::MakeAudioDecoder(
     Config config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   AudioDecoderIsacFixImpl::Config c;
   c.sample_rate_hz = 16000;
   return std::make_unique<AudioDecoderIsacFixImpl>(c);
diff --git a/api/audio_codecs/isac/audio_decoder_isac_fix.h b/api/audio_codecs/isac/audio_decoder_isac_fix.h
index 11b8766..8f61d9a 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_fix.h
+++ b/api/audio_codecs/isac/audio_decoder_isac_fix.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -32,7 +32,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/audio_decoder_isac_float.cc b/api/audio_codecs/isac/audio_decoder_isac_float.cc
index ef27293..98f672b 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_float.cc
+++ b/api/audio_codecs/isac/audio_decoder_isac_float.cc
@@ -43,7 +43,7 @@
 std::unique_ptr<AudioDecoder> AudioDecoderIsacFloat::MakeAudioDecoder(
     Config config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   AudioDecoderIsacFloatImpl::Config c;
   c.sample_rate_hz = config.sample_rate_hz;
   if (!config.IsOk()) {
diff --git a/api/audio_codecs/isac/audio_decoder_isac_float.h b/api/audio_codecs/isac/audio_decoder_isac_float.h
index 501edfc..864c6b9 100644
--- a/api/audio_codecs/isac/audio_decoder_isac_float.h
+++ b/api/audio_codecs/isac/audio_decoder_isac_float.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -37,7 +37,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/audio_encoder_isac_fix.cc b/api/audio_codecs/isac/audio_encoder_isac_fix.cc
index 65a2d8f..3960377 100644
--- a/api/audio_codecs/isac/audio_encoder_isac_fix.cc
+++ b/api/audio_codecs/isac/audio_encoder_isac_fix.cc
@@ -57,7 +57,7 @@
     AudioEncoderIsacFix::Config config,
     int payload_type,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   AudioEncoderIsacFixImpl::Config c;
   c.frame_size_ms = config.frame_size_ms;
   c.bit_rate = config.bit_rate;
diff --git a/api/audio_codecs/isac/audio_encoder_isac_fix.h b/api/audio_codecs/isac/audio_encoder_isac_fix.h
index e8ff0fc..de0f1d1 100644
--- a/api/audio_codecs/isac/audio_encoder_isac_fix.h
+++ b/api/audio_codecs/isac/audio_encoder_isac_fix.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -46,7 +46,7 @@
       Config config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/isac/audio_encoder_isac_float.cc b/api/audio_codecs/isac/audio_encoder_isac_float.cc
index 852cb69..e3e5008 100644
--- a/api/audio_codecs/isac/audio_encoder_isac_float.cc
+++ b/api/audio_codecs/isac/audio_encoder_isac_float.cc
@@ -69,7 +69,7 @@
     const AudioEncoderIsacFloat::Config& config,
     int payload_type,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   AudioEncoderIsacFloatImpl::Config c;
   c.payload_type = payload_type;
   c.sample_rate_hz = config.sample_rate_hz;
diff --git a/api/audio_codecs/isac/audio_encoder_isac_float.h b/api/audio_codecs/isac/audio_encoder_isac_float.h
index 8e1d505..d031d76 100644
--- a/api/audio_codecs/isac/audio_encoder_isac_float.h
+++ b/api/audio_codecs/isac/audio_encoder_isac_float.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -60,7 +60,7 @@
       const Config& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/BUILD.gn b/api/audio_codecs/opus/BUILD.gn
index fbb116b..94d4d1b 100644
--- a/api/audio_codecs/opus/BUILD.gn
+++ b/api/audio_codecs/opus/BUILD.gn
@@ -46,7 +46,7 @@
   deps = [
     ":audio_encoder_opus_config",
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:webrtc_opus",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -66,7 +66,7 @@
   ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:webrtc_opus",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -84,7 +84,7 @@
   sources = [ "audio_encoder_multi_channel_opus.cc" ]
   deps = [
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:webrtc_multiopus",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
@@ -103,7 +103,7 @@
   deps = [
     ":audio_decoder_opus_config",
     "..:audio_codecs_api",
-    "../../../api:webrtc_key_value_config",
+    "../../../api:field_trials_view",
     "../../../modules/audio_coding:webrtc_multiopus",
     "../../../rtc_base:rtc_base_approved",
     "../../../rtc_base/system:rtc_export",
diff --git a/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc b/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc
index 5a0b794..0fb4e05 100644
--- a/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc
+++ b/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc
@@ -65,7 +65,7 @@
 std::unique_ptr<AudioDecoder> AudioDecoderMultiChannelOpus::MakeAudioDecoder(
     AudioDecoderMultiChannelOpusConfig config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   return AudioDecoderMultiChannelOpusImpl::MakeAudioDecoder(config);
 }
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h b/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h
index 2dcd26b..eafd6c6 100644
--- a/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h
+++ b/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h
@@ -19,7 +19,7 @@
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/opus/audio_decoder_multi_channel_opus_config.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -34,7 +34,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       AudioDecoderMultiChannelOpusConfig config,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/audio_decoder_opus.cc b/api/audio_codecs/opus/audio_decoder_opus.cc
index 0fe3367..efc9a73 100644
--- a/api/audio_codecs/opus/audio_decoder_opus.cc
+++ b/api/audio_codecs/opus/audio_decoder_opus.cc
@@ -74,7 +74,7 @@
 std::unique_ptr<AudioDecoder> AudioDecoderOpus::MakeAudioDecoder(
     Config config,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/opus/audio_decoder_opus.h b/api/audio_codecs/opus/audio_decoder_opus.h
index 4e44309..138c037 100644
--- a/api/audio_codecs/opus/audio_decoder_opus.h
+++ b/api/audio_codecs/opus/audio_decoder_opus.h
@@ -18,7 +18,7 @@
 #include "api/audio_codecs/audio_codec_pair_id.h"
 #include "api/audio_codecs/audio_decoder.h"
 #include "api/audio_codecs/audio_format.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -36,7 +36,7 @@
   static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
       Config config,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc b/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc
index b71a000..14f480b 100644
--- a/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc
+++ b/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc
@@ -67,7 +67,7 @@
     const AudioEncoderMultiChannelOpusConfig& config,
     int payload_type,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   return AudioEncoderMultiChannelOpusImpl::MakeAudioEncoder(config,
                                                             payload_type);
 }
diff --git a/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h b/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h
index 58b959a..c1c4db3 100644
--- a/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h
+++ b/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h
@@ -19,7 +19,7 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/opus/audio_encoder_multi_channel_opus_config.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -35,7 +35,7 @@
       const Config& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus/audio_encoder_opus.cc b/api/audio_codecs/opus/audio_encoder_opus.cc
index 26fe8cc..5b6322d 100644
--- a/api/audio_codecs/opus/audio_encoder_opus.cc
+++ b/api/audio_codecs/opus/audio_encoder_opus.cc
@@ -33,7 +33,7 @@
     const AudioEncoderOpusConfig& config,
     int payload_type,
     absl::optional<AudioCodecPairId> /*codec_pair_id*/,
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   if (!config.IsOk()) {
     RTC_DCHECK_NOTREACHED();
     return nullptr;
diff --git a/api/audio_codecs/opus/audio_encoder_opus.h b/api/audio_codecs/opus/audio_encoder_opus.h
index 4fb0337..df93ae5 100644
--- a/api/audio_codecs/opus/audio_encoder_opus.h
+++ b/api/audio_codecs/opus/audio_encoder_opus.h
@@ -19,7 +19,7 @@
 #include "api/audio_codecs/audio_encoder.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/audio_codecs/opus/audio_encoder_opus_config.h"
-#include "api/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 #include "rtc_base/system/rtc_export.h"
 
 namespace webrtc {
@@ -36,7 +36,7 @@
       const AudioEncoderOpusConfig& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr);
+      const FieldTrialsView* field_trials = nullptr);
 };
 
 }  // namespace webrtc
diff --git a/api/audio_codecs/opus_audio_encoder_factory.cc b/api/audio_codecs/opus_audio_encoder_factory.cc
index 867d200..8c286f2 100644
--- a/api/audio_codecs/opus_audio_encoder_factory.cc
+++ b/api/audio_codecs/opus_audio_encoder_factory.cc
@@ -38,7 +38,7 @@
       const Config& config,
       int payload_type,
       absl::optional<AudioCodecPairId> codec_pair_id = absl::nullopt,
-      const WebRtcKeyValueConfig* field_trials = nullptr) {
+      const FieldTrialsView* field_trials = nullptr) {
     return T::MakeAudioEncoder(config, payload_type, codec_pair_id,
                                field_trials);
   }
diff --git a/api/field_trials_view.h b/api/field_trials_view.h
new file mode 100644
index 0000000..299205d
--- /dev/null
+++ b/api/field_trials_view.h
@@ -0,0 +1,46 @@
+/*
+ *  Copyright 2019 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.
+ */
+#ifndef API_FIELD_TRIALS_VIEW_H_
+#define API_FIELD_TRIALS_VIEW_H_
+
+#include <string>
+
+#include "absl/strings/string_view.h"
+#include "rtc_base/system/rtc_export.h"
+
+namespace webrtc {
+
+// An interface that provides a key-value mapping for configuring internal
+// details of WebRTC. Note that there's no guarantess that the meaning of a
+// particular key value mapping will be preserved over time and no announcements
+// will be made if they are changed. It's up to the library user to ensure that
+// the behavior does not break.
+class RTC_EXPORT FieldTrialsView {
+ public:
+  virtual ~FieldTrialsView() = default;
+  // The configured value for the given key. Defaults to an empty string.
+  virtual std::string Lookup(absl::string_view key) const = 0;
+
+  bool IsEnabled(absl::string_view key) const {
+    return Lookup(key).find("Enabled") == 0;
+  }
+
+  bool IsDisabled(absl::string_view key) const {
+    return Lookup(key).find("Disabled") == 0;
+  }
+};
+
+// TODO(bugs.webrtc.org/10335): Remove once all migrated to
+// api/field_trials_view.h
+typedef FieldTrialsView WebRtcKeyValueConfig;
+
+}  // namespace webrtc
+
+#endif  // API_FIELD_TRIALS_VIEW_H_
diff --git a/api/ice_transport_interface.h b/api/ice_transport_interface.h
index c82027a..9d8bd5a 100644
--- a/api/ice_transport_interface.h
+++ b/api/ice_transport_interface.h
@@ -27,7 +27,7 @@
 }  // namespace cricket
 
 namespace webrtc {
-class WebRtcKeyValueConfig;
+class FieldTrialsView;
 
 // An ICE transport, as represented to the outside world.
 // This object is refcounted, and is therefore alive until the
@@ -84,8 +84,8 @@
     return ice_controller_factory_;
   }
 
-  const WebRtcKeyValueConfig* field_trials() { return field_trials_; }
-  void set_field_trials(const WebRtcKeyValueConfig* field_trials) {
+  const FieldTrialsView* field_trials() { return field_trials_; }
+  void set_field_trials(const FieldTrialsView* field_trials) {
     field_trials_ = field_trials;
   }
 
@@ -96,7 +96,7 @@
   AsyncResolverFactory* async_resolver_factory_ = nullptr;
   RtcEventLog* event_log_ = nullptr;
   cricket::IceControllerFactoryInterface* ice_controller_factory_ = nullptr;
-  const WebRtcKeyValueConfig* field_trials_ = nullptr;
+  const FieldTrialsView* field_trials_ = nullptr;
   // TODO(https://crbug.com/webrtc/12657): Redesign to have const members.
 };
 
diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h
index 4c4a638..2f8e401 100644
--- a/api/peer_connection_interface.h
+++ b/api/peer_connection_interface.h
@@ -91,6 +91,7 @@
 #include "api/data_channel_interface.h"
 #include "api/dtls_transport_interface.h"
 #include "api/fec_controller.h"
+#include "api/field_trials_view.h"
 #include "api/ice_transport_interface.h"
 #include "api/jsep.h"
 #include "api/media_stream_interface.h"
@@ -117,7 +118,6 @@
 #include "api/transport/enums.h"
 #include "api/transport/network_control.h"
 #include "api/transport/sctp_transport_factory_interface.h"
-#include "api/transport/webrtc_key_value_config.h"
 #include "api/turn_customizer.h"
 #include "api/video/video_bitrate_allocator_factory.h"
 #include "call/rtp_transport_controller_send_factory_interface.h"
@@ -1435,7 +1435,7 @@
   std::unique_ptr<rtc::NetworkMonitorFactory> network_monitor_factory;
   std::unique_ptr<NetEqFactory> neteq_factory;
   std::unique_ptr<SctpTransportFactoryInterface> sctp_factory;
-  std::unique_ptr<WebRtcKeyValueConfig> trials;
+  std::unique_ptr<FieldTrialsView> trials;
   std::unique_ptr<RtpTransportControllerSendFactoryInterface>
       transport_controller_send_factory;
   std::unique_ptr<Metronome> metronome;
diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn
index fb0fcf7..39157b0 100644
--- a/api/transport/BUILD.gn
+++ b/api/transport/BUILD.gn
@@ -32,7 +32,7 @@
   ]
 
   deps = [
-    ":webrtc_key_value_config",
+    "../../api:field_trials_view",
     "../rtc_event_log",
     "../units:data_rate",
     "../units:data_size",
@@ -45,16 +45,6 @@
   ]
 }
 
-rtc_source_set("webrtc_key_value_config") {
-  visibility = [ "*" ]
-  sources = [ "webrtc_key_value_config.h" ]
-  deps = [
-    "../../api:webrtc_key_value_config",
-    "../../rtc_base/system:rtc_export",
-  ]
-  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
-}
-
 rtc_library("field_trial_based_config") {
   visibility = [ "*" ]
   sources = [
@@ -62,7 +52,7 @@
     "field_trial_based_config.h",
   ]
   deps = [
-    ":webrtc_key_value_config",
+    "../../api:field_trials_view",
     "../../system_wrappers:field_trial",
   ]
   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
@@ -88,8 +78,8 @@
   ]
   deps = [
     ":network_control",
-    ":webrtc_key_value_config",
     "..:network_state_predictor_api",
+    "../../api:field_trials_view",
     "../../modules/congestion_controller/goog_cc",
   ]
   absl_deps = [ "//third_party/abseil-cpp/absl/base:core_headers" ]
diff --git a/api/transport/field_trial_based_config.h b/api/transport/field_trial_based_config.h
index 0754570..f0063ff 100644
--- a/api/transport/field_trial_based_config.h
+++ b/api/transport/field_trial_based_config.h
@@ -13,11 +13,11 @@
 #include <string>
 
 #include "absl/strings/string_view.h"
-#include "api/transport/webrtc_key_value_config.h"
+#include "api/field_trials_view.h"
 
 namespace webrtc {
 // Implementation using the field trial API fo the key value lookup.
-class FieldTrialBasedConfig : public WebRtcKeyValueConfig {
+class FieldTrialBasedConfig : public FieldTrialsView {
  public:
   std::string Lookup(absl::string_view key) const override;
 };
diff --git a/api/transport/network_control.h b/api/transport/network_control.h
index c2b005e..8623224 100644
--- a/api/transport/network_control.h
+++ b/api/transport/network_control.h
@@ -15,9 +15,9 @@
 #include <memory>
 
 #include "absl/base/attributes.h"
+#include "api/field_trials_view.h"
 #include "api/rtc_event_log/rtc_event_log.h"
 #include "api/transport/network_types.h"
-#include "api/transport/webrtc_key_value_config.h"
 
 namespace webrtc {
 
@@ -46,7 +46,7 @@
 
   // Optional override of configuration of WebRTC internals. Using nullptr here
   // indicates that the field trial API will be used.
-  const WebRtcKeyValueConfig* key_value_config = nullptr;
+  const FieldTrialsView* key_value_config = nullptr;
   // Optional override of event log.
   RtcEventLog* event_log = nullptr;
 };
@@ -132,7 +132,7 @@
 class NetworkStateEstimatorFactory {
  public:
   virtual std::unique_ptr<NetworkStateEstimator> Create(
-      const WebRtcKeyValueConfig* key_value_config) = 0;
+      const FieldTrialsView* key_value_config) = 0;
   virtual ~NetworkStateEstimatorFactory() = default;
 };
 }  // namespace webrtc
diff --git a/api/transport/webrtc_key_value_config.h b/api/transport/webrtc_key_value_config.h
deleted file mode 100644
index f666873..0000000
--- a/api/transport/webrtc_key_value_config.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- *  Copyright 2019 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.
- */
-#ifndef API_TRANSPORT_WEBRTC_KEY_VALUE_CONFIG_H_
-#define API_TRANSPORT_WEBRTC_KEY_VALUE_CONFIG_H_
-
-// TODO(bugs.webrtc.org/10335): Remove once all migrated to
-// "api/webrtc_key_value_config.h".
-#include "api/webrtc_key_value_config.h"
-
-#endif  // API_TRANSPORT_WEBRTC_KEY_VALUE_CONFIG_H_
diff --git a/api/video/BUILD.gn b/api/video/BUILD.gn
index c096be8..dd78cac 100644
--- a/api/video/BUILD.gn
+++ b/api/video/BUILD.gn
@@ -269,7 +269,7 @@
 
   deps = [
     ":video_stream_decoder",
-    "../../api:webrtc_key_value_config",
+    "../../api:field_trials_view",
     "../../rtc_base:rtc_base_approved",
     "../../video:video_stream_decoder_impl",
     "../task_queue",
diff --git a/api/video/video_stream_decoder_create.cc b/api/video/video_stream_decoder_create.cc
index c64a2d8..e14c3bc 100644
--- a/api/video/video_stream_decoder_create.cc
+++ b/api/video/video_stream_decoder_create.cc
@@ -23,7 +23,7 @@
     std::map<int, std::pair<SdpVideoFormat, int>> decoder_settings,
     // TODO(jonaso, webrtc:10335): Consider what to do with factories
     // vs. field trials.
-    const WebRtcKeyValueConfig* field_trials) {
+    const FieldTrialsView* field_trials) {
   return std::make_unique<VideoStreamDecoderImpl>(
       callbacks, decoder_factory, task_queue_factory,
       std::move(decoder_settings), field_trials);
diff --git a/api/video/video_stream_decoder_create.h b/api/video/video_stream_decoder_create.h
index 9591412..974fd80 100644
--- a/api/video/video_stream_decoder_create.h
+++ b/api/video/video_stream_decoder_create.h
@@ -15,10 +15,10 @@
 #include <memory>
 #include <utility>
 
+#include "api/field_trials_view.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "api/video/video_stream_decoder.h"
 #include "api/video_codecs/sdp_video_format.h"
-#include "api/webrtc_key_value_config.h"
 
 namespace webrtc {
 // The `decoder_settings` parameter is a map between:
@@ -30,7 +30,7 @@
     VideoDecoderFactory* decoder_factory,
     TaskQueueFactory* task_queue_factory,
     std::map<int, std::pair<SdpVideoFormat, int>> decoder_settings,
-    const WebRtcKeyValueConfig* field_trials = nullptr);
+    const FieldTrialsView* field_trials = nullptr);
 
 }  // namespace webrtc
 
diff --git a/api/webrtc_key_value_config.h b/api/webrtc_key_value_config.h
index 32a2e47..e3cac59 100644
--- a/api/webrtc_key_value_config.h
+++ b/api/webrtc_key_value_config.h
@@ -10,32 +10,8 @@
 #ifndef API_WEBRTC_KEY_VALUE_CONFIG_H_
 #define API_WEBRTC_KEY_VALUE_CONFIG_H_
 
-#include <string>
-
-#include "absl/strings/string_view.h"
-#include "rtc_base/system/rtc_export.h"
-
-namespace webrtc {
-
-// An interface that provides a key-value mapping for configuring internal
-// details of WebRTC. Note that there's no guarantess that the meaning of a
-// particular key value mapping will be preserved over time and no announcements
-// will be made if they are changed. It's up to the library user to ensure that
-// the behavior does not break.
-class RTC_EXPORT WebRtcKeyValueConfig {
- public:
-  virtual ~WebRtcKeyValueConfig() = default;
-  // The configured value for the given key. Defaults to an empty string.
-  virtual std::string Lookup(absl::string_view key) const = 0;
-
-  bool IsEnabled(absl::string_view key) const {
-    return Lookup(key).find("Enabled") == 0;
-  }
-
-  bool IsDisabled(absl::string_view key) const {
-    return Lookup(key).find("Disabled") == 0;
-  }
-};
-}  // namespace webrtc
+// TODO(bugs.webrtc.org/10335): Remove once all migrated to
+// api/field_trials_view.h
+#include "api/field_trials_view.h"
 
 #endif  // API_WEBRTC_KEY_VALUE_CONFIG_H_