diff options
Diffstat (limited to 'Source/WebKit/qt/Api/qwebframe.cpp')
| -rw-r--r-- | Source/WebKit/qt/Api/qwebframe.cpp | 1816 |
1 files changed, 0 insertions, 1816 deletions
diff --git a/Source/WebKit/qt/Api/qwebframe.cpp b/Source/WebKit/qt/Api/qwebframe.cpp deleted file mode 100644 index 3fa0e8b71..000000000 --- a/Source/WebKit/qt/Api/qwebframe.cpp +++ /dev/null @@ -1,1816 +0,0 @@ -/* - Copyright (C) 2008,2009 Nokia Corporation and/or its subsidiary(-ies) - Copyright (C) 2007 Staikos Computing Services Inc. - - 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 "qwebframe.h" - -#include "APICast.h" -#include "BridgeJSC.h" -#include "CallFrame.h" -#include "Document.h" -#include "DocumentLoader.h" -#include "DragData.h" -#include "Element.h" -#include "FocusController.h" -#include "Frame.h" -#include "FrameLoadRequest.h" -#include "FrameLoaderClientQt.h" -#include "FrameSelection.h" -#include "FrameTree.h" -#include "FrameView.h" -#include "GCController.h" -#include "GraphicsContext.h" -#include "HTMLFormElement.h" -#include "HTMLMetaElement.h" -#include "HitTestResult.h" -#include "HTTPParsers.h" -#include "IconDatabase.h" -#include "InspectorController.h" -#include "JavaScript.h" -#include "JSDOMBinding.h" -#include "JSDOMWindowBase.h" -#include "JSLock.h" -#include "JSObject.h" -#include "JSRetainPtr.h" -#include "OpaqueJSString.h" -#include "NetworkingContext.h" -#include "NodeList.h" -#include "Page.h" -#include "PlatformMouseEvent.h" -#include "PlatformWheelEvent.h" -#include "PrintContext.h" -#include "PropertyDescriptor.h" -#include "PutPropertySlot.h" -#include "RenderLayer.h" -#include "RenderTreeAsText.h" -#include "RenderView.h" -#include "ResourceRequest.h" -#include "ScriptController.h" -#include "ScriptSourceCode.h" -#include "ScriptValue.h" -#include "Scrollbar.h" -#include "Settings.h" -#include "SubstituteData.h" -#include "SVGSMILElement.h" -#include "TiledBackingStore.h" -#include "htmlediting.h" -#include "markup.h" -#include "qt_instance.h" -#include "qt_runtime.h" -#include "qwebelement.h" -#include "qwebframe_p.h" -#include "qwebpage.h" -#include "qwebpage_p.h" -#include "qwebsecurityorigin.h" -#include "qwebsecurityorigin_p.h" -#include "qwebscriptworld.h" -#include "qwebscriptworld_p.h" -#include "runtime_object.h" -#include "runtime_root.h" -#if USE(TEXTURE_MAPPER) -#include "texmap/TextureMapper.h" -#include "texmap/TextureMapperLayer.h" -#endif -#include "wtf/HashMap.h" -#include <QMultiMap> -#include <qdebug.h> -#include <qevent.h> -#include <qfileinfo.h> -#include <qpainter.h> -#if HAVE(QTPRINTSUPPORT) -#include <qprinter.h> -#endif -#include <qregion.h> -#include <qnetworkrequest.h> - -using namespace WebCore; - -// from text/qfont.cpp -QT_BEGIN_NAMESPACE -extern Q_GUI_EXPORT int qt_defaultDpi(); -QT_END_NAMESPACE - -void QWebFramePrivate::setPage(QWebPage* newPage) -{ - if (page == newPage) - return; - - // The QWebFrame is created as a child of QWebPage or a parent QWebFrame. - // That adds it to QObject's internal children list and ensures it will be - // deleted when parent QWebPage is deleted. Reparent if needed. - if (q->parent() == qobject_cast<QObject*>(page)) - q->setParent(newPage); - - page = newPage; - pageAdapter = newPage->handle(); - emit q->pageChanged(); -} - -WebCore::Scrollbar* QWebFramePrivate::horizontalScrollBar() const -{ - if (!frame->view()) - return 0; - return frame->view()->horizontalScrollbar(); -} - -WebCore::Scrollbar* QWebFramePrivate::verticalScrollBar() const -{ - if (!frame->view()) - return 0; - return frame->view()->verticalScrollbar(); -} - -#if USE(TILED_BACKING_STORE) -void QWebFramePrivate::renderFromTiledBackingStore(GraphicsContext* context, const QRegion& clip) -{ - ASSERT(frame->tiledBackingStore()); - - if (!frame->view() || !frame->contentRenderer()) - return; - - QVector<QRect> vector = clip.rects(); - if (vector.isEmpty()) - return; - - QPainter* painter = context->platformContext(); - - WebCore::FrameView* view = frame->view(); - - int scrollX = view->scrollX(); - int scrollY = view->scrollY(); - context->translate(-scrollX, -scrollY); - - for (int i = 0; i < vector.size(); ++i) { - const QRect& clipRect = vector.at(i); - - painter->save(); - - QRect rect = clipRect.translated(scrollX, scrollY); - painter->setClipRect(rect, Qt::IntersectClip); - - frame->tiledBackingStore()->paint(context, rect); - - painter->restore(); - } - -#if USE(ACCELERATED_COMPOSITING) - renderCompositedLayers(context, IntRect(clip.boundingRect())); - renderFrameExtras(context, QFlags<QWebFrame::RenderLayer>(QWebFrame::ScrollBarLayer) | QWebFrame::PanIconLayer, clip); -#endif -} -#endif - -#if USE(ACCELERATED_COMPOSITING) -void QWebFramePrivate::renderCompositedLayers(GraphicsContext* context, const IntRect& clip) -{ - if (!rootTextureMapperLayer || !textureMapper) - return; - - textureMapper->setGraphicsContext(context); - textureMapper->setImageInterpolationQuality(context->imageInterpolationQuality()); - textureMapper->setTextDrawingMode(context->textDrawingMode()); - QPainter* painter = context->platformContext(); - const QTransform transform = painter->worldTransform(); - const TransformationMatrix matrix( - transform.m11(), transform.m12(), 0, transform.m13(), - transform.m21(), transform.m22(), 0, transform.m23(), - 0, 0, 1, 0, - transform.m31(), transform.m32(), 0, transform.m33() - ); - rootTextureMapperLayer->setTransform(matrix); - rootTextureMapperLayer->setOpacity(painter->opacity()); - textureMapper->beginPainting(); - textureMapper->beginClip(matrix, clip); - rootTextureMapperLayer->paint(); - textureMapper->endClip(); - textureMapper->endPainting(); -} -#endif - -// This code is copied from ChromeClientGtk.cpp. -static void coalesceRectsIfPossible(const QRect& clipRect, QVector<QRect>& rects) -{ - const unsigned int rectThreshold = 10; - const float wastedSpaceThreshold = 0.75f; - bool useUnionedRect = (rects.size() <= 1) || (rects.size() > rectThreshold); - if (!useUnionedRect) { - // Attempt to guess whether or not we should use the unioned rect or the individual rects. - // We do this by computing the percentage of "wasted space" in the union. If that wasted space - // is too large, then we will do individual rect painting instead. - float unionPixels = (clipRect.width() * clipRect.height()); - float singlePixels = 0; - for (size_t i = 0; i < rects.size(); ++i) - singlePixels += rects[i].width() * rects[i].height(); - float wastedSpace = 1 - (singlePixels / unionPixels); - if (wastedSpace <= wastedSpaceThreshold) - useUnionedRect = true; - } - - if (!useUnionedRect) - return; - - rects.clear(); - rects.append(clipRect); -} - -void QWebFramePrivate::renderRelativeCoords(GraphicsContext* context, QFlags<QWebFrame::RenderLayer> layers, const QRegion& clip) -{ - if (!frame->view() || !frame->contentRenderer()) - return; - - QVector<QRect> vector = clip.rects(); - if (vector.isEmpty()) - return; - - QPainter* painter = context->platformContext(); - - WebCore::FrameView* view = frame->view(); - view->updateLayoutAndStyleIfNeededRecursive(); - - if (layers & QWebFrame::ContentsLayer) { - QRect clipBoundingRect = clip.boundingRect(); - coalesceRectsIfPossible(clipBoundingRect, vector); - for (int i = 0; i < vector.size(); ++i) { - const QRect& clipRect = vector.at(i); - - QRect rect = clipRect.intersected(view->frameRect()); - - context->save(); - painter->setClipRect(clipRect, Qt::IntersectClip); - - int x = view->x(); - int y = view->y(); - - int scrollX = view->scrollX(); - int scrollY = view->scrollY(); - - context->translate(x, y); - rect.translate(-x, -y); - context->translate(-scrollX, -scrollY); - rect.translate(scrollX, scrollY); - context->clip(view->visibleContentRect()); - - view->paintContents(context, rect); - - context->restore(); - } -#if USE(ACCELERATED_COMPOSITING) - renderCompositedLayers(context, IntRect(clipBoundingRect)); -#endif - } - renderFrameExtras(context, layers, clip); -#if ENABLE(INSPECTOR) - if (frame->page()->inspectorController()->highlightedNode()) { - context->save(); - frame->page()->inspectorController()->drawHighlight(*context); - context->restore(); - } -#endif -} - -void QWebFramePrivate::renderFrameExtras(GraphicsContext* context, QFlags<QWebFrame::RenderLayer> layers, const QRegion& clip) -{ - if (!(layers & (QWebFrame::PanIconLayer | QWebFrame::ScrollBarLayer))) - return; - QPainter* painter = context->platformContext(); - WebCore::FrameView* view = frame->view(); - QVector<QRect> vector = clip.rects(); - for (int i = 0; i < vector.size(); ++i) { - const QRect& clipRect = vector.at(i); - - QRect intersectedRect = clipRect.intersected(view->frameRect()); - - painter->save(); - painter->setClipRect(clipRect, Qt::IntersectClip); - - int x = view->x(); - int y = view->y(); - - if (layers & QWebFrame::ScrollBarLayer - && !view->scrollbarsSuppressed() - && (view->horizontalScrollbar() || view->verticalScrollbar())) { - - QRect rect = intersectedRect; - context->translate(x, y); - rect.translate(-x, -y); - view->paintScrollbars(context, rect); - context->translate(-x, -y); - } - -#if ENABLE(PAN_SCROLLING) - if (layers & QWebFrame::PanIconLayer) - view->paintPanScrollIcon(context); -#endif - - painter->restore(); - } -} - -void QWebFramePrivate::emitUrlChanged() -{ - url = frame->document()->url(); - emit q->urlChanged(url); -} - -void QWebFramePrivate::didStartProvisionalLoad() -{ - emit q->provisionalLoad(); -} - -void QWebFramePrivate::_q_orientationChanged() -{ -#if ENABLE(ORIENTATION_EVENTS) - int orientation; - WebCore::Frame* frame = core(q); - - switch (m_orientation.reading()->orientation()) { - case QOrientationReading::TopUp: - orientation = 0; - break; - case QOrientationReading::TopDown: - orientation = 180; - break; - case QOrientationReading::LeftUp: - orientation = -90; - break; - case QOrientationReading::RightUp: - orientation = 90; - break; - case QOrientationReading::FaceUp: - case QOrientationReading::FaceDown: - // WebCore unable to handle it - default: - return; - } - frame->sendOrientationChangeEvent(orientation); -#endif -} - -void QWebFramePrivate::didClearWindowObject() -{ - emit q->javaScriptWindowObjectCleared(); -} - -bool QWebFramePrivate::handleProgressFinished(QPoint *localPos) -{ - QWidget *view = q->page()->view(); - if (!view || !localPos) - return false; - *localPos = view->mapFromGlobal(QCursor::pos()); - return view->hasFocus() && view->rect().contains(*localPos); -} - -void QWebFramePrivate::emitInitialLayoutCompleted() -{ - emit q->initialLayoutCompleted(); -} - -void QWebFramePrivate::emitIconChanged() -{ - emit q->iconChanged(); -} - -void QWebFramePrivate::emitLoadStarted(bool originatingLoad) -{ - if (page && originatingLoad) - emit page->loadStarted(); - emit q->loadStarted(); -} - -void QWebFramePrivate::emitLoadFinished(bool originatingLoad, bool ok) -{ - if (page && originatingLoad) - emit page->loadFinished(ok); - emit q->loadFinished(ok); -} - -QWebFrameAdapter* QWebFramePrivate::createChildFrame(QWebFrameData* frameData) -{ - QWebFrame* newFrame = new QWebFrame(/*parent frame*/q, frameData); - return newFrame->d; -} - -QWebFrame *QWebFramePrivate::apiHandle() -{ - return q; -} - -QObject *QWebFramePrivate::handle() -{ - return q; -} - -void QWebFramePrivate::contentsSizeDidChange(const QSize &size) -{ - emit q->contentsSizeChanged(size); -} - -int QWebFramePrivate::scrollBarPolicy(Qt::Orientation orientation) const -{ - return (int) q->scrollBarPolicy(orientation); -} - -/*! - \class QWebFrame - \since 4.4 - \brief The QWebFrame class represents a frame in a web page. - - \inmodule QtWebKit - - QWebFrame represents a frame inside a web page. Each QWebPage - object contains at least one frame, the main frame, obtained using - QWebPage::mainFrame(). Additional frames will be created for HTML - \c{<frame>} or \c{<iframe>} elements. - - A frame can be loaded using load() or setUrl(). Alternatively, if you have - the HTML content readily available, you can use setHtml() instead. - - The page() function returns a pointer to the web page object. See - \l{QWebView}{Elements of QWebView} for an explanation of how web - frames are related to a web page and web view. - - The QWebFrame class also offers methods to retrieve both the URL currently - loaded by the frame (see url()) as well as the URL originally requested - to be loaded (see requestedUrl()). These methods make possible the retrieval - of the URL before and after a DNS resolution or a redirection occurs during - the load process. The requestedUrl() also matches to the URL added to the - frame history (\l{QWebHistory}) if load is successful. - - The title of an HTML frame can be accessed with the title() property. - Additionally, a frame may also specify an icon, which can be accessed - using the icon() property. If the title or the icon changes, the - corresponding titleChanged() and iconChanged() signals will be emitted. - The zoomFactor() property can be used to change the overall size - of the content displayed in the frame. - - QWebFrame objects are created and controlled by the web page. You - can connect to the web page's \l{QWebPage::}{frameCreated()} signal - to be notified when a new frame is created. - - There are multiple ways to programmatically examine the contents of a frame. - The hitTestContent() function can be used to find elements by coordinate. - For access to the underlying DOM tree, there is documentElement(), - findAllElements() and findFirstElement(). - - A QWebFrame can be printed onto a QPrinter using the print() function. - This function is marked as a slot and can be conveniently connected to - \l{QPrintPreviewDialog}'s \l{QPrintPreviewDialog::}{paintRequested()} - signal. - - \sa QWebPage -*/ - -/*! - \enum QWebFrame::RenderLayer - - This enum describes the layers available for rendering using \l{QWebFrame::}{render()}. - The layers can be OR-ed together from the following list: - - \value ContentsLayer The web content of the frame - \value ScrollBarLayer The scrollbars of the frame - \value PanIconLayer The icon used when panning the frame - - \value AllLayers Includes all the above layers -*/ - -QWebFrame::QWebFrame(QWebPage *parentPage) - : QObject(parentPage) - , d(new QWebFramePrivate) -{ - d->page = parentPage; - d->q = this; - d->init(/*page adapter*/ parentPage->handle()); - -#if ENABLE(ORIENTATION_EVENTS) - connect(&d->m_orientation, SIGNAL(readingChanged()), this, SLOT(_q_orientationChanged())); - d->m_orientation.start(); -#endif -} - -QWebFrame::QWebFrame(QWebFrame* parent, QWebFrameData* frameData) - : QObject(parent) - , d(new QWebFramePrivate) -{ - d->page = parent->d->page; - d->q = this; - d->init(parent->d->pageAdapter, frameData); -#if ENABLE(ORIENTATION_EVENTS) - connect(&d->m_orientation, SIGNAL(readingChanged()), this, SLOT(_q_orientationChanged())); - d->m_orientation.start(); -#endif -} - -QWebFrame::~QWebFrame() -{ - delete d; -} - -/*! - \fn void QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object, ValueOwnership own) - - Make \a object available under \a name from within the frame's JavaScript - context. The \a object will be inserted as a child of the frame's window - object. - - Qt properties will be exposed as JavaScript properties and slots as - JavaScript methods. - The interaction between C++ and JavaScript is explained in the documentation of the \l{The QtWebKit Bridge}{QtWebKit bridge}. - - If you want to ensure that your QObjects remain accessible after loading a - new URL, you should add them in a slot connected to the - javaScriptWindowObjectCleared() signal. - - If Javascript is not enabled for this page, then this method does nothing. - - The ownership of \a object is specified using \a own. -*/ -void QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object, ValueOwnership ownership) -{ - if (!page()->settings()->testAttribute(QWebSettings::JavascriptEnabled)) - return; - JSC::Bindings::QtInstance::ValueOwnership valueOwnership = static_cast<JSC::Bindings::QtInstance::ValueOwnership>(ownership); - JSDOMWindow* window = toJSDOMWindow(d->frame, mainThreadNormalWorld()); - JSC::Bindings::RootObject* root; - if (valueOwnership == JSC::Bindings::QtInstance::QtOwnership) - root = d->frame->script()->cacheableBindingRootObject(); - else - root = d->frame->script()->bindingRootObject(); - - if (!window) { - qDebug() << "Warning: couldn't get window object"; - return; - } - if (!root) { - qDebug() << "Warning: couldn't get root object"; - return; - } - - JSC::ExecState* exec = window->globalExec(); - JSC::JSLockHolder lock(exec); - - JSC::JSObject* runtimeObject = - JSC::Bindings::QtInstance::getQtInstance(object, root, valueOwnership)->createRuntimeObject(exec); - - JSC::PutPropertySlot slot; - window->methodTable()->put(window, exec, JSC::Identifier(&exec->globalData(), reinterpret_cast_ptr<const UChar*>(name.constData()), name.length()), runtimeObject, slot); -} - -/*! - Returns the frame's content as HTML, enclosed in HTML and BODY tags. - - \sa setHtml(), toPlainText() -*/ -QString QWebFrame::toHtml() const -{ - if (!d->frame->document()) - return QString(); - return createMarkup(d->frame->document()); -} - -/*! - Returns the content of this frame converted to plain text, completely - stripped of all HTML formatting. - - \sa toHtml() -*/ -QString QWebFrame::toPlainText() const -{ - if (d->frame->view() && d->frame->view()->layoutPending()) - d->frame->view()->layout(); - - Element *documentElement = d->frame->document()->documentElement(); - if (documentElement) - return documentElement->innerText(); - return QString(); -} - -/*! - Returns a dump of the rendering tree. This is mainly useful for debugging - html. -*/ -QString QWebFrame::renderTreeDump() const -{ - if (d->frame->view() && d->frame->view()->layoutPending()) - d->frame->view()->layout(); - - return externalRepresentation(d->frame); -} - -/*! - \property QWebFrame::title - \brief the title of the frame as defined by the HTML <title> element - - \sa titleChanged() -*/ - -QString QWebFrame::title() const -{ - if (d->frame->document()) - return d->frame->loader()->documentLoader()->title().string(); - return QString(); -} - -/*! - \since 4.5 - \brief Returns the meta data in this frame as a QMultiMap - - The meta data consists of the name and content attributes of the - of the \c{<meta>} tags in the HTML document. - - For example: - - \code - <html> - <head> - <meta name="description" content="This document is a tutorial about Qt development"> - <meta name="keywords" content="Qt, WebKit, Programming"> - </head> - ... - </html> - \endcode - - Given the above HTML code the metaData() function will return a map with two entries: - \table - \header \li Key - \li Value - \row \li "description" - \li "This document is a tutorial about Qt development" - \row \li "keywords" - \li "Qt, WebKit, Programming" - \endtable - - This function returns a multi map to support multiple meta tags with the same attribute name. -*/ -QMultiMap<QString, QString> QWebFrame::metaData() const -{ - if (!d->frame->document()) - return QMap<QString, QString>(); - - QMultiMap<QString, QString> map; - Document* doc = d->frame->document(); - RefPtr<NodeList> list = doc->getElementsByTagName("meta"); - unsigned len = list->length(); - for (unsigned i = 0; i < len; i++) { - HTMLMetaElement* meta = static_cast<HTMLMetaElement*>(list->item(i)); - map.insert(meta->name(), meta->content()); - } - return map; -} - -static inline void clearCoreFrame(WebCore::Frame* frame) -{ - WebCore::DocumentLoader* documentLoader = frame->loader()->activeDocumentLoader(); - Q_ASSERT(documentLoader); - documentLoader->writer()->begin(); - documentLoader->writer()->end(); -} - -static inline bool isCoreFrameClear(WebCore::Frame* frame) -{ - return frame->document()->url().isEmpty(); -} - -/*! - \property QWebFrame::url - \brief the url of the frame currently viewed - - Setting this property clears the view and loads the URL. - - By default, this property contains an empty, invalid URL. - - \sa urlChanged() -*/ - -void QWebFrame::setUrl(const QUrl &url) -{ - clearCoreFrame(d->frame); - const QUrl absolute = QWebFrameAdapter::ensureAbsoluteUrl(url); - d->url = absolute; - load(absolute); -} - -QUrl QWebFrame::url() const -{ - return d->url; -} - -/*! - \since 4.6 - \property QWebFrame::requestedUrl - - The URL requested to loaded by the frame currently viewed. The URL may differ from - the one returned by url() if a DNS resolution or a redirection occurs. - - \sa url(), setUrl() -*/ -QUrl QWebFrame::requestedUrl() const -{ - return d->frameLoaderClient->lastRequestedUrl(); -} -/*! - \since 4.6 - \property QWebFrame::baseUrl - \brief the base URL of the frame, can be used to resolve relative URLs - \since 4.6 -*/ - -QUrl QWebFrame::baseUrl() const -{ - if (isCoreFrameClear(d->frame)) - return QUrl(d->url).resolved(QUrl()); - return d->frame->document()->baseURL(); -} - -/*! - \property QWebFrame::icon - \brief the icon associated with this frame - - \sa iconChanged(), QWebSettings::iconForUrl() -*/ - -QIcon QWebFrame::icon() const -{ - return QWebSettings::iconForUrl(d->frame->document()->url()); -} - -/*! - The name of this frame as defined by the parent frame. -*/ -QString QWebFrame::frameName() const -{ - return d->frame->tree()->uniqueName(); -} - -/*! - The web page that contains this frame. - - \sa pageChanged() -*/ -QWebPage *QWebFrame::page() const -{ - return d->page; -} - -/*! - Loads \a url into this frame. - - \note The view remains the same until enough data has arrived to display the new \a url. - - \sa setUrl(), setHtml(), setContent() -*/ -void QWebFrame::load(const QUrl &url) -{ - // The load() overload ensures that the url is absolute. - load(QNetworkRequest(url)); -} - -/*! - Loads a network request, \a req, into this frame, using the method specified in \a - operation. - - \a body is optional and is only used for POST operations. - - \note The view remains the same until enough data has arrived to display the new content. - - \sa setUrl() -*/ -void QWebFrame::load(const QNetworkRequest &req, - QNetworkAccessManager::Operation operation, - const QByteArray &body) -{ - d->load(req, operation, body); -} - -/*! - Sets the content of this frame to \a html. \a baseUrl is optional and used to resolve relative - URLs in the document, such as referenced images or stylesheets. - - The \a html is loaded immediately; external objects are loaded asynchronously. - - If a script in the \a html runs longer than the default script timeout (currently 10 seconds), - for example due to being blocked by a modal JavaScript alert dialog, this method will return - as soon as possible after the timeout and any subsequent \a html will be loaded asynchronously. - - When using this method WebKit assumes that external resources such as JavaScript programs or style - sheets are encoded in UTF-8 unless otherwise specified. For example, the encoding of an external - script can be specified through the charset attribute of the HTML script tag. It is also possible - for the encoding to be specified by web server. - - This is a convenience function equivalent to setContent(html, "text/html", baseUrl). - - \note This method will not affect session or global history for the frame. - - \warning This function works only for HTML, for other mime types (i.e. XHTML, SVG) - setContent() should be used instead. - - \sa toHtml(), setContent(), load() -*/ -void QWebFrame::setHtml(const QString &html, const QUrl &baseUrl) -{ - KURL kurl(baseUrl); - WebCore::ResourceRequest request(kurl); - const QByteArray utf8 = html.toUtf8(); - WTF::RefPtr<WebCore::SharedBuffer> data = WebCore::SharedBuffer::create(utf8.constData(), utf8.length()); - WebCore::SubstituteData substituteData(data, WTF::String("text/html"), WTF::String("utf-8"), KURL()); - d->frame->loader()->load(WebCore::FrameLoadRequest(d->frame, request, substituteData)); -} - -/*! - Sets the content of this frame to the specified content \a data. If the \a mimeType argument - is empty it is currently assumed that the content is HTML but in future versions we may introduce - auto-detection. - - External objects referenced in the content are located relative to \a baseUrl. - - The \a data is loaded immediately; external objects are loaded asynchronously. - - \note This method will not affect session or global history for the frame. - - \sa toHtml(), setHtml() -*/ -void QWebFrame::setContent(const QByteArray &data, const QString &mimeType, const QUrl &baseUrl) -{ - KURL kurl(baseUrl); - WebCore::ResourceRequest request(kurl); - WTF::RefPtr<WebCore::SharedBuffer> buffer = WebCore::SharedBuffer::create(data.constData(), data.length()); - QString actualMimeType; - WTF::String encoding; - if (mimeType.isEmpty()) - actualMimeType = QLatin1String("text/html"); - else { - actualMimeType = extractMIMETypeFromMediaType(mimeType); - encoding = extractCharsetFromMediaType(mimeType); - } - WebCore::SubstituteData substituteData(buffer, WTF::String(actualMimeType), encoding, KURL()); - d->frame->loader()->load(WebCore::FrameLoadRequest(d->frame, request, substituteData)); -} - -/*! - Returns the parent frame of this frame, or 0 if the frame is the web pages - main frame. - - This is equivalent to qobject_cast<QWebFrame*>(frame->parent()). - - \sa childFrames() -*/ -QWebFrame *QWebFrame::parentFrame() const -{ - return d->parentFrame(); -} - -/*! - Returns a list of all frames that are direct children of this frame. - - \sa parentFrame() -*/ -QList<QWebFrame*> QWebFrame::childFrames() const -{ - QList<QWebFrame*> rc; - if (d->frame) { - FrameTree *tree = d->frame->tree(); - for (Frame *child = tree->firstChild(); child; child = child->tree()->nextSibling()) { - FrameLoader *loader = child->loader(); - QWebFrame* webFrame = qobject_cast<QWebFrame*>(loader->networkingContext()->originatingObject()); - if (webFrame) - rc.append(webFrame); - } - - } - return rc; -} - -/*! - Returns the scrollbar policy for the scrollbar defined by \a orientation. -*/ -Qt::ScrollBarPolicy QWebFrame::scrollBarPolicy(Qt::Orientation orientation) const -{ - if (orientation == Qt::Horizontal) - return d->horizontalScrollBarPolicy; - return d->verticalScrollBarPolicy; -} - -/*! - Sets the scrollbar policy for the scrollbar defined by \a orientation to \a policy. -*/ -void QWebFrame::setScrollBarPolicy(Qt::Orientation orientation, Qt::ScrollBarPolicy policy) -{ - Q_ASSERT((int)ScrollbarAuto == (int)Qt::ScrollBarAsNeeded); - Q_ASSERT((int)ScrollbarAlwaysOff == (int)Qt::ScrollBarAlwaysOff); - Q_ASSERT((int)ScrollbarAlwaysOn == (int)Qt::ScrollBarAlwaysOn); - - if (orientation == Qt::Horizontal) { - d->horizontalScrollBarPolicy = policy; - if (d->frame->view()) { - d->frame->view()->setHorizontalScrollbarMode((ScrollbarMode)policy, policy != Qt::ScrollBarAsNeeded /* lock */); - d->frame->view()->updateCanHaveScrollbars(); - } - } else { - d->verticalScrollBarPolicy = policy; - if (d->frame->view()) { - d->frame->view()->setVerticalScrollbarMode((ScrollbarMode)policy, policy != Qt::ScrollBarAsNeeded /* lock */); - d->frame->view()->updateCanHaveScrollbars(); - } - } -} - -/*! - Sets the current \a value for the scrollbar with orientation \a orientation. - - The scrollbar forces the \a value to be within the legal range: minimum <= value <= maximum. - - Changing the value also updates the thumb position. - - \sa scrollBarMinimum(), scrollBarMaximum() -*/ -void QWebFrame::setScrollBarValue(Qt::Orientation orientation, int value) -{ - Scrollbar *sb; - sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar(); - if (sb) { - if (value < 0) - value = 0; - else if (value > scrollBarMaximum(orientation)) - value = scrollBarMaximum(orientation); - sb->scrollableArea()->scrollToOffsetWithoutAnimation(orientation == Qt::Horizontal ? HorizontalScrollbar : VerticalScrollbar, value); - } -} - -/*! - Returns the current value for the scrollbar with orientation \a orientation, or 0 - if no scrollbar is found for \a orientation. - - \sa scrollBarMinimum(), scrollBarMaximum() -*/ -int QWebFrame::scrollBarValue(Qt::Orientation orientation) const -{ - Scrollbar *sb; - sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar(); - if (sb) - return sb->value(); - return 0; -} - -/*! - Returns the maximum value for the scrollbar with orientation \a orientation, or 0 - if no scrollbar is found for \a orientation. - - \sa scrollBarMinimum() -*/ -int QWebFrame::scrollBarMaximum(Qt::Orientation orientation) const -{ - Scrollbar *sb; - sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar(); - if (sb) - return sb->maximum(); - return 0; -} - -/*! - Returns the minimum value for the scrollbar with orientation \a orientation. - - The minimum value is always 0. - - \sa scrollBarMaximum() -*/ -int QWebFrame::scrollBarMinimum(Qt::Orientation orientation) const -{ - Q_UNUSED(orientation) - return 0; -} - -/*! - \since 4.6 - Returns the geometry for the scrollbar with orientation \a orientation. - - If the scrollbar does not exist an empty rect is returned. -*/ -QRect QWebFrame::scrollBarGeometry(Qt::Orientation orientation) const -{ - Scrollbar *sb; - sb = (orientation == Qt::Horizontal) ? d->horizontalScrollBar() : d->verticalScrollBar(); - if (sb) - return sb->frameRect(); - return QRect(); -} - -/*! - \since 4.5 - Scrolls the frame \a dx pixels to the right and \a dy pixels downward. Both - \a dx and \a dy may be negative. - - \sa QWebFrame::scrollPosition -*/ - -void QWebFrame::scroll(int dx, int dy) -{ - if (!d->frame->view()) - return; - - d->frame->view()->scrollBy(IntSize(dx, dy)); -} - -/*! - \property QWebFrame::scrollPosition - \since 4.5 - \brief the position the frame is currently scrolled to. -*/ - -QPoint QWebFrame::scrollPosition() const -{ - IntSize ofs = d->scrollPosition(); - return QPoint(ofs.width(), ofs.height()); -} - -void QWebFrame::setScrollPosition(const QPoint &pos) -{ - QPoint current = scrollPosition(); - int dx = pos.x() - current.x(); - int dy = pos.y() - current.y(); - scroll(dx, dy); -} - -/*! - \since 4.7 - Scrolls the frame to the given \a anchor name. -*/ -void QWebFrame::scrollToAnchor(const QString& anchor) -{ - FrameView *view = d->frame->view(); - if (view) - view->scrollToAnchor(anchor); -} - -/*! - \since 4.6 - Render the \a layer of the frame using \a painter clipping to \a clip. - - \sa print() -*/ - -void QWebFrame::render(QPainter* painter, RenderLayer layer, const QRegion& clip) -{ - GraphicsContext context(painter); - if (context.paintingDisabled() && !context.updatingControlTints()) - return; - - if (!clip.isEmpty()) - d->renderRelativeCoords(&context, layer, clip); - else if (d->frame->view()) - d->renderRelativeCoords(&context, layer, QRegion(d->frame->view()->frameRect())); -} - -/*! - Render the frame into \a painter clipping to \a clip. -*/ -void QWebFrame::render(QPainter* painter, const QRegion& clip) -{ - GraphicsContext context(painter); - if (context.paintingDisabled() && !context.updatingControlTints()) - return; - - d->renderRelativeCoords(&context, AllLayers, clip); -} - -/*! - Render the frame into \a painter. -*/ -void QWebFrame::render(QPainter* painter) -{ - if (!d->frame->view()) - return; - - GraphicsContext context(painter); - if (context.paintingDisabled() && !context.updatingControlTints()) - return; - - d->renderRelativeCoords(&context, AllLayers, QRegion(d->frame->view()->frameRect())); -} - -/*! - \property QWebFrame::textSizeMultiplier - \brief the scaling factor for all text in the frame - \obsolete - - Use setZoomFactor instead, in combination with the ZoomTextOnly attribute in - QWebSettings. - - \note Setting this property also enables the ZoomTextOnly attribute in - QWebSettings. -*/ - -/*! - Sets the value of the multiplier used to scale the text in a Web frame to - the \a factor specified. -*/ -void QWebFrame::setTextSizeMultiplier(qreal factor) -{ - page()->settings()->setAttribute(QWebSettings::ZoomTextOnly, true); - - d->frame->setPageAndTextZoomFactors(1, factor); -} - -/*! - Returns the value of the multiplier used to scale the text in a Web frame. -*/ -qreal QWebFrame::textSizeMultiplier() const -{ - return page()->settings()->testAttribute(QWebSettings::ZoomTextOnly) ? d->frame->textZoomFactor() : d->frame->pageZoomFactor(); -} - -/*! - \property QWebFrame::zoomFactor - \since 4.5 - \brief the zoom factor for the frame -*/ - -void QWebFrame::setZoomFactor(qreal factor) -{ - if (page()->settings()->testAttribute(QWebSettings::ZoomTextOnly)) - d->frame->setTextZoomFactor(factor); - else - d->frame->setPageZoomFactor(factor); -} - -qreal QWebFrame::zoomFactor() const -{ - return page()->settings()->testAttribute(QWebSettings::ZoomTextOnly) ? d->frame->textZoomFactor() : d->frame->pageZoomFactor(); -} - -/*! - \property QWebFrame::focus - \since 4.6 - - Returns true if this frame has keyboard input focus; otherwise, returns false. -*/ -bool QWebFrame::hasFocus() const -{ - WebCore::Frame* ff = d->frame->page()->focusController()->focusedFrame(); - return ff && QWebFramePrivate::kit(ff) == this; -} - -/*! - \since 4.6 - - Gives keyboard input focus to this frame. -*/ -void QWebFrame::setFocus() -{ - QWebFramePrivate::core(this)->page()->focusController()->setFocusedFrame(QWebFramePrivate::core(this)); -} - -/*! - Returns the position of the frame relative to it's parent frame. -*/ -QPoint QWebFrame::pos() const -{ - if (!d->frame->view()) - return QPoint(); - - return d->frame->view()->frameRect().location(); -} - -/*! - Return the geometry of the frame relative to it's parent frame. -*/ -QRect QWebFrame::geometry() const -{ - return d->frameRect(); -} - -/*! - \property QWebFrame::contentsSize - \brief the size of the contents in this frame - - \sa contentsSizeChanged() -*/ -QSize QWebFrame::contentsSize() const -{ - FrameView *view = d->frame->view(); - if (!view) - return QSize(); - return QSize(view->contentsWidth(), view->contentsHeight()); -} - -/*! - \since 4.6 - - Returns the document element of this frame. - - The document element provides access to the entire structured - content of the frame. -*/ -QWebElement QWebFrame::documentElement() const -{ - WebCore::Document *doc = d->frame->document(); - if (!doc) - return QWebElement(); - return QWebElement(doc->documentElement()); -} - -/*! - \since 4.6 - Returns a new list of elements matching the given CSS selector \a selectorQuery. - If there are no matching elements, an empty list is returned. - - \l{http://www.w3.org/TR/REC-CSS2/selector.html#q1}{Standard CSS2 selector} syntax is - used for the query. - - \sa QWebElement::findAll() -*/ -QWebElementCollection QWebFrame::findAllElements(const QString &selectorQuery) const -{ - return documentElement().findAll(selectorQuery); -} - -/*! - \since 4.6 - Returns the first element in the frame's document that matches the - given CSS selector \a selectorQuery. If there is no matching element, a - null element is returned. - - \l{http://www.w3.org/TR/REC-CSS2/selector.html#q1}{Standard CSS2 selector} syntax is - used for the query. - - \sa QWebElement::findFirst() -*/ -QWebElement QWebFrame::findFirstElement(const QString &selectorQuery) const -{ - return documentElement().findFirst(selectorQuery); -} - -/*! - Performs a hit test on the frame contents at the given position \a pos and returns the hit test result. -*/ -QWebHitTestResult QWebFrame::hitTestContent(const QPoint &pos) const -{ - if (!d->frame->view() || !d->frame->contentRenderer()) - return QWebHitTestResult(); - - HitTestResult result = d->frame->eventHandler()->hitTestResultAtPoint(d->frame->view()->windowToContents(pos), /*allowShadowContent*/ false, /*ignoreClipping*/ true); - - if (result.scrollbar()) - return QWebHitTestResult(); - - return QWebHitTestResult(new QWebHitTestResultPrivate(result)); -} - -/*! \reimp -*/ -bool QWebFrame::event(QEvent *e) -{ - return QObject::event(e); -} - -#ifndef QT_NO_PRINTER -/*! - Prints the frame to the given \a printer. - - \sa render() -*/ -void QWebFrame::print(QPrinter *printer) const -{ -#if HAVE(QTPRINTSUPPORT) - QPainter painter; - if (!painter.begin(printer)) - return; - - const qreal zoomFactorX = (qreal)printer->logicalDpiX() / qt_defaultDpi(); - const qreal zoomFactorY = (qreal)printer->logicalDpiY() / qt_defaultDpi(); - - PrintContext printContext(d->frame); - float pageHeight = 0; - - QRect qprinterRect = printer->pageRect(); - - IntRect pageRect(0, 0, - int(qprinterRect.width() / zoomFactorX), - int(qprinterRect.height() / zoomFactorY)); - - printContext.begin(pageRect.width(), pageRect.height()); - - printContext.computePageRects(pageRect, /* headerHeight */ 0, /* footerHeight */ 0, /* userScaleFactor */ 1.0, pageHeight); - - int docCopies; - int pageCopies; - if (printer->collateCopies()) { - docCopies = 1; - pageCopies = printer->numCopies(); - } else { - docCopies = printer->numCopies(); - pageCopies = 1; - } - - int fromPage = printer->fromPage(); - int toPage = printer->toPage(); - bool ascending = true; - - if (fromPage == 0 && toPage == 0) { - fromPage = 1; - toPage = printContext.pageCount(); - } - // paranoia check - fromPage = qMax(1, fromPage); - toPage = qMin(static_cast<int>(printContext.pageCount()), toPage); - if (toPage < fromPage) { - // if the user entered a page range outside the actual number - // of printable pages, just return - return; - } - - if (printer->pageOrder() == QPrinter::LastPageFirst) { - int tmp = fromPage; - fromPage = toPage; - toPage = tmp; - ascending = false; - } - - painter.scale(zoomFactorX, zoomFactorY); - GraphicsContext ctx(&painter); - - for (int i = 0; i < docCopies; ++i) { - int page = fromPage; - while (true) { - for (int j = 0; j < pageCopies; ++j) { - if (printer->printerState() == QPrinter::Aborted - || printer->printerState() == QPrinter::Error) { - printContext.end(); - return; - } - printContext.spoolPage(ctx, page - 1, pageRect.width()); - if (j < pageCopies - 1) - printer->newPage(); - } - - if (page == toPage) - break; - - if (ascending) - ++page; - else - --page; - - printer->newPage(); - } - - if ( i < docCopies - 1) - printer->newPage(); - } - - printContext.end(); -#endif // HAVE(PRINTSUPPORT) -} -#endif // QT_NO_PRINTER - -/*! - Evaluates the JavaScript defined by \a scriptSource using this frame as context - and returns the result of the last executed statement. - - \sa addToJavaScriptWindowObject(), javaScriptWindowObjectCleared() -*/ -QVariant QWebFrame::evaluateJavaScript(const QString& scriptSource) -{ - ScriptController *proxy = d->frame->script(); - QVariant rc; - if (proxy) { - int distance = 0; - JSC::JSValue v = d->frame->script()->executeScript(ScriptSourceCode(scriptSource)).jsValue(); - JSC::ExecState* exec = proxy->globalObject(mainThreadNormalWorld())->globalExec(); - JSValueRef* ignoredException = 0; - rc = JSC::Bindings::convertValueToQVariant(toRef(exec), toRef(exec, v), QMetaType::Void, &distance, ignoredException); - } - return rc; -} - -/*! - \since 4.5 - - Returns the frame's security origin. -*/ -QWebSecurityOrigin QWebFrame::securityOrigin() const -{ - QWebFrame* that = const_cast<QWebFrame*>(this); - QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(QWebFramePrivate::core(that)->document()->securityOrigin()); - return QWebSecurityOrigin(priv); -} - -WebCore::Frame* QWebFramePrivate::core(const QWebFrame* webFrame) -{ - return webFrame->d->frame; -} - -QWebFrame* QWebFramePrivate::kit(const WebCore::Frame* coreFrame) -{ - return qobject_cast<QWebFrame*>(coreFrame->loader()->networkingContext()->originatingObject()); -} - -QWebFrame *QWebFramePrivate::kit(const QWebFrameAdapter* frameAdapter) -{ - return static_cast<const QWebFramePrivate*>(frameAdapter)->q; -} - - -/*! - \fn void QWebFrame::javaScriptWindowObjectCleared() - - This signal is emitted whenever the global window object of the JavaScript - environment is cleared, e.g., before starting a new load. - - If you intend to add QObjects to a QWebFrame using - addToJavaScriptWindowObject(), you should add them in a slot connected - to this signal. This ensures that your objects remain accessible when - loading new URLs. -*/ - -/*! - \fn void QWebFrame::provisionalLoad() - \internal -*/ - -/*! - \fn void QWebFrame::titleChanged(const QString &title) - - This signal is emitted whenever the title of the frame changes. - The \a title string specifies the new title. - - \sa title() -*/ - -/*! - \fn void QWebFrame::urlChanged(const QUrl &url) - - This signal is emitted with the URL of the frame when the frame's title is - received. The new URL is specified by \a url. - - \sa url() -*/ - -/*! - \fn void QWebFrame::initialLayoutCompleted() - - This signal is emitted when the frame is laid out the first time. - This is the first time you will see contents displayed on the frame. - - \note A frame can be laid out multiple times. -*/ - -/*! - \fn void QWebFrame::iconChanged() - - This signal is emitted when the icon ("favicon") associated with the frame - has been loaded. - - \sa icon() -*/ - -/*! - \fn void QWebFrame::contentsSizeChanged(const QSize &size) - \since 4.6 - - This signal is emitted when the frame's contents size changes - to \a size. - - \sa contentsSize() -*/ - -/*! - \fn void QWebFrame::loadStarted() - \since 4.6 - - This signal is emitted when a new load of this frame is started. - - \sa loadFinished() -*/ - -/*! - \fn void QWebFrame::loadFinished(bool ok) - \since 4.6 - - This signal is emitted when a load of this frame is finished. - \a ok will indicate whether the load was successful or any error occurred. - - \sa loadStarted() -*/ - -/*! - \fn void QWebFrame::pageChanged() - \since 4.7 - - This signal is emitted when this frame has been moved to a different QWebPage. - - \sa page() -*/ - -/*! - \class QWebHitTestResult - \since 4.4 - \brief The QWebHitTestResult class provides information about the web - page content after a hit test. - - \inmodule QtWebKit - - QWebHitTestResult is returned by QWebFrame::hitTestContent() to provide - information about the content of the web page at the specified position. -*/ - -/*! - \internal -*/ -QWebHitTestResult::QWebHitTestResult(QWebHitTestResultPrivate *priv) - : d(priv) -{ -} - -QWebHitTestResultPrivate::QWebHitTestResultPrivate(const WebCore::HitTestResult &hitTest) - : isContentEditable(false) - , isContentSelected(false) - , isScrollBar(false) -{ - if (!hitTest.innerNode()) - return; - pos = hitTest.roundedPointInInnerNodeFrame(); - WebCore::TextDirection dir; - title = hitTest.title(dir); - linkText = hitTest.textContent(); - linkUrl = hitTest.absoluteLinkURL(); - linkTitle = hitTest.titleDisplayString(); - alternateText = hitTest.altDisplayString(); - imageUrl = hitTest.absoluteImageURL(); - innerNode = hitTest.innerNode(); - innerNonSharedNode = hitTest.innerNonSharedNode(); - boundingRect = innerNonSharedNode ? innerNonSharedNode->renderer()->absoluteBoundingBoxRect() : IntRect(); - WebCore::Image *img = hitTest.image(); - if (img) { - QPixmap *pix = img->nativeImageForCurrentFrame(); - if (pix) - pixmap = *pix; - } - WebCore::Frame *wframe = hitTest.targetFrame(); - if (wframe) - linkTargetFrame = QWebFramePrivate::kit(wframe); - linkElement = QWebElement(hitTest.URLElement()); - - isContentEditable = hitTest.isContentEditable(); - isContentSelected = hitTest.isSelected(); - isScrollBar = hitTest.scrollbar(); - - WebCore::Frame *innerNodeFrame = hitTest.innerNodeFrame(); - if (innerNodeFrame) - frame = QWebFramePrivate::kit(innerNodeFrame); - - enclosingBlock = QWebElement(WebCore::enclosingBlock(innerNode.get())); -} - -/*! - Constructs a null hit test result. -*/ -QWebHitTestResult::QWebHitTestResult() - : d(0) -{ -} - -/*! - Constructs a hit test result from \a other. -*/ -QWebHitTestResult::QWebHitTestResult(const QWebHitTestResult &other) - : d(0) -{ - if (other.d) - d = new QWebHitTestResultPrivate(*other.d); -} - -/*! - Assigns the \a other hit test result to this. -*/ -QWebHitTestResult &QWebHitTestResult::operator=(const QWebHitTestResult &other) -{ - if (this != &other) { - if (other.d) { - if (!d) - d = new QWebHitTestResultPrivate; - *d = *other.d; - } else { - delete d; - d = 0; - } - } - return *this; -} - -/*! - Destructor. -*/ -QWebHitTestResult::~QWebHitTestResult() -{ - delete d; -} - -/*! - Returns true if the hit test result is null; otherwise returns false. -*/ -bool QWebHitTestResult::isNull() const -{ - return !d; -} - -/*! - Returns the position where the hit test occured in the coordinates of frame containing the element hit. - - \sa frame() -*/ -QPoint QWebHitTestResult::pos() const -{ - if (!d) - return QPoint(); - return d->pos; -} - -/*! - \since 4.5 - Returns the bounding rect of the element. -*/ -QRect QWebHitTestResult::boundingRect() const -{ - if (!d) - return QRect(); - return d->boundingRect; -} - -/*! - \since 4.6 - Returns the block element that encloses the element hit. - - A block element is an element that is rendered using the - CSS "block" style. This includes for example text - paragraphs. -*/ -QWebElement QWebHitTestResult::enclosingBlockElement() const -{ - if (!d) - return QWebElement(); - return d->enclosingBlock; -} - -/*! - Returns the title of the nearest enclosing HTML element. -*/ -QString QWebHitTestResult::title() const -{ - if (!d) - return QString(); - return d->title; -} - -/*! - Returns the text of the link. -*/ -QString QWebHitTestResult::linkText() const -{ - if (!d) - return QString(); - return d->linkText; -} - -/*! - Returns the url to which the link points to. -*/ -QUrl QWebHitTestResult::linkUrl() const -{ - if (!d) - return QUrl(); - return d->linkUrl; -} - -/*! - Returns the title of the link. -*/ -QUrl QWebHitTestResult::linkTitle() const -{ - if (!d) - return QUrl(); - return d->linkTitle; -} - -/*! - \since 4.6 - Returns the element that represents the link. - - \sa linkTargetFrame() -*/ -QWebElement QWebHitTestResult::linkElement() const -{ - if (!d) - return QWebElement(); - return d->linkElement; -} - -/*! - Returns the frame that will load the link if it is activated. - - \sa linkElement() -*/ -QWebFrame *QWebHitTestResult::linkTargetFrame() const -{ - if (!d) - return 0; - return d->linkTargetFrame.data(); -} - -/*! - Returns the alternate text of the element. This corresponds to the HTML alt attribute. -*/ -QString QWebHitTestResult::alternateText() const -{ - if (!d) - return QString(); - return d->alternateText; -} - -/*! - Returns the url of the image. -*/ -QUrl QWebHitTestResult::imageUrl() const -{ - if (!d) - return QUrl(); - return d->imageUrl; -} - -/*! - Returns a QPixmap containing the image. A null pixmap is returned if the - element being tested is not an image. -*/ -QPixmap QWebHitTestResult::pixmap() const -{ - if (!d) - return QPixmap(); - return d->pixmap; -} - -/*! - Returns true if the content is editable by the user; otherwise returns false. -*/ -bool QWebHitTestResult::isContentEditable() const -{ - if (!d) - return false; - return d->isContentEditable; -} - -/*! - Returns true if the content tested is part of the selection; otherwise returns false. -*/ -bool QWebHitTestResult::isContentSelected() const -{ - if (!d) - return false; - return d->isContentSelected; -} - -/*! - \since 4.6 - Returns the underlying DOM element as QWebElement. -*/ -QWebElement QWebHitTestResult::element() const -{ - if (!d || !d->innerNonSharedNode || !d->innerNonSharedNode->isElementNode()) - return QWebElement(); - - return QWebElement(static_cast<WebCore::Element*>(d->innerNonSharedNode.get())); -} - -/*! - Returns the frame of the element hit. -*/ -QWebFrame *QWebHitTestResult::frame() const -{ - if (!d) - return 0; - return d->frame.data(); -} - -/*! - * \internal - */ -QWebFrameAdapter *QWebFrame::handle() const -{ - return d; -} - -#include "moc_qwebframe.cpp" |
