| 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..1062eaf41577c2f222388e4af621eddb2df9a6e3 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() &&
|
| + render_widget_host_->delegate()->GetInputEventRouter()) {
|
| + render_widget_host_->delegate()
|
| + ->GetInputEventRouter()
|
| + ->AddSurfaceIdNamespaceOwner(GetSurfaceIdNamespace(), this);
|
| + }
|
| }
|
|
|
| RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
|
| @@ -609,6 +619,14 @@ RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
|
|
|
| UnlockMouse();
|
|
|
| + if (UseSurfacesEnabled() && render_widget_host_ &&
|
| + render_widget_host_->delegate() &&
|
| + 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 +1115,16 @@ 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() &&
|
| + 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 +1154,16 @@ 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() &&
|
| + render_widget_host_->delegate()->GetInputEventRouter()) {
|
| + render_widget_host_->delegate()
|
| + ->GetInputEventRouter()
|
| + ->RemoveSurfaceIdNamespaceOwner(GetSurfaceIdNamespace());
|
| + }
|
| +
|
| // Delete the delegated frame state, which will reach back into
|
| // render_widget_host_.
|
| ShutdownBrowserCompositor();
|
| @@ -1601,6 +1639,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 +1995,15 @@ void RenderWidgetHostViewMac::OnDisplayMetricsChanged(
|
| WebInputEventFactory::mouseEvent(theEvent, self);
|
| enterEvent.type = WebInputEvent::MouseMove;
|
| enterEvent.button = WebMouseEvent::ButtonNone;
|
| - renderWidgetHostView_->ForwardMouseEvent(enterEvent);
|
| + if (renderWidgetHostView_->render_widget_host_->delegate() &&
|
| + renderWidgetHostView_->render_widget_host_->delegate()
|
| + ->GetInputEventRouter()) {
|
| + renderWidgetHostView_->render_widget_host_->delegate()
|
| + ->GetInputEventRouter()
|
| + ->RouteMouseEvent(renderWidgetHostView_.get(), &enterEvent);
|
| + } else {
|
| + renderWidgetHostView_->ForwardMouseEvent(enterEvent);
|
| + }
|
| }
|
| }
|
| mouseEventWasIgnored_ = NO;
|
| @@ -1964,9 +2031,16 @@ 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() &&
|
| + 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 +2498,15 @@ 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() &&
|
| + renderWidgetHostView_->render_widget_host_->delegate()
|
| + ->GetInputEventRouter()) {
|
| + renderWidgetHostView_->render_widget_host_->delegate()
|
| + ->GetInputEventRouter()
|
| + ->RouteMouseWheelEvent(renderWidgetHostView_.get(), &webEvent);
|
| + } else {
|
| + renderWidgetHostView_->render_widget_host_->ForwardWheelEvent(webEvent);
|
| + }
|
| }
|
| }
|
|
|
|
|