diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2012-09-25 13:02:02 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2012-09-25 13:02:02 +0200 |
commit | 715be629d51174233403237bfc563cf150087dc8 (patch) | |
tree | 4cff72df808db977624338b0a38d8b6d1bd73c57 /Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp | |
parent | dc6262b587c71c14e30d93e57ed812e36a79a33e (diff) | |
download | qtwebkit-715be629d51174233403237bfc563cf150087dc8.tar.gz |
Imported WebKit commit ce614b0924ba46f78d4435e28ff93c8525fbb7cc (http://svn.webkit.org/repository/webkit/trunk@129485)
New snapshot that includes MingW build fixes
Diffstat (limited to 'Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp b/Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp new file mode 100644 index 000000000..5ea79297f --- /dev/null +++ b/Source/WebKit/chromium/src/ValidationMessageClientImpl.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2012 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "config.h" +#include "ValidationMessageClientImpl.h" + +#include "Element.h" +#include "FrameView.h" +#include "RenderObject.h" +#include "WebTextDirection.h" +#include "WebViewClient.h" + +using namespace WebCore; + +namespace WebKit { + +ValidationMessageClientImpl::ValidationMessageClientImpl(WebViewClient& client) + : m_client(client) + , m_currentAnchor(0) + , m_timer(this, &ValidationMessageClientImpl::hideCurrentValidationMessage) +{ +} + +PassOwnPtr<ValidationMessageClientImpl> ValidationMessageClientImpl::create(WebViewClient& client) +{ + return adoptPtr(new ValidationMessageClientImpl(client)); +} + +ValidationMessageClientImpl::~ValidationMessageClientImpl() +{ + if (m_currentAnchor) + hideValidationMessage(*m_currentAnchor); +} + +void ValidationMessageClientImpl::showValidationMessage(const Element& anchor, const String& message) +{ + if (message.isEmpty()) { + hideValidationMessage(anchor); + return; + } + if (!anchor.renderBox()) + return; + if (m_currentAnchor) + hideValidationMessage(*m_currentAnchor); + m_currentAnchor = &anchor; + IntRect anchorInScreen = anchor.document()->view()->contentsToScreen(anchor.pixelSnappedBoundingBox()); + WebTextDirection dir = anchor.renderer()->style()->direction() == RTL ? WebTextDirectionRightToLeft : WebTextDirectionLeftToRight; + m_client.showValidationMessage(anchorInScreen, message, anchor.fastGetAttribute(HTMLNames::titleAttr), dir); + + const double minimumSecondToShowValidationMessage = 5.0; + const double secondPerCharacter = 0.05; + m_timer.startOneShot(std::max(minimumSecondToShowValidationMessage, message.length() * secondPerCharacter)); +} + +void ValidationMessageClientImpl::hideValidationMessage(const Element& anchor) +{ + if (!m_currentAnchor || !isValidationMessageVisible(anchor)) + return; + m_timer.stop(); + m_client.hideValidationMessage(); + m_currentAnchor = 0; +} + +bool ValidationMessageClientImpl::isValidationMessageVisible(const Element& anchor) +{ + return m_currentAnchor == &anchor; +} + +void ValidationMessageClientImpl::hideCurrentValidationMessage(Timer<ValidationMessageClientImpl>*) +{ + ASSERT(m_currentAnchor); + hideValidationMessage(*m_currentAnchor); +} + +} |