Convert CookieChangeListener to new Mojo types

This CL converts CookieChangeListenerPtr and
CookieChangeListenerRequest to new Mojo types.
It updates AddChangeListener from
restricted_cookie_manager.mojom,
AddCookieChangeListener and AddGlobalChangeListener
from cookie_manager.mojom.

Bug: 955171, 978694
Change-Id: I315979060078f10b8b73827b9a42a3b705d0a45d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1753371
Commit-Queue: Julie Kim <jkim@igalia.com>
Reviewed-by: Cait Phillips <caitkp@chromium.org>
Reviewed-by: Wez <wez@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Reviewed-by: Marc Treib <treib@chromium.org>
Reviewed-by: Ken Rockot <rockot@google.com>
Reviewed-by: Nate Fischer <ntfschr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#688557}
diff --git a/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.cc b/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.cc
index 09c76c5..8d3360f 100644
--- a/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.cc
+++ b/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.cc
@@ -9,7 +9,9 @@
 #include "base/task/post_task.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "mojo/public/cpp/bindings/self_owned_receiver.h"
 
 namespace android_webview {
 
@@ -21,7 +23,7 @@
       const GURL& site_for_cookies,
       base::WeakPtr<AwProxyingRestrictedCookieManager>
           aw_restricted_cookie_manager,
-      network::mojom::CookieChangeListenerPtr client_listener)
+      mojo::PendingRemote<network::mojom::CookieChangeListener> client_listener)
       : url_(url),
         site_for_cookies_(site_for_cookies),
         aw_restricted_cookie_manager_(aw_restricted_cookie_manager),
@@ -39,7 +41,7 @@
   const GURL site_for_cookies_;
   base::WeakPtr<AwProxyingRestrictedCookieManager>
       aw_restricted_cookie_manager_;
-  network::mojom::CookieChangeListenerPtr client_listener_;
+  mojo::Remote<network::mojom::CookieChangeListener> client_listener_;
 };
 
 // static
@@ -100,21 +102,23 @@
     const GURL& url,
     const GURL& site_for_cookies,
     const url::Origin& top_frame_origin,
-    network::mojom::CookieChangeListenerPtr listener,
+    mojo::PendingRemote<network::mojom::CookieChangeListener> listener,
     AddChangeListenerCallback callback) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
 
-  network::mojom::CookieChangeListenerPtr proxy_listener_ptr;
+  mojo::PendingRemote<network::mojom::CookieChangeListener>
+      proxy_listener_remote;
   auto proxy_listener =
       std::make_unique<AwProxyingRestrictedCookieManagerListener>(
           url, site_for_cookies, weak_factory_.GetWeakPtr(),
           std::move(listener));
 
-  mojo::MakeStrongBinding(std::move(proxy_listener),
-                          mojo::MakeRequest(&proxy_listener_ptr));
+  mojo::MakeSelfOwnedReceiver(
+      std::move(proxy_listener),
+      proxy_listener_remote.InitWithNewPipeAndPassReceiver());
 
   underlying_restricted_cookie_manager_->AddChangeListener(
-      url, site_for_cookies, top_frame_origin, std::move(proxy_listener_ptr),
+      url, site_for_cookies, top_frame_origin, std::move(proxy_listener_remote),
       std::move(callback));
 }
 
diff --git a/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h b/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h
index 86e20f6..384e75d 100644
--- a/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h
+++ b/android_webview/browser/network_service/aw_proxying_restricted_cookie_manager.h
@@ -43,11 +43,12 @@
                           const GURL& site_for_cookies,
                           const url::Origin& top_frame_origin,
                           SetCanonicalCookieCallback callback) override;
