Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / web / ValidationMessageClientImpl.cpp
index 164569f..2f3059c 100644 (file)
  */
 
 #include "config.h"
-#include "ValidationMessageClientImpl.h"
+#include "web/ValidationMessageClientImpl.h"
 
-#include "WebTextDirection.h"
-#include "WebViewImpl.h"
 #include "core/dom/Element.h"
 #include "core/frame/FrameView.h"
 #include "core/rendering/RenderObject.h"
 #include "platform/HostWindow.h"
 #include "public/platform/WebRect.h"
 #include "public/platform/WebString.h"
+#include "public/web/WebTextDirection.h"
 #include "public/web/WebViewClient.h"
+#include "web/WebViewImpl.h"
 #include "wtf/CurrentTime.h"
 
-using namespace WebCore;
-
 namespace blink {
 
 ValidationMessageClientImpl::ValidationMessageClientImpl(WebViewImpl& webView)
     : m_webView(webView)
-    , m_currentAnchor(0)
+    , m_currentAnchor(nullptr)
     , m_lastPageScaleFactor(1)
     , m_finishTime(0)
     , m_timer(this, &ValidationMessageClientImpl::checkAnchorStatus)
 {
 }
 
-PassOwnPtr<ValidationMessageClientImpl> ValidationMessageClientImpl::create(WebViewImpl& webView)
+PassOwnPtrWillBeRawPtr<ValidationMessageClientImpl> ValidationMessageClientImpl::create(WebViewImpl& webView)
 {
-    return adoptPtr(new ValidationMessageClientImpl(webView));
+    return adoptPtrWillBeNoop(new ValidationMessageClientImpl(webView));
 }
 
 ValidationMessageClientImpl::~ValidationMessageClientImpl()
 {
-    if (m_currentAnchor)
-        hideValidationMessage(*m_currentAnchor);
 }
 
 FrameView* ValidationMessageClientImpl::currentView()
@@ -66,7 +62,7 @@ FrameView* ValidationMessageClientImpl::currentView()
     return m_currentAnchor->document().view();
 }
 
-void ValidationMessageClientImpl::showValidationMessage(const Element& anchor, const String& message)
+void ValidationMessageClientImpl::showValidationMessage(const Element& anchor, const String& message, TextDirection messageDir, const String& subMessage, TextDirection subMessageDir)
 {
     if (message.isEmpty()) {
         hideValidationMessage(anchor);
@@ -81,15 +77,15 @@ void ValidationMessageClientImpl::showValidationMessage(const Element& anchor, c
     m_lastAnchorRectInScreen = currentView()->hostWindow()->rootViewToScreen(anchorInRootView);
     m_lastPageScaleFactor = m_webView.pageScaleFactor();
     m_message = message;
-
-    WebTextDirection dir = m_currentAnchor->renderer()->style()->direction() == RTL ? WebTextDirectionRightToLeft : WebTextDirectionLeftToRight;
-    AtomicString title = m_currentAnchor->fastGetAttribute(HTMLNames::titleAttr);
-    m_webView.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() + title.length()) * secondPerCharacter);
+
+    m_webView.client()->showValidationMessage(anchorInRootView, m_message, toWebTextDirection(messageDir),
+        subMessage, toWebTextDirection(subMessageDir));
+    m_webView.client()->showValidationMessage(anchorInRootView, m_message, subMessage, toWebTextDirection(messageDir));
+
+    m_finishTime = monotonicallyIncreasingTime() + std::max(minimumSecondToShowValidationMessage, (message.length() + subMessage.length()) * secondPerCharacter);
     // FIXME: We should invoke checkAnchorStatus actively when layout, scroll,
     // or page scale change happen.
     m_timer.startRepeating(statusCheckInterval, FROM_HERE);
@@ -100,7 +96,7 @@ void ValidationMessageClientImpl::hideValidationMessage(const Element& anchor)
     if (!m_currentAnchor || !isValidationMessageVisible(anchor))
         return;
     m_timer.stop();
-    m_currentAnchor = 0;
+    m_currentAnchor = nullptr;
     m_message = String();
     m_finishTime = 0;
     m_webView.client()->hideValidationMessage();
@@ -142,4 +138,16 @@ void ValidationMessageClientImpl::checkAnchorStatus(Timer<ValidationMessageClien
     m_webView.client()->moveValidationMessage(newAnchorRect);
 }
 
+void ValidationMessageClientImpl::willBeDestroyed()
+{
+    if (m_currentAnchor)
+        hideValidationMessage(*m_currentAnchor);
 }
+
+void ValidationMessageClientImpl::trace(Visitor* visitor)
+{
+    visitor->trace(m_currentAnchor);
+    ValidationMessageClient::trace(visitor);
+}
+
+} // namespace blink