Use Environemnt in MedaFactory::CreateMediaEngine

to propagate field trials and task queue factory

Bug: webrtc:15656
Change-Id: I2d19e169d2ff1cc871899a0e96b1733333fdc604
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/328881
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41257}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index c187a7d..dfbf671 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -47,6 +47,7 @@
     "../media:rtc_audio_video",
     "../pc:media_factory",
     "../rtc_base/system:rtc_export",
+    "environment",
   ]
 }
 
@@ -1433,6 +1434,7 @@
       "../rtc_base:checks",
       "../system_wrappers",
       "../test/time_controller",
+      "environment",
     ]
     absl_deps = [ "//third_party/abseil-cpp/absl/base:nullability" ]
   }
diff --git a/api/enable_media.cc b/api/enable_media.cc
index 566cc15..a05b1b3 100644
--- a/api/enable_media.cc
+++ b/api/enable_media.cc
@@ -13,6 +13,7 @@
 #include <memory>
 #include <utility>
 
+#include "api/environment/environment.h"
 #include "api/peer_connection_interface.h"
 #include "call/call_factory.h"
 #include "media/engine/webrtc_media_engine.h"
@@ -41,26 +42,18 @@
   }
 
   std::unique_ptr<MediaEngineInterface> CreateMediaEngine(
+      const Environment& env,
       PeerConnectionFactoryDependencies& deps) override {
-    std::unique_ptr<FieldTrialsView> fallback_trials;
-    const FieldTrialsView* trials;
-    if (deps.trials) {
-      trials = deps.trials.get();
-    } else {
-      fallback_trials = std::make_unique<FieldTrialBasedConfig>();
-      trials = fallback_trials.get();
-    }
     auto audio_engine = std::make_unique<WebRtcVoiceEngine>(
-        deps.task_queue_factory.get(), deps.adm.get(),
+        &env.task_queue_factory(), deps.adm.get(),
         std::move(deps.audio_encoder_factory),
         std::move(deps.audio_decoder_factory), std::move(deps.audio_mixer),
         std::move(deps.audio_processing), std::move(deps.audio_frame_processor),
-        *trials);
+        env.field_trials());
     auto video_engine = std::make_unique<WebRtcVideoEngine>(
         std::move(deps.video_encoder_factory),
-        std::move(deps.video_decoder_factory), *trials);
-    return std::make_unique<CompositeMediaEngine>(std::move(fallback_trials),
-                                                  std::move(audio_engine),
+        std::move(deps.video_decoder_factory), env.field_trials());
+    return std::make_unique<CompositeMediaEngine>(std::move(audio_engine),
                                                   std::move(video_engine));
   }
 };
diff --git a/api/test/create_time_controller.cc b/api/test/create_time_controller.cc
index 3378805..f26d73a 100644
--- a/api/test/create_time_controller.cc
+++ b/api/test/create_time_controller.cc
@@ -15,6 +15,7 @@
 
 #include "absl/base/nullability.h"
 #include "api/enable_media_with_defaults.h"
+#include "api/environment/environment.h"
 #include "api/peer_connection_interface.h"
 #include "call/call.h"
 #include "call/rtp_transport_config.h"
@@ -74,8 +75,9 @@
     }
 
     std::unique_ptr<cricket::MediaEngineInterface> CreateMediaEngine(
+        const Environment& env,
         PeerConnectionFactoryDependencies& dependencies) override {
-      return media_factory_->CreateMediaEngine(dependencies);
+      return media_factory_->CreateMediaEngine(env, dependencies);
     }
 
    private:
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index fe128c0..8c85788 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -318,6 +318,7 @@
   sources = [ "media_factory.h" ]
   deps = [
     "../api:callfactory_api",
+    "../api/environment",
     "../call:call_interfaces",
     "../media:rtc_media_base",
   ]
@@ -2746,6 +2747,7 @@
     deps = [
       ":media_factory",
       "../api:libjingle_peerconnection_api",
+      "../api/environment",
       "../call:call_interfaces",
       "../media:rtc_media_tests_utils",
       "../rtc_base:checks",
diff --git a/pc/connection_context.cc b/pc/connection_context.cc
index 48ce899..75d95a9 100644
--- a/pc/connection_context.cc
+++ b/pc/connection_context.cc
@@ -14,6 +14,7 @@
 #include <utility>
 #include <vector>
 
+#include "api/environment/environment.h"
 #include "api/transport/field_trial_based_config.h"
 #include "media/base/media_engine.h"
 #include "media/sctp/sctp_transport_factory.h"
@@ -114,7 +115,8 @@
       env_(env),
       media_engine_(
           dependencies->media_factory != nullptr
-              ? dependencies->media_factory->CreateMediaEngine(*dependencies)
+              ? dependencies->media_factory->CreateMediaEngine(env_,
+                                                               *dependencies)
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wdeprecated-declarations"
               : std::move(dependencies->media_engine)),
diff --git a/pc/media_factory.h b/pc/media_factory.h
index 323744a..2ca2a1f 100644
--- a/pc/media_factory.h
+++ b/pc/media_factory.h
@@ -14,6 +14,7 @@
 #include <memory>
 
 #include "api/call/call_factory_interface.h"
+#include "api/environment/environment.h"
 #include "call/call.h"
 #include "call/call_config.h"
 #include "media/base/media_engine.h"
@@ -38,6 +39,7 @@
 
   std::unique_ptr<Call> CreateCall(const CallConfig& config) override = 0;
   virtual std::unique_ptr<cricket::MediaEngineInterface> CreateMediaEngine(
+      const Environment& env,
       PeerConnectionFactoryDependencies& dependencies) = 0;
 };
 
diff --git a/pc/test/enable_fake_media.cc b/pc/test/enable_fake_media.cc
index 5a84955..5497c60 100644
--- a/pc/test/enable_fake_media.cc
+++ b/pc/test/enable_fake_media.cc
@@ -14,6 +14,7 @@
 #include <utility>
 
 #include "absl/base/nullability.h"
+#include "api/environment/environment.h"
 #include "api/peer_connection_interface.h"
 #include "call/call.h"
 #include "call/call_config.h"
@@ -40,6 +41,7 @@
     }
 
     std::unique_ptr<MediaEngineInterface> CreateMediaEngine(
+        const Environment& /*env*/,
         PeerConnectionFactoryDependencies& /*dependencies*/) {
       RTC_CHECK(fake_ != nullptr)
           << "CreateMediaEngine can be called at most once.";