| Index: content/browser/renderer_host/offscreen_canvas_surface_impl.cc
|
| diff --git a/content/browser/renderer_host/offscreen_canvas_surface_impl.cc b/content/browser/renderer_host/offscreen_canvas_surface_impl.cc
|
| index 41454934c212fc4be04c764a02c6a4adab6e08c3..8058e25f16abd22dcef9fbe92fe7280d6dd08c3d 100644
|
| --- a/content/browser/renderer_host/offscreen_canvas_surface_impl.cc
|
| +++ b/content/browser/renderer_host/offscreen_canvas_surface_impl.cc
|
| @@ -7,24 +7,28 @@
|
| #include <memory>
|
| #include <utility>
|
|
|
| -#include "base/bind_helpers.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "cc/surfaces/surface_manager.h"
|
| #include "content/browser/compositor/frame_sink_manager_host.h"
|
| #include "content/browser/compositor/surface_utils.h"
|
| -#include "content/browser/renderer_host/offscreen_canvas_compositor_frame_sink_manager.h"
|
|
|
| namespace content {
|
|
|
| OffscreenCanvasSurfaceImpl::OffscreenCanvasSurfaceImpl(
|
| const cc::FrameSinkId& parent_frame_sink_id,
|
| const cc::FrameSinkId& frame_sink_id,
|
| - blink::mojom::OffscreenCanvasSurfaceClientPtr client)
|
| + blink::mojom::OffscreenCanvasSurfaceClientPtr client,
|
| + blink::mojom::OffscreenCanvasSurfaceRequest request,
|
| + DestroyCallback destroy_callback)
|
| : client_(std::move(client)),
|
| + binding_(this, std::move(request)),
|
| + destroy_callback_(std::move(destroy_callback)),
|
| frame_sink_id_(frame_sink_id),
|
| parent_frame_sink_id_(parent_frame_sink_id) {
|
| - OffscreenCanvasCompositorFrameSinkManager::GetInstance()
|
| - ->RegisterOffscreenCanvasSurfaceInstance(frame_sink_id_, this);
|
| + binding_.set_connection_error_handler(
|
| + base::Bind(&OffscreenCanvasSurfaceImpl::OnSurfaceConnectionClosed,
|
| + base::Unretained(this)));
|
| + GetFrameSinkManagerHost()->AddObserver(this);
|
| }
|
|
|
| OffscreenCanvasSurfaceImpl::~OffscreenCanvasSurfaceImpl() {
|
| @@ -32,22 +36,7 @@ OffscreenCanvasSurfaceImpl::~OffscreenCanvasSurfaceImpl() {
|
| GetFrameSinkManagerHost()->UnregisterFrameSinkHierarchy(
|
| parent_frame_sink_id_, frame_sink_id_);
|
| }
|
| - OffscreenCanvasCompositorFrameSinkManager::GetInstance()
|
| - ->UnregisterOffscreenCanvasSurfaceInstance(frame_sink_id_);
|
| -}
|
| -
|
| -// static
|
| -void OffscreenCanvasSurfaceImpl::Create(
|
| - const cc::FrameSinkId& parent_frame_sink_id,
|
| - const cc::FrameSinkId& frame_sink_id,
|
| - blink::mojom::OffscreenCanvasSurfaceClientPtr client,
|
| - blink::mojom::OffscreenCanvasSurfaceRequest request) {
|
| - std::unique_ptr<OffscreenCanvasSurfaceImpl> impl =
|
| - base::MakeUnique<OffscreenCanvasSurfaceImpl>(
|
| - parent_frame_sink_id, frame_sink_id, std::move(client));
|
| - OffscreenCanvasSurfaceImpl* surface_service = impl.get();
|
| - surface_service->binding_ =
|
| - mojo::MakeStrongBinding(std::move(impl), std::move(request));
|
| + GetFrameSinkManagerHost()->RemoveObserver(this);
|
| }
|
|
|
| void OffscreenCanvasSurfaceImpl::CreateCompositorFrameSink(
|
| @@ -69,13 +58,12 @@ void OffscreenCanvasSurfaceImpl::CreateCompositorFrameSink(
|
|
|
| void OffscreenCanvasSurfaceImpl::OnSurfaceCreated(
|
| const cc::SurfaceInfo& surface_info) {
|
| - DCHECK_EQ(surface_info.id().frame_sink_id(), frame_sink_id_);
|
| - if (!current_local_surface_id_.is_valid() ||
|
| - surface_info.id().local_surface_id() != current_local_surface_id_) {
|
| - current_local_surface_id_ = surface_info.id().local_surface_id();
|
| - if (client_)
|
| - client_->OnSurfaceCreated(surface_info);
|
| - }
|
| + if (surface_info.id().frame_sink_id() != frame_sink_id_)
|
| + return;
|
| +
|
| + local_surface_id_ = surface_info.id().local_surface_id();
|
| + if (client_)
|
| + client_->OnSurfaceCreated(surface_info);
|
| }
|
|
|
| void OffscreenCanvasSurfaceImpl::Require(const cc::SurfaceId& surface_id,
|
| @@ -87,4 +75,8 @@ void OffscreenCanvasSurfaceImpl::Satisfy(const cc::SurfaceSequence& sequence) {
|
| GetSurfaceManager()->SatisfySequence(sequence);
|
| }
|
|
|
| +void OffscreenCanvasSurfaceImpl::OnSurfaceConnectionClosed() {
|
| + std::move(destroy_callback_).Run();
|
| +}
|
| +
|
| } // namespace content
|
|
|