0

[Cast Streaming] Change Fuchsia to use Remoting path

This CL updates Fuchsia to use the remoting infrastructure rather than
the legacy non-remoting paths in `cast_streaming`. This both improves
the playback delay for Fuchsia mirroring as well as takes a step
closer to supporting remoting on Fuchsia

NOTE: Remoting support will not be "turned on" for fuchsia until the
initial config used to start cast_streaming is updated to state that
remoting is supported

Bug: 1370809, internal b/230897148
Change-Id: I2aff6e5b7a69881e7cb889100218d3ac73797edd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4148222
Commit-Queue: Ryan Keane <rwkeane@google.com>
Reviewed-by: Sergey Ulanov <sergeyu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1096496}
This commit is contained in:
Ryan Keane
2023-01-24 23:58:00 +00:00
committed by Chromium LUCI CQ
parent 721ba7e74f
commit 3c8a733b4e
5 changed files with 35 additions and 11 deletions

@ -260,7 +260,11 @@ component("web_engine_core") {
]
if (enable_cast_receiver) {
deps += [ "//components/fuchsia_legacymetrics" ]
deps += [
"//components/cast_streaming/public",
"//components/cast_streaming/public/mojom",
"//components/fuchsia_legacymetrics",
]
}
if (enable_widevine) {

@ -1,6 +1,7 @@
include_rules = [
# Do NOT add components/cast or other Cast-specific code to this file.
"+cc/base",
"+components/cast_streaming/public",
"+components/client_hints/browser",
"+components/favicon/content",
"+components/favicon/core",

@ -78,6 +78,9 @@
#include "url/origin.h"
#if BUILDFLAG(ENABLE_CAST_RECEIVER)
#include "components/cast_streaming/public/features.h" //nogncheck
#include "components/cast_streaming/public/mojom/demuxer_connector.mojom.h" //nogncheck
#include "components/cast_streaming/public/mojom/renderer_controller.mojom.h" //nogncheck
#include "fuchsia_web/webengine/browser/receiver_session_client.h" //nogncheck
#include "fuchsia_web/webengine/common/cast_streaming.h" // nogncheck
#endif
@ -766,12 +769,18 @@ void FrameImpl::MaybeStartCastStreaming(
mojo::AssociatedRemote<cast_streaming::mojom::DemuxerConnector>
demuxer_connector;
navigation_handle->GetRenderFrameHost()
->GetRemoteAssociatedInterfaces()
->GetInterface(&demuxer_connector);
receiver_session_client_->SetDemuxerConnector(std::move(demuxer_connector));
mojo::AssociatedRemote<cast_streaming::mojom::RendererController>
renderer_controller;
auto* remote_interfaces =
navigation_handle->GetRenderFrameHost()->GetRemoteAssociatedInterfaces();
remote_interfaces->GetInterface(&demuxer_connector);
if (cast_streaming::IsCastRemotingEnabled()) {
remote_interfaces->GetInterface(&renderer_controller);
}
receiver_session_client_->SetMojoEndpoints(std::move(demuxer_connector),
std::move(renderer_controller));
}
#endif
#endif // BUILDFLAG(ENABLE_CAST_RECEIVER)
void FrameImpl::UpdateRenderFrameZoomLevel(
content::RenderFrameHost* render_frame_host) {

@ -23,9 +23,11 @@ ReceiverSessionClient::ReceiverSessionClient(
ReceiverSessionClient::~ReceiverSessionClient() = default;
void ReceiverSessionClient::SetDemuxerConnector(
void ReceiverSessionClient::SetMojoEndpoints(
mojo::AssociatedRemote<cast_streaming::mojom::DemuxerConnector>
demuxer_connector) {
demuxer_connector,
mojo::AssociatedRemote<cast_streaming::mojom::RendererController>
renderer_controller) {
DCHECK(message_port_request_);
// TODO: Add streaming session Constraints based on system capabilities
@ -55,7 +57,12 @@ void ReceiverSessionClient::SetDemuxerConnector(
std::move(port));
},
std::move(message_port_request_)));
receiver_session_->StartStreamingAsync(std::move(demuxer_connector));
if (renderer_controller) {
receiver_session_->StartStreamingAsync(std::move(demuxer_connector),
std::move(renderer_controller));
} else {
receiver_session_->StartStreamingAsync(std::move(demuxer_connector));
}
}
bool ReceiverSessionClient::HasReceiverSession() {

@ -8,6 +8,7 @@
#include <fuchsia/web/cpp/fidl.h>
#include "components/cast_streaming/public/mojom/demuxer_connector.mojom.h"
#include "components/cast_streaming/public/mojom/renderer_controller.mojom.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
namespace cast_streaming {
@ -26,9 +27,11 @@ class ReceiverSessionClient {
ReceiverSessionClient& operator=(const ReceiverSessionClient&) = delete;
void SetDemuxerConnector(
void SetMojoEndpoints(
mojo::AssociatedRemote<cast_streaming::mojom::DemuxerConnector>
demuxer_connector);
demuxer_connector,
mojo::AssociatedRemote<cast_streaming::mojom::RendererController>
renderer_controller);
bool HasReceiverSession();