Index: third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp |
diff --git a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp |
index 9ee7908429997bd101b086f9ee7adf0e858f6d18..04cd18cc77610340c2e2d3c9699dcc05b7a9f2fc 100644 |
--- a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp |
+++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp |
@@ -15,6 +15,7 @@ |
#include "core/page/DragController.h" |
#include "core/page/DragData.h" |
#include "core/page/DragSession.h" |
+#include "core/page/FocusController.h" |
#include "core/page/Page.h" |
#include "core/page/PointerLockController.h" |
#include "platform/UserGestureIndicator.h" |
@@ -235,6 +236,11 @@ Page* WebFrameWidgetBase::GetPage() const { |
void WebFrameWidgetBase::DidAcquirePointerLock() { |
GetPage()->GetPointerLockController().DidAcquirePointerLock(); |
+ |
+ LocalFrame* focusedFrame = FocusedLocalFrameInWidget(); |
+ if (focusedFrame) { |
+ focusedFrame->GetEventHandler().ReleaseMousePointerCapture(); |
+ } |
} |
void WebFrameWidgetBase::DidNotAcquirePointerLock() { |
@@ -246,10 +252,29 @@ void WebFrameWidgetBase::DidLosePointerLock() { |
GetPage()->GetPointerLockController().DidLosePointerLock(); |
} |
-void WebFrameWidgetBase::PointerLockMouseEvent(const WebInputEvent& event) { |
+// TODO(665924): Remove direct dispatches of mouse events from |
+// PointerLockController, instead passing them through EventHandler. |
+void WebFrameWidgetBase::PointerLockMouseEvent( |
scheib
2017/05/26 05:44:12
NOTE: I'm not familiar enough with this code, and
|
+ const WebCoalescedInputEvent& coalesced_event) { |
Navid Zolghadr
2017/05/25 16:59:15
I love the idea that you changed this to WebCoales
lanwei
2017/05/29 18:30:07
Done.
|
+ const WebInputEvent& input_event = coalesced_event.Event(); |
+ const WebMouseEvent& mouse_event = |
+ static_cast<const WebMouseEvent&>(input_event); |
+ WebMouseEvent transformed_event = TransformWebMouseEvent( |
+ ToWebLocalFrameBase(LocalRoot())->GetFrameView(), mouse_event); |
+ |
+ LocalFrame* focusedFrame = FocusedLocalFrameInWidget(); |
+ if (focusedFrame) { |
+ Vector<WebMouseEvent> transformed_coalesced_events = |
+ TransformWebMouseEventVector( |
+ ToWebLocalFrameBase(LocalRoot())->GetFrameView(), |
+ coalesced_event.GetCoalescedEventsPointers()); |
+ focusedFrame->GetEventHandler().ProcessPendingPointerCapture( |
+ transformed_event, transformed_coalesced_events); |
+ } |
+ |
std::unique_ptr<UserGestureIndicator> gesture_indicator; |
AtomicString event_type; |
- switch (event.GetType()) { |
+ switch (input_event.GetType()) { |
case WebInputEvent::kMouseDown: |
event_type = EventTypeNames::mousedown; |
if (!GetPage() || !GetPage()->GetPointerLockController().GetElement()) |
@@ -274,14 +299,17 @@ void WebFrameWidgetBase::PointerLockMouseEvent(const WebInputEvent& event) { |
NOTREACHED(); |
} |
- const WebMouseEvent& mouse_event = static_cast<const WebMouseEvent&>(event); |
- |
if (GetPage()) { |
- WebMouseEvent transformed_event = TransformWebMouseEvent( |
- ToWebLocalFrameBase(LocalRoot())->GetFrameView(), mouse_event); |
GetPage()->GetPointerLockController().DispatchLockedMouseEvent( |
transformed_event, event_type); |
} |
} |
+LocalFrame* WebFrameWidgetBase::FocusedLocalFrameInWidget() const { |
+ LocalFrame* frame = GetPage()->GetFocusController().FocusedFrame(); |
+ return (frame && frame->LocalFrameRoot() == ToCoreFrame(LocalRoot())) |
+ ? frame |
+ : nullptr; |
+} |
+ |
} // namespace blink |