/* * 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 #include #include #include #include #include #include using namespace WebCore; namespace WebKit { PassRefPtr 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