| 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 4657b6dd7d70254b792f20ba32628a4b9454b637..1c3ac90e96a63ada31fa7b6144bef5bfe178d52d 100644
|
| --- a/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp
|
| +++ b/third_party/WebKit/Source/core/frame/WebFrameWidgetBase.cpp
|
| @@ -238,6 +238,11 @@ Page* WebFrameWidgetBase::GetPage() const {
|
|
|
| void WebFrameWidgetBase::DidAcquirePointerLock() {
|
| GetPage()->GetPointerLockController().DidAcquirePointerLock();
|
| +
|
| + LocalFrame* focusedFrame = FocusedLocalFrameInWidget();
|
| + if (focusedFrame) {
|
| + focusedFrame->GetEventHandler().ReleaseMousePointerCapture();
|
| + }
|
| }
|
|
|
| void WebFrameWidgetBase::DidNotAcquirePointerLock() {
|
| @@ -249,10 +254,25 @@ 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(
|
| + const WebCoalescedInputEvent& coalesced_event) {
|
| + 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) {
|
| + focusedFrame->GetEventHandler().ProcessPendingPointerCaptureForPointerLock(
|
| + transformed_event);
|
| + }
|
| +
|
| 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())
|
| @@ -277,11 +297,7 @@ 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);
|
| }
|
| @@ -302,4 +318,11 @@ void WebFrameWidgetBase::ShowContextMenu(WebMenuSourceType source_type) {
|
| }
|
| }
|
|
|
| +LocalFrame* WebFrameWidgetBase::FocusedLocalFrameInWidget() const {
|
| + LocalFrame* frame = GetPage()->GetFocusController().FocusedFrame();
|
| + return (frame && frame->LocalFrameRoot() == ToCoreFrame(LocalRoot()))
|
| + ? frame
|
| + : nullptr;
|
| +}
|
| +
|
| } // namespace blink
|
|
|