| Index: third_party/WebKit/Source/web/WebViewImpl.cpp
|
| diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| index 8fb1989aeac1d01e1a82051d1e5c418a1f46c09a..0182e4b293e80de8c07ecc742d74afeaa8ac965c 100644
|
| --- a/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| +++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| @@ -34,6 +34,7 @@
|
| #include "core/HTMLNames.h"
|
| #include "core/clipboard/DataObject.h"
|
| #include "core/dom/Document.h"
|
| +#include "core/dom/DocumentUserGestureToken.h"
|
| #include "core/dom/Fullscreen.h"
|
| #include "core/dom/LayoutTreeBuilderTraversal.h"
|
| #include "core/dom/Text.h"
|
| @@ -260,26 +261,26 @@ class UserGestureNotifier {
|
| // If a UserGestureIndicator is created for a user gesture since the last
|
| // page load and *userGestureObserved is false, the UserGestureNotifier
|
| // will notify the client and set *userGestureObserved to true.
|
| - UserGestureNotifier(WebAutofillClient*, bool* userGestureObserved);
|
| + UserGestureNotifier(WebLocalFrameImpl*, bool* userGestureObserved);
|
| ~UserGestureNotifier();
|
|
|
| private:
|
| - WebAutofillClient* const m_client;
|
| + Persistent<WebLocalFrameImpl> m_frame;
|
| bool* const m_userGestureObserved;
|
| };
|
|
|
| -UserGestureNotifier::UserGestureNotifier(WebAutofillClient* client,
|
| +UserGestureNotifier::UserGestureNotifier(WebLocalFrameImpl* frame,
|
| bool* userGestureObserved)
|
| - : m_client(client), m_userGestureObserved(userGestureObserved) {
|
| + : m_frame(frame), m_userGestureObserved(userGestureObserved) {
|
| DCHECK(m_userGestureObserved);
|
| }
|
|
|
| UserGestureNotifier::~UserGestureNotifier() {
|
| if (!*m_userGestureObserved &&
|
| - UserGestureIndicator::processedUserGestureSinceLoad()) {
|
| + m_frame->frame()->document()->hasReceivedUserGesture()) {
|
| *m_userGestureObserved = true;
|
| - if (m_client)
|
| - m_client->firstUserGestureObserved();
|
| + if (m_frame && m_frame->autofillClient())
|
| + m_frame->autofillClient()->firstUserGestureObserved();
|
| }
|
| }
|
|
|
| @@ -2223,7 +2224,7 @@ WebInputEventResult WebViewImpl::handleInputEvent(
|
| return WebInputEventResult::NotHandled;
|
|
|
| WebAutofillClient* autofillClient = mainFrameImpl()->autofillClient();
|
| - UserGestureNotifier notifier(autofillClient, &m_userGestureObserved);
|
| + UserGestureNotifier notifier(mainFrameImpl(), &m_userGestureObserved);
|
| // On the first input event since page load, |notifier| instructs the
|
| // autofill client to unblock values of password input fields of any forms
|
| // on the page. There is a single input event, GestureTap, which can both
|
| @@ -2294,8 +2295,9 @@ WebInputEventResult WebViewImpl::handleInputEvent(
|
| break;
|
| case WebInputEvent::MouseDown:
|
| eventType = EventTypeNames::mousedown;
|
| - gestureIndicator = wrapUnique(new UserGestureIndicator(
|
| - UserGestureToken::create(UserGestureToken::NewGesture)));
|
| + gestureIndicator = wrapUnique(
|
| + new UserGestureIndicator(DocumentUserGestureToken::create(
|
| + &node->document(), UserGestureToken::NewGesture)));
|
| m_mouseCaptureGestureToken = gestureIndicator->currentToken();
|
| break;
|
| case WebInputEvent::MouseUp:
|
| @@ -2468,8 +2470,8 @@ bool WebViewImpl::setComposition(
|
| if (m_suppressNextKeypressEvent && !inputMethodController.hasComposition())
|
| return text.isEmpty();
|
|
|
| - UserGestureIndicator gestureIndicator(
|
| - UserGestureToken::create(UserGestureToken::NewGesture));
|
| + UserGestureIndicator gestureIndicator(DocumentUserGestureToken::create(
|
| + focused->document(), UserGestureToken::NewGesture));
|
|
|
| // When the range of composition underlines overlap with the range between
|
| // selectionStart and selectionEnd, WebKit somehow won't paint the selection
|
| @@ -2500,13 +2502,13 @@ bool WebViewImpl::finishComposingText(
|
| }
|
|
|
| bool WebViewImpl::commitText(const WebString& text, int relativeCaretPosition) {
|
| - UserGestureIndicator gestureIndicator(
|
| - UserGestureToken::create(UserGestureToken::NewGesture));
|
| -
|
| LocalFrame* focused = focusedLocalFrameAvailableForIme();
|
| if (!focused)
|
| return false;
|
|
|
| + UserGestureIndicator gestureIndicator(DocumentUserGestureToken::create(
|
| + focused->document(), UserGestureToken::NewGesture));
|
| +
|
| if (WebPlugin* plugin = focusedPluginIfInputMethodSupported(focused))
|
| return plugin->commitText(text, relativeCaretPosition);
|
|
|
| @@ -3661,10 +3663,7 @@ void WebViewImpl::dragTargetDrop(const WebDragData& webDragData,
|
|
|
| DCHECK(m_currentDragData);
|
| m_currentDragData = DataObject::create(webDragData);
|
| -
|
| - WebAutofillClient* autofillClient =
|
| - mainFrameImpl() ? mainFrameImpl()->autofillClient() : 0;
|
| - UserGestureNotifier notifier(autofillClient, &m_userGestureObserved);
|
| + UserGestureNotifier notifier(mainFrameImpl(), &m_userGestureObserved);
|
|
|
| // If this webview transitions from the "drop accepting" state to the "not
|
| // accepting" state, then our IPC message reply indicating that may be in-
|
| @@ -3683,8 +3682,6 @@ void WebViewImpl::dragTargetDrop(const WebDragData& webDragData,
|
| DragData dragData(m_currentDragData.get(), pointInRootFrame, screenPoint,
|
| static_cast<DragOperation>(m_operationsAllowed));
|
|
|
| - UserGestureIndicator gesture(
|
| - UserGestureToken::create(UserGestureToken::NewGesture));
|
| m_page->dragController().performDrag(&dragData);
|
|
|
| m_dragOperation = WebDragOperationNone;
|
| @@ -4481,8 +4478,12 @@ void WebViewImpl::pointerLockMouseEvent(const WebInputEvent& event) {
|
| switch (event.type) {
|
| case WebInputEvent::MouseDown:
|
| eventType = EventTypeNames::mousedown;
|
| - gestureIndicator = wrapUnique(new UserGestureIndicator(
|
| - UserGestureToken::create(UserGestureToken::NewGesture)));
|
| + if (!page() || !page()->pointerLockController().element())
|
| + break;
|
| + gestureIndicator =
|
| + wrapUnique(new UserGestureIndicator(DocumentUserGestureToken::create(
|
| + &page()->pointerLockController().element()->document(),
|
| + UserGestureToken::NewGesture)));
|
| m_pointerLockGestureToken = gestureIndicator->currentToken();
|
| break;
|
| case WebInputEvent::MouseUp:
|
|
|