-  void AddChangeListener(const GURL& url,
-                         const GURL& site_for_cookies,
-                         const url::Origin& top_frame_origin,
-                         network::mojom::CookieChangeListenerPtr listener,
-                         AddChangeListenerCallback callback) override;
+  void AddChangeListener(
+      const GURL& url,
+      const GURL& site_for_cookies,
+      const url::Origin& top_frame_origin,
+      mojo::PendingRemote<network::mojom::CookieChangeListener> listener,
+      AddChangeListenerCallback callback) override;
 
   void SetCookieFromString(const GURL& url,
                            const GURL& site_for_cookies,
diff --git a/chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.cc b/chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.cc
index 8c63069..31c3ab8a 100644
--- a/chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.cc
+++ b/chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.cc
@@ -30,9 +30,7 @@
 AndroidSmsPairingStateTrackerImpl::AndroidSmsPairingStateTrackerImpl(
     Profile* profile,
     AndroidSmsAppManager* android_sms_app_manager)
-    : profile_(profile),
-      android_sms_app_manager_(android_sms_app_manager),
-      cookie_listener_binding_(this) {
+    : profile_(profile), android_sms_app_manager_(android_sms_app_manager) {
   android_sms_app_manager_->AddObserver(this);
   base::ThreadTaskRunnerHandle::Get()->PostTask(
       FROM_HERE,
@@ -90,7 +88,7 @@
 void AndroidSmsPairingStateTrackerImpl::OnInstalledAppUrlChanged() {
   // If the app URL changed, stop any ongoing cookie monitoring and attempt to
   // add a new change listener.
-  cookie_listener_binding_.Close();
+  cookie_listener_receiver_.reset();
   AddCookieChangeListener();
 }
 
@@ -113,11 +111,9 @@
 void AndroidSmsPairingStateTrackerImpl::AddCookieChangeListener() {
   // Trigger the first fetch of the sms cookie and start listening for changes.
   AttemptFetchMessagesPairingState();
-  network::mojom::CookieChangeListenerPtr listener_ptr;
-  cookie_listener_binding_.Bind(mojo::MakeRequest(&listener_ptr));
-
   GetCookieManager()->AddCookieChangeListener(
-      GetPairingUrl(), kMessagesPairStateCookieName, std::move(listener_ptr));
+      GetPairingUrl(), kMessagesPairStateCookieName,
+      cookie_listener_receiver_.BindNewPipeAndPassRemote());
 }
 
 }  // namespace android_sms
diff --git a/chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.h b/chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.h
index 59dfd3fb..8df16e3c 100644
--- a/chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.h
+++ b/chrome/browser/chromeos/android_sms/android_sms_pairing_state_tracker_impl.h
@@ -10,7 +10,7 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/chromeos/android_sms/android_sms_app_manager.h"
 #include "chromeos/services/multidevice_setup/public/cpp/android_sms_pairing_state_tracker.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "services/network/public/mojom/cookie_manager.mojom.h"
 #include "url/gurl.h"
 
@@ -54,7 +54,8 @@
   Profile* profile_;
   AndroidSmsAppManager* android_sms_app_manager_;
 
-  mojo::Binding<network::mojom::CookieChangeListener> cookie_listener_binding_;
+  mojo::Receiver<network::mojom::CookieChangeListener>
+      cookie_listener_receiver_{this};
   bool was_paired_on_last_update_ = false;
   base::WeakPtrFactory<AndroidSmsPairingStateTrackerImpl> weak_ptr_factory_{
       this};
diff --git a/chrome/browser/extensions/api/cookies/cookies_api.cc b/chrome/browser/extensions/api/cookies/cookies_api.cc
index 9a1e196..584fb6f 100644
--- a/chrome/browser/extensions/api/cookies/cookies_api.cc
+++ b/chrome/browser/extensions/api/cookies/cookies_api.cc
@@ -182,14 +182,14 @@
                              ? original_profile->GetOffTheRecordProfile()
                              : nullptr;
 
-  if (!binding_)
-    BindToCookieManager(&binding_, original_profile);
-  if (!otr_binding_.is_bound() && otr_profile)
-    BindToCookieManager(&otr_binding_, otr_profile);
+  if (!receiver_.is_bound())
+    BindToCookieManager(&receiver_, original_profile);
+  if (!otr_receiver_.is_bound() && otr_profile)
+    BindToCookieManager(&otr_receiver_, otr_profile);
 }
 
 void CookiesEventRouter::BindToCookieManager(
-    mojo::Binding<network::mojom::CookieChangeListener>* binding,
+    mojo::Receiver<network::mojom::CookieChangeListener>* receiver,
     Profile* profile) {
   network::mojom::CookieManager* cookie_manager =
       content::BrowserContext::GetDefaultStoragePartition(profile)
@@ -197,19 +197,17 @@
   if (!cookie_manager)
     return;
 
-  network::mojom::CookieChangeListenerPtr listener_ptr;
-  binding->Bind(mojo::MakeRequest(&listener_ptr));
-  binding->set_connection_error_handler(base::BindOnce(
-      &CookiesEventRouter::OnConnectionError, base::Unretained(this), binding));
-
-  cookie_manager->AddGlobalChangeListener(std::move(listener_ptr));
+  cookie_manager->AddGlobalChangeListener(receiver->BindNewPipeAndPassRemote());
+  receiver->set_disconnect_handler(
+      base::BindOnce(&CookiesEventRouter::OnConnectionError,
+                     base::Unretained(this), receiver));
 }
 
 void CookiesEventRouter::OnConnectionError(
-    mojo::Binding<network::mojom::CookieChangeListener>* binding) {
+    mojo::Receiver<network::mojom::CookieChangeListener>* receiver) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  binding->Close();
+  receiver->reset();
   MaybeStartListening();
 }
 
diff --git a/chrome/browser/extensions/api/cookies/cookies_api.h b/chrome/browser/extensions/api/cookies/cookies_api.h
index 1ac9de5..4741c1c 100644
--- a/chrome/browser/extensions/api/cookies/cookies_api.h
+++ b/chrome/browser/extensions/api/cookies/cookies_api.h
@@ -19,7 +19,7 @@
 #include "chrome/common/extensions/api/cookies.h"
 #include "extensions/browser/browser_context_keyed_api_factory.h"
 #include "extensions/browser/event_router.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "net/cookies/canonical_cookie.h"
 #include "services/network/public/mojom/cookie_manager.mojom.h"
 #include "url/gurl.h"
@@ -60,10 +60,10 @@
 
   void MaybeStartListening();
   void BindToCookieManager(
-      mojo::Binding<network::mojom::CookieChangeListener>* binding,
+      mojo::Receiver<network::mojom::CookieChangeListener>* receiver,
       Profile* profile);
   void OnConnectionError(
-      mojo::Binding<network::mojom::CookieChangeListener>* binding);
+      mojo::Receiver<network::mojom::CookieChangeListener>* receiver);
   void OnCookieChange(bool otr,
                       const net::CanonicalCookie& canonical_cookie,
                       network::mojom::CookieChangeCause cause);
@@ -81,10 +81,10 @@
   // profiles, we need a pair of bindings, as well as a pair of
   // CookieChangeListener instances.
   CookieChangeListener listener_{this, false};
-  mojo::Binding<network::mojom::CookieChangeListener> binding_{&listener_};
+  mojo::Receiver<network::mojom::CookieChangeListener> receiver_{&listener_};
 
   CookieChangeListener otr_listener_{this, true};
