diff --git a/dom/events/PointerEventHandler.cpp b/dom/events/PointerEventHandler.cpp index 583a6e49b9f1..db46db735508 100644 --- a/dom/events/PointerEventHandler.cpp +++ b/dom/events/PointerEventHandler.cpp @@ -331,8 +331,8 @@ PointerEventHandler::GetPointerCapturingContent(uint32_t aPointerId) return nullptr; } -/* static */ nsIFrame* -PointerEventHandler::GetPointerCapturingFrame(WidgetGUIEvent* aEvent) +/* static */ nsIContent* +PointerEventHandler::GetPointerCapturingContent(WidgetGUIEvent* aEvent) { if (!IsPointerEventEnabled() || (aEvent->mClass != ePointerEventClass && aEvent->mClass != eMouseEventClass) || @@ -346,17 +346,7 @@ PointerEventHandler::GetPointerCapturingFrame(WidgetGUIEvent* aEvent) if (!mouseEvent) { return nullptr; } - - // Find the content which captures the pointer. - nsIContent* capturingContent = - GetPointerCapturingContent(mouseEvent->pointerId); - - if (!capturingContent) { - return nullptr; - } - // Return the content's primary frame as the target frame. - nsIFrame* capturingFrame = capturingContent->GetPrimaryFrame(); - return capturingFrame ? capturingFrame : nullptr; + return GetPointerCapturingContent(mouseEvent->pointerId); } /* static */ void diff --git a/dom/events/PointerEventHandler.h b/dom/events/PointerEventHandler.h index 85b90d0283f3..fce0a4a288f8 100644 --- a/dom/events/PointerEventHandler.h +++ b/dom/events/PointerEventHandler.h @@ -89,17 +89,16 @@ public: static void ImplicitlyReleasePointerCapture(WidgetEvent* aEvent); /** - * GetPointerCapturingFrame returns a target frame of aEvent. If the event is - * a mouse or pointer event (except mousedown and pointerdown), the pointer - * may be captured by a content. This method returns the capturing content's - * primary frame. Otherwise, nullptr. + * GetPointerCapturingContent returns a target content which captures the + * pointer. It's applied to mouse or pointer event (except mousedown and + * pointerdown). When capturing, return the content. Otherwise, nullptr. * * @param aEvent A mouse event or pointer event which may be * captured. * - * @return Target frame for aEvent. + * @return Target content for aEvent. */ - static nsIFrame* GetPointerCapturingFrame(WidgetGUIEvent* aEvent); + static nsIContent* GetPointerCapturingContent(WidgetGUIEvent* aEvent); static nsIContent* GetPointerCapturingContent(uint32_t aPointerId); diff --git a/dom/events/test/pointerevents/mochitest.ini b/dom/events/test/pointerevents/mochitest.ini index 565e2969d158..49ecd399cf29 100644 --- a/dom/events/test/pointerevents/mochitest.ini +++ b/dom/events/test/pointerevents/mochitest.ini @@ -145,6 +145,7 @@ support-files = support-files = file_test_trigger_fullscreen.html [test_trigger_popup_by_pointer_events.html] +[test_remove_frame_when_got_pointer_capture.html] [test_getCoalescedEvents.html] skip-if = !e10s support-files = diff --git a/dom/events/test/pointerevents/test_remove_frame_when_got_pointer_capture.html b/dom/events/test/pointerevents/test_remove_frame_when_got_pointer_capture.html new file mode 100644 index 000000000000..58791b63d90a --- /dev/null +++ b/dom/events/test/pointerevents/test_remove_frame_when_got_pointer_capture.html @@ -0,0 +1,116 @@ + + +
+ +