*/
#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()
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);
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);
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();
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