blob: 03c4d1e4c695a525f993c0524ffef640d3f44e9f [file] [log] [blame]
/*
* Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "config.h"
#include "WebHitTestResult.h"
#include "WebCoreArgumentCoders.h"
#include <WebCore/Document.h>
#include <WebCore/Frame.h>
#include <WebCore/FrameView.h>
#include <WebCore/HitTestResult.h>
#include <WebCore/URL.h>
#include <WebCore/Node.h>
#include <wtf/text/WTFString.h>
using namespace WebCore;
namespace WebKit {
PassRefPtr<WebHitTestResult> WebHitTestResult::create(const WebHitTestResult::Data& hitTestResultData)
{
return adoptRef(new WebHitTestResult(hitTestResultData));
}
WebHitTestResult::Data::Data()
{
}
WebHitTestResult::Data::Data(const HitTestResult& hitTestResult)
: absoluteImageURL(hitTestResult.absoluteImageURL().string())
, absolutePDFURL(hitTestResult.absolutePDFURL().string())
, absoluteLinkURL(hitTestResult.absoluteLinkURL().string())
, absoluteMediaURL(hitTestResult.absoluteMediaURL().string())
, linkLabel(hitTestResult.textContent())
, linkTitle(hitTestResult.titleDisplayString())
, isContentEditable(hitTestResult.isContentEditable())
, elementBoundingBox(elementBoundingBoxInWindowCoordinates(hitTestResult))
, isScrollbar(hitTestResult.scrollbar())
{
}
WebHitTestResult::Data::~Data()
{
}
void WebHitTestResult::Data::encode(IPC::ArgumentEncoder& encoder) const
{
encoder << absoluteImageURL;
encoder << absolutePDFURL;
encoder << absoluteLinkURL;
encoder << absoluteMediaURL;
encoder << linkLabel;
encoder << linkTitle;
encoder << isContentEditable;
encoder << elementBoundingBox;
encoder << isScrollbar;
}
bool WebHitTestResult::Data::decode(IPC::ArgumentDecoder& decoder, WebHitTestResult::Data& hitTestResultData)
{
if (!decoder.decode(hitTestResultData.absoluteImageURL)
|| !decoder.decode(hitTestResultData.absolutePDFURL)
|| !decoder.decode(hitTestResultData.absoluteLinkURL)
|| !decoder.decode(hitTestResultData.absoluteMediaURL)
|| !decoder.decode(hitTestResultData.linkLabel)
|| !decoder.decode(hitTestResultData.linkTitle)
|| !decoder.decode(hitTestResultData.isContentEditable)
|| !decoder.decode(hitTestResultData.elementBoundingBox)
|| !decoder.decode(hitTestResultData.isScrollbar))
return false;
return true;
}
IntRect WebHitTestResult::Data::elementBoundingBoxInWindowCoordinates(const HitTestResult& hitTestResult)
{
Node* node = hitTestResult.innerNonSharedNode();
if (!node)
return IntRect();
Frame* frame = node->document().frame();
if (!frame)
return IntRect();
FrameView* view = frame->view();
if (!view)
return IntRect();
return view->contentsToWindow(node->pixelSnappedBoundingBox());
}
} // WebKit