Add a field trial to control datagram transport use.

First, the existing configuration parameter (use_datagram_transport) is
now optional.

The new field trial has two flag values:
 1. Whether to enable the datagram transport (enabled)
 2. Whether to use the datagram transport by default (default_value)

The first is a kill-switch.  It disables the datagram transport, even
for applications which inject a datagram transport factory and specify
use_datagram_transport = true.  This allows applications which hard-code
a datagram transport to switch it off via field trials.

This flag defaults to true, to avoid breaking downstream projects which
already inject and configure a datagram transport.  It may be changed to
false after updating downstream to set this field trial flag to true
when required.

The second provides a default value to be used in case the
aforementioned use_datagram_transport parameter is unset.  Applications
which explicitly set use_datagram_transport will use that value.
Applications which do not explicitly specify whether or not to use the
datagram transport will use it (or not) according to the default_value
flag.

One goal of this flag is to simplify rollout in applications which
already set field trials based on configuration, but require code
changes for new RTCConfiguration parameters.  A second goal is to
provide platforms with a knob to control whether datagram transport is
"opt-in" or "opt-out".

This flag defaults to false, to prevent downstream projects from
unintentionally enabling the datagram tranpsort.

Bug: webrtc:9719
Change-Id: I521a5fa61c992e76e5081118678a1812a261d672
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144184
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Commit-Queue: Bjorn Mellem <mellem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28435}
diff --git a/api/peer_connection_interface.h b/api/peer_connection_interface.h
index 92b0561..6841e14 100644
--- a/api/peer_connection_interface.h
+++ b/api/peer_connection_interface.h
@@ -631,11 +631,7 @@
     // informs PeerConnection that it should use the DatagramTransportInterface
     // for packets instead DTLS. It's invalid to set it to |true| if the
     // MediaTransportFactory wasn't provided.
-    //
-    // TODO(sukhanov): Once we have a working mechanism for negotiating media
-    // transport through SDP, we replace media transport flags in
-    // RTCConfiguration with field trials.
-    bool use_datagram_transport = false;
+    absl::optional<bool> use_datagram_transport;
 
     // Defines advanced optional cryptographic settings related to SRTP and
     // frame encryption for native WebRTC. Setting this will overwrite any