WebValidationMessageClient.cpp [plain text]
#include "config.h"
#include "WebValidationMessageClient.h"
#include "WebCoreArgumentCoders.h"
#include "WebPage.h"
#include "WebPageProxyMessages.h"
#include <WebCore/Element.h>
#include <WebCore/Frame.h>
namespace WebKit {
using namespace WebCore;
WebValidationMessageClient::WebValidationMessageClient(WebPage& page)
: m_page(page)
{
}
WebValidationMessageClient::~WebValidationMessageClient()
{
if (m_currentAnchor)
hideValidationMessage(*m_currentAnchor);
}
void WebValidationMessageClient::documentDetached(Document& document)
{
if (!m_currentAnchor)
return;
if (&m_currentAnchor->document() == &document)
hideValidationMessage(*m_currentAnchor);
}
void WebValidationMessageClient::showValidationMessage(const Element& anchor, const String& message)
{
if (m_currentAnchor)
hideValidationMessage(*m_currentAnchor);
m_currentAnchor = &anchor;
m_currentAnchorRect = anchor.clientRect();
m_page.send(Messages::WebPageProxy::ShowValidationMessage(m_currentAnchorRect, message));
}
void WebValidationMessageClient::hideValidationMessage(const Element& anchor)
{
if (!isValidationMessageVisible(anchor))
return;
m_currentAnchor = nullptr;
m_currentAnchorRect = { };
m_page.send(Messages::WebPageProxy::HideValidationMessage());
}
void WebValidationMessageClient::hideAnyValidationMessage()
{
if (!m_currentAnchor)
return;
m_currentAnchor = nullptr;
m_currentAnchorRect = { };
m_page.send(Messages::WebPageProxy::HideValidationMessage());
}
bool WebValidationMessageClient::isValidationMessageVisible(const Element& anchor)
{
return m_currentAnchor == &anchor;
}
void WebValidationMessageClient::updateValidationBubbleStateIfNeeded()
{
if (!m_currentAnchor)
return;
if (m_currentAnchorRect != m_currentAnchor->clientRect())
hideValidationMessage(*m_currentAnchor);
}
}