Remove dependency on singletons in translate and language_detection.

This is a pre-factor for https://crrev.com/c/6029830.

It is intended to be a no-op.

There are 2 different methods that are expected to return singletons:
- `translate::GetLanguagerDetector`
- `language_detection::GetLanguagerDetector`

They are called in multiple places. With this CL they are called and
their object is retained.

For `language_detection::GetLanguagerDetector`, we are probably going
to need to switch to per-thread instances anyway, so the singleton
model is not sustainable.

For `translate::GetLanguagerDetector`, I think it's just a bit clearer
when you don't have to know that this produces a singleton.

Bug: 354069716
Change-Id: I8b827cc71cffcd8ce1cc159c84e1e08281f673a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6038976
Reviewed-by: Trevor Perrier <[email protected]>
Commit-Queue: Fergal Daly <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1386666}
diff --git a/components/translate/content/renderer/translate_agent.cc b/components/translate/content/renderer/translate_agent.cc
index bee5bb61..fffdf5e 100644
--- a/components/translate/content/renderer/translate_agent.cc
+++ b/components/translate/content/renderer/translate_agent.cc
@@ -101,9 +101,12 @@
 TranslateAgent::TranslateAgent(content::RenderFrame* render_frame, int world_id)
     : content::RenderFrameObserver(render_frame),
       world_id_(world_id),
+      translate_language_detection_model_(GetLanguageDetectionModel()),
       language_detection_agent_(
           IsTFLiteLanguageDetectionEnabled()
-              ? new language_detection::LanguageDetectionAgent(render_frame)
+              ? new language_detection::LanguageDetectionAgent(
+                    render_frame,
+                    translate_language_detection_model_->tflite_model())
               : nullptr) {
   translate_task_runner_ = this->render_frame()->GetTaskRunner(
       blink::TaskType::kInternalTranslation);
@@ -192,12 +195,10 @@
         translate::LanguageVerificationType::kNoPageContent);
   } else if (translate::IsTFLiteLanguageDetectionEnabled()) {
     // Use TFLite and page contents to assist with language detection.
-    translate::LanguageDetectionModel& language_detection_model =
-        GetLanguageDetectionModel();
-    bool is_available = language_detection_model.IsAvailable();
+    bool is_available = translate_language_detection_model_->IsAvailable();
     language =
         is_available
-            ? language_detection_model.DeterminePageLanguage(
+            ? translate_language_detection_model_->DeterminePageLanguage(
                   content_language, html_lang, contents->as_string(),
                   &model_detected_language, &is_model_reliable,
                   model_reliability_score)
@@ -213,7 +214,8 @@
         "LanguageDetection.TFLiteModel.WasModelUnavailableDueToDeferredLoad",
         !is_available &&
             language_detection_agent_->waiting_for_first_foreground());
-    detection_model_version = language_detection_model.GetModelVersion();
+    detection_model_version =
+        translate_language_detection_model_->GetModelVersion();
     details.has_run_lang_detection = true;
   } else {
     // Use CLD3 and page contents to assist with language detection.