Chromium Code Reviews| 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 |