Commit b27d40f0 authored by Yuki Yamada's avatar Yuki Yamada Committed by Commit Bot

Migrate BeginFrameProvider to use GC mojo wrappers

Migrates BeginFrameProvider to use HeapMojoReceiver/HeapMojoRemote to
reduce potential risks of use-after-free bugs.

Bug: 1049056
Change-Id: Iecd9a91da7a8cc2fb741645da8bc22fe8d477a64
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2145746Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Yuki Yamada <yukiy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758798}
parent fe1175d9
...@@ -16,7 +16,8 @@ WorkerAnimationFrameProvider::WorkerAnimationFrameProvider( ...@@ -16,7 +16,8 @@ WorkerAnimationFrameProvider::WorkerAnimationFrameProvider(
const BeginFrameProviderParams& begin_frame_provider_params) const BeginFrameProviderParams& begin_frame_provider_params)
: begin_frame_provider_( : begin_frame_provider_(
MakeGarbageCollected<BeginFrameProvider>(begin_frame_provider_params, MakeGarbageCollected<BeginFrameProvider>(begin_frame_provider_params,
this)), this,
context)),
callback_collection_(context), callback_collection_(context),
context_(context) {} context_(context) {}
......
...@@ -18,11 +18,15 @@ namespace blink { ...@@ -18,11 +18,15 @@ namespace blink {
BeginFrameProvider::BeginFrameProvider( BeginFrameProvider::BeginFrameProvider(
const BeginFrameProviderParams& begin_frame_provider_params, const BeginFrameProviderParams& begin_frame_provider_params,
BeginFrameProviderClient* client) BeginFrameProviderClient* client,
ContextLifecycleNotifier* context)
: needs_begin_frame_(false), : needs_begin_frame_(false),
requested_needs_begin_frame_(false), requested_needs_begin_frame_(false),
cfs_receiver_(this, context),
efs_receiver_(this, context),
frame_sink_id_(begin_frame_provider_params.frame_sink_id), frame_sink_id_(begin_frame_provider_params.frame_sink_id),
parent_frame_sink_id_(begin_frame_provider_params.parent_frame_sink_id), parent_frame_sink_id_(begin_frame_provider_params.parent_frame_sink_id),
compositor_frame_sink_(context),
begin_frame_client_(client) {} begin_frame_client_(client) {}
void BeginFrameProvider::ResetCompositorFrameSink() { void BeginFrameProvider::ResetCompositorFrameSink() {
...@@ -74,9 +78,9 @@ void BeginFrameProvider::CreateCompositorFrameSinkIfNeeded() { ...@@ -74,9 +78,9 @@ void BeginFrameProvider::CreateCompositorFrameSinkIfNeeded() {
parent_frame_sink_id_, frame_sink_id_, parent_frame_sink_id_, frame_sink_id_,
efs_receiver_.BindNewPipeAndPassRemote(task_runner), efs_receiver_.BindNewPipeAndPassRemote(task_runner),
cfs_receiver_.BindNewPipeAndPassRemote(task_runner), cfs_receiver_.BindNewPipeAndPassRemote(task_runner),
compositor_frame_sink_.BindNewPipeAndPassReceiver()); compositor_frame_sink_.BindNewPipeAndPassReceiver(task_runner));
compositor_frame_sink_.set_disconnect_with_reason_handler(base::BindOnce( compositor_frame_sink_.set_disconnect_with_reason_handler(WTF::Bind(
&BeginFrameProvider::OnMojoConnectionError, WrapWeakPersistent(this))); &BeginFrameProvider::OnMojoConnectionError, WrapWeakPersistent(this)));
} }
...@@ -121,6 +125,9 @@ void BeginFrameProvider::FinishBeginFrame(const viz::BeginFrameArgs& args) { ...@@ -121,6 +125,9 @@ void BeginFrameProvider::FinishBeginFrame(const viz::BeginFrameArgs& args) {
} }
void BeginFrameProvider::Trace(Visitor* visitor) { void BeginFrameProvider::Trace(Visitor* visitor) {
visitor->Trace(cfs_receiver_);
visitor->Trace(efs_receiver_);
visitor->Trace(compositor_frame_sink_);
visitor->Trace(begin_frame_client_); visitor->Trace(begin_frame_client_);
} }
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include "services/viz/public/mojom/compositing/compositor_frame_sink.mojom-blink.h" #include "services/viz/public/mojom/compositing/compositor_frame_sink.mojom-blink.h"
#include "third_party/blink/public/mojom/frame_sinks/embedded_frame_sink.mojom-blink.h" #include "third_party/blink/public/mojom/frame_sinks/embedded_frame_sink.mojom-blink.h"
#include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/platform_export.h"
namespace blink { namespace blink {
...@@ -35,7 +37,8 @@ class PLATFORM_EXPORT BeginFrameProvider ...@@ -35,7 +37,8 @@ class PLATFORM_EXPORT BeginFrameProvider
public: public:
explicit BeginFrameProvider( explicit BeginFrameProvider(
const BeginFrameProviderParams& begin_frame_provider_params, const BeginFrameProviderParams& begin_frame_provider_params,
BeginFrameProviderClient*); BeginFrameProviderClient*,
ContextLifecycleNotifier*);
void CreateCompositorFrameSinkIfNeeded(); void CreateCompositorFrameSinkIfNeeded();
...@@ -77,12 +80,20 @@ class PLATFORM_EXPORT BeginFrameProvider ...@@ -77,12 +80,20 @@ class PLATFORM_EXPORT BeginFrameProvider
bool needs_begin_frame_; bool needs_begin_frame_;
bool requested_needs_begin_frame_; bool requested_needs_begin_frame_;
mojo::Receiver<viz::mojom::blink::CompositorFrameSinkClient> cfs_receiver_{ HeapMojoReceiver<viz::mojom::blink::CompositorFrameSinkClient,
this}; BeginFrameProvider,
mojo::Receiver<mojom::blink::EmbeddedFrameSinkClient> efs_receiver_{this}; HeapMojoWrapperMode::kWithoutContextObserver>
cfs_receiver_;
HeapMojoReceiver<mojom::blink::EmbeddedFrameSinkClient,
BeginFrameProvider,
HeapMojoWrapperMode::kWithoutContextObserver>
efs_receiver_;
viz::FrameSinkId frame_sink_id_; viz::FrameSinkId frame_sink_id_;
viz::FrameSinkId parent_frame_sink_id_; viz::FrameSinkId parent_frame_sink_id_;
mojo::Remote<viz::mojom::blink::CompositorFrameSink> compositor_frame_sink_; HeapMojoRemote<viz::mojom::blink::CompositorFrameSink,
HeapMojoWrapperMode::kWithoutContextObserver>
compositor_frame_sink_;
Member<BeginFrameProviderClient> begin_frame_client_; Member<BeginFrameProviderClient> begin_frame_client_;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment