| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent::
ShiftKey; | 232 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent::
ShiftKey; |
| 233 if (webInputEventKeyState & WebInputEvent::ControlKey) | 233 if (webInputEventKeyState & WebInputEvent::ControlKey) |
| 234 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent::
CtrlKey; | 234 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent::
CtrlKey; |
| 235 if (webInputEventKeyState & WebInputEvent::AltKey) | 235 if (webInputEventKeyState & WebInputEvent::AltKey) |
| 236 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent::
AltKey; | 236 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent::
AltKey; |
| 237 if (webInputEventKeyState & WebInputEvent::MetaKey) | 237 if (webInputEventKeyState & WebInputEvent::MetaKey) |
| 238 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent::
MetaKey; | 238 platformEventKeyState = platformEventKeyState | WebCore::PlatformEvent::
MetaKey; |
| 239 return platformEventKeyState; | 239 return platformEventKeyState; |
| 240 } | 240 } |
| 241 | 241 |
| 242 namespace { |
| 243 |
| 244 class UserGestureNotifier { |
| 245 public: |
| 246 // If a UserGestureIndicator is created for a user gesture during the |
| 247 // lifetime of a UserGestureNotifier and *userGestureObserved is false, |
| 248 // the object will notify the client and set *userGestureObserved to true. |
| 249 UserGestureNotifier(WebAutofillClient*, bool* userGestureObserved); |
| 250 ~UserGestureNotifier(); |
| 251 |
| 252 private: |
| 253 WebAutofillClient* const m_client; |
| 254 bool* const m_userGestureObserved; |
| 255 }; |
| 256 |
| 257 UserGestureNotifier::UserGestureNotifier(WebAutofillClient* client, bool* userGe
stureObserved) |
| 258 : m_client(client) |
| 259 , m_userGestureObserved(userGestureObserved) |
| 260 { |
| 261 ASSERT(m_userGestureObserved); |
| 262 if (m_client) |
| 263 UserGestureIndicator::clearProcessedUserGestureInPast(); |
| 264 } |
| 265 |
| 266 UserGestureNotifier::~UserGestureNotifier() |
| 267 { |
| 268 if (!*m_userGestureObserved && UserGestureIndicator::processedUserGestureInP
ast()) { |
| 269 *m_userGestureObserved = true; |
| 270 if (m_client) |
| 271 m_client->firstUserGestureObserved(); |
| 272 } |
| 273 } |
| 274 |
| 275 } // namespace |
| 276 |
| 242 // WebView ---------------------------------------------------------------- | 277 // WebView ---------------------------------------------------------------- |
| 243 | 278 |
| 244 WebView* WebView::create(WebViewClient* client) | 279 WebView* WebView::create(WebViewClient* client) |
| 245 { | 280 { |
| 246 // Pass the WebViewImpl's self-reference to the caller. | 281 // Pass the WebViewImpl's self-reference to the caller. |
| 247 return WebViewImpl::create(client); | 282 return WebViewImpl::create(client); |
| 248 } | 283 } |
| 249 | 284 |
| 250 WebViewImpl* WebViewImpl::create(WebViewClient* client) | 285 WebViewImpl* WebViewImpl::create(WebViewClient* client) |
| 251 { | 286 { |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 , m_flingSourceDevice(false) | 400 , m_flingSourceDevice(false) |
| 366 , m_fullscreenController(FullscreenController::create(this)) | 401 , m_fullscreenController(FullscreenController::create(this)) |
| 367 , m_showFPSCounter(false) | 402 , m_showFPSCounter(false) |
| 368 , m_showPaintRects(false) | 403 , m_showPaintRects(false) |
| 369 , m_showDebugBorders(false) | 404 , m_showDebugBorders(false) |
| 370 , m_continuousPaintingEnabled(false) | 405 , m_continuousPaintingEnabled(false) |
| 371 , m_showScrollBottleneckRects(false) | 406 , m_showScrollBottleneckRects(false) |
| 372 , m_baseBackgroundColor(Color::white) | 407 , m_baseBackgroundColor(Color::white) |
| 373 , m_backgroundColorOverride(Color::transparent) | 408 , m_backgroundColorOverride(Color::transparent) |
| 374 , m_zoomFactorOverride(0) | 409 , m_zoomFactorOverride(0) |
| 410 , m_userGestureObserved(false) |
| 375 { | 411 { |
| 376 Page::PageClients pageClients; | 412 Page::PageClients pageClients; |
| 377 pageClients.chromeClient = &m_chromeClientImpl; | 413 pageClients.chromeClient = &m_chromeClientImpl; |
| 378 pageClients.contextMenuClient = &m_contextMenuClientImpl; | 414 pageClients.contextMenuClient = &m_contextMenuClientImpl; |
| 379 pageClients.editorClient = &m_editorClientImpl; | 415 pageClients.editorClient = &m_editorClientImpl; |
| 380 pageClients.dragClient = &m_dragClientImpl; | 416 pageClients.dragClient = &m_dragClientImpl; |
| 381 pageClients.inspectorClient = &m_inspectorClientImpl; | 417 pageClients.inspectorClient = &m_inspectorClientImpl; |
| 382 pageClients.backForwardClient = &m_backForwardClientImpl; | 418 pageClients.backForwardClient = &m_backForwardClientImpl; |
| 383 pageClients.spellCheckerClient = &m_spellCheckerClientImpl; | 419 pageClients.spellCheckerClient = &m_spellCheckerClientImpl; |
| 384 pageClients.storageClient = &m_storageClientImpl; | 420 pageClients.storageClient = &m_storageClientImpl; |
| (...skipping 1411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1796 | 1832 |
| 1797 bool WebViewImpl::hasVerticalScrollbar() | 1833 bool WebViewImpl::hasVerticalScrollbar() |
| 1798 { | 1834 { |
| 1799 return mainFrameImpl()->frameView()->verticalScrollbar(); | 1835 return mainFrameImpl()->frameView()->verticalScrollbar(); |
| 1800 } | 1836 } |
| 1801 | 1837 |
| 1802 const WebInputEvent* WebViewImpl::m_currentInputEvent = 0; | 1838 const WebInputEvent* WebViewImpl::m_currentInputEvent = 0; |
| 1803 | 1839 |
| 1804 bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent) | 1840 bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent) |
| 1805 { | 1841 { |
| 1842 UserGestureNotifier notifier(m_autofillClient, &m_userGestureObserved); |
| 1843 |
| 1806 TRACE_EVENT0("input", "WebViewImpl::handleInputEvent"); | 1844 TRACE_EVENT0("input", "WebViewImpl::handleInputEvent"); |
| 1807 // If we've started a drag and drop operation, ignore input events until | 1845 // If we've started a drag and drop operation, ignore input events until |
| 1808 // we're done. | 1846 // we're done. |
| 1809 if (m_doingDragAndDrop) | 1847 if (m_doingDragAndDrop) |
| 1810 return true; | 1848 return true; |
| 1811 | 1849 |
| 1812 if (m_devToolsAgent && m_devToolsAgent->handleInputEvent(m_page.get(), input
Event)) | 1850 if (m_devToolsAgent && m_devToolsAgent->handleInputEvent(m_page.get(), input
Event)) |
| 1813 return true; | 1851 return true; |
| 1814 | 1852 |
| 1815 // Report the event to be NOT processed by WebKit, so that the browser can h
andle it appropriately. | 1853 // Report the event to be NOT processed by WebKit, so that the browser can h
andle it appropriately. |
| (...skipping 1311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3127 m_dragOperation = WebDragOperationNone; | 3165 m_dragOperation = WebDragOperationNone; |
| 3128 m_currentDragData = nullptr; | 3166 m_currentDragData = nullptr; |
| 3129 } | 3167 } |
| 3130 | 3168 |
| 3131 void WebViewImpl::dragTargetDrop(const WebPoint& clientPoint, | 3169 void WebViewImpl::dragTargetDrop(const WebPoint& clientPoint, |
| 3132 const WebPoint& screenPoint, | 3170 const WebPoint& screenPoint, |
| 3133 int keyModifiers) | 3171 int keyModifiers) |
| 3134 { | 3172 { |
| 3135 ASSERT(m_currentDragData); | 3173 ASSERT(m_currentDragData); |
| 3136 | 3174 |
| 3175 UserGestureNotifier notifier(m_autofillClient, &m_userGestureObserved); |
| 3176 |
| 3137 // If this webview transitions from the "drop accepting" state to the "not | 3177 // If this webview transitions from the "drop accepting" state to the "not |
| 3138 // accepting" state, then our IPC message reply indicating that may be in- | 3178 // accepting" state, then our IPC message reply indicating that may be in- |
| 3139 // flight, or else delayed by javascript processing in this webview. If a | 3179 // flight, or else delayed by javascript processing in this webview. If a |
| 3140 // drop happens before our IPC reply has reached the browser process, then | 3180 // drop happens before our IPC reply has reached the browser process, then |
| 3141 // the browser forwards the drop to this webview. So only allow a drop to | 3181 // the browser forwards the drop to this webview. So only allow a drop to |
| 3142 // proceed if our webview m_dragOperation state is not DragOperationNone. | 3182 // proceed if our webview m_dragOperation state is not DragOperationNone. |
| 3143 | 3183 |
| 3144 if (m_dragOperation == WebDragOperationNone) { // IPC RACE CONDITION: do not
allow this drop. | 3184 if (m_dragOperation == WebDragOperationNone) { // IPC RACE CONDITION: do not
allow this drop. |
| 3145 dragTargetDragLeave(); | 3185 dragTargetDragLeave(); |
| 3146 return; | 3186 return; |
| (...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3443 | 3483 |
| 3444 void WebViewImpl::didCommitLoad(bool isNewNavigation, bool isNavigationWithinPag
e) | 3484 void WebViewImpl::didCommitLoad(bool isNewNavigation, bool isNavigationWithinPag
e) |
| 3445 { | 3485 { |
| 3446 if (isNewNavigation && !isNavigationWithinPage) | 3486 if (isNewNavigation && !isNavigationWithinPage) |
| 3447 m_pageScaleConstraintsSet.setNeedsReset(true); | 3487 m_pageScaleConstraintsSet.setNeedsReset(true); |
| 3448 | 3488 |
| 3449 // Make sure link highlight from previous page is cleared. | 3489 // Make sure link highlight from previous page is cleared. |
| 3450 m_linkHighlights.clear(); | 3490 m_linkHighlights.clear(); |
| 3451 endActiveFlingAnimation(); | 3491 endActiveFlingAnimation(); |
| 3452 resetSavedScrollAndScaleState(); | 3492 resetSavedScrollAndScaleState(); |
| 3493 m_userGestureObserved = false; |
| 3453 } | 3494 } |
| 3454 | 3495 |
| 3455 void WebViewImpl::willInsertBody(WebFrameImpl* webframe) | 3496 void WebViewImpl::willInsertBody(WebFrameImpl* webframe) |
| 3456 { | 3497 { |
| 3457 if (webframe != mainFrameImpl()) | 3498 if (webframe != mainFrameImpl()) |
| 3458 return; | 3499 return; |
| 3459 | 3500 |
| 3460 // If we get to the <body> tag and we have no pending stylesheet and import
load, we | 3501 // If we get to the <body> tag and we have no pending stylesheet and import
load, we |
| 3461 // can be fairly confident we'll have something sensible to paint soon and | 3502 // can be fairly confident we'll have something sensible to paint soon and |
| 3462 // can turn off deferred commits. | 3503 // can turn off deferred commits. |
| (...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4002 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi
nedConstraints(); | 4043 const PageScaleConstraints& constraints = m_pageScaleConstraintsSet.pageDefi
nedConstraints(); |
| 4003 | 4044 |
| 4004 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) | 4045 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) |
| 4005 return false; | 4046 return false; |
| 4006 | 4047 |
| 4007 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width | 4048 return mainFrameImpl()->frameView()->layoutSize().width() == m_size.width |
| 4008 || (constraints.minimumScale == constraints.maximumScale && constraints.
minimumScale != -1); | 4049 || (constraints.minimumScale == constraints.maximumScale && constraints.
minimumScale != -1); |
| 4009 } | 4050 } |
| 4010 | 4051 |
| 4011 } // namespace blink | 4052 } // namespace blink |
| OLD | NEW |