blob: 47ea5219850f6fe643ac08bdde851c988e8ddf4f [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/renderer_host/frame_sink_provider_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
namespace content {
FrameSinkProviderImpl::FrameSinkProviderImpl(int32_t process_id)
: process_id_(process_id) {}
FrameSinkProviderImpl::~FrameSinkProviderImpl() = default;
void FrameSinkProviderImpl::Bind(
mojo::PendingReceiver<mojom::FrameSinkProvider> receiver) {
if (receiver_.is_bound()) {
DLOG(ERROR) << "Received multiple requests for FrameSinkProvider. "
<< "There should be only one instance per renderer.";
return;
}
receiver_.Bind(std::move(receiver));
}
void FrameSinkProviderImpl::Unbind() {
receiver_.reset();
}
void FrameSinkProviderImpl::CreateForWidget(
int32_t widget_id,
viz::mojom::CompositorFrameSinkRequest compositor_frame_sink_request,
viz::mojom::CompositorFrameSinkClientPtr compositor_frame_sink_client) {
RenderWidgetHostImpl* render_widget_host_impl =
RenderWidgetHostImpl::FromID(process_id_, widget_id);
if (!render_widget_host_impl) {
DLOG(ERROR) << "No RenderWidgetHost exists with id " << widget_id
<< " in process " << process_id_;
return;
}
render_widget_host_impl->RequestCompositorFrameSink(
std::move(compositor_frame_sink_request),
std::move(compositor_frame_sink_client));
}
void FrameSinkProviderImpl::RegisterRenderFrameMetadataObserver(
int32_t widget_id,
mojom::RenderFrameMetadataObserverClientRequest
render_frame_metadata_observer_client_request,
mojo::PendingRemote<mojom::RenderFrameMetadataObserver>
render_frame_metadata_observer) {
RenderWidgetHostImpl* render_widget_host_impl =
RenderWidgetHostImpl::FromID(process_id_, widget_id);
if (!render_widget_host_impl) {
DLOG(ERROR) << "No RenderWidgetHost exists with id " << widget_id
<< " in process " << process_id_;
return;
}
render_widget_host_impl->RegisterRenderFrameMetadataObserver(
std::move(render_frame_metadata_observer_client_request),
std::move(render_frame_metadata_observer));
}
} // namespace content