Migrate local-references to old mojo types declared in //components/arc

Convert remaining references to old mojo types in //components/arc and
other paths referencing the ARC-related types (i.e. //ash, //chrome), but
without touching the signature of the method implementing the actual mojo
interfaces as defined in the .mojom files in //compoments/arc/mojom, which
are being handled separately, as part of crbug.com/1035484.

TBR=jam@chromium.org

Bug: 955171
Change-Id: I452c7cfa2d1fc783eb4e629c4504c040c1f82908
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1975875
Commit-Queue: Mario Sanchez Prada <mario@igalia.com>
Reviewed-by: Yusuke Sato <yusukes@chromium.org>
Reviewed-by: Steven Bennetts <stevenjb@chromium.org>
Reviewed-by: Oksana Zhuravlova <oksamyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#726892}
diff --git a/ash/public/cpp/arc_notifications_host_initializer.h b/ash/public/cpp/arc_notifications_host_initializer.h
index 3238ad58..4006d6b1 100644
--- a/ash/public/cpp/arc_notifications_host_initializer.h
+++ b/ash/public/cpp/arc_notifications_host_initializer.h
@@ -7,6 +7,7 @@
 
 #include "ash/public/cpp/ash_public_export.h"
 #include "components/arc/mojom/notifications.mojom.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 
 namespace ash {
 
@@ -15,7 +16,8 @@
   static ArcNotificationsHostInitializer* Get();
 
   virtual void SetArcNotificationsInstance(
-      arc::mojom::NotificationsInstancePtr arc_notification_instance) = 0;
+      mojo::PendingRemote<arc::mojom::NotificationsInstance>
+          arc_notification_instance) = 0;
 
  protected:
   ArcNotificationsHostInitializer();
diff --git a/ash/system/message_center/arc/arc_notification_manager.cc b/ash/system/message_center/arc/arc_notification_manager.cc
index 511d6491..c45cb7ed 100644
--- a/ash/system/message_center/arc/arc_notification_manager.cc
+++ b/ash/system/message_center/arc/arc_notification_manager.cc
@@ -74,15 +74,16 @@
   InstanceOwner() = default;
   ~InstanceOwner() = default;
 
-  void SetInstancePtr(NotificationsInstancePtr instance_ptr) {
+  void SetInstanceRemote(
+      mojo::PendingRemote<arc::mojom::NotificationsInstance> instance_remote) {
     DCHECK(!channel_);
 
     channel_ =
         std::make_unique<MojoChannel<NotificationsInstance, NotificationsHost>>(
-            &holder_, std::move(instance_ptr));
+            &holder_, std::move(instance_remote));
 
     // Using base::Unretained because |this| owns |channel_|.
-    channel_->set_connection_error_handler(
+    channel_->set_disconnect_handler(
         base::BindOnce(&InstanceOwner::OnDisconnected, base::Unretained(this)));
     channel_->QueryVersion();
   }
@@ -139,8 +140,9 @@
   instance_owner_.reset();
 }
 
-void ArcNotificationManager::SetInstance(NotificationsInstancePtr instance) {
-  instance_owner_->SetInstancePtr(std::move(instance));
+void ArcNotificationManager::SetInstance(
+    mojo::PendingRemote<arc::mojom::NotificationsInstance> instance_remote) {
+  instance_owner_->SetInstanceRemote(std::move(instance_remote));
 }
 
 ConnectionHolder<NotificationsInstance, NotificationsHost>*
diff --git a/ash/system/message_center/arc/arc_notification_manager.h b/ash/system/message_center/arc/arc_notification_manager.h
index 84e61eda..c324fbfb 100644
--- a/ash/system/message_center/arc/arc_notification_manager.h
+++ b/ash/system/message_center/arc/arc_notification_manager.h
@@ -14,6 +14,7 @@
 #include "components/arc/mojom/notifications.mojom.h"
 #include "components/arc/session/connection_holder.h"
 #include "components/arc/session/connection_observer.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "ui/message_center/message_center.h"
 
 namespace ash {
@@ -36,7 +37,8 @@
 
   ~ArcNotificationManager() override;
 
-  void SetInstance(arc::mojom::NotificationsInstancePtr instance);
+  void SetInstance(
+      mojo::PendingRemote<arc::mojom::NotificationsInstance> instance_remote);
 
   arc::ConnectionHolder<arc::mojom::NotificationsInstance,
                         arc::mojom::NotificationsHost>*
diff --git a/ash/system/message_center/arc/arc_notification_manager_unittest.cc b/ash/system/message_center/arc/arc_notification_manager_unittest.cc
index b467602c..9125a4a 100644
--- a/ash/system/message_center/arc/arc_notification_manager_unittest.cc
+++ b/ash/system/message_center/arc/arc_notification_manager_unittest.cc
@@ -16,7 +16,7 @@
 #include "components/arc/session/connection_holder.h"
 #include "components/arc/test/connection_holder_util.h"
 #include "components/arc/test/fake_notifications_instance.h"
-#include "mojo/public/cpp/bindings/interface_ptr.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/message_center/fake_message_center.h"
@@ -140,10 +140,10 @@
     receiver_ =
         std::make_unique<mojo::Receiver<arc::mojom::NotificationsInstance>>(
             arc_notifications_instance_.get());
-    arc::mojom::NotificationsInstancePtr instance_ptr;
-    receiver_->Bind(mojo::MakeRequest(&instance_ptr));
+    mojo::PendingRemote<arc::mojom::NotificationsInstance> remote;
+    receiver_->Bind(remote.InitWithNewPipeAndPassReceiver());
 
-    arc_notification_manager_->SetInstance(std::move(instance_ptr));
+    arc_notification_manager_->SetInstance(std::move(remote));
     WaitForInstanceReady(
         arc_notification_manager_->GetConnectionHolderForTest());
   }
diff --git a/ash/system/message_center/message_center_controller.cc b/ash/system/message_center/message_center_controller.cc
index 13738ab..1d7dba9 100644
--- a/ash/system/message_center/message_center_controller.cc
+++ b/ash/system/message_center/message_center_controller.cc
@@ -97,7 +97,8 @@
 }
 
 void MessageCenterController::SetArcNotificationsInstance(
-    arc::mojom::NotificationsInstancePtr arc_notification_instance) {
+    mojo::PendingRemote<arc::mojom::NotificationsInstance>
+        arc_notification_instance) {
   if (!arc_notification_manager_) {
     arc_notification_manager_ = std::make_unique<ArcNotificationManager>(
         std::make_unique<ArcNotificationManagerDelegateImpl>(),
diff --git a/ash/system/message_center/message_center_controller.h b/ash/system/message_center/message_center_controller.h
index 88bbc1e9..203cc36 100644
--- a/ash/system/message_center/message_center_controller.h
+++ b/ash/system/message_center/message_center_controller.h
@@ -10,6 +10,7 @@
 #include "ash/ash_export.h"
 #include "ash/public/cpp/arc_notifications_host_initializer.h"
 #include "base/macros.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 
 class PrefRegistrySimple;
 
@@ -36,7 +37,8 @@
 
   // ArcNotificationsHostInitializer:
   void SetArcNotificationsInstance(
-      arc::mojom::NotificationsInstancePtr arc_notification_instance) override;
+      mojo::PendingRemote<arc::mojom::NotificationsInstance>
+          arc_notification_instance) override;
 
   InactiveUserNotificationBlocker*
   inactive_user_notification_blocker_for_testing() {
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc
index f71d7117..2c36bdde 100644
--- a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc
+++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.cc
@@ -2774,9 +2774,9 @@
     return;
   }
   std::move(callback).Run(mojom::BluetoothStatus::SUCCESS, listen_channel,
-                          mojo::MakeRequest(&sock_wrapper->remote));
+                          sock_wrapper->remote.BindNewPipeAndPassReceiver());
 
-  sock_wrapper->remote.set_connection_error_handler(
+  sock_wrapper->remote.set_disconnect_handler(
       base::BindOnce(&ArcBluetoothBridge::RfcommCloseListeningSocket,
                      weak_factory_.GetWeakPtr(), sock_wrapper.get()));
   listening_sockets_.insert(std::move(sock_wrapper));
@@ -2808,8 +2808,8 @@
   }
 
   std::move(callback).Run(mojom::BluetoothStatus::SUCCESS,
-                          mojo::MakeRequest(&sock_wrapper->remote));
-  sock_wrapper->remote.set_connection_error_handler(
+                          sock_wrapper->remote.BindNewPipeAndPassReceiver());
+  sock_wrapper->remote.set_disconnect_handler(
       base::BindOnce(&ArcBluetoothBridge::RfcommCloseConnectingSocket,
                      weak_factory_.GetWeakPtr(), sock_wrapper.get()));
   connecting_sockets_.insert(std::move(sock_wrapper));
diff --git a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
index ec3485d..27ef6b3 100644
--- a/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
+++ b/chrome/browser/chromeos/arc/bluetooth/arc_bluetooth_bridge.h
@@ -37,6 +37,7 @@
 #include "device/bluetooth/bluetooth_remote_gatt_descriptor.h"
 #include "device/bluetooth/bluetooth_remote_gatt_service.h"
 #include "device/bluetooth/bluez/bluetooth_adapter_bluez.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 namespace content {
 class BrowserContext;
@@ -521,14 +522,14 @@
   // Data structures for RFCOMM listening/connecting sockets that live in
   // Chrome.
   struct RfcommListeningSocket {
-    mojom::RfcommListeningSocketClientPtr remote;
+    mojo::Remote<mojom::RfcommListeningSocketClient> remote;
     base::ScopedFD file;
     std::unique_ptr<base::FileDescriptorWatcher::Controller> controller;
     RfcommListeningSocket();
     ~RfcommListeningSocket();
   };
   struct RfcommConnectingSocket {
-    mojom::RfcommConnectingSocketClientPtr remote;
+    mojo::Remote<mojom::RfcommConnectingSocketClient> remote;
     base::ScopedFD file;
     std::unique_ptr<base::FileDescriptorWatcher::Controller> controller;
     RfcommConnectingSocket();
diff --git a/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.cc b/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.cc
index 8e39aa8..4a8402b 100644
--- a/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.cc
+++ b/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.cc
@@ -80,7 +80,7 @@
     // it as an error.
     DVLOG(1) << "ArcOemCryptoBridge had a failure in D-Bus with the daemon";
     // Reset this so we don't think it is bound on future calls to Connect.
-    oemcrypto_host_daemon_ptr_.reset();
+    oemcrypto_host_daemon_remote_.reset();
     return;
   }
   DVLOG(1) << "ArcOemCryptoBridge succeeded with Mojo bootstrapping.";
@@ -107,7 +107,7 @@
     return;
   }
 
-  if (oemcrypto_host_daemon_ptr_.is_bound()) {
+  if (oemcrypto_host_daemon_remote_.is_bound()) {
     DVLOG(1) << "Re-using bootstrap connection for OemCryptoService Connect";
     ConnectToDaemon(std::move(request));
     return;
@@ -126,12 +126,13 @@
   // Bind the Mojo pipe to the interface before we send the D-Bus message
   // to avoid any kind of race condition with detecting it's been bound.
   // It's safe to do this before the other end binds anyways.
-  oemcrypto_host_daemon_ptr_.Bind(
-      mojo::InterfacePtrInfo<arc_oemcrypto::mojom::OemCryptoHostDaemon>(
+  oemcrypto_host_daemon_remote_.reset();
+  oemcrypto_host_daemon_remote_.Bind(
+      mojo::PendingRemote<arc_oemcrypto::mojom::OemCryptoHostDaemon>(
           std::move(server_pipe), 0u));
   DVLOG(1) << "Bound remote OemCryptoHostDaemon interface to pipe";
 
-  oemcrypto_host_daemon_ptr_.set_connection_error_handler(base::BindOnce(
+  oemcrypto_host_daemon_remote_.set_disconnect_handler(base::BindOnce(
       &ArcOemCryptoBridge::OnMojoConnectionError, weak_factory_.GetWeakPtr()));
   chromeos::DBusThreadManager::Get()
       ->GetArcOemCryptoClient()
@@ -143,7 +144,7 @@
 
 void ArcOemCryptoBridge::ConnectToDaemon(
     mojom::OemCryptoServiceRequest request) {
-  if (!oemcrypto_host_daemon_ptr_) {
+  if (!oemcrypto_host_daemon_remote_) {
     VLOG(1) << "Mojo connection is already lost.";
     return;
   }
@@ -160,18 +161,18 @@
 void ArcOemCryptoBridge::FinishConnectingToDaemon(
     mojom::OemCryptoServiceRequest request,
     mojo::PendingRemote<mojom::ProtectedBufferManager> gpu_buffer_manager) {
-  if (!oemcrypto_host_daemon_ptr_) {
+  if (!oemcrypto_host_daemon_remote_) {
     VLOG(1) << "Mojo connection is already lost.";
     return;
   }
 
-  oemcrypto_host_daemon_ptr_->Connect(std::move(request),
-                                      std::move(gpu_buffer_manager));
+  oemcrypto_host_daemon_remote_->Connect(std::move(request),
+                                         std::move(gpu_buffer_manager));
 }
 
 void ArcOemCryptoBridge::OnMojoConnectionError() {
   LOG(ERROR) << "ArcOemCryptoBridge Mojo connection lost.";
-  oemcrypto_host_daemon_ptr_.reset();
+  oemcrypto_host_daemon_remote_.reset();
 }
 
 }  // namespace arc
diff --git a/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.h b/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.h
index 8ed5f06..d280fc2 100644
--- a/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.h
+++ b/chrome/browser/chromeos/arc/oemcrypto/arc_oemcrypto_bridge.h
@@ -14,6 +14,7 @@
 #include "components/arc/mojom/oemcrypto_daemon.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 namespace content {
 class BrowserContext;
@@ -48,7 +49,8 @@
   void OnMojoConnectionError();
 
   ArcBridgeService* const arc_bridge_service_;  // Owned by ArcServiceManager.
-  arc_oemcrypto::mojom::OemCryptoHostDaemonPtr oemcrypto_host_daemon_ptr_;
+  mojo::Remote<arc_oemcrypto::mojom::OemCryptoHostDaemon>
+      oemcrypto_host_daemon_remote_;
 
   // WeakPtrFactory to use for callbacks.
   base::WeakPtrFactory<ArcOemCryptoBridge> weak_factory_{this};
diff --git a/components/arc/midis/arc_midis_bridge.cc b/components/arc/midis/arc_midis_bridge.cc
index 4972701..a0edd30 100644
--- a/components/arc/midis/arc_midis_bridge.cc
+++ b/components/arc/midis/arc_midis_bridge.cc
@@ -12,6 +12,7 @@
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "components/arc/arc_browser_context_keyed_service_factory_base.h"
 #include "components/arc/session/arc_bridge_service.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/platform/platform_channel.h"
 #include "mojo/public/cpp/system/invitation.h"
 
@@ -61,22 +62,22 @@
     bool result) {
   if (!result) {
     LOG(ERROR) << "ArcMidisBridge had a failure in D-Bus with the daemon.";
-    midis_host_ptr_.reset();
+    midis_host_remote_.reset();
     return;
   }
-  if (!midis_host_ptr_) {
+  if (!midis_host_remote_) {
     VLOG(1) << "ArcMidisBridge was already lost.";
     return;
   }
   DVLOG(1) << "ArcMidisBridge succeeded with Mojo bootstrapping.";
-  midis_host_ptr_->Connect(std::move(request), std::move(client_ptr));
+  midis_host_remote_->Connect(std::move(request), std::move(client_ptr));
 }
 
 void ArcMidisBridge::Connect(mojom::MidisServerRequest request,
                              mojom::MidisClientPtr client_ptr) {
-  if (midis_host_ptr_.is_bound()) {
+  if (midis_host_remote_.is_bound()) {
     DVLOG(1) << "Re-using bootstrap connection for MidisServer Connect.";
-    midis_host_ptr_->Connect(std::move(request), std::move(client_ptr));
+    midis_host_remote_->Connect(std::move(request), std::move(client_ptr));
     return;
   }
   DVLOG(1) << "Bootstrapping the Midis connection via D-Bus.";
@@ -88,11 +89,12 @@
                                  base::kNullProcessHandle,
                                  channel.TakeLocalEndpoint());
 
-  midis_host_ptr_.Bind(
-      mojo::InterfacePtrInfo<mojom::MidisHost>(std::move(server_pipe), 0u));
+  midis_host_remote_.reset();
+  midis_host_remote_.Bind(
+      mojo::PendingRemote<mojom::MidisHost>(std::move(server_pipe), 0u));
   DVLOG(1) << "Bound remote MidisHost interface to pipe.";
 
-  midis_host_ptr_.set_connection_error_handler(base::BindOnce(
+  midis_host_remote_.set_disconnect_handler(base::BindOnce(
       &ArcMidisBridge::OnMojoConnectionError, weak_factory_.GetWeakPtr()));
   chromeos::DBusThreadManager::Get()
       ->GetArcMidisClient()
@@ -105,7 +107,7 @@
 
 void ArcMidisBridge::OnMojoConnectionError() {
   LOG(ERROR) << "ArcMidisBridge Mojo connection lost.";
-  midis_host_ptr_.reset();
+  midis_host_remote_.reset();
 }
 
 }  // namespace arc
diff --git a/components/arc/midis/arc_midis_bridge.h b/components/arc/midis/arc_midis_bridge.h
index 2e49a602..6bfcf7b 100644
--- a/components/arc/midis/arc_midis_bridge.h
+++ b/components/arc/midis/arc_midis_bridge.h
@@ -12,6 +12,7 @@
 #include "base/macros.h"
 #include "components/arc/mojom/midis.mojom.h"
 #include "components/keyed_service/core/keyed_service.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 namespace content {
 class BrowserContext;
@@ -43,7 +44,7 @@
   void OnMojoConnectionError();
 
   ArcBridgeService* const arc_bridge_service_;  // Owned by ArcServiceManager.
-  mojom::MidisHostPtr midis_host_ptr_;
+  mojo::Remote<mojom::MidisHost> midis_host_remote_;
 
   // WeakPtrFactory to use for callbacks.
   base::WeakPtrFactory<ArcMidisBridge> weak_factory_{this};
diff --git a/components/arc/session/arc_bridge_host_impl.cc b/components/arc/session/arc_bridge_host_impl.cc
index 01c42b1..82097b7c 100644
--- a/components/arc/session/arc_bridge_host_impl.cc
+++ b/components/arc/session/arc_bridge_host_impl.cc
@@ -67,14 +67,15 @@
 
 namespace arc {
 
-ArcBridgeHostImpl::ArcBridgeHostImpl(ArcBridgeService* arc_bridge_service,
-                                     mojom::ArcBridgeInstancePtr instance)
+ArcBridgeHostImpl::ArcBridgeHostImpl(
+    ArcBridgeService* arc_bridge_service,
+    mojo::PendingRemote<mojom::ArcBridgeInstance> instance)
     : arc_bridge_service_(arc_bridge_service),
       receiver_(this),
       instance_(std::move(instance)) {
   DCHECK(arc_bridge_service_);
   DCHECK(instance_.is_bound());
-  instance_.set_connection_error_handler(
+  instance_.set_disconnect_handler(
       base::BindOnce(&ArcBridgeHostImpl::OnClosed, base::Unretained(this)));
   mojom::ArcBridgeHostPtr host_proxy;
   receiver_.Bind(mojo::MakeRequest(&host_proxy));
@@ -232,7 +233,7 @@
     mojom::NotificationsInstancePtr notifications_ptr) {
   // Forward notification instance to ash.
   ash::ArcNotificationsHostInitializer::Get()->SetArcNotificationsInstance(
-      std::move(notifications_ptr));
+      notifications_ptr.PassInterface());
 }
 
 void ArcBridgeHostImpl::OnObbMounterInstanceReady(
@@ -382,13 +383,13 @@
   // closed on ArcBridgeHost/Instance closing or the ArcBridgeHostImpl's
   // destruction.
   auto* channel =
-      new MojoChannel<InstanceType, HostType>(holder, std::move(ptr));
+      new MojoChannel<InstanceType, HostType>(holder, ptr.PassInterface());
   mojo_channels_.emplace_back(channel);
 
   // Since |channel| is managed by |mojo_channels_|, its lifetime is shorter
   // than |this|. Thus, the connection error handler will be invoked only
   // when |this| is alive and base::Unretained is safe here.
-  channel->set_connection_error_handler(base::BindOnce(
+  channel->set_disconnect_handler(base::BindOnce(
       &ArcBridgeHostImpl::OnChannelClosed, base::Unretained(this), channel));
 
   // Call QueryVersion so that the version info is properly stored in the
diff --git a/components/arc/session/arc_bridge_host_impl.h b/components/arc/session/arc_bridge_host_impl.h
index cf16bea..d0c78d4 100644
--- a/components/arc/session/arc_bridge_host_impl.h
+++ b/components/arc/session/arc_bridge_host_impl.h
@@ -13,7 +13,9 @@
 #include "components/arc/mojom/arc_bridge.mojom.h"
 #include "components/arc/session/connection_holder.h"
 #include "mojo/public/cpp/bindings/interface_ptr.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 namespace arc {
 
@@ -32,7 +34,7 @@
 class ArcBridgeHostImpl : public mojom::ArcBridgeHost {
  public:
   ArcBridgeHostImpl(ArcBridgeService* arc_bridge_service,
-                    mojom::ArcBridgeInstancePtr instance);
+                    mojo::PendingRemote<mojom::ArcBridgeInstance> instance);
   ~ArcBridgeHostImpl() override;
 
   // ArcBridgeHost overrides.
@@ -139,7 +141,7 @@
   ArcBridgeService* const arc_bridge_service_;
 
   mojo::Receiver<mojom::ArcBridgeHost> receiver_;
-  mojom::ArcBridgeInstancePtr instance_;
+  mojo::Remote<mojom::ArcBridgeInstance> instance_;
 
   // Put as a last member to ensure that any callback tied to the elements
   // is not invoked.
diff --git a/components/arc/session/arc_session_impl.cc b/components/arc/session/arc_session_impl.cc
index 19398fd..9ed591be 100644
--- a/components/arc/session/arc_session_impl.cc
+++ b/components/arc/session/arc_session_impl.cc
@@ -33,7 +33,8 @@
 #include "components/arc/session/arc_bridge_host_impl.h"
 #include "components/user_manager/user_manager.h"
 #include "components/version_info/channel.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "mojo/public/cpp/platform/named_platform_channel.h"
 #include "mojo/public/cpp/platform/platform_channel.h"
 #include "mojo/public/cpp/platform/platform_handle.h"
@@ -294,11 +295,9 @@
     return;
   }
 
-  mojom::ArcBridgeInstancePtr instance;
-  instance.Bind(mojo::InterfacePtrInfo<mojom::ArcBridgeInstance>(
-      std::move(server_pipe), 0u));
   std::move(callback).Run(std::make_unique<ArcBridgeHostImpl>(
-      arc_bridge_service_, std::move(instance)));
+      arc_bridge_service_, mojo::PendingRemote<mojom::ArcBridgeInstance>(
+                               std::move(server_pipe), 0u)));
 }
 
 }  // namespace
diff --git a/components/arc/session/mojo_channel.h b/components/arc/session/mojo_channel.h
index 55eb8db..f8b8ce5 100644
--- a/components/arc/session/mojo_channel.h
+++ b/components/arc/session/mojo_channel.h
@@ -10,10 +10,12 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "components/arc/session/connection_holder.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
 
 namespace arc {
 
-// Thin interface to wrap InterfacePtr<T> with type erasure.
+// Thin interface to wrap Remote<T> with type erasure.
 class MojoChannelBase {
  public:
   virtual ~MojoChannelBase() = default;
@@ -25,39 +27,39 @@
   DISALLOW_COPY_AND_ASSIGN(MojoChannelBase);
 };
 
-// Thin wrapper for InterfacePtr<T>, where T is one of ARC mojo Instance class.
+// Thin wrapper for Remote<T>, where T is one of ARC mojo Instance class.
 template <typename InstanceType, typename HostType>
 class MojoChannel : public MojoChannelBase {
  public:
   MojoChannel(ConnectionHolder<InstanceType, HostType>* holder,
-              mojo::InterfacePtr<InstanceType> ptr)
-      : holder_(holder), ptr_(std::move(ptr)) {
+              mojo::PendingRemote<InstanceType> remote)
+      : holder_(holder), remote_(std::move(remote)) {
     // Delay registration to the ConnectionHolder until the version is ready.
   }
 
-  ~MojoChannel() override { holder_->CloseInstance(ptr_.get()); }
+  ~MojoChannel() override { holder_->CloseInstance(remote_.get()); }
 
-  void set_connection_error_handler(base::OnceClosure error_handler) {
-    ptr_.set_connection_error_handler(std::move(error_handler));
+  void set_disconnect_handler(base::OnceClosure error_handler) {
+    remote_.set_disconnect_handler(std::move(error_handler));
   }
 
   void QueryVersion() {
-    // Note: the callback will not be called if |ptr_| is destroyed.
-    ptr_.QueryVersion(
+    // Note: the callback will not be called if |remote_| is destroyed.
+    remote_.QueryVersion(
         base::Bind(&MojoChannel::OnVersionReady, base::Unretained(this)));
   }
 
  private:
   void OnVersionReady(uint32_t unused_version) {
-    holder_->SetInstance(ptr_.get(), ptr_.version());
+    holder_->SetInstance(remote_.get(), remote_.version());
   }
 
   // Externally owned ConnectionHolder instance.
   ConnectionHolder<InstanceType, HostType>* const holder_;
 
-  // Put as a last member to ensure that any callback tied to the |ptr_|
+  // Put as a last member to ensure that any callback tied to the |remote_|
   // is not invoked.
-  mojo::InterfacePtr<InstanceType> ptr_;
+  mojo::Remote<InstanceType> remote_;
 
   DISALLOW_COPY_AND_ASSIGN(MojoChannel);
 };