-  mojo::Binding<network::mojom::CookieChangeListener> otr_binding_{
+  mojo::Receiver<network::mojom::CookieChangeListener> otr_receiver_{
       &otr_listener_};
 
   DISALLOW_COPY_AND_ASSIGN(CookiesEventRouter);
diff --git a/chrome/browser/signin/consistency_cookie_browsertest.cc b/chrome/browser/signin/consistency_cookie_browsertest.cc
index ebaabc4..f465e02 100644
--- a/chrome/browser/signin/consistency_cookie_browsertest.cc
+++ b/chrome/browser/signin/consistency_cookie_browsertest.cc
@@ -21,8 +21,7 @@
 #include "content/public/test/browser_test_utils.h"
 #include "google_apis/gaia/gaia_switches.h"
 #include "google_apis/gaia/gaia_urls.h"
-#include "mojo/public/cpp/bindings/binding.h"
-#include "mojo/public/cpp/bindings/interface_request.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "net/cookies/canonical_cookie.h"
 #include "net/test/embedded_test_server/default_handlers.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
@@ -42,13 +41,10 @@
  public:
   TestConsistencyCookieManager(SigninClient* client,
                                AccountReconcilor* reconcilor)
-      : signin::ConsistencyCookieManagerBase(client, reconcilor),
-        cookie_listener_binding_(this) {
+      : signin::ConsistencyCookieManagerBase(client, reconcilor) {
     // Listen to cookie changes.
-    network::mojom::CookieChangeListenerPtr listener_ptr;
-    cookie_listener_binding_.Bind(mojo::MakeRequest(&listener_ptr));
     client->GetCookieManager()->AddGlobalChangeListener(
-        std::move(listener_ptr));
+        cookie_listener_receiver_.BindNewPipeAndPassRemote());
     // Subclasses have to call UpdateCookie() in the constructor.
     UpdateCookie();
     // Wait for the initial cookie to be set.
@@ -83,7 +79,8 @@
   std::string CalculateCookieValue() override { return value_; }
 
   std::string value_ = "initial_value";
-  mojo::Binding<network::mojom::CookieChangeListener> cookie_listener_binding_;
+  mojo::Receiver<network::mojom::CookieChangeListener>
+      cookie_listener_receiver_{this};
   base::OnceClosure run_loop_quit_closure_;
 };
 
diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc
index 1769d271..48ace0c 100644
--- a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc
+++ b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc
@@ -444,7 +444,6 @@
       fetcher_backoff_(&kBackoffPolicy),
       fetcher_retries_(0),
       listAccountsUnexpectedServerResponseRetried_(false),
-      cookie_listener_binding_(this),
       external_cc_result_fetched_(false),
       list_accounts_stale_(true) {
   std::string gaia_cookie_last_list_accounts_data =
@@ -475,27 +474,24 @@
 }
 
 void GaiaCookieManagerService::InitCookieListener() {
-  DCHECK(!cookie_listener_binding_);
+  DCHECK(!cookie_listener_receiver_.is_bound());
   network::mojom::CookieManager* cookie_manager =
       signin_client_->GetCookieManager();
 
   // NOTE: |cookie_manager| can be nullptr when TestSigninClient is used in
   // testing contexts.
   if (cookie_manager) {
-    network::mojom::CookieChangeListenerPtr listener_ptr;
-    cookie_listener_binding_.Bind(mojo::MakeRequest(&listener_ptr));
-    cookie_listener_binding_.set_connection_error_handler(base::BindOnce(
-        &GaiaCookieManagerService::OnCookieListenerConnectionError,
-        base::Unretained(this)));
-
     cookie_manager->AddCookieChangeListener(
         GaiaUrls::GetInstance()->google_url(), kGaiaCookieName,
-        std::move(listener_ptr));
+        cookie_listener_receiver_.BindNewPipeAndPassRemote());
+    cookie_listener_receiver_.set_disconnect_handler(base::BindOnce(
+        &GaiaCookieManagerService::OnCookieListenerConnectionError,
+        base::Unretained(this)));
   }
 }
 
 void GaiaCookieManagerService::Shutdown() {
-  cookie_listener_binding_.Close();
+  cookie_listener_receiver_.reset();
 }
 
 void GaiaCookieManagerService::SetAccountsInCookie(
@@ -716,7 +712,7 @@
 void GaiaCookieManagerService::OnCookieListenerConnectionError() {
   // A connection error from the CookieManager likely means that the network
   // service process has crashed. Try again to set up a listener.
-  cookie_listener_binding_.Close();
+  cookie_listener_receiver_.reset();
   InitCookieListener();
 }
 
diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_service.h b/components/signin/internal/identity_manager/gaia_cookie_manager_service.h
index e46fd9d..2958f05b 100644
--- a/components/signin/internal/identity_manager/gaia_cookie_manager_service.h
+++ b/components/signin/internal/identity_manager/gaia_cookie_manager_service.h
@@ -24,7 +24,7 @@
 #include "google_apis/gaia/gaia_auth_consumer.h"
 #include "google_apis/gaia/gaia_auth_fetcher.h"
 #include "google_apis/gaia/gaia_auth_util.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "net/base/backoff_entry.h"
 #include "services/network/public/mojom/cookie_manager.mojom.h"
 
@@ -382,7 +382,8 @@
   std::string access_token_;
 
   // Connection to the CookieManager that signals when the GAIA cookies change.
-  mojo::Binding<network::mojom::CookieChangeListener> cookie_listener_binding_;
+  mojo::Receiver<network::mojom::CookieChangeListener>
+      cookie_listener_receiver_{this};
 
   // A worklist for this class. Stores any pending requests that couldn't be
   // executed right away, since this class only permits one request to be
diff --git a/content/browser/cookie_store/cookie_store_manager.cc b/content/browser/cookie_store/cookie_store_manager.cc
index 8e9cd15..f91fccf 100644
--- a/content/browser/cookie_store/cookie_store_manager.cc
+++ b/content/browser/cookie_store/cookie_store_manager.cc
@@ -46,7 +46,6 @@
 CookieStoreManager::CookieStoreManager(
     scoped_refptr<ServiceWorkerContextWrapper> service_worker_context)
     : service_worker_context_(std::move(service_worker_context)),
-      cookie_change_listener_binding_(this),
       registration_user_data_key_(kSubscriptionsUserKey) {
   service_worker_context_->AddObserver(this);
 }
@@ -85,13 +84,10 @@
   DCHECK(!cookie_manager_) << __func__ << " already called";
   cookie_manager_ = std::move(cookie_manager);
 
-  DCHECK(!cookie_change_listener_binding_.is_bound());
-  ::network::mojom::CookieChangeListenerPtr cookie_change_listener;
-  cookie_change_listener_binding_.Bind(
-      mojo::MakeRequest(&cookie_change_listener));
-
+  DCHECK(!cookie_change_listener_receiver_.is_bound());
   // TODO(pwnall): Switch to an API with subscription confirmation.
-  cookie_manager_->AddGlobalChangeListener(std::move(cookie_change_listener));
+  cookie_manager_->AddGlobalChangeListener(
+      cookie_change_listener_receiver_.BindNewPipeAndPassRemote());
   std::move(callback).Run(true);
 }
 
