| Index: Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp | 
| diff --git a/Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp b/Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp | 
| index 84268100185ac87203e63a165cb708e96ab2b00a..57365166e90143940de49a877b4206b358ee5036 100644 | 
| --- a/Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp | 
| +++ b/Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp | 
| @@ -78,26 +78,24 @@ void ValidationMessageClientImpl::showValidationMessage(const Element& anchor, c | 
| if (m_currentAnchor) | 
| hideValidationMessage(*m_currentAnchor); | 
| m_currentAnchor = &anchor; | 
| -    m_lastAnchorRectInScreen = currentView()->contentsToScreen(anchor.pixelSnappedBoundingBox()); | 
| +    IntRect anchorInRootView = currentView()->contentsToRootView(anchor.pixelSnappedBoundingBox()); | 
| +    m_lastAnchorRectInScreen = currentView()->hostWindow()->rootViewToScreen(anchorInRootView); | 
| m_lastPageScaleFactor = m_webView.pageScaleFactor(); | 
| m_message = message; | 
| -    askClientToShowValidationMessage(); | 
| + | 
| +    WebTextDirection dir = m_currentAnchor->renderer()->style()->direction() == RTL ? WebTextDirectionRightToLeft : WebTextDirectionLeftToRight; | 
| +    AtomicString title = m_currentAnchor->fastGetAttribute(HTMLNames::titleAttr); | 
| +    m_client.showValidationMessage(anchorInRootView, m_message, title, dir); | 
|  | 
| const double minimumSecondToShowValidationMessage = 5.0; | 
| const double secondPerCharacter = 0.05; | 
| const double statusCheckInterval = 0.1; | 
| -    m_finishTime = monotonicallyIncreasingTime() + std::max(minimumSecondToShowValidationMessage, message.length() * secondPerCharacter); | 
| +    m_finishTime = monotonicallyIncreasingTime() + std::max(minimumSecondToShowValidationMessage, (message.length() + title.length()) * secondPerCharacter); | 
| // FIXME: We should invoke checkAnchorStatus actively when layout, scroll, | 
| // or page scale change happen. | 
| m_timer.startRepeating(statusCheckInterval); | 
| } | 
|  | 
| -void ValidationMessageClientImpl::askClientToShowValidationMessage() | 
| -{ | 
| -    WebTextDirection dir = m_currentAnchor->renderer()->style()->direction() == RTL ? WebTextDirectionRightToLeft : WebTextDirectionLeftToRight; | 
| -    m_client.showValidationMessage(m_lastAnchorRectInScreen, m_message, m_currentAnchor->fastGetAttribute(HTMLNames::titleAttr), dir); | 
| -} | 
| - | 
| void ValidationMessageClientImpl::hideValidationMessage(const Element& anchor) | 
| { | 
| if (!m_currentAnchor || !isValidationMessageVisible(anchor)) | 
| @@ -136,7 +134,7 @@ void ValidationMessageClientImpl::checkAnchorStatus(Timer<ValidationMessageClien | 
| return; | 
| m_lastAnchorRectInScreen = newAnchorRectInScreen; | 
| m_lastPageScaleFactor = m_webView.pageScaleFactor(); | 
| -    askClientToShowValidationMessage(); | 
| +    m_client.moveValidationMessage(newAnchorRect); | 
| } | 
|  | 
| } | 
|  |