summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'content/renderer')
-rw-r--r--content/renderer/BUILD.gn1
-rw-r--r--content/renderer/child_frame_compositing_helper.cc1
-rw-r--r--content/renderer/child_frame_compositing_helper.h5
-rw-r--r--content/renderer/render_frame_proxy.cc11
-rw-r--r--content/renderer/render_frame_proxy.h4
-rw-r--r--content/renderer/render_widget.cc3
6 files changed, 24 insertions, 1 deletions
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index a8c9147..b08f9dd 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -33,6 +33,7 @@ source_set("renderer") {
"//cc/blink",
"//cc/proto",
"//cc/surfaces",
+ "//cc/surfaces:surface_id",
"//components/scheduler:scheduler",
"//components/startup_metric_utils/common",
"//components/url_formatter",
diff --git a/content/renderer/child_frame_compositing_helper.cc b/content/renderer/child_frame_compositing_helper.cc
index ef85384..0166a08 100644
--- a/content/renderer/child_frame_compositing_helper.cc
+++ b/content/renderer/child_frame_compositing_helper.cc
@@ -293,6 +293,7 @@ void ChildFrameCompositingHelper::OnSetSurface(
const gfx::Size& frame_size,
float scale_factor,
const cc::SurfaceSequence& sequence) {
+ surface_id_ = surface_id;
scoped_refptr<ThreadSafeSender> sender(
RenderThreadImpl::current()->thread_safe_sender());
cc::SurfaceLayer::SatisfyCallback satisfy_callback =
diff --git a/content/renderer/child_frame_compositing_helper.h b/content/renderer/child_frame_compositing_helper.h
index d2d4e78..707955c 100644
--- a/content/renderer/child_frame_compositing_helper.h
+++ b/content/renderer/child_frame_compositing_helper.h
@@ -15,6 +15,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/shared_memory.h"
#include "cc/layers/delegated_frame_resource_collection.h"
+#include "cc/surfaces/surface_id.h"
#include "content/common/content_export.h"
#include "ui/gfx/geometry/size.h"
@@ -23,7 +24,6 @@ class SharedMemory;
}
namespace cc {
-struct SurfaceId;
struct SurfaceSequence;
class CompositorFrame;
@@ -79,6 +79,8 @@ class CONTENT_EXPORT ChildFrameCompositingHelper
void UpdateVisibility(bool);
void ChildFrameGone();
+ cc::SurfaceId surface_id() const { return surface_id_; }
+
// cc::DelegatedFrameProviderClient implementation.
void UnusedResourcesAreAvailable() override;
@@ -146,6 +148,7 @@ class CONTENT_EXPORT ChildFrameCompositingHelper
scoped_refptr<cc::DelegatedFrameProvider> frame_provider_;
scoped_ptr<blink::WebLayer> web_layer_;
+ cc::SurfaceId surface_id_;
blink::WebFrame* frame_;
DISALLOW_COPY_AND_ASSIGN(ChildFrameCompositingHelper);
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index d8effb5..7a52f2c 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -195,6 +195,17 @@ bool RenderFrameProxy::IsMainFrameDetachedFromTree() const {
render_view_->webview()->mainFrame()->isWebLocalFrame();
}
+void RenderFrameProxy::WillBeginCompositorFrame() {
+ if (compositing_helper_) {
+ FrameHostMsg_HittestData_Params params;
+ params.surface_id = compositing_helper_->surface_id();
+ params.ignored_for_hittest = web_frame_->isIgnoredForHitTest();
+ render_widget_->QueueMessage(
+ new FrameHostMsg_HittestData(render_widget_->routing_id(), params),
+ MESSAGE_DELIVERY_POLICY_WITH_VISUAL_STATE);
+ }
+}
+
void RenderFrameProxy::DidCommitCompositorFrame() {
if (compositing_helper_.get())
compositing_helper_->DidCommitCompositorFrame();
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index 7581d38..f6dc700 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -104,6 +104,10 @@ class CONTENT_EXPORT RenderFrameProxy
bool Send(IPC::Message* msg) override;
// Out-of-process child frames receive a signal from RenderWidgetCompositor
+ // when a compositor frame will begin.
+ void WillBeginCompositorFrame();
+
+ // Out-of-process child frames receive a signal from RenderWidgetCompositor
// when a compositor frame has committed.
void DidCommitCompositorFrame();
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index ddd60cb..345528f 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -1223,6 +1223,9 @@ void RenderWidget::WillBeginCompositorFrame() {
// is done.
UpdateTextInputState(ShowIme::HIDE_IME, ChangeSource::FROM_NON_IME);
UpdateSelectionBounds();
+
+ FOR_EACH_OBSERVER(RenderFrameProxy, render_frame_proxies_,
+ WillBeginCompositorFrame());
}
///////////////////////////////////////////////////////////////////////////////