ml: Switch to new Mojo types

Migrate from &, Request, etc to pending_receiver, etc, now that these
are supported in libchrome.

This includes migrating from "connection error" to "disconnection"
terminology that Mojo switched to (since disconnection is not always
error).

BUG=chromium:1103123
TEST=ebuild bla/ml-9999.ebuild clean test
TEST=tast -verbose run bla platform.MLServiceBootstrap power.SmartDim

Change-Id: I015e116442281cbda313eb8d0593bb543090008c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2289245
Tested-by: Andrew Moylan <amoylan@chromium.org>
Auto-Submit: Andrew Moylan <amoylan@chromium.org>
Reviewed-by: Honglin Yu <honglinyu@chromium.org>
Reviewed-by: Sam McNally <sammc@chromium.org>
Reviewed-by: Thanh Nguyen <thanhdng@chromium.org>
Commit-Queue: Andrew Moylan <amoylan@chromium.org>
diff --git a/ml/machine_learning_service_impl.cc b/ml/machine_learning_service_impl.cc
index b006f2d..df2fd9f 100644
--- a/ml/machine_learning_service_impl.cc
+++ b/ml/machine_learning_service_impl.cc
@@ -32,12 +32,13 @@
 using ::chromeos::machine_learning::mojom::BuiltinModelId;
 using ::chromeos::machine_learning::mojom::BuiltinModelSpecPtr;
 using ::chromeos::machine_learning::mojom::FlatBufferModelSpecPtr;
-using ::chromeos::machine_learning::mojom::HandwritingRecognizerRequest;
+using ::chromeos::machine_learning::mojom::HandwritingRecognizer;
 using ::chromeos::machine_learning::mojom::HandwritingRecognizerSpec;
 using ::chromeos::machine_learning::mojom::HandwritingRecognizerSpecPtr;
 using ::chromeos::machine_learning::mojom::LoadModelResult;
-using ::chromeos::machine_learning::mojom::MachineLearningServiceRequest;
-using ::chromeos::machine_learning::mojom::ModelRequest;
+using ::chromeos::machine_learning::mojom::MachineLearningService;
+using ::chromeos::machine_learning::mojom::Model;
+using ::chromeos::machine_learning::mojom::TextClassifier;
 
 constexpr char kSystemModelDir[] = "/opt/google/chrome/ml_models/";
 // Base name for UMA metrics related to model loading (`LoadBuiltinModel`,
@@ -56,37 +57,37 @@
 
 MachineLearningServiceImpl::MachineLearningServiceImpl(
     mojo::ScopedMessagePipeHandle pipe,
-    base::Closure connection_error_handler,
+    base::Closure disconnect_handler,
     const std::string& model_dir)
     : icu_data_(nullptr),
       text_classifier_model_filename_(kTextClassifierModelFile),
       builtin_model_metadata_(GetBuiltinModelMetadata()),
       model_dir_(model_dir),
-      binding_(this,
-               mojo::InterfaceRequest<
-                   chromeos::machine_learning::mojom::MachineLearningService>(
-                   std::move(pipe))) {
-  binding_.set_connection_error_handler(std::move(connection_error_handler));
+      receiver_(this,
+                mojo::InterfaceRequest<
+                    chromeos::machine_learning::mojom::MachineLearningService>(
+                    std::move(pipe))) {
+  receiver_.set_disconnect_handler(std::move(disconnect_handler));
 }
 
 MachineLearningServiceImpl::MachineLearningServiceImpl(
-    mojo::ScopedMessagePipeHandle pipe, base::Closure connection_error_handler)
-    : MachineLearningServiceImpl(std::move(pipe),
-                                 std::move(connection_error_handler),
-                                 kSystemModelDir) {}
+    mojo::ScopedMessagePipeHandle pipe, base::Closure disconnect_handler)
+    : MachineLearningServiceImpl(
+          std::move(pipe), std::move(disconnect_handler), kSystemModelDir) {}
 
 void MachineLearningServiceImpl::SetTextClassifierModelFilenameForTesting(
     const std::string& filename) {
   text_classifier_model_filename_ = filename;
 }
 
-void MachineLearningServiceImpl::Clone(MachineLearningServiceRequest request) {
-  clone_bindings_.AddBinding(this, std::move(request));
+void MachineLearningServiceImpl::Clone(
+    mojo::PendingReceiver<MachineLearningService> receiver) {
+  clone_receivers_.Add(this, std::move(receiver));
 }
 
 void MachineLearningServiceImpl::LoadBuiltinModel(
     BuiltinModelSpecPtr spec,
-    ModelRequest request,
+    mojo::PendingReceiver<Model> receiver,
     LoadBuiltinModelCallback callback) {
   // Unsupported models do not have metadata entries.
   const auto metadata_lookup = builtin_model_metadata_.find(spec->id);
@@ -118,7 +119,7 @@
   }
 
   ModelImpl::Create(metadata.required_inputs, metadata.required_outputs,
-                    std::move(model), std::move(request),
+                    std::move(model), std::move(receiver),
                     metadata.metrics_model_name);
 
   std::move(callback).Run(LoadModelResult::OK);
@@ -129,7 +130,7 @@
 
 void MachineLearningServiceImpl::LoadFlatBufferModel(
     FlatBufferModelSpecPtr spec,
-    ModelRequest request,
+    mojo::PendingReceiver<Model> receiver,
     LoadFlatBufferModelCallback callback) {
   DCHECK(!spec->metrics_model_name.empty());
 
@@ -156,7 +157,7 @@
   ModelImpl::Create(
       std::map<std::string, int>(spec->inputs.begin(), spec->inputs.end()),
       std::map<std::string, int>(spec->outputs.begin(), spec->outputs.end()),
-      std::move(model), std::move(model_string_impl), std::move(request),
+      std::move(model), std::move(model_string_impl), std::move(receiver),
       spec->metrics_model_name);
 
   std::move(callback).Run(LoadModelResult::OK);
@@ -166,7 +167,7 @@
 }
 
 void MachineLearningServiceImpl::LoadTextClassifier(
-    chromeos::machine_learning::mojom::TextClassifierRequest request,
+    mojo::PendingReceiver<TextClassifier> receiver,
     LoadTextClassifierCallback callback) {
   RequestMetrics<LoadModelResult> request_metrics("TextClassifier",
                                                   kMetricsRequestName);
@@ -187,7 +188,7 @@
   // Create the TextClassifier.
   if (!TextClassifierImpl::Create(&scoped_mmap,
                                   model_dir_ + kLanguageIdentificationModelFile,
-                                  std::move(request))) {
+                                  std::move(receiver))) {
     LOG(ERROR) << "Failed to create TextClassifierImpl object.";
     std::move(callback).Run(LoadModelResult::LOAD_MODEL_ERROR);
     request_metrics.RecordRequestEvent(LoadModelResult::LOAD_MODEL_ERROR);
@@ -204,16 +205,16 @@
 }
 
 void MachineLearningServiceImpl::LoadHandwritingModel(
-    HandwritingRecognizerRequest request,
+    mojo::PendingReceiver<HandwritingRecognizer> receiver,
     LoadHandwritingModelCallback callback) {
   // Use english as default language.
   LoadHandwritingModelWithSpec(HandwritingRecognizerSpec::New("en"),
-                               std::move(request), std::move(callback));
+                               std::move(receiver), std::move(callback));
 }
 
 void MachineLearningServiceImpl::LoadHandwritingModelWithSpec(
     HandwritingRecognizerSpecPtr spec,
-    HandwritingRecognizerRequest request,
+    mojo::PendingReceiver<HandwritingRecognizer> receiver,
     LoadHandwritingModelCallback callback) {
   RequestMetrics<LoadModelResult> request_metrics("HandwritingModel",
                                                   kMetricsRequestName);
@@ -253,7 +254,8 @@
   }
 
   // Create HandwritingRecognizer.
-  if (!HandwritingRecognizerImpl::Create(std::move(spec), std::move(request))) {
+  if (!HandwritingRecognizerImpl::Create(std::move(spec),
+                                         std::move(receiver))) {
     LOG(ERROR) << "LoadHandwritingRecognizer returned false.";
     std::move(callback).Run(LoadModelResult::LOAD_MODEL_ERROR);
     request_metrics.RecordRequestEvent(LoadModelResult::LOAD_MODEL_ERROR);