diff --git a/content/browser/cookie_store/cookie_store_manager.h b/content/browser/cookie_store/cookie_store_manager.h
index e29565e..0943ebb 100644
--- a/content/browser/cookie_store/cookie_store_manager.h
+++ b/content/browser/cookie_store/cookie_store_manager.h
@@ -187,8 +187,8 @@
 
   // Used to receive cookie changes from the network service.
   ::network::mojom::CookieManagerPtr cookie_manager_;
-  mojo::Binding<::network::mojom::CookieChangeListener>
-      cookie_change_listener_binding_;
+  mojo::Receiver<::network::mojom::CookieChangeListener>
+      cookie_change_listener_receiver_{this};
 
   // The service worker registration user data key for subscription data.
   //
diff --git a/fuchsia/engine/browser/cookie_manager_impl.cc b/fuchsia/engine/browser/cookie_manager_impl.cc
index c7bcb3043..50f16c5 100644
--- a/fuchsia/engine/browser/cookie_manager_impl.cc
+++ b/fuchsia/engine/browser/cookie_manager_impl.cc
@@ -7,7 +7,8 @@
 #include <lib/fidl/cpp/binding.h>
 
 #include "base/fuchsia/fuchsia_logging.h"
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "net/cookies/canonical_cookie.h"
 #include "services/network/public/mojom/network_context.mojom.h"
 #include "url/gurl.h"
