[Chromecast] Maintain CastWebView ownership with Mojo handles

For cross-process clients that use CastWebView, we use the duration of
the mojom::CastWebContents connection to mediate the lifetime of
CastWebView.

Specific changes:
* Removed CastContentWindow::Delegate
* Removed CastWebView::CreateParams
* Removed InterfaceSet methods from CastWebContents
* Added observer registration in mojom::CastContentWindow
* Added mojom::VisibilityType traits

Merge-With: eureka-internal/673047

USE_NEW_BUILDFLAG_REASON=Moving already-existing buildflag guards.

Bug: b/149041392
Test: Build/run display assistant, Cast CQ

Change-Id: If99ebde3e32d85cd2bbaa0aff945679af9c8c3be
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3247925
Commit-Queue: Sean Topping <[email protected]>
Reviewed-by: Jiawei Li <[email protected]>
Reviewed-by: Junbo Ke <[email protected]>
Reviewed-by: Robert Sesek <[email protected]>
Reviewed-by: Simeon Anfinrud <[email protected]>
Cr-Commit-Position: refs/heads/main@{#937588}
diff --git a/chromecast/browser/cast_web_contents.h b/chromecast/browser/cast_web_contents.h
index 3a0e0a8..4c8de5d 100644
--- a/chromecast/browser/cast_web_contents.h
+++ b/chromecast/browser/cast_web_contents.h
@@ -8,7 +8,7 @@
 #include <string>
 #include <vector>
 
-#include "base/callback.h"
+#include "base/callback_forward.h"
 #include "base/containers/flat_set.h"
 #include "base/observer_list.h"
 #include "base/observer_list_types.h"
@@ -22,7 +22,7 @@
 #include "content/public/common/media_playback_renderer_type.mojom.h"
 #include "mojo/public/cpp/bindings/generic_pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "mojo/public/cpp/bindings/receiver_set.h"
+#include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote_set.h"
 #include "services/service_manager/public/cpp/interface_provider.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
@@ -172,6 +172,8 @@
                         const std::vector<int32_t>& feature_permissions,
                         const std::vector<std::string>&
                             additional_feature_permission_origins) override = 0;
+  void SetGroupInfo(const std::string& session_id,
+                    bool is_multizone_launch) override = 0;
   void AddRendererFeatures(base::Value features) override = 0;
   void SetInterfacesForRenderer(mojo::PendingRemote<mojom::RemoteInterfaces>
                                     remote_interfaces) override = 0;
@@ -189,14 +191,6 @@
   void GetMainFramePid(GetMainFramePidCallback cb) override = 0;
 
   // ===========================================================================
-  // Initialization and Setup
-  // ===========================================================================
-
-  // TODO(b/149041392): This can be an initialization parameter.
-  virtual void AllowWebAndMojoWebUiBindings() = 0;
-  virtual void ClearRenderWidgetHostView() = 0;
-
-  // ===========================================================================
   // Page Lifetime
   // ===========================================================================
 
@@ -259,14 +253,6 @@
   // Locally-registered interfaces which are exposed to render frames.
   virtual InterfaceBundle* local_interfaces() = 0;
 
-  // Used for owner to pass its |InterfaceProvider| pointers to CastWebContents.
-  // It is owner's responsibility to make sure each |InterfaceProvider| pointer
-  // has distinct mojo interface set.
-  using InterfaceSet = base::flat_set<std::string>;
-  virtual void RegisterInterfaceProvider(
-      const InterfaceSet& interface_set,
-      service_manager::InterfaceProvider* interface_provider) = 0;
-
   // Returns true if WebSQL database is configured enabled for this
   // CastWebContents.
   virtual bool is_websql_enabled() = 0;
@@ -277,8 +263,12 @@
   // Binds a receiver for remote control of CastWebContents.
   void BindReceiver(mojo::PendingReceiver<mojom::CastWebContents> receiver);
 
+  // |cb| is called when |receiver_| is disconnected. This allows the web
+  // service to destroy CastWebContents which are owned via a remote handle.
+  void SetDisconnectCallback(base::OnceClosure cb);
+
  protected:
-  mojo::ReceiverSet<mojom::CastWebContents> receivers_;
+  mojo::Receiver<mojom::CastWebContents> receiver_{this};
   mojo::RemoteSet<mojom::CastWebContentsObserver> observers_;
   base::ObserverList<Observer> sync_observers_;
 
@@ -289,6 +279,10 @@
   // valid sequence, enforced via SequenceChecker.
   void AddObserver(Observer* observer);
   void RemoveObserver(Observer* observer);
+
+  void OnDisconnect();
+
+  base::OnceClosure disconnect_cb_;
 };
 
 }  // namespace chromecast