Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(864)

Unified Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 1255483004: Implement surface-based browser process hit testing for Mac and Aura (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments addressed Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_view_mac.mm
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 9500038092b8c8630da89909a8f4d2ae95452169..c132bfbb4be102a94270c84fb74ad28284732022 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -39,6 +39,7 @@
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_helper.h"
#include "content/browser/renderer_host/render_widget_host_delegate.h"
+#include "content/browser/renderer_host/render_widget_host_input_event_router.h"
#import "content/browser/renderer_host/render_widget_host_view_mac_dictionary_helper.h"
#import "content/browser/renderer_host/render_widget_host_view_mac_editcommand_helper.h"
#include "content/browser/renderer_host/render_widget_resize_helper.h"
@@ -598,6 +599,15 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget,
if (!is_guest_view_hack_)
render_widget_host_->SetView(this);
+
+ // Let the page-level input event router know about our surface ID
+ // namespace for surface-based hit testing.
+ if (UseSurfacesEnabled() &&
+ render_widget_host_->delegate()->GetInputEventRouter()) {
+ render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->AddSurfaceIdNamespaceOwner(GetSurfaceIdNamespace(), this);
+ }
}
RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
@@ -609,6 +619,13 @@ RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
UnlockMouse();
+ if (UseSurfacesEnabled() && render_widget_host_ &&
+ render_widget_host_->delegate()->GetInputEventRouter()) {
+ render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->RemoveSurfaceIdNamespaceOwner(GetSurfaceIdNamespace());
+ }
+
// Ensure that the browser compositor is destroyed in a safe order.
ShutdownBrowserCompositor();
@@ -1097,6 +1114,15 @@ void RenderWidgetHostViewMac::RenderProcessGone(base::TerminationStatus status,
}
void RenderWidgetHostViewMac::RenderWidgetHostGone() {
+ // Clear SurfaceID namespace ownership before we shutdown the
+ // compositor.
+ if (UseSurfacesEnabled() && render_widget_host_ &&
+ render_widget_host_->delegate()->GetInputEventRouter()) {
+ render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->RemoveSurfaceIdNamespaceOwner(GetSurfaceIdNamespace());
+ }
+
// Destroy the DelegatedFrameHost, to prevent crashes when Destroy is never
// called on the view.
// http://crbug.com/404828
@@ -1126,6 +1152,15 @@ void RenderWidgetHostViewMac::Destroy() {
// object needs to survive until the stack unwinds.
pepper_fullscreen_window_.autorelease();
+ // Clear SurfaceID namespace ownership before we shutdown the
+ // compositor.
+ if (UseSurfacesEnabled() && render_widget_host_ &&
+ render_widget_host_->delegate()->GetInputEventRouter()) {
lazyboy 2015/09/01 21:29:42 FYI, the mac failures seems to be b/c render_widge
kenrb 2015/09/02 16:35:05 Thanks for helping with debugging this! I didn't r
+ render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->RemoveSurfaceIdNamespaceOwner(GetSurfaceIdNamespace());
+ }
+
// Delete the delegated frame state, which will reach back into
// render_widget_host_.
ShutdownBrowserCompositor();
@@ -1601,6 +1636,27 @@ uint32_t RenderWidgetHostViewMac::GetSurfaceIdNamespace() {
return 0;
}
+uint32_t RenderWidgetHostViewMac::SurfaceIdNamespaceAtPoint(
+ const gfx::Point& point,
+ gfx::Point* transformed_point) {
+ cc::SurfaceId id =
+ delegated_frame_host_->SurfaceIdAtPoint(point, transformed_point);
+ // It is possible that the renderer has not yet produced a surface, in which
+ // case we return our current namespace.
+ if (id.is_null())
+ return GetSurfaceIdNamespace();
+ return cc::SurfaceIdAllocator::NamespaceForId(id);
+}
+
+void RenderWidgetHostViewMac::ProcessMouseEvent(
+ const blink::WebMouseEvent& event) {
+ render_widget_host_->ForwardMouseEvent(event);
+}
+void RenderWidgetHostViewMac::ProcessMouseWheelEvent(
+ const blink::WebMouseWheelEvent& event) {
+ render_widget_host_->ForwardWheelEvent(event);
+}
+
bool RenderWidgetHostViewMac::Send(IPC::Message* message) {
if (render_widget_host_)
return render_widget_host_->Send(message);
@@ -1936,7 +1992,14 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
WebInputEventFactory::mouseEvent(theEvent, self);
enterEvent.type = WebInputEvent::MouseMove;
enterEvent.button = WebMouseEvent::ButtonNone;
- renderWidgetHostView_->ForwardMouseEvent(enterEvent);
+ if (renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter()) {
+ renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->RouteMouseEvent(renderWidgetHostView_.get(), &enterEvent);
+ } else {
+ renderWidgetHostView_->ForwardMouseEvent(enterEvent);
+ }
}
}
mouseEventWasIgnored_ = NO;
@@ -1964,9 +2027,15 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
[self confirmComposition];
}
- const WebMouseEvent event =
- WebInputEventFactory::mouseEvent(theEvent, self);
- renderWidgetHostView_->ForwardMouseEvent(event);
+ WebMouseEvent event = WebInputEventFactory::mouseEvent(theEvent, self);
+ if (renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter()) {
+ renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->RouteMouseEvent(renderWidgetHostView_.get(), &event);
+ } else {
+ renderWidgetHostView_->ForwardMouseEvent(event);
+ }
}
- (BOOL)performKeyEquivalent:(NSEvent*)theEvent {
@@ -2424,7 +2493,14 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
WebMouseWheelEvent webEvent = WebInputEventFactory::mouseWheelEvent(
event, self, canRubberbandLeft, canRubberbandRight);
webEvent.railsMode = mouseWheelFilter_.UpdateRailsMode(webEvent);
- renderWidgetHostView_->render_widget_host_->ForwardWheelEvent(webEvent);
+ if (renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter()) {
+ renderWidgetHostView_->render_widget_host_->delegate()
+ ->GetInputEventRouter()
+ ->RouteMouseWheelEvent(renderWidgetHostView_.get(), &webEvent);
+ } else {
+ renderWidgetHostView_->render_widget_host_->ForwardWheelEvent(webEvent);
+ }
}
}
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | content/browser/site_per_process_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698