@@ -45,11 +46,11 @@
  public:
   // |this| will delete itself when |mojo_request| or |changes| disconnect.
   CookiesIteratorImpl(
-      mojo::InterfaceRequest<network::mojom::CookieChangeListener> mojo_request,
+      mojo::PendingReceiver<network::mojom::CookieChangeListener> mojo_receiver,
       fidl::InterfaceRequest<fuchsia::web::CookiesIterator> changes)
       : CookiesIteratorImpl(std::move(changes)) {
-    mojo_binding_.Bind(std::move(mojo_request));
-    mojo_binding_.set_connection_error_handler(base::BindOnce(
+    mojo_receiver_.Bind(std::move(mojo_receiver));
+    mojo_receiver_.set_disconnect_handler(base::BindOnce(
         &CookiesIteratorImpl::OnMojoError, base::Unretained(this)));
   }
   // |this| will delete itself when |iterator| disconnects, or if a GetNext()
@@ -75,7 +76,7 @@
  private:
   explicit CookiesIteratorImpl(
       fidl::InterfaceRequest<fuchsia::web::CookiesIterator> iterator)
-      : mojo_binding_(this), fidl_binding_(this) {
+      : mojo_receiver_(this), fidl_binding_(this) {
     fidl_binding_.Bind(std::move(iterator));
     fidl_binding_.set_error_handler([this](zx_status_t status) {
       ZX_LOG_IF(ERROR, status != ZX_ERR_PEER_CLOSED, status)
@@ -97,7 +98,7 @@
 
     if (!get_next_callback_)
       return;
-    if (mojo_binding_.is_bound() && queued_cookies_.empty())
+    if (mojo_receiver_.is_bound() && queued_cookies_.empty())
       return;
 
     // Build a vector of Cookies to return to the caller.
@@ -113,7 +114,7 @@
 
     // If this is a one-off CookieIterator then tear down once |queued_cookies_|
     // is empty.
-    if (queued_cookies_.empty() && !mojo_binding_.is_bound())
+    if (queued_cookies_.empty() && !mojo_receiver_.is_bound())
       delete this;
   }
 
@@ -124,7 +125,7 @@
     MaybeSendQueuedCookies();
   }
 
-  mojo::Binding<network::mojom::CookieChangeListener> mojo_binding_;
+  mojo::Receiver<network::mojom::CookieChangeListener> mojo_receiver_;
   fidl::Binding<fuchsia::web::CookiesIterator> fidl_binding_;
 
   GetNextCallback get_next_callback_;
@@ -168,8 +169,8 @@
     fidl::InterfaceRequest<fuchsia::web::CookiesIterator> changes) {
   EnsureCookieManager();
 
-  network::mojom::CookieChangeListenerPtr mojo_listener;
-  new CookiesIteratorImpl(mojo::MakeRequest(&mojo_listener),
+  mojo::PendingRemote<network::mojom::CookieChangeListener> mojo_listener;
+  new CookiesIteratorImpl(mojo_listener.InitWithNewPipeAndPassReceiver(),
                           std::move(changes));
 
   if (url) {
diff --git a/services/network/cookie_manager.cc b/services/network/cookie_manager.cc
index fc0bc14..37c9a89 100644
--- a/services/network/cookie_manager.cc
+++ b/services/network/cookie_manager.cc
@@ -120,9 +120,9 @@
 void CookieManager::AddCookieChangeListener(
     const GURL& url,
     const base::Optional<std::string>& name,
-    mojom::CookieChangeListenerPtr listener) {
+    mojo::PendingRemote<mojom::CookieChangeListener> listener) {
   auto listener_registration = std::make_unique<ListenerRegistration>();
-  listener_registration->listener = std::move(listener);
+  listener_registration->listener.Bind(std::move(listener));
 
   auto cookie_change_callback = base::BindRepeating(
       &CookieManager::ListenerRegistration::DispatchCookieStoreChange,
@@ -141,7 +141,7 @@
             url, std::move(cookie_change_callback));
   }
 
-  listener_registration->listener.set_connection_error_handler(
+  listener_registration->listener.set_disconnect_handler(
       base::BindOnce(&CookieManager::RemoveChangeListener,
                      // base::Unretained is safe as destruction of the
                      // CookieManager will also destroy the
@@ -158,9 +158,9 @@
 }
 
 void CookieManager::AddGlobalChangeListener(
-    mojom::CookieChangeListenerPtr listener) {
+    mojo::PendingRemote<mojom::CookieChangeListener> listener) {
   auto listener_registration = std::make_unique<ListenerRegistration>();
-  listener_registration->listener = std::move(listener);
+  listener_registration->listener.Bind(std::move(listener));
 
   listener_registration->subscription =
       cookie_store_->GetChangeDispatcher().AddCallbackForAllChanges(
@@ -171,7 +171,7 @@
               // CookieChangedSubscription, unregistering the callback.
               base::Unretained(listener_registration.get())));
 
-  listener_registration->listener.set_connection_error_handler(
+  listener_registration->listener.set_disconnect_handler(
       base::BindOnce(&CookieManager::RemoveChangeListener,
                      // base::Unretained is safe as destruction of the
                      // CookieManager will also destroy the
diff --git a/services/network/cookie_manager.h b/services/network/cookie_manager.h
index c5667882..4213330 100644
--- a/services/network/cookie_manager.h
+++ b/services/network/cookie_manager.h
@@ -13,6 +13,7 @@
 #include "base/macros.h"
 #include "components/content_settings/core/common/content_settings.h"
 #include "mojo/public/cpp/bindings/binding_set.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/cookies/cookie_change_dispatcher.h"
 #include "net/cookies/cookie_deletion_info.h"
 #include "services/network/cookie_settings.h"
@@ -70,9 +71,9 @@
   void AddCookieChangeListener(
       const GURL& url,
       const base::Optional<std::string>& name,
-      mojom::CookieChangeListenerPtr listener) override;
+      mojo::PendingRemote<mojom::CookieChangeListener> listener) override;
   void AddGlobalChangeListener(
-      mojom::CookieChangeListenerPtr listener) override;
+      mojo::PendingRemote<mojom::CookieChangeListener> listener) override;
   void CloneInterface(mojom::CookieManagerRequest new_interface) override;
 
   size_t GetClientsBoundForTesting() const { return bindings_.size(); }
@@ -112,7 +113,7 @@
     std::unique_ptr<net::CookieChangeSubscription> subscription;
 
     // The observer receiving change notifications.
-    mojom::CookieChangeListenerPtr listener;
+    mojo::Remote<mojom::CookieChangeListener> listener;
 
     DISALLOW_COPY_AND_ASSIGN(ListenerRegistration);
   };
diff --git a/services/network/cookie_manager_unittest.cc b/services/network/cookie_manager_unittest.cc
index cf42d91..ea88a239 100644
--- a/services/network/cookie_manager_unittest.cc
+++ b/services/network/cookie_manager_unittest.cc
@@ -1684,8 +1684,9 @@
     mojom::CookieChangeCause cause;
   };
 
-  CookieChangeListener(mojom::CookieChangeListenerRequest request)
-      : run_loop_(nullptr), binding_(this, std::move(request)) {}
+  CookieChangeListener(
+      mojo::PendingReceiver<mojom::CookieChangeListener> receiver)
+      : run_loop_(nullptr), receiver_(this, std::move(receiver)) {}
 
   // Blocks until the listener observes a cookie change.
   void WaitForChange() {
@@ -1717,7 +1718,7 @@
   // Loop to signal on receiving a notification if not null.
   base::RunLoop* run_loop_;
 
-  mojo::Binding<mojom::CookieChangeListener> binding_;
+  mojo::Receiver<mojom::CookieChangeListener> receiver_;
 };
 
 TEST_F(CookieManagerTest, AddCookieChangeListener) {
@@ -1727,13 +1728,12 @@
   const std::string listener_cookie_name("Cookie_Name");
   ASSERT_EQ(listener_url.host(), listener_url_host);
 
-  mojom::CookieChangeListenerPtr listener_ptr;
-  mojom::CookieChangeListenerRequest request(mojo::MakeRequest(&listener_ptr));
-
-  CookieChangeListener listener(std::move(request));
+  mojo::PendingRemote<mojom::CookieChangeListener> listener_remote;
+  CookieChangeListener listener(
+      listener_remote.InitWithNewPipeAndPassReceiver());
 
   cookie_service_client()->AddCookieChangeListener(
-      listener_url, listener_cookie_name, std::move(listener_ptr));
+      listener_url, listener_cookie_name, std::move(listener_remote));
 
   EXPECT_EQ(0u, listener.observed_changes().size());
 
@@ -1809,12 +1809,11 @@
   const std::string kThisETLDP1 = "this.com";
   const std::string kThatHost = "www.that.com";
 
-  mojom::CookieChangeListenerPtr listener_ptr;
-  mojom::CookieChangeListenerRequest request(mojo::MakeRequest(&listener_ptr));
+  mojo::PendingRemote<mojom::CookieChangeListener> listener_remote;
+  CookieChangeListener listener(
+      listener_remote.InitWithNewPipeAndPassReceiver());
 
-  CookieChangeListener listener(std::move(request));
-
-  cookie_service_client()->AddGlobalChangeListener(std::move(listener_ptr));
+  cookie_service_client()->AddGlobalChangeListener(std::move(listener_remote));
 
   EXPECT_EQ(0u, listener.observed_changes().size());
 
@@ -1893,19 +1892,17 @@
   ASSERT_EQ(listener_url.host(), listener_url_host);
   const std::string listener_cookie_name("Cookie_Name");
 
-  mojom::CookieChangeListenerPtr listener1_ptr;
-  mojom::CookieChangeListenerRequest request1(
-      mojo::MakeRequest(&listener1_ptr));
-  auto listener1 = std::make_unique<CookieChangeListener>(std::move(request1));
+  mojo::PendingRemote<mojom::CookieChangeListener> listener1_remote;
+  auto listener1 = std::make_unique<CookieChangeListener>(
+      listener1_remote.InitWithNewPipeAndPassReceiver());
   cookie_service_client()->AddCookieChangeListener(
-      listener_url, listener_cookie_name, std::move(listener1_ptr));
+      listener_url, listener_cookie_name, std::move(listener1_remote));
 
-  mojom::CookieChangeListenerPtr listener2_ptr;
-  mojom::CookieChangeListenerRequest request2(
-      mojo::MakeRequest(&listener2_ptr));
-  auto listener2 = std::make_unique<CookieChangeListener>(std::move(request2));
+  mojo::PendingRemote<mojom::CookieChangeListener> listener2_remote;
+  auto listener2 = std::make_unique<CookieChangeListener>(
+      listener2_remote.InitWithNewPipeAndPassReceiver());
   cookie_service_client()->AddCookieChangeListener(
-      listener_url, listener_cookie_name, std::move(listener2_ptr));
+      listener_url, listener_cookie_name, std::move(listener2_remote));
 
   // Add a cookie and receive a notification on both interfaces.
   service_wrapper()->SetCanonicalCookie(
diff --git a/services/network/public/mojom/cookie_manager.mojom b/services/network/public/mojom/cookie_manager.mojom
index 2860f779d..b4589404 100644
--- a/services/network/public/mojom/cookie_manager.mojom
+++ b/services/network/public/mojom/cookie_manager.mojom
@@ -271,7 +271,7 @@
   AddCookieChangeListener(
       url.mojom.Url url,
       string? name,
-      CookieChangeListener listener);
+      pending_remote<CookieChangeListener> listener);
 
   // Subscribes the given listener to changes to this CookieManager's cookies.
   //
@@ -279,7 +279,8 @@
   //
   // TODO(rdsmith): Should this have a filter to register for a lot of
   // notifications at once?  Maybe combine with the deletion filter?
-  AddGlobalChangeListener(CookieChangeListener notification_pointer);
+  AddGlobalChangeListener(
+      pending_remote<CookieChangeListener> notification_pointer);
 
   // Clone the interface for use somewhere else.  After this call,
   // requests to the same implementation may be posted to the other side
diff --git a/services/network/public/mojom/restricted_cookie_manager.mojom b/services/network/public/mojom/restricted_cookie_manager.mojom
index 8f487f1..2aee77a 100644
--- a/services/network/public/mojom/restricted_cookie_manager.mojom
+++ b/services/network/public/mojom/restricted_cookie_manager.mojom
@@ -77,7 +77,7 @@
   // The subscription is canceled by closing the pipe.
   AddChangeListener(url.mojom.Url url, url.mojom.Url site_for_cookies,
                     url.mojom.Origin top_frame_origin,
-                    CookieChangeListener listener) => ();
+                    pending_remote<CookieChangeListener> listener) => ();
 
   // Sets a cookie.  If setting of this cookie is not permitted either by web
   // platform rules, or user preferences, the attempt will be silently ignored.
diff --git a/services/network/restricted_cookie_manager.cc b/services/network/restricted_cookie_manager.cc
index 29aafcdc..9e623ba 100644
--- a/services/network/restricted_cookie_manager.cc
+++ b/services/network/restricted_cookie_manager.cc
@@ -17,6 +17,7 @@
 #include "base/strings/string_util.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "mojo/public/cpp/bindings/message.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "net/cookies/cookie_constants.h"
 #include "net/cookies/cookie_options.h"
 #include "net/cookies/cookie_store.h"
@@ -81,7 +82,7 @@
            const GURL& site_for_cookies,
            const url::Origin& top_frame_origin,
            net::CookieOptions options,
-           mojom::CookieChangeListenerPtr mojo_listener)
+           mojo::PendingRemote<mojom::CookieChangeListener> mojo_listener)
       : restricted_cookie_manager_(restricted_cookie_manager),
         url_(url),
         site_for_cookies_(site_for_cookies),
@@ -103,7 +104,7 @@
 
   ~Listener() { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); }
 
-  mojom::CookieChangeListenerPtr& mojo_listener() {
+  mojo::Remote<mojom::CookieChangeListener>& mojo_listener() {
     DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
     return mojo_listener_;
   }
@@ -148,7 +149,7 @@
   // CanonicalCookie::IncludeForRequestURL options for this listener's interest.
   const net::CookieOptions options_;
 
-  mojom::CookieChangeListenerPtr mojo_listener_;
+  mojo::Remote<mojom::CookieChangeListener> mojo_listener_;
 
   SEQUENCE_CHECKER(sequence_checker_);
 
@@ -388,7 +389,7 @@
     const GURL& url,
     const GURL& site_for_cookies,
     const url::Origin& top_frame_origin,
-    mojom::CookieChangeListenerPtr mojo_listener,
+    mojo::PendingRemote<mojom::CookieChangeListener> mojo_listener,
     AddChangeListenerCallback callback) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
   if (!ValidateAccessToCookiesAt(url)) {
@@ -402,7 +403,7 @@
       cookie_store_, this, url, site_for_cookies, top_frame_origin, net_options,
       std::move(mojo_listener));
 
-  listener->mojo_listener().set_connection_error_handler(
+  listener->mojo_listener().set_disconnect_handler(
       base::BindOnce(&RestrictedCookieManager::RemoveChangeListener,
                      weak_ptr_factory_.GetWeakPtr(),
                      // Safe because this owns the listener, so the listener is
diff --git a/services/network/restricted_cookie_manager.h b/services/network/restricted_cookie_manager.h
index 0eb1cc7..3d7d8358 100644
--- a/services/network/restricted_cookie_manager.h
+++ b/services/network/restricted_cookie_manager.h
@@ -13,7 +13,6 @@
 #include "base/memory/weak_ptr.h"
 #include "base/sequence_checker.h"
 #include "base/threading/sequenced_task_runner_handle.h"
-#include "mojo/public/cpp/bindings/binding.h"
 #include "net/cookies/canonical_cookie.h"
 #include "net/cookies/cookie_change_dispatcher.h"
 #include "net/cookies/cookie_store.h"
@@ -70,11 +69,12 @@
                           const url::Origin& top_frame_origin,
                           SetCanonicalCookieCallback callback) override;
 
-  void AddChangeListener(const GURL& url,
-                         const GURL& site_for_cookies,
-                         const url::Origin& top_frame_origin,
-                         mojom::CookieChangeListenerPtr listener,
-                         AddChangeListenerCallback callback) override;
+  void AddChangeListener(
+      const GURL& url,
+      const GURL& site_for_cookies,
+      const url::Origin& top_frame_origin,
+      mojo::PendingRemote<mojom::CookieChangeListener> listener,
+      AddChangeListenerCallback callback) override;
 
   void SetCookieFromString(const GURL& url,
                            const GURL& site_for_cookies,
diff --git a/services/network/restricted_cookie_manager_unittest.cc b/services/network/restricted_cookie_manager_unittest.cc
index 105b05c..164f25f 100644
--- a/services/network/restricted_cookie_manager_unittest.cc
+++ b/services/network/restricted_cookie_manager_unittest.cc
@@ -13,6 +13,8 @@
 #include "base/test/scoped_task_environment.h"
 #include "base/time/time.h"
 #include "mojo/core/embedder/embedder.h"
+#include "mojo/public/cpp/bindings/pending_remote.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "net/base/features.h"
 #include "net/cookies/canonical_cookie_test_helpers.h"
 #include "net/cookies/cookie_constants.h"
@@ -138,9 +140,10 @@
     return result;
   }
 
-  void AddChangeListener(const GURL& url,
-                         const GURL& site_for_cookies,
-                         mojom::CookieChangeListenerPtr listener) {
+  void AddChangeListener(
+      const GURL& url,
+      const GURL& site_for_cookies,
+      mojo::PendingRemote<mojom::CookieChangeListener> listener) {
     base::RunLoop run_loop;
     cookie_service_->AddChangeListener(
         url, site_for_cookies, url::Origin::Create(site_for_cookies),
@@ -725,8 +728,9 @@
     network::mojom::CookieChangeCause change_cause;
   };
 
-  TestCookieChangeListener(network::mojom::CookieChangeListenerRequest request)
-      : binding_(this, std::move(request)) {}
+  TestCookieChangeListener(
+      mojo::PendingReceiver<network::mojom::CookieChangeListener> receiver)
+      : receiver_(this, std::move(receiver)) {}
   ~TestCookieChangeListener() override = default;
 
   // Spin in a run loop until a change is received.
@@ -753,7 +757,7 @@
 
  private:
   std::vector<Change> observed_changes_;
-  mojo::Binding<network::mojom::CookieChangeListener> binding_;
+  mojo::Receiver<network::mojom::CookieChangeListener> receiver_;
 
   // If not null, will be stopped when a cookie change notification is received.
   base::RunLoop* run_loop_ = nullptr;
@@ -762,13 +766,13 @@
 }  // anonymous namespace
 
 TEST_P(RestrictedCookieManagerTest, ChangeDispatch) {
-  network::mojom::CookieChangeListenerPtr listener_ptr;
-  network::mojom::CookieChangeListenerRequest request =
-      mojo::MakeRequest(&listener_ptr);
+  mojo::PendingRemote<network::mojom::CookieChangeListener> listener_remote;
+  mojo::PendingReceiver<network::mojom::CookieChangeListener> receiver =
+      listener_remote.InitWithNewPipeAndPassReceiver();
   sync_service_->AddChangeListener(GURL("http://example.com/test/"),
                                    GURL("http://example.com"),
-                                   std::move(listener_ptr));
-  TestCookieChangeListener listener(std::move(request));
+                                   std::move(listener_remote));
+  TestCookieChangeListener listener(std::move(receiver));
 
   ASSERT_THAT(listener.observed_changes(), testing::SizeIs(0));
 
@@ -783,13 +787,13 @@
 }
 
 TEST_P(RestrictedCookieManagerTest, ChangeSettings) {
-  network::mojom::CookieChangeListenerPtr listener_ptr;
-  network::mojom::CookieChangeListenerRequest request =
-      mojo::MakeRequest(&listener_ptr);
+  mojo::PendingRemote<network::mojom::CookieChangeListener> listener_remote;
+  mojo::PendingReceiver<network::mojom::CookieChangeListener> receiver =
+      listener_remote.InitWithNewPipeAndPassReceiver();
   sync_service_->AddChangeListener(GURL("http://example.com/test/"),
                                    GURL("http://notexample.com"),
-                                   std::move(listener_ptr));
-  TestCookieChangeListener listener(std::move(request));
+                                   std::move(listener_remote));
+  TestCookieChangeListener listener(std::move(receiver));
 
   ASSERT_THAT(listener.observed_changes(), testing::SizeIs(0));
 
@@ -800,23 +804,24 @@
 }
 
 TEST_P(RestrictedCookieManagerTest, AddChangeListenerFromWrongOrigin) {
-  network::mojom::CookieChangeListenerPtr bad_listener_ptr;
-  network::mojom::CookieChangeListenerRequest bad_request =
-      mojo::MakeRequest(&bad_listener_ptr);
+  mojo::PendingRemote<network::mojom::CookieChangeListener> bad_listener_remote;
+  mojo::PendingReceiver<network::mojom::CookieChangeListener> bad_receiver =
+      bad_listener_remote.InitWithNewPipeAndPassReceiver();
   ExpectBadMessage();
   sync_service_->AddChangeListener(GURL("http://not-example.com/test/"),
                                    GURL("http://not-example.com"),
-                                   std::move(bad_listener_ptr));
+                                   std::move(bad_listener_remote));
   EXPECT_TRUE(received_bad_message());
-  TestCookieChangeListener bad_listener(std::move(bad_request));
+  TestCookieChangeListener bad_listener(std::move(bad_receiver));
 
-  network::mojom::CookieChangeListenerPtr good_listener_ptr;
-  network::mojom::CookieChangeListenerRequest good_request =
-      mojo::MakeRequest(&good_listener_ptr);
+  mojo::PendingRemote<network::mojom::CookieChangeListener>
+      good_listener_remote;
+  mojo::PendingReceiver<network::mojom::CookieChangeListener> good_receiver =
+      good_listener_remote.InitWithNewPipeAndPassReceiver();
   sync_service_->AddChangeListener(GURL("http://example.com/test/"),
                                    GURL("http://example.com"),
-                                   std::move(good_listener_ptr));
-  TestCookieChangeListener good_listener(std::move(good_request));
+                                   std::move(good_listener_remote));
+  TestCookieChangeListener good_listener(std::move(good_receiver));
 
   ASSERT_THAT(bad_listener.observed_changes(), testing::SizeIs(0));
   ASSERT_THAT(good_listener.observed_changes(), testing::SizeIs(0));
diff --git a/services/network/test/test_cookie_manager.cc b/services/network/test/test_cookie_manager.cc
index c4edc07..ac231fe 100644
--- a/services/network/test/test_cookie_manager.cc
+++ b/services/network/test/test_cookie_manager.cc
@@ -29,8 +29,10 @@
 void TestCookieManager::AddCookieChangeListener(
     const GURL& url,
     const base::Optional<std::string>& name,
-    network::mojom::CookieChangeListenerPtr listener) {
-  cookie_change_listeners_.push_back(std::move(listener));
+    mojo::PendingRemote<network::mojom::CookieChangeListener> listener) {
+  mojo::Remote<network::mojom::CookieChangeListener> listener_remote(
+      std::move(listener));
+  cookie_change_listeners_.push_back(std::move(listener_remote));
 }
 
 void TestCookieManager::DispatchCookieChange(
diff --git a/services/network/test/test_cookie_manager.h b/services/network/test/test_cookie_manager.h
index 1a9569bd..655dc70b 100644
--- a/services/network/test/test_cookie_manager.h
+++ b/services/network/test/test_cookie_manager.h
@@ -10,6 +10,7 @@
 
 #include "base/callback_forward.h"
 #include "base/macros.h"
+#include "mojo/public/cpp/bindings/remote.h"
 #include "services/network/public/mojom/cookie_manager.mojom.h"
 
 namespace network {
@@ -36,9 +37,11 @@
   void AddCookieChangeListener(
       const GURL& url,
       const base::Optional<std::string>& name,
-      network::mojom::CookieChangeListenerPtr listener) override;
+      mojo::PendingRemote<network::mojom::CookieChangeListener> listener)
+      override;
   void AddGlobalChangeListener(
-      network::mojom::CookieChangeListenerPtr notification_pointer) override {}
+      mojo::PendingRemote<network::mojom::CookieChangeListener>
+          notification_pointer) override {}
   void CloneInterface(
       network::mojom::CookieManagerRequest new_interface) override {}
   void FlushCookieStore(FlushCookieStoreCallback callback) override {}
@@ -57,7 +60,8 @@
 
  private:
   // List of observers receiving cookie change notifications.
-  std::vector<network::mojom::CookieChangeListenerPtr> cookie_change_listeners_;
+  std::vector<mojo::Remote<network::mojom::CookieChangeListener>>
+      cookie_change_listeners_;
 };
 
 }  // namespace network
diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc b/third_party/blink/renderer/modules/cookie_store/cookie_store.cc
index 3be8761..47a43c3c 100644
--- a/third_party/blink/renderer/modules/cookie_store/cookie_store.cc
+++ b/third_party/blink/renderer/modules/cookie_store/cookie_store.cc
@@ -461,7 +461,6 @@
     : ContextLifecycleObserver(execution_context),
       backend_(std::move(backend)),
       subscription_backend_(std::move(subscription_backend)),
-      change_listener_binding_(this),
       default_cookie_url_(DefaultCookieURL(execution_context)),
       default_site_for_cookies_(DefaultSiteForCookies(execution_context)),
       default_top_frame_origin_(DefaultTopFrameOrigin(execution_context)) {
@@ -617,24 +616,21 @@
 }
 
 void CookieStore::StartObserving() {
-  if (change_listener_binding_ || !backend_)
+  if (change_listener_receiver_.is_bound() || !backend_)
     return;
 
   // See https://bit.ly/2S0zRAS for task types.
   auto task_runner =
       GetExecutionContext()->GetTaskRunner(TaskType::kMiscPlatformAPI);
-  network::mojom::blink::CookieChangeListenerPtr change_listener;
-  change_listener_binding_.Bind(
-      mojo::MakeRequest(&change_listener, task_runner), task_runner);
-  backend_->AddChangeListener(default_cookie_url_, default_site_for_cookies_,
-                              default_top_frame_origin_,
-                              std::move(change_listener), {});
+  backend_->AddChangeListener(
+      default_cookie_url_, default_site_for_cookies_, default_top_frame_origin_,
+      change_listener_receiver_.BindNewPipeAndPassRemote(task_runner), {});
 }
 
 void CookieStore::StopObserving() {
-  if (!change_listener_binding_.is_bound())
+  if (!change_listener_receiver_.is_bound())
     return;
-  change_listener_binding_.Close();
+  change_listener_receiver_.reset();
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/modules/cookie_store/cookie_store.h b/third_party/blink/renderer/modules/cookie_store/cookie_store.h
index 7d468b4c..606218e 100644
--- a/third_party/blink/renderer/modules/cookie_store/cookie_store.h
+++ b/third_party/blink/renderer/modules/cookie_store/cookie_store.h
@@ -5,7 +5,7 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_COOKIE_STORE_COOKIE_STORE_H_
 #define THIRD_PARTY_BLINK_RENDERER_MODULES_COOKIE_STORE_COOKIE_STORE_H_
 
-#include "mojo/public/cpp/bindings/binding.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/network/public/mojom/restricted_cookie_manager.mojom-blink.h"
 #include "third_party/blink/public/mojom/cookie_store/cookie_store.mojom-blink.h"
@@ -156,11 +156,11 @@
 
   // Wraps a Mojo pipe used to receive cookie change notifications.
   //
-  // This binding is set up on-demand, when the cookie store has at least one
-  // change event listener. If all the listeners are unregistered, the binding
+  // This receiver is set up on-demand, when the cookie store has at least one
+  // change event listener. If all the listeners are unregistered, the receiver
   // is torn down.
-  mojo::Binding<network::mojom::blink::CookieChangeListener>
-      change_listener_binding_;
+  mojo::Receiver<network::mojom::blink::CookieChangeListener>
+      change_listener_receiver_{this};
 
   // Default for cookie_url in CookieStoreGetOptions.
   //