41 lines
1.9 KiB
Diff
41 lines
1.9 KiB
Diff
diff --git content/browser/renderer_host/render_widget_host_view_child_frame.cc content/browser/renderer_host/render_widget_host_view_child_frame.cc
|
|
index 5825f9515121..2d2faa456e66 100644
|
|
--- content/browser/renderer_host/render_widget_host_view_child_frame.cc
|
|
+++ content/browser/renderer_host/render_widget_host_view_child_frame.cc
|
|
@@ -641,6 +641,7 @@ void RenderWidgetHostViewChildFrame::SubmitCompositorFrame(
|
|
"RenderWidgetHostViewChildFrame::OnSwapCompositorFrame");
|
|
support_->SubmitCompositorFrame(local_surface_id, std::move(frame),
|
|
std::move(hit_test_region_list));
|
|
+ ProcessFrameSwappedCallbacks();
|
|
}
|
|
|
|
void RenderWidgetHostViewChildFrame::OnDidNotProduceFrame(
|
|
@@ -649,6 +650,15 @@ void RenderWidgetHostViewChildFrame::OnDidNotProduceFrame(
|
|
support_->DidNotProduceFrame(ack);
|
|
}
|
|
|
|
+void RenderWidgetHostViewChildFrame::ProcessFrameSwappedCallbacks() {
|
|
+ std::vector<base::OnceClosure> process_callbacks;
|
|
+ // Swap the vectors to avoid re-entrancy issues due to calls to
|
|
+ // RegisterFrameSwappedCallback() while running the OnceClosures.
|
|
+ process_callbacks.swap(frame_swapped_callbacks_);
|
|
+ for (base::OnceClosure& callback : process_callbacks)
|
|
+ std::move(callback).Run();
|
|
+}
|
|
+
|
|
void RenderWidgetHostViewChildFrame::TransformPointToRootSurface(
|
|
gfx::PointF* point) {
|
|
// This function is called by RenderWidgetHostInputEventRouter only for
|
|
@@ -834,6 +844,11 @@ void RenderWidgetHostViewChildFrame::ShowDefinitionForSelection() {
|
|
void RenderWidgetHostViewChildFrame::SpeakSelection() {}
|
|
#endif // defined(OS_MACOSX)
|
|
|
|
+void RenderWidgetHostViewChildFrame::RegisterFrameSwappedCallback(
|
|
+ base::OnceClosure callback) {
|
|
+ frame_swapped_callbacks_.emplace_back(std::move(callback));
|
|
+}
|
|
+
|
|
void RenderWidgetHostViewChildFrame::CopyFromSurface(
|
|
const gfx::Rect& src_subrect,
|
|
const gfx::Size& output_size,
|