diff options
author | Ben Murdoch <benm@google.com> | 2011-05-13 16:23:25 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-05-16 11:35:02 +0100 |
commit | 65f03d4f644ce73618e5f4f50dd694b26f55ae12 (patch) | |
tree | f478babb801e720de7bfaee23443ffe029f58731 /WebKit/qt/Api | |
parent | 47de4a2fb7262c7ebdb9cd133ad2c54c187454d0 (diff) | |
download | external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.zip external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.gz external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.bz2 |
Merge WebKit at r75993: Initial merge by git.
Change-Id: I602bbdc3974787a3b0450456a30a7868286921c3
Diffstat (limited to 'WebKit/qt/Api')
41 files changed, 0 insertions, 16929 deletions
diff --git a/WebKit/qt/Api/DerivedSources.pro b/WebKit/qt/Api/DerivedSources.pro deleted file mode 100644 index 8084242..0000000 --- a/WebKit/qt/Api/DerivedSources.pro +++ /dev/null @@ -1,108 +0,0 @@ -TEMPLATE = lib -TARGET = dummy - -include(headers.pri) - -CONFIG -= debug_and_release - -DESTDIR = ../../../include/QtWebKit - -QUOTE = "" -DOUBLE_ESCAPED_QUOTE = "" -ESCAPE = "" -win32-msvc* | wince* { - ESCAPE = "^" -} else:contains(QMAKE_HOST.os, "Windows"):isEmpty(QMAKE_SH) { - # MinGW's make will run makefile commands using sh, even if make - # was run from the Windows shell, if it finds sh in the path. - ESCAPE = "^" -} else { - QUOTE = "\'" - DOUBLE_ESCAPED_QUOTE = "\\\'" - ESCAPE = "\\" -} - -qtheader_module.target = $${DESTDIR}/QtWebKit -qtheader_module.depends = $${_PRO_FILE_} -qtheader_module.commands = echo $${QUOTE}$${LITERAL_HASH}ifndef QT_QTWEBKIT_MODULE_H$${QUOTE} > $${qtheader_module.target} && -qtheader_module.commands += echo $${QUOTE}$${LITERAL_HASH}define QT_QTWEBKIT_MODULE_H$${QUOTE} >> $${qtheader_module.target} && -qtheader_module.commands += echo $${QUOTE}$${LITERAL_HASH}include $${ESCAPE}<QtNetwork/QtNetwork$${ESCAPE}>$${QUOTE} >> $${qtheader_module.target} && -WEBKIT_CLASS_HEADERS = $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/QtWebKit - -regex = ".*\\sclass\\sQWEBKIT_EXPORT\\s(\\w+)\\s(.*)" - -for(HEADER, WEBKIT_API_HEADERS) { - # 1. Append to QtWebKit header that includes all other header files - # Quotes need to be escaped once more when placed in eval() - eval(qtheader_module.commands += echo $${DOUBLE_ESCAPED_QUOTE}\$${LITERAL_HASH}include \\\"$$basename(HEADER)\\\"$${DOUBLE_ESCAPED_QUOTE} >> $${qtheader_module.target} &&) - - HEADER_NAME = $$basename(HEADER) - HEADER_TARGET = $$replace(HEADER_NAME, [^a-zA-Z0-9_], -) - HEADER_TARGET = "qtheader-$${HEADER_TARGET}" - - # 2. Create forwarding header files for qwebframe.h, etc. - # Normally they contain absolute paths, for package builds we make the path relative so that - # the package sources are relocatable. - - PATH_TO_HEADER = $$HEADER - CONFIG(standalone_package): PATH_TO_HEADER = ../../WebKit/qt/Api/$$basename(HEADER) - - eval($${HEADER_TARGET}.target = $${DESTDIR}/$${HEADER_NAME}) - eval($${HEADER_TARGET}.depends = $$HEADER) - eval($${HEADER_TARGET}.commands = echo $${DOUBLE_ESCAPED_QUOTE}\$${LITERAL_HASH}include \\\"$$PATH_TO_HEADER\\\"$${DOUBLE_ESCAPED_QUOTE} > $$eval($${HEADER_TARGET}.target)) - - QMAKE_EXTRA_TARGETS += $$HEADER_TARGET - qtheader_module.depends += $$eval($${HEADER_TARGET}.target) - - # 3. Extract class names of exported classes from the headers and generate - # the class name header files - - src_words = $$cat($$HEADER) - # Really make sure we're dealing with words - src_words = $$split(src_words, " ") - - src = $$join(src_words, $${LITERAL_WHITESPACE}) - for(ever) { - # Looking up by line is faster, so we try that first - res = $$find(src_words, "QWEBKIT_EXPORT") - isEmpty(res):break() - - # Then do a slow lookup to ensure we're dealing with an exported class - res = $$find(src, $$regex) - isEmpty(res):break() - - exp = $$replace(src, $$regex, "EXPORTED_CLASS = \\1") - eval($$exp) - - CLASS_TARGET = "qtheader_$${EXPORTED_CLASS}" - - eval($${CLASS_TARGET}.target = $${DESTDIR}/$${EXPORTED_CLASS}) - eval($${CLASS_TARGET}.depends = $$eval($${HEADER_TARGET}.target)) - eval($${CLASS_TARGET}.commands = echo $${DOUBLE_ESCAPED_QUOTE}\$${LITERAL_HASH}include \\\"$$basename(HEADER)\\\"$${DOUBLE_ESCAPED_QUOTE} > $$eval($${CLASS_TARGET}.target)) - - QMAKE_EXTRA_TARGETS += $$CLASS_TARGET - WEBKIT_CLASS_HEADERS += $${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PWD/$${EXPORTED_CLASS} - - generated_files.depends += $$eval($${CLASS_TARGET}.target) - qtheader_pri.depends += $$eval($${CLASS_TARGET}.target) - - # Qt's QRegExp does not support inline non-greedy matching, - # so we'll have to work around it by updating the haystack - src = $$replace(src, $$regex, "\\2") - src_words = $$join(src, $${LITERAL_WHITESPACE}) - } -} - -qtheader_module.commands += echo $${QUOTE}$${LITERAL_HASH}endif // QT_QTWEBKIT_MODULE_H$${QUOTE} >> $${qtheader_module.target} -QMAKE_EXTRA_TARGETS += qtheader_module - -qtheader_pri.target = $${DESTDIR}/classheaders.pri -qtheader_pri.depends += $${_PRO_FILE_} -qtheader_pri.commands = echo $${QUOTE}WEBKIT_CLASS_HEADERS = $${WEBKIT_CLASS_HEADERS}$${QUOTE} > $${qtheader_pri.target} -QMAKE_EXTRA_TARGETS += qtheader_pri - -generated_files.depends += $${qtheader_module.target} $${qtheader_pri.target} -QMAKE_EXTRA_TARGETS += generated_files - - - diff --git a/WebKit/qt/Api/headers.pri b/WebKit/qt/Api/headers.pri deleted file mode 100644 index 29bb125..0000000 --- a/WebKit/qt/Api/headers.pri +++ /dev/null @@ -1,15 +0,0 @@ -WEBKIT_API_HEADERS = $$PWD/qwebframe.h \ - $$PWD/qgraphicswebview.h \ - $$PWD/qwebkitglobal.h \ - $$PWD/qwebkitplatformplugin.h \ - $$PWD/qwebpage.h \ - $$PWD/qwebview.h \ - $$PWD/qwebsettings.h \ - $$PWD/qwebhistoryinterface.h \ - $$PWD/qwebdatabase.h \ - $$PWD/qwebsecurityorigin.h \ - $$PWD/qwebelement.h \ - $$PWD/qwebpluginfactory.h \ - $$PWD/qwebhistory.h \ - $$PWD/qwebinspector.h \ - $$PWD/qwebkitversion.h diff --git a/WebKit/qt/Api/qgraphicswebview.cpp b/WebKit/qt/Api/qgraphicswebview.cpp deleted file mode 100644 index 9697c20..0000000 --- a/WebKit/qt/Api/qgraphicswebview.cpp +++ /dev/null @@ -1,1146 +0,0 @@ -/* - Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) - Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in> - - 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 "qgraphicswebview.h" - -#include "qwebframe.h" -#include "qwebframe_p.h" -#include "qwebpage.h" -#include "qwebpage_p.h" -#include "PageClientQt.h" -#include "FrameView.h" -#include "GraphicsContext.h" -#include "IntRect.h" -#include "TiledBackingStore.h" -#include <QtCore/qmetaobject.h> -#include <QtCore/qsharedpointer.h> -#include <QtCore/qtimer.h> -#include <QtGui/qapplication.h> -#include <QtGui/qgraphicsscene.h> -#include <QtGui/qgraphicssceneevent.h> -#include <QtGui/qgraphicsview.h> -#include <QtGui/qpixmapcache.h> -#include <QtGui/qscrollbar.h> -#include <QtGui/qstyleoption.h> -#include <QtGui/qinputcontext.h> -#if defined(Q_WS_X11) -#include <QX11Info> -#endif -#include <Settings.h> - -using namespace WebCore; - -class QGraphicsWebViewPrivate { -public: - QGraphicsWebViewPrivate(QGraphicsWebView* parent) - : q(parent) - , page(0) - , resizesToContents(false) {} - - virtual ~QGraphicsWebViewPrivate(); - - void syncLayers(); - - void updateResizesToContentsForPage(); - - void detachCurrentPage(); - - void _q_doLoadFinished(bool success); - void _q_contentsSizeChanged(const QSize&); - void _q_scaleChanged(); - -#if !defined(QT_NO_IM) && (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) - void _q_updateMicroFocus(); -#endif - void _q_pageDestroyed(); - - QGraphicsWebView* q; - QWebPage* page; - bool resizesToContents; - - QGraphicsItemOverlay* overlay() const - { - if (!page || !page->d->client) - return 0; - return pageClient()->overlay; - } - - PageClientQGraphicsWidget* pageClient() const - { - return static_cast<WebCore::PageClientQGraphicsWidget*> (page->d->client.get()); - } -}; - -QGraphicsWebViewPrivate::~QGraphicsWebViewPrivate() -{ - detachCurrentPage(); -} - -void QGraphicsWebViewPrivate::syncLayers() -{ -#if USE(ACCELERATED_COMPOSITING) - pageClient()->syncLayers(); -#endif -} - -void QGraphicsWebViewPrivate::_q_doLoadFinished(bool success) -{ - // If the page had no title, still make sure it gets the signal - if (q->title().isEmpty()) - emit q->urlChanged(q->url()); - - emit q->loadFinished(success); -} - -#if !defined(QT_NO_IM) && (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) -void QGraphicsWebViewPrivate::_q_updateMicroFocus() -{ - // Ideally, this should be handled by a common call to an updateMicroFocus function - // in QGraphicsItem. See http://bugreports.qt.nokia.com/browse/QTBUG-7578. - QList<QGraphicsView*> views = q->scene()->views(); - for (int c = 0; c < views.size(); ++c) { - QInputContext* ic = views.at(c)->inputContext(); - if (ic) - ic->update(); - } -} -#endif - -void QGraphicsWebViewPrivate::_q_pageDestroyed() -{ - page = 0; - q->setPage(0); -} - -void QGraphicsWebViewPrivate::updateResizesToContentsForPage() -{ - ASSERT(page); - pageClient()->viewResizesToContents = resizesToContents; - if (resizesToContents) { - // resizes to contents mode requires preferred contents size to be set - if (!page->preferredContentsSize().isValid()) - page->setPreferredContentsSize(QSize(960, 800)); - - QObject::connect(page->mainFrame(), SIGNAL(contentsSizeChanged(QSize)), - q, SLOT(_q_contentsSizeChanged(const QSize&)), Qt::UniqueConnection); - } else { - QObject::disconnect(page->mainFrame(), SIGNAL(contentsSizeChanged(QSize)), - q, SLOT(_q_contentsSizeChanged(const QSize&))); - } - page->d->page->mainFrame()->view()->setPaintsEntireContents(resizesToContents); - page->d->page->mainFrame()->view()->setDelegatesScrolling(resizesToContents); -} - -void QGraphicsWebViewPrivate::_q_contentsSizeChanged(const QSize& size) -{ - if (!resizesToContents) - return; - q->setGeometry(QRectF(q->geometry().topLeft(), size)); -} - -void QGraphicsWebViewPrivate::_q_scaleChanged() -{ -#if ENABLE(TILED_BACKING_STORE) - if (!page) - return; - pageClient()->updateTiledBackingStoreScale(); -#endif -} - -/*! - \class QGraphicsWebView - \brief The QGraphicsWebView class allows Web content to be added to a GraphicsView. - \since 4.6 - - An instance of this class renders Web content from a URL or supplied as data, using - features of the QtWebKit module. - - If the width and height of the item are not set, they will default to 800 and 600, - respectively. If the Web page contents is larger than that, scrollbars will be shown - if not disabled explicitly. - - \section1 Browser Features - - Many of the functions, signals and properties provided by QWebView are also available - for this item, making it simple to adapt existing code to use QGraphicsWebView instead - of QWebView. - - The item uses a QWebPage object to perform the rendering of Web content, and this can - be obtained with the page() function, enabling the document itself to be accessed and - modified. - - As with QWebView, the item records the browsing history using a QWebHistory object, - accessible using the history() function. The QWebSettings object that defines the - configuration of the browser can be obtained with the settings() function, enabling - features like plugin support to be customized for each item. - - \sa QWebView, QGraphicsTextItem -*/ - -/*! - \fn void QGraphicsWebView::titleChanged(const QString &title) - - This signal is emitted whenever the \a title of the main frame changes. - - \sa title() -*/ - -/*! - \fn void QGraphicsWebView::urlChanged(const QUrl &url) - - This signal is emitted when the \a url of the view changes. - - \sa url(), load() -*/ - -/*! - \fn void QGraphicsWebView::iconChanged() - - This signal is emitted whenever the icon of the page is loaded or changes. - - In order for icons to be loaded, you will need to set an icon database path - using QWebSettings::setIconDatabasePath(). - - \sa icon(), QWebSettings::setIconDatabasePath() -*/ - -/*! - \fn void QGraphicsWebView::loadStarted() - - This signal is emitted when a new load of the page is started. - - \sa loadProgress(), loadFinished() -*/ - -/*! - \fn void QGraphicsWebView::loadFinished(bool ok) - - This signal is emitted when a load of the page is finished. - \a ok will indicate whether the load was successful or any error occurred. - - \sa loadStarted() -*/ - -/*! - Constructs an empty QGraphicsWebView with parent \a parent. - - \sa load() -*/ -QGraphicsWebView::QGraphicsWebView(QGraphicsItem* parent) - : QGraphicsWidget(parent) - , d(new QGraphicsWebViewPrivate(this)) -{ - setFlag(QGraphicsItem::ItemUsesExtendedStyleOption, true); - setAcceptDrops(true); - setAcceptHoverEvents(true); - setAcceptTouchEvents(true); - setFocusPolicy(Qt::StrongFocus); - setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); -#if ENABLE(TILED_BACKING_STORE) - QObject::connect(this, SIGNAL(scaleChanged()), this, SLOT(_q_scaleChanged())); -#endif -} - -/*! - Destroys the item. -*/ -QGraphicsWebView::~QGraphicsWebView() -{ - delete d; -} - -/*! - Returns a pointer to the underlying web page. - - \sa setPage() -*/ -QWebPage* QGraphicsWebView::page() const -{ - if (!d->page) { - QGraphicsWebView* that = const_cast<QGraphicsWebView*>(this); - QWebPage* page = new QWebPage(that); - - // Default to not having a background, in the case - // the page doesn't provide one. - QPalette palette = QApplication::palette(); - palette.setBrush(QPalette::Base, QColor::fromRgbF(0, 0, 0, 0)); - page->setPalette(palette); - - that->setPage(page); - } - - return d->page; -} - -/*! \reimp -*/ -void QGraphicsWebView::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget*) -{ -#if ENABLE(TILED_BACKING_STORE) - if (WebCore::TiledBackingStore* backingStore = QWebFramePrivate::core(page()->mainFrame())->tiledBackingStore()) { - // FIXME: We should set the backing store viewport earlier than in paint - backingStore->adjustVisibleRect(); - // QWebFrame::render is a public API, bypass it for tiled rendering so behavior does not need to change. - WebCore::GraphicsContext context(painter); - page()->mainFrame()->d->renderFromTiledBackingStore(&context, option->exposedRect.toAlignedRect()); - return; - } -#endif -#if USE(ACCELERATED_COMPOSITING) && !USE(TEXTURE_MAPPER) - page()->mainFrame()->render(painter, d->overlay() ? QWebFrame::ContentsLayer : QWebFrame::AllLayers, option->exposedRect.toAlignedRect()); -#else - page()->mainFrame()->render(painter, QWebFrame::AllLayers, option->exposedRect.toRect()); -#endif -} - -/*! \reimp -*/ -bool QGraphicsWebView::sceneEvent(QEvent* event) -{ - // Re-implemented in order to allows fixing event-related bugs in patch releases. - - if (d->page && (event->type() == QEvent::TouchBegin - || event->type() == QEvent::TouchEnd - || event->type() == QEvent::TouchUpdate)) { - d->page->event(event); - - // Always return true so that we'll receive also TouchUpdate and TouchEnd events - return true; - } - - return QGraphicsWidget::sceneEvent(event); -} - -/*! \reimp -*/ -QVariant QGraphicsWebView::itemChange(GraphicsItemChange change, const QVariant& value) -{ - switch (change) { - // Differently from QWebView, it is interesting to QGraphicsWebView to handle - // post mouse cursor change notifications. Reason: 'ItemCursorChange' is sent - // as the first action in QGraphicsItem::setCursor implementation, and at that - // item widget's cursor has not been effectively changed yet. - // After cursor is properly set (at 'ItemCursorHasChanged' emission time), we - // fire 'CursorChange'. - case ItemCursorChange: - return value; - case ItemCursorHasChanged: { - QEvent event(QEvent::CursorChange); - QApplication::sendEvent(this, &event); - return value; - } - default: - break; - } - - return QGraphicsWidget::itemChange(change, value); -} - -/*! \reimp -*/ -QSizeF QGraphicsWebView::sizeHint(Qt::SizeHint which, const QSizeF& constraint) const -{ - if (which == Qt::PreferredSize) - return QSizeF(800, 600); // ### - return QGraphicsWidget::sizeHint(which, constraint); -} - -/*! \reimp -*/ -QVariant QGraphicsWebView::inputMethodQuery(Qt::InputMethodQuery query) const -{ - if (d->page) - return d->page->inputMethodQuery(query); - return QVariant(); -} - -/*! \reimp -*/ -bool QGraphicsWebView::event(QEvent* event) -{ - // Re-implemented in order to allows fixing event-related bugs in patch releases. - - if (d->page) { -#ifndef QT_NO_CONTEXTMENU - if (event->type() == QEvent::GraphicsSceneContextMenu) { - if (!isEnabled()) - return false; - - QGraphicsSceneContextMenuEvent* ev = static_cast<QGraphicsSceneContextMenuEvent*>(event); - QContextMenuEvent fakeEvent(QContextMenuEvent::Reason(ev->reason()), ev->pos().toPoint()); - if (d->page->swallowContextMenuEvent(&fakeEvent)) { - event->accept(); - return true; - } - d->page->updatePositionDependentActions(fakeEvent.pos()); - } else -#endif // QT_NO_CONTEXTMENU - { -#ifndef QT_NO_CURSOR - if (event->type() == QEvent::CursorChange) { - // An unsetCursor will set the cursor to Qt::ArrowCursor. - // Thus this cursor change might be a QWidget::unsetCursor() - // If this is not the case and it came from WebCore, the - // QWebPageClient already has set its cursor internally - // to Qt::ArrowCursor, so updating the cursor is always - // right, as it falls back to the last cursor set by - // WebCore. - // FIXME: Add a QEvent::CursorUnset or similar to Qt. - if (cursor().shape() == Qt::ArrowCursor) - d->page->d->client->resetCursor(); - } -#endif - } - } - return QGraphicsWidget::event(event); -} - -void QGraphicsWebViewPrivate::detachCurrentPage() -{ - if (!page) - return; - - page->d->view.clear(); - page->d->client = 0; - - // if the page was created by us, we own it and need to - // destroy it as well. - - if (page->parent() == q) - delete page; - else - page->disconnect(q); - - page = 0; -} - -/*! - Makes \a page the new web page of the web graphicsitem. - - The parent QObject of the provided page remains the owner - of the object. If the current document is a child of the web - view, it will be deleted. - - \sa page() -*/ -void QGraphicsWebView::setPage(QWebPage* page) -{ - if (d->page == page) - return; - - d->detachCurrentPage(); - d->page = page; - - if (!d->page) - return; - - d->page->d->client = new PageClientQGraphicsWidget(this, page); // set the page client - - if (d->overlay()) - d->overlay()->prepareGraphicsItemGeometryChange(); - - QSize size = geometry().size().toSize(); - page->setViewportSize(size); - - if (d->resizesToContents) - d->updateResizesToContentsForPage(); - - QWebFrame* mainFrame = d->page->mainFrame(); - - connect(mainFrame, SIGNAL(titleChanged(QString)), - this, SIGNAL(titleChanged(QString))); - connect(mainFrame, SIGNAL(iconChanged()), - this, SIGNAL(iconChanged())); - connect(mainFrame, SIGNAL(urlChanged(QUrl)), - this, SIGNAL(urlChanged(QUrl))); - connect(d->page, SIGNAL(loadStarted()), - this, SIGNAL(loadStarted())); - connect(d->page, SIGNAL(loadProgress(int)), - this, SIGNAL(loadProgress(int))); - connect(d->page, SIGNAL(loadFinished(bool)), - this, SLOT(_q_doLoadFinished(bool))); - connect(d->page, SIGNAL(statusBarMessage(QString)), - this, SIGNAL(statusBarMessage(QString))); - connect(d->page, SIGNAL(linkClicked(QUrl)), - this, SIGNAL(linkClicked(QUrl))); - connect(d->page, SIGNAL(destroyed()), - this, SLOT(_q_pageDestroyed())); -#if !defined(QT_NO_IM) && (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) - connect(d->page, SIGNAL(microFocusChanged()), - this, SLOT(_q_updateMicroFocus())); -#endif -} - -/*! - \property QGraphicsWebView::url - \brief the url of the web page currently viewed - - Setting this property clears the view and loads the URL. - - By default, this property contains an empty, invalid URL. - - \sa load(), urlChanged() -*/ - -void QGraphicsWebView::setUrl(const QUrl &url) -{ - page()->mainFrame()->setUrl(url); -} - -QUrl QGraphicsWebView::url() const -{ - if (d->page) - return d->page->mainFrame()->url(); - - return QUrl(); -} - -/*! - \property QGraphicsWebView::title - \brief the title of the web page currently viewed - - By default, this property contains an empty string. - - \sa titleChanged() -*/ -QString QGraphicsWebView::title() const -{ - if (d->page) - return d->page->mainFrame()->title(); - - return QString(); -} - -/*! - \property QGraphicsWebView::icon - \brief the icon associated with the web page currently viewed - - By default, this property contains a null icon. - - \sa iconChanged(), QWebSettings::iconForUrl() -*/ -QIcon QGraphicsWebView::icon() const -{ - if (d->page) - return d->page->mainFrame()->icon(); - - return QIcon(); -} - -/*! - \property QGraphicsWebView::zoomFactor - \brief the zoom factor for the view -*/ - -void QGraphicsWebView::setZoomFactor(qreal factor) -{ - if (factor == page()->mainFrame()->zoomFactor()) - return; - - page()->mainFrame()->setZoomFactor(factor); -} - -qreal QGraphicsWebView::zoomFactor() const -{ - return page()->mainFrame()->zoomFactor(); -} - -/*! \reimp -*/ -void QGraphicsWebView::updateGeometry() -{ - if (d->overlay()) - d->overlay()->prepareGraphicsItemGeometryChange(); - - QGraphicsWidget::updateGeometry(); - - if (!d->page) - return; - - QSize size = geometry().size().toSize(); - d->page->setViewportSize(size); -} - -/*! \reimp -*/ -void QGraphicsWebView::setGeometry(const QRectF& rect) -{ - QGraphicsWidget::setGeometry(rect); - - if (d->overlay()) - d->overlay()->prepareGraphicsItemGeometryChange(); - - if (!d->page) - return; - - // NOTE: call geometry() as setGeometry ensures that - // the geometry is within legal bounds (minimumSize, maximumSize) - QSize size = geometry().size().toSize(); - d->page->setViewportSize(size); -} - -/*! - Convenience slot that stops loading the document. - - \sa reload(), loadFinished() -*/ -void QGraphicsWebView::stop() -{ - if (d->page) - d->page->triggerAction(QWebPage::Stop); -} - -/*! - Convenience slot that loads the previous document in the list of documents - built by navigating links. Does nothing if there is no previous document. - - \sa forward() -*/ -void QGraphicsWebView::back() -{ - if (d->page) - d->page->triggerAction(QWebPage::Back); -} - -/*! - Convenience slot that loads the next document in the list of documents - built by navigating links. Does nothing if there is no next document. - - \sa back() -*/ -void QGraphicsWebView::forward() -{ - if (d->page) - d->page->triggerAction(QWebPage::Forward); -} - -/*! - Reloads the current document. - - \sa stop(), loadStarted() -*/ -void QGraphicsWebView::reload() -{ - if (d->page) - d->page->triggerAction(QWebPage::Reload); -} - -/*! - Loads the specified \a url and displays it. - - \note The view remains the same until enough data has arrived to display the new \a url. - - \sa setUrl(), url(), urlChanged() -*/ -void QGraphicsWebView::load(const QUrl& url) -{ - page()->mainFrame()->load(url); -} - -/*! - \fn void QGraphicsWebView::load(const QNetworkRequest &request, QNetworkAccessManager::Operation operation, const QByteArray &body) - - Loads a network request, \a request, 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 url. - - \sa url(), urlChanged() -*/ - -void QGraphicsWebView::load(const QNetworkRequest& request, - QNetworkAccessManager::Operation operation, - const QByteArray& body) -{ - page()->mainFrame()->load(request, operation, body); -} - -/*! - Sets the content of the web view to the specified \a html. - - External objects such as stylesheets or images referenced in the HTML - document are located relative to \a baseUrl. - - The \a html is loaded immediately; external objects are 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. Alternatively, the - encoding can also be specified by the web server. - - This is a convenience function equivalent to setContent(html, "text/html", baseUrl). - - \warning This function works only for HTML, for other mime types (i.e. XHTML, SVG) - setContent() should be used instead. - - \sa load(), setContent(), QWebFrame::toHtml(), QWebFrame::setContent() -*/ -void QGraphicsWebView::setHtml(const QString& html, const QUrl& baseUrl) -{ - page()->mainFrame()->setHtml(html, baseUrl); -} - -/*! - Sets the content of the web graphicsitem 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. - - \sa load(), setHtml(), QWebFrame::toHtml() -*/ -void QGraphicsWebView::setContent(const QByteArray& data, const QString& mimeType, const QUrl& baseUrl) -{ - page()->mainFrame()->setContent(data, mimeType, baseUrl); -} - -/*! - Returns a pointer to the view's history of navigated web pages. - - It is equivalent to - - \snippet webkitsnippets/qtwebkit_qwebview_snippet.cpp 0 -*/ -QWebHistory* QGraphicsWebView::history() const -{ - return page()->history(); -} - -/*! - \property QGraphicsWebView::modified - \brief whether the document was modified by the user - - Parts of HTML documents can be editable for example through the - \c{contenteditable} attribute on HTML elements. - - By default, this property is false. -*/ -bool QGraphicsWebView::isModified() const -{ - if (d->page) - return d->page->isModified(); - return false; -} - -/*! - Returns a pointer to the view/page specific settings object. - - It is equivalent to - - \snippet webkitsnippets/qtwebkit_qwebview_snippet.cpp 1 - - \sa QWebSettings::globalSettings() -*/ -QWebSettings* QGraphicsWebView::settings() const -{ - return page()->settings(); -} - -/*! - Returns a pointer to a QAction that encapsulates the specified web action \a action. -*/ -QAction *QGraphicsWebView::pageAction(QWebPage::WebAction action) const -{ -#ifdef QT_NO_ACTION - Q_UNUSED(action) - return 0; -#else - return page()->action(action); -#endif -} - -/*! - Triggers the specified \a action. If it is a checkable action the specified - \a checked state is assumed. - - \sa pageAction() -*/ -void QGraphicsWebView::triggerPageAction(QWebPage::WebAction action, bool checked) -{ - page()->triggerAction(action, checked); -} - -/*! - Finds the specified string, \a subString, in the page, using the given \a options. - - If the HighlightAllOccurrences flag is passed, the function will highlight all occurrences - that exist in the page. All subsequent calls will extend the highlight, rather than - replace it, with occurrences of the new string. - - If the HighlightAllOccurrences flag is not passed, the function will select an occurrence - and all subsequent calls will replace the current occurrence with the next one. - - To clear the selection, just pass an empty string. - - Returns true if \a subString was found; otherwise returns false. - - \sa QWebPage::selectedText(), QWebPage::selectionChanged() -*/ -bool QGraphicsWebView::findText(const QString &subString, QWebPage::FindFlags options) -{ - if (d->page) - return d->page->findText(subString, options); - return false; -} - -/*! - \property QGraphicsWebView::resizesToContents - \brief whether the size of the QGraphicsWebView and its viewport changes to match the contents size - \since 4.7 - - If this property is set, the QGraphicsWebView will automatically change its - size to match the size of the main frame contents. As a result the top level frame - will never have scrollbars. It will also make CSS fixed positioning to behave like absolute positioning - with elements positioned relative to the document instead of the viewport. - - This property should be used in conjunction with the QWebPage::preferredContentsSize property. - If not explicitly set, the preferredContentsSize is automatically set to a reasonable value. - - \sa QWebPage::setPreferredContentsSize() -*/ -void QGraphicsWebView::setResizesToContents(bool enabled) -{ - if (d->resizesToContents == enabled) - return; - d->resizesToContents = enabled; - if (d->page) - d->updateResizesToContentsForPage(); -} - -bool QGraphicsWebView::resizesToContents() const -{ - return d->resizesToContents; -} - -/*! - \property QGraphicsWebView::tiledBackingStoreFrozen - \brief whether the tiled backing store updates its contents - \since 4.7 - - If the tiled backing store is enabled using QWebSettings::TiledBackingStoreEnabled attribute, this property - can be used to disable backing store updates temporarily. This can be useful for example for running - a smooth animation that changes the scale of the QGraphicsWebView. - - When the backing store is unfrozen, its contents will be automatically updated to match the current - state of the document. If the QGraphicsWebView scale was changed, the backing store is also - re-rendered using the new scale. - - If the tiled backing store is not enabled, this property does nothing. - - \sa QWebSettings::TiledBackingStoreEnabled - \sa QGraphicsObject::scale -*/ -bool QGraphicsWebView::isTiledBackingStoreFrozen() const -{ -#if ENABLE(TILED_BACKING_STORE) - WebCore::TiledBackingStore* backingStore = QWebFramePrivate::core(page()->mainFrame())->tiledBackingStore(); - if (!backingStore) - return false; - return backingStore->contentsFrozen(); -#else - return false; -#endif -} - -void QGraphicsWebView::setTiledBackingStoreFrozen(bool frozen) -{ -#if ENABLE(TILED_BACKING_STORE) - WebCore::TiledBackingStore* backingStore = QWebFramePrivate::core(page()->mainFrame())->tiledBackingStore(); - if (!backingStore) - return; - backingStore->setContentsFrozen(frozen); -#else - UNUSED_PARAM(frozen); -#endif -} - -/*! \reimp -*/ -void QGraphicsWebView::hoverMoveEvent(QGraphicsSceneHoverEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - QMouseEvent me = QMouseEvent(QEvent::MouseMove, - ev->pos().toPoint(), Qt::NoButton, - Qt::NoButton, Qt::NoModifier); - d->page->event(&me); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsItem::hoverMoveEvent(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::hoverLeaveEvent(QGraphicsSceneHoverEvent* ev) -{ - Q_UNUSED(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::mouseMoveEvent(QGraphicsSceneMouseEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsItem::mouseMoveEvent(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::mousePressEvent(QGraphicsSceneMouseEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsItem::mousePressEvent(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::mouseReleaseEvent(QGraphicsSceneMouseEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsItem::mouseReleaseEvent(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsItem::mouseDoubleClickEvent(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::keyPressEvent(QKeyEvent* ev) -{ - if (d->page) - d->page->event(ev); - - if (!ev->isAccepted()) - QGraphicsItem::keyPressEvent(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::keyReleaseEvent(QKeyEvent* ev) -{ - if (d->page) - d->page->event(ev); - - if (!ev->isAccepted()) - QGraphicsItem::keyReleaseEvent(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::focusInEvent(QFocusEvent* ev) -{ - if (d->page) - d->page->event(ev); - else - QGraphicsItem::focusInEvent(ev); -} - -/*! \reimp -*/ -void QGraphicsWebView::focusOutEvent(QFocusEvent* ev) -{ - if (d->page) - d->page->event(ev); - else - QGraphicsItem::focusOutEvent(ev); -} - -/*! \reimp -*/ -bool QGraphicsWebView::focusNextPrevChild(bool next) -{ - if (d->page) - return d->page->focusNextPrevChild(next); - - return QGraphicsWidget::focusNextPrevChild(next); -} - -/*! \reimp -*/ -void QGraphicsWebView::dragEnterEvent(QGraphicsSceneDragDropEvent* ev) -{ -#ifndef QT_NO_DRAGANDDROP - if (d->page) - d->page->event(ev); -#else - Q_UNUSED(ev); -#endif -} - -/*! \reimp -*/ -void QGraphicsWebView::dragLeaveEvent(QGraphicsSceneDragDropEvent* ev) -{ -#ifndef QT_NO_DRAGANDDROP - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsWidget::dragLeaveEvent(ev); -#else - Q_UNUSED(ev); -#endif -} - -/*! \reimp -*/ -void QGraphicsWebView::dragMoveEvent(QGraphicsSceneDragDropEvent* ev) -{ -#ifndef QT_NO_DRAGANDDROP - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsWidget::dragMoveEvent(ev); -#else - Q_UNUSED(ev); -#endif -} - -/*! \reimp -*/ -void QGraphicsWebView::dropEvent(QGraphicsSceneDragDropEvent* ev) -{ -#ifndef QT_NO_DRAGANDDROP - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsWidget::dropEvent(ev); -#else - Q_UNUSED(ev); -#endif -} - -#ifndef QT_NO_CONTEXTMENU -/*! \reimp -*/ -void QGraphicsWebView::contextMenuEvent(QGraphicsSceneContextMenuEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } -} -#endif // QT_NO_CONTEXTMENU - -#ifndef QT_NO_WHEELEVENT -/*! \reimp -*/ -void QGraphicsWebView::wheelEvent(QGraphicsSceneWheelEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } - - if (!ev->isAccepted()) - QGraphicsItem::wheelEvent(ev); -} -#endif // QT_NO_WHEELEVENT - -/*! \reimp -*/ -void QGraphicsWebView::inputMethodEvent(QInputMethodEvent* ev) -{ - if (d->page) - d->page->event(ev); - - if (!ev->isAccepted()) - QGraphicsItem::inputMethodEvent(ev); -} - -/*! - \fn void QGraphicsWebView::statusBarMessage(const QString& text) - - This signal is emitted when the statusbar \a text is changed by the page. -*/ - -/*! - \fn void QGraphicsWebView::loadProgress(int progress) - - This signal is emitted every time an element in the web page - completes loading and the overall loading progress advances. - - This signal tracks the progress of all child frames. - - The current value is provided by \a progress and scales from 0 to 100, - which is the default range of QProgressBar. - - \sa loadStarted(), loadFinished() -*/ - -/*! - \fn void QGraphicsWebView::linkClicked(const QUrl &url) - - This signal is emitted whenever the user clicks on a link and the page's linkDelegationPolicy - property is set to delegate the link handling for the specified \a url. - - \sa QWebPage::linkDelegationPolicy() -*/ - -#include "moc_qgraphicswebview.cpp" diff --git a/WebKit/qt/Api/qgraphicswebview.h b/WebKit/qt/Api/qgraphicswebview.h deleted file mode 100644 index 8620ac5..0000000 --- a/WebKit/qt/Api/qgraphicswebview.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - Copyright (C) 2009 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. -*/ - -#ifndef QGraphicsWebView_h -#define QGraphicsWebView_h - -#include "qwebkitglobal.h" -#include "qwebpage.h" -#include <QtCore/qurl.h> -#include <QtGui/qevent.h> -#include <QtGui/qgraphicswidget.h> -#include <QtGui/qicon.h> -#include <QtGui/qpainter.h> -#include <QtNetwork/qnetworkaccessmanager.h> - -class QWebPage; -class QWebHistory; -class QWebSettings; - -class QGraphicsWebViewPrivate; - -class QWEBKIT_EXPORT QGraphicsWebView : public QGraphicsWidget { - Q_OBJECT - - Q_PROPERTY(QString title READ title NOTIFY titleChanged) - Q_PROPERTY(QIcon icon READ icon NOTIFY iconChanged) - Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor) - - Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) - - Q_PROPERTY(bool modified READ isModified) - Q_PROPERTY(bool resizesToContents READ resizesToContents WRITE setResizesToContents) - Q_PROPERTY(bool tiledBackingStoreFrozen READ isTiledBackingStoreFrozen WRITE setTiledBackingStoreFrozen) - -public: - explicit QGraphicsWebView(QGraphicsItem* parent = 0); - ~QGraphicsWebView(); - - QWebPage* page() const; - void setPage(QWebPage*); - - QUrl url() const; - void setUrl(const QUrl&); - - QString title() const; - QIcon icon() const; - - qreal zoomFactor() const; - void setZoomFactor(qreal); - - bool isModified() const; - - void load(const QUrl& url); - void load(const QNetworkRequest& request, QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, const QByteArray& body = QByteArray()); - - void setHtml(const QString& html, const QUrl& baseUrl = QUrl()); - // FIXME: Consider rename to setHtml? - void setContent(const QByteArray& data, const QString& mimeType = QString(), const QUrl& baseUrl = QUrl()); - - QWebHistory* history() const; - QWebSettings* settings() const; - - QAction* pageAction(QWebPage::WebAction action) const; - void triggerPageAction(QWebPage::WebAction action, bool checked = false); - - bool findText(const QString& subString, QWebPage::FindFlags options = 0); - - bool resizesToContents() const; - void setResizesToContents(bool enabled); - - bool isTiledBackingStoreFrozen() const; - void setTiledBackingStoreFrozen(bool frozen); - - virtual void setGeometry(const QRectF& rect); - virtual void updateGeometry(); - virtual void paint(QPainter*, const QStyleOptionGraphicsItem* options, QWidget* widget = 0); - virtual QVariant itemChange(GraphicsItemChange change, const QVariant& value); - virtual bool event(QEvent*); - - virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF& constraint) const; - - virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const; - -public Q_SLOTS: - void stop(); - void back(); - void forward(); - void reload(); - -Q_SIGNALS: - void loadStarted(); - void loadFinished(bool); - - void loadProgress(int progress); - void urlChanged(const QUrl&); - void titleChanged(const QString&); - void iconChanged(); - void statusBarMessage(const QString& message); - void linkClicked(const QUrl&); - -protected: - virtual void mousePressEvent(QGraphicsSceneMouseEvent*); - virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*); - virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*); - virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*); - virtual void hoverMoveEvent(QGraphicsSceneHoverEvent*); - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent*); -#ifndef QT_NO_WHEELEVENT - virtual void wheelEvent(QGraphicsSceneWheelEvent*); -#endif - virtual void keyPressEvent(QKeyEvent*); - virtual void keyReleaseEvent(QKeyEvent*); -#ifndef QT_NO_CONTEXTMENU - virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent*); -#endif - virtual void dragEnterEvent(QGraphicsSceneDragDropEvent*); - virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent*); - virtual void dragMoveEvent(QGraphicsSceneDragDropEvent*); - virtual void dropEvent(QGraphicsSceneDragDropEvent*); - virtual void focusInEvent(QFocusEvent*); - virtual void focusOutEvent(QFocusEvent*); - virtual void inputMethodEvent(QInputMethodEvent*); - virtual bool focusNextPrevChild(bool next); - - virtual bool sceneEvent(QEvent*); - -private: - Q_PRIVATE_SLOT(d, void _q_doLoadFinished(bool success)) -#if !defined(QT_NO_IM) && (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) - Q_PRIVATE_SLOT(d, void _q_updateMicroFocus()) -#endif - Q_PRIVATE_SLOT(d, void _q_pageDestroyed()) - // we don't want to change the moc based on USE() macro, so this function is here - // but will be empty if ACCLERATED_COMPOSITING is disabled - Q_PRIVATE_SLOT(d, void syncLayers()) - Q_PRIVATE_SLOT(d, void _q_contentsSizeChanged(const QSize&)) - Q_PRIVATE_SLOT(d, void _q_scaleChanged()) - - QGraphicsWebViewPrivate* const d; - friend class QGraphicsWebViewPrivate; -}; - -#endif // QGraphicsWebView_h diff --git a/WebKit/qt/Api/qwebdatabase.cpp b/WebKit/qt/Api/qwebdatabase.cpp deleted file mode 100644 index ba039c7..0000000 --- a/WebKit/qt/Api/qwebdatabase.cpp +++ /dev/null @@ -1,198 +0,0 @@ -/* - Copyright (C) 2008 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 "qwebdatabase.h" - -#include "qwebdatabase_p.h" -#include "qwebsecurityorigin.h" -#include "qwebsecurityorigin_p.h" -#include "DatabaseDetails.h" -#include "DatabaseTracker.h" - -using namespace WebCore; - -/*! - \class QWebDatabase - \since 4.5 - \brief The QWebDatabase class provides access to HTML 5 databases created with JavaScript. - - \inmodule QtWebKit - - The upcoming HTML 5 standard includes support for SQL databases that web sites can create and - access on a local computer through JavaScript. QWebDatabase is the C++ interface to these - databases. - - Databases are grouped together in security origins. To get access to all databases defined by - a security origin, use QWebSecurityOrigin::databases(). Each database has an internal name(), - as well as a user-friendly name, provided by displayName(). These names are specified when - creating the database in the JavaScript code. - - WebKit uses SQLite to create and access the local SQL databases. The location of the database - file in the local file system is returned by fileName(). You can access the database directly - through the QtSql database module. - - For each database the web site can define an expectedSize(). The current size of the database - in bytes is returned by size(). - - For more information refer to the \l{http://dev.w3.org/html5/webdatabase/}{HTML5 Web SQL Database Draft Standard}. - - \sa QWebSecurityOrigin -*/ - -/*! - Constructs a web database from \a other. -*/ -QWebDatabase::QWebDatabase(const QWebDatabase& other) - : d(other.d) -{ -} - -/*! - Assigns the \a other web database to this. -*/ -QWebDatabase& QWebDatabase::operator=(const QWebDatabase& other) -{ - d = other.d; - return *this; -} - -/*! - Returns the name of the database. -*/ -QString QWebDatabase::name() const -{ - return d->name; -} - -/*! - Returns the name of the database in a format that is suitable for display to the user. -*/ -QString QWebDatabase::displayName() const -{ -#if ENABLE(DATABASE) - DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get()); - return details.displayName(); -#else - return QString(); -#endif -} - -/*! - Returns the expected size of the database in bytes as defined by the web author. -*/ -qint64 QWebDatabase::expectedSize() const -{ -#if ENABLE(DATABASE) - DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get()); - return details.expectedUsage(); -#else - return 0; -#endif -} - -/*! - Returns the current size of the database in bytes. -*/ -qint64 QWebDatabase::size() const -{ -#if ENABLE(DATABASE) - DatabaseDetails details = DatabaseTracker::tracker().detailsForNameAndOrigin(d->name, d->origin.get()); - return details.currentUsage(); -#else - return 0; -#endif -} - -/*! - \internal -*/ -QWebDatabase::QWebDatabase(QWebDatabasePrivate* priv) -{ - d = priv; -} - -/*! - Returns the file name of the web database. - - The name can be used to access the database through the QtSql database module, for example: - \code - QWebDatabase webdb = ... - QSqlDatabase sqldb = QSqlDatabase::addDatabase("QSQLITE", "myconnection"); - sqldb.setDatabaseName(webdb.fileName()); - if (sqldb.open()) { - QStringList tables = sqldb.tables(); - ... - } - \endcode - - \note Concurrent access to a database from multiple threads or processes - is not very efficient because SQLite is used as WebKit's database backend. -*/ -QString QWebDatabase::fileName() const -{ -#if ENABLE(DATABASE) - return DatabaseTracker::tracker().fullPathForDatabase(d->origin.get(), d->name, false); -#else - return QString(); -#endif -} - -/*! - Returns the databases's security origin. -*/ -QWebSecurityOrigin QWebDatabase::origin() const -{ - QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(d->origin.get()); - QWebSecurityOrigin origin(priv); - return origin; -} - -/*! - Removes the database \a db from its security origin. All data stored in the - database \a db will be destroyed. -*/ -void QWebDatabase::removeDatabase(const QWebDatabase& db) -{ -#if ENABLE(DATABASE) - DatabaseTracker::tracker().deleteDatabase(db.d->origin.get(), db.d->name); -#endif -} - -/*! - \since 4.6 - - Deletes all web databases in the configured offline storage path. - - \sa QWebSettings::setOfflineStoragePath() -*/ -void QWebDatabase::removeAllDatabases() -{ -#if ENABLE(DATABASE) - DatabaseTracker::tracker().deleteAllDatabases(); -#endif -} - -/*! - Destroys the web database object. The data within this database is \b not destroyed. -*/ -QWebDatabase::~QWebDatabase() -{ -} - diff --git a/WebKit/qt/Api/qwebdatabase.h b/WebKit/qt/Api/qwebdatabase.h deleted file mode 100644 index 875b2eb..0000000 --- a/WebKit/qt/Api/qwebdatabase.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ -#ifndef _WEBDATABASE_H_ -#define _WEBDATABASE_H_ - -#include <QtCore/qstring.h> -#include <QtCore/qshareddata.h> - -#include "qwebkitglobal.h" - -namespace WebCore { - class DatabaseDetails; -} - -class QWebDatabasePrivate; -class QWebSecurityOrigin; - -class QWEBKIT_EXPORT QWebDatabase { -public: - QWebDatabase(const QWebDatabase& other); - QWebDatabase &operator=(const QWebDatabase& other); - ~QWebDatabase(); - - QString name() const; - QString displayName() const; - qint64 expectedSize() const; - qint64 size() const; - QString fileName() const; - QWebSecurityOrigin origin() const; - - static void removeDatabase(const QWebDatabase&); - static void removeAllDatabases(); - -private: - QWebDatabase(QWebDatabasePrivate* priv); - friend class QWebSecurityOrigin; - -private: - QExplicitlySharedDataPointer<QWebDatabasePrivate> d; -}; - -#endif - diff --git a/WebKit/qt/Api/qwebdatabase_p.h b/WebKit/qt/Api/qwebdatabase_p.h deleted file mode 100644 index ec03ea5..0000000 --- a/WebKit/qt/Api/qwebdatabase_p.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ -#ifndef _WEBDATABASE_P_H_ -#define _WEBDATABASE_P_H_ - -#include <QString> -#include <QtCore/qshareddata.h> - -#include "PlatformString.h" -#include "SecurityOrigin.h" -#include "RefPtr.h" - - -class QWebDatabasePrivate : public QSharedData { -public: - WTF::String name; - WTF::RefPtr<WebCore::SecurityOrigin> origin; -}; - -#endif - diff --git a/WebKit/qt/Api/qwebelement.cpp b/WebKit/qt/Api/qwebelement.cpp deleted file mode 100644 index 60ae3a0..0000000 --- a/WebKit/qt/Api/qwebelement.cpp +++ /dev/null @@ -1,2077 +0,0 @@ -/* - Copyright (C) 2009 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 "qwebelement.h" - -#include "CSSComputedStyleDeclaration.h" -#include "CSSMutableStyleDeclaration.h" -#include "CSSParser.h" -#include "CSSRule.h" -#include "CSSRuleList.h" -#include "CSSStyleRule.h" -#include "CSSStyleSelector.h" -#include "Document.h" -#include "DocumentFragment.h" -#include "FrameView.h" -#include "GraphicsContext.h" -#include "HTMLElement.h" -#if USE(JSC) -#include "JSGlobalObject.h" -#include "JSHTMLElement.h" -#include "JSObject.h" -#include "PropertyNameArray.h" -#include <parser/SourceCode.h> -#include "qt_runtime.h" -#elif USE(V8) -#include "V8DOMWindow.h" -#include "V8Binding.h" -#include "NotImplemented.h" -#endif -#include "NodeList.h" -#include "RenderImage.h" -#include "StaticNodeList.h" -#include "qwebframe.h" -#include "qwebframe_p.h" -#include "runtime_root.h" -#include <wtf/Vector.h> -#include <wtf/text/CString.h> - -#include <QPainter> - -#if USE(V8) -using namespace V8::Bindings; -#endif - -using namespace WebCore; - -class QWebElementPrivate { -public: -}; - -/*! - \class QWebElement - \since 4.6 - \brief The QWebElement class provides convenient access to DOM elements in - a QWebFrame. - \inmodule QtWebKit - - A QWebElement object allows easy access to the document model, represented - by a tree-like structure of DOM elements. The root of the tree is called - the document element and can be accessed using - QWebFrame::documentElement(). - - Specific elements can be accessed using findAll() and findFirst(). These - elements are identified using CSS selectors. The code snippet below - demonstrates the use of findAll(). - - \snippet webkitsnippets/webelement/main.cpp FindAll - - The first list contains all \c span elements in the document. The second - list contains \c span elements that are children of \c p, classified with - \c intro. - - Using findFirst() is more efficient than calling findAll(), and extracting - the first element only in the list returned. - - Alternatively you can traverse the document manually using firstChild() and - nextSibling(): - - \snippet webkitsnippets/webelement/main.cpp Traversing with QWebElement - - Individual elements can be inspected or changed using methods such as attribute() - or setAttribute(). For examle, to capture the user's input in a text field for later - use (auto-completion), a browser could do something like this: - - \snippet webkitsnippets/webelement/main.cpp autocomplete1 - - When the same page is later revisited, the browser can fill in the text field automatically - by modifying the value attribute of the input element: - - \snippet webkitsnippets/webelement/main.cpp autocomplete2 - - Another use case is to emulate a click event on an element. The following - code snippet demonstrates how to call the JavaScript DOM method click() of - a submit button: - - \snippet webkitsnippets/webelement/main.cpp Calling a DOM element method - - The underlying content of QWebElement is explicitly shared. Creating a copy - of a QWebElement does not create a copy of the content. Instead, both - instances point to the same element. - - The contents of child elements can be converted to plain text with - toPlainText(); to XHTML using toInnerXml(). To include the element's tag in - the output, use toOuterXml(). - - It is possible to replace the contents of child elements using - setPlainText() and setInnerXml(). To replace the element itself and its - contents, use setOuterXml(). - - \section1 Examples - - The \l{DOM Traversal Example} shows one way to traverse documents in a running - example. - - The \l{Simple Selector Example} can be used to experiment with the searching - features of this class and provides sample code you can start working with. -*/ - -/*! - Constructs a null web element. -*/ -QWebElement::QWebElement() - : d(0) - , m_element(0) -{ -} - -/*! - \internal -*/ -QWebElement::QWebElement(WebCore::Element* domElement) - : d(0) - , m_element(domElement) -{ - if (m_element) - m_element->ref(); -} - -/*! - \internal -*/ -QWebElement::QWebElement(WebCore::Node* node) - : d(0) - , m_element(0) -{ - if (node && node->isHTMLElement()) { - m_element = static_cast<HTMLElement*>(node); - m_element->ref(); - } -} - -/*! - Constructs a copy of \a other. -*/ -QWebElement::QWebElement(const QWebElement &other) - : d(0) - , m_element(other.m_element) -{ - if (m_element) - m_element->ref(); -} - -/*! - Assigns \a other to this element and returns a reference to this element. -*/ -QWebElement &QWebElement::operator=(const QWebElement &other) -{ - // ### handle "d" assignment - if (this != &other) { - Element *otherElement = other.m_element; - if (otherElement) - otherElement->ref(); - if (m_element) - m_element->deref(); - m_element = otherElement; - } - return *this; -} - -/*! - Destroys the element. However, the underlying DOM element is not destroyed. -*/ -QWebElement::~QWebElement() -{ - delete d; - if (m_element) - m_element->deref(); -} - -bool QWebElement::operator==(const QWebElement& o) const -{ - return m_element == o.m_element; -} - -bool QWebElement::operator!=(const QWebElement& o) const -{ - return m_element != o.m_element; -} - -/*! - Returns true if the element is a null element; otherwise returns false. -*/ -bool QWebElement::isNull() const -{ - return !m_element; -} - -/*! - Returns a new list of child elements matching the given CSS selector - \a selectorQuery. If there are no matching elements, an empty list is - returned. - - \l{Standard CSS2 selector} syntax is used for the query. - - \note This search is performed recursively. - - \sa findFirst() -*/ -QWebElementCollection QWebElement::findAll(const QString &selectorQuery) const -{ - return QWebElementCollection(*this, selectorQuery); -} - -/*! - Returns the first child element that matches the given CSS selector - \a selectorQuery. - - \l{Standard CSS2 selector} syntax is used for the query. - - \note This search is performed recursively. - - \sa findAll() -*/ -QWebElement QWebElement::findFirst(const QString &selectorQuery) const -{ - if (!m_element) - return QWebElement(); - ExceptionCode exception = 0; // ### - return QWebElement(m_element->querySelector(selectorQuery, exception).get()); -} - -/*! - Replaces the existing content of this element with \a text. - - This is equivalent to setting the HTML innerText property. - - \sa toPlainText() -*/ -void QWebElement::setPlainText(const QString &text) -{ - if (!m_element || !m_element->isHTMLElement()) - return; - ExceptionCode exception = 0; - static_cast<HTMLElement*>(m_element)->setInnerText(text, exception); -} - -/*! - Returns the text between the start and the end tag of this - element. - - This is equivalent to reading the HTML innerText property. - - \sa setPlainText() -*/ -QString QWebElement::toPlainText() const -{ - if (!m_element || !m_element->isHTMLElement()) - return QString(); - return static_cast<HTMLElement*>(m_element)->innerText(); -} - -/*! - Replaces the contents of this element as well as its own tag with - \a markup. The string may contain HTML or XML tags, which is parsed and - formatted before insertion into the document. - - \note This is currently only implemented for (X)HTML elements. - - \sa toOuterXml(), toInnerXml(), setInnerXml() -*/ -void QWebElement::setOuterXml(const QString &markup) -{ - if (!m_element || !m_element->isHTMLElement()) - return; - - ExceptionCode exception = 0; - - static_cast<HTMLElement*>(m_element)->setOuterHTML(markup, exception); -} - -/*! - Returns this element converted to XML, including the start and the end - tags as well as its attributes. - - \note This is currently implemented for (X)HTML elements only. - - \note The format of the markup returned will obey the namespace of the - document containing the element. This means the return value will obey XML - formatting rules, such as self-closing tags, only if the document is - 'text/xhtml+xml'. - - \sa setOuterXml(), setInnerXml(), toInnerXml() -*/ -QString QWebElement::toOuterXml() const -{ - if (!m_element || !m_element->isHTMLElement()) - return QString(); - - return static_cast<HTMLElement*>(m_element)->outerHTML(); -} - -/*! - Replaces the contents of this element with \a markup. The string may - contain HTML or XML tags, which is parsed and formatted before insertion - into the document. - - \note This is currently implemented for (X)HTML elements only. - - \sa toInnerXml(), toOuterXml(), setOuterXml() -*/ -void QWebElement::setInnerXml(const QString &markup) -{ - if (!m_element || !m_element->isHTMLElement()) - return; - - ExceptionCode exception = 0; - - static_cast<HTMLElement*>(m_element)->setInnerHTML(markup, exception); -} - -/*! - Returns the XML content between the element's start and end tags. - - \note This is currently implemented for (X)HTML elements only. - - \note The format of the markup returned will obey the namespace of the - document containing the element. This means the return value will obey XML - formatting rules, such as self-closing tags, only if the document is - 'text/xhtml+xml'. - - \sa setInnerXml(), setOuterXml(), toOuterXml() -*/ -QString QWebElement::toInnerXml() const -{ - if (!m_element || !m_element->isHTMLElement()) - return QString(); - - return static_cast<HTMLElement*>(m_element)->innerHTML(); -} - -/*! - Adds an attribute with the given \a name and \a value. If an attribute with - the same name exists, its value is replaced by \a value. - - \sa attribute(), attributeNS(), setAttributeNS() -*/ -void QWebElement::setAttribute(const QString &name, const QString &value) -{ - if (!m_element) - return; - ExceptionCode exception = 0; - m_element->setAttribute(name, value, exception); -} - -/*! - Adds an attribute with the given \a name in \a namespaceUri with \a value. - If an attribute with the same name exists, its value is replaced by - \a value. - - \sa attributeNS(), attribute(), setAttribute() -*/ -void QWebElement::setAttributeNS(const QString &namespaceUri, const QString &name, const QString &value) -{ - if (!m_element) - return; - WebCore::ExceptionCode exception = 0; - m_element->setAttributeNS(namespaceUri, name, value, exception); -} - -/*! - Returns the attribute with the given \a name. If the attribute does not - exist, \a defaultValue is returned. - - \sa setAttribute(), setAttributeNS(), attributeNS() -*/ -QString QWebElement::attribute(const QString &name, const QString &defaultValue) const -{ - if (!m_element) - return QString(); - if (m_element->hasAttribute(name)) - return m_element->getAttribute(name); - else - return defaultValue; -} - -/*! - Returns the attribute with the given \a name in \a namespaceUri. If the - attribute does not exist, \a defaultValue is returned. - - \sa setAttributeNS(), setAttribute(), attribute() -*/ -QString QWebElement::attributeNS(const QString &namespaceUri, const QString &name, const QString &defaultValue) const -{ - if (!m_element) - return QString(); - if (m_element->hasAttributeNS(namespaceUri, name)) - return m_element->getAttributeNS(namespaceUri, name); - else - return defaultValue; -} - -/*! - Returns true if this element has an attribute with the given \a name; - otherwise returns false. - - \sa attribute(), setAttribute() -*/ -bool QWebElement::hasAttribute(const QString &name) const -{ - if (!m_element) - return false; - return m_element->hasAttribute(name); -} - -/*! - Returns true if this element has an attribute with the given \a name, in - \a namespaceUri; otherwise returns false. - - \sa attributeNS(), setAttributeNS() -*/ -bool QWebElement::hasAttributeNS(const QString &namespaceUri, const QString &name) const -{ - if (!m_element) - return false; - return m_element->hasAttributeNS(namespaceUri, name); -} - -/*! - Removes the attribute with the given \a name from this element. - - \sa attribute(), setAttribute(), hasAttribute() -*/ -void QWebElement::removeAttribute(const QString &name) -{ - if (!m_element) - return; - ExceptionCode exception = 0; - m_element->removeAttribute(name, exception); -} - -/*! - Removes the attribute with the given \a name, in \a namespaceUri, from this - element. - - \sa attributeNS(), setAttributeNS(), hasAttributeNS() -*/ -void QWebElement::removeAttributeNS(const QString &namespaceUri, const QString &name) -{ - if (!m_element) - return; - WebCore::ExceptionCode exception = 0; - m_element->removeAttributeNS(namespaceUri, name, exception); -} - -/*! - Returns true if the element has any attributes defined; otherwise returns - false; - - \sa attribute(), setAttribute() -*/ -bool QWebElement::hasAttributes() const -{ - if (!m_element) - return false; - return m_element->hasAttributes(); -} - -/*! - Return the list of attributes for the namespace given as \a namespaceUri. - - \sa attribute(), setAttribute() -*/ -QStringList QWebElement::attributeNames(const QString& namespaceUri) const -{ - if (!m_element) - return QStringList(); - - QStringList attributeNameList; - const NamedNodeMap* const attrs = m_element->attributes(/* read only = */ true); - if (attrs) { - const String namespaceUriString(namespaceUri); // convert QString -> String once - const unsigned attrsCount = attrs->length(); - for (unsigned i = 0; i < attrsCount; ++i) { - const Attribute* const attribute = attrs->attributeItem(i); - if (namespaceUriString == attribute->namespaceURI()) - attributeNameList.append(attribute->localName()); - } - } - return attributeNameList; -} - -/*! - Returns true if the element has keyboard input focus; otherwise, returns false - - \sa setFocus() -*/ -bool QWebElement::hasFocus() const -{ - if (!m_element) - return false; - if (m_element->document()) - return m_element == m_element->document()->focusedNode(); - return false; -} - -/*! - Gives keyboard input focus to this element - - \sa hasFocus() -*/ -void QWebElement::setFocus() -{ - if (!m_element) - return; - if (m_element->document() && m_element->isFocusable()) - m_element->document()->setFocusedNode(m_element); -} - -/*! - Returns the geometry of this element, relative to its containing frame. - - \sa tagName() -*/ -QRect QWebElement::geometry() const -{ - if (!m_element) - return QRect(); - return m_element->getRect(); -} - -/*! - Returns the tag name of this element. - - \sa geometry() -*/ -QString QWebElement::tagName() const -{ - if (!m_element) - return QString(); - return m_element->tagName(); -} - -/*! - Returns the namespace prefix of the element. If the element has no\ - namespace prefix, empty string is returned. -*/ -QString QWebElement::prefix() const -{ - if (!m_element) - return QString(); - return m_element->prefix(); -} - -/*! - Returns the local name of the element. If the element does not use - namespaces, an empty string is returned. -*/ -QString QWebElement::localName() const -{ - if (!m_element) - return QString(); - return m_element->localName(); -} - -/*! - Returns the namespace URI of this element. If the element has no namespace - URI, an empty string is returned. -*/ -QString QWebElement::namespaceUri() const -{ - if (!m_element) - return QString(); - return m_element->namespaceURI(); -} - -/*! - Returns the parent element of this elemen. If this element is the root - document element, a null element is returned. -*/ -QWebElement QWebElement::parent() const -{ - if (m_element) - return QWebElement(m_element->parentElement()); - return QWebElement(); -} - -/*! - Returns the element's first child. - - \sa lastChild(), previousSibling(), nextSibling() -*/ -QWebElement QWebElement::firstChild() const -{ - if (!m_element) - return QWebElement(); - for (Node* child = m_element->firstChild(); child; child = child->nextSibling()) { - if (!child->isElementNode()) - continue; - Element* e = static_cast<Element*>(child); - return QWebElement(e); - } - return QWebElement(); -} - -/*! - Returns the element's last child. - - \sa firstChild(), previousSibling(), nextSibling() -*/ -QWebElement QWebElement::lastChild() const -{ - if (!m_element) - return QWebElement(); - for (Node* child = m_element->lastChild(); child; child = child->previousSibling()) { - if (!child->isElementNode()) - continue; - Element* e = static_cast<Element*>(child); - return QWebElement(e); - } - return QWebElement(); -} - -/*! - Returns the element's next sibling. - - \sa firstChild(), previousSibling(), lastChild() -*/ -QWebElement QWebElement::nextSibling() const -{ - if (!m_element) - return QWebElement(); - for (Node* sib = m_element->nextSibling(); sib; sib = sib->nextSibling()) { - if (!sib->isElementNode()) - continue; - Element* e = static_cast<Element*>(sib); - return QWebElement(e); - } - return QWebElement(); -} - -/*! - Returns the element's previous sibling. - - \sa firstChild(), nextSibling(), lastChild() -*/ -QWebElement QWebElement::previousSibling() const -{ - if (!m_element) - return QWebElement(); - for (Node* sib = m_element->previousSibling(); sib; sib = sib->previousSibling()) { - if (!sib->isElementNode()) - continue; - Element* e = static_cast<Element*>(sib); - return QWebElement(e); - } - return QWebElement(); -} - -/*! - Returns the document which this element belongs to. -*/ -QWebElement QWebElement::document() const -{ - if (!m_element) - return QWebElement(); - Document* document = m_element->document(); - if (!document) - return QWebElement(); - return QWebElement(document->documentElement()); -} - -/*! - Returns the web frame which this element is a part of. If the element is a - null element, null is returned. -*/ -QWebFrame *QWebElement::webFrame() const -{ - if (!m_element) - return 0; - - Document* document = m_element->document(); - if (!document) - return 0; - - Frame* frame = document->frame(); - if (!frame) - return 0; - return QWebFramePrivate::kit(frame); -} - -#if USE(JSC) -static bool setupScriptContext(WebCore::Element* element, JSC::JSValue& thisValue, ScriptState*& state, ScriptController*& scriptController) -{ - if (!element) - return false; - - Document* document = element->document(); - if (!document) - return false; - - Frame* frame = document->frame(); - if (!frame) - return false; - - scriptController = frame->script(); - if (!scriptController) - return false; - - state = scriptController->globalObject(mainThreadNormalWorld())->globalExec(); - if (!state) - return false; - - thisValue = toJS(state, element); - if (!thisValue) - return false; - - return true; -} -#elif USE(V8) -static bool setupScriptContext(WebCore::Element* element, v8::Handle<v8::Value>& thisValue, ScriptState*& state, ScriptController*& scriptController) -{ - if (!element) - return false; - - Document* document = element->document(); - if (!document) - return false; - - Frame* frame = document->frame(); - if (!frame) - return false; - - state = mainWorldScriptState(frame); - // Get V8 wrapper for DOM element - thisValue = toV8(frame->domWindow()); - return true; -} -#endif - - -/*! - Executes \a scriptSource with this element as \c this object. -*/ -QVariant QWebElement::evaluateJavaScript(const QString& scriptSource) -{ - if (scriptSource.isEmpty()) - return QVariant(); - - ScriptState* state = 0; -#if USE(JSC) - JSC::JSValue thisValue; -#elif USE(V8) - v8::Handle<v8::Value> thisValue; -#endif - ScriptController* scriptController = 0; - - if (!setupScriptContext(m_element, thisValue, state, scriptController)) - return QVariant(); -#if USE(JSC) - JSC::ScopeChain& scopeChain = state->dynamicGlobalObject()->globalScopeChain(); - JSC::UString script(reinterpret_cast_ptr<const UChar*>(scriptSource.data()), scriptSource.length()); - JSC::Completion completion = JSC::evaluate(state, scopeChain, JSC::makeSource(script), thisValue); - if ((completion.complType() != JSC::ReturnValue) && (completion.complType() != JSC::Normal)) - return QVariant(); - - JSC::JSValue result = completion.value(); - if (!result) - return QVariant(); - - int distance = 0; - return JSC::Bindings::convertValueToQVariant(state, result, QMetaType::Void, &distance); -#elif USE(V8) - notImplemented(); - return QVariant(); -#endif -} - -/*! - \enum QWebElement::StyleResolveStrategy - - This enum describes how QWebElement's styleProperty resolves the given - property name. - - \value InlineStyle Return the property value as it is defined in - the element, without respecting style inheritance and other CSS - rules. - \value CascadedStyle The property's value is determined using the - inheritance and importance rules defined in the document's - stylesheet. - \value ComputedStyle The property's value is the absolute value - of the style property resolved from the environment. -*/ - -/*! - Returns the value of the style with the given \a name using the specified - \a strategy. If a style with \a name does not exist, an empty string is - returned. - - In CSS, the cascading part depends on which CSS rule has priority and is - thus applied. Generally, the last defined rule has priority. Thus, an - inline style rule has priority over an embedded block style rule, which - in return has priority over an external style rule. - - If the "!important" declaration is set on one of those, the declaration - receives highest priority, unless other declarations also use the - "!important" declaration. Then, the last "!important" declaration takes - predecence. - - \sa setStyleProperty() -*/ - -QString QWebElement::styleProperty(const QString &name, StyleResolveStrategy strategy) const -{ - if (!m_element || !m_element->isStyledElement()) - return QString(); - - int propID = cssPropertyID(name); - - if (!propID) - return QString(); - - CSSStyleDeclaration* style = static_cast<StyledElement*>(m_element)->style(); - - if (strategy == InlineStyle) - return style->getPropertyValue(propID); - - if (strategy == CascadedStyle) { - if (style->getPropertyPriority(propID)) - return style->getPropertyValue(propID); - - // We are going to resolve the style property by walking through the - // list of non-inline matched CSS rules for the element, looking for - // the highest priority definition. - - // Get an array of matched CSS rules for the given element sorted - // by importance and inheritance order. This include external CSS - // declarations, as well as embedded and inline style declarations. - - Document* doc = m_element->document(); - if (RefPtr<CSSRuleList> rules = doc->styleSelector()->styleRulesForElement(m_element, /*authorOnly*/ true)) { - for (int i = rules->length(); i > 0; --i) { - CSSStyleRule* rule = static_cast<CSSStyleRule*>(rules->item(i - 1)); - - if (rule->style()->getPropertyPriority(propID)) - return rule->style()->getPropertyValue(propID); - - if (style->getPropertyValue(propID).isEmpty()) - style = rule->style(); - } - } - - return style->getPropertyValue(propID); - } - - if (strategy == ComputedStyle) { - if (!m_element || !m_element->isStyledElement()) - return QString(); - - int propID = cssPropertyID(name); - - RefPtr<CSSComputedStyleDeclaration> style = computedStyle(m_element, true); - if (!propID || !style) - return QString(); - - return style->getPropertyValue(propID); - } - - return QString(); -} - -/*! - Sets the value of the inline style with the given \a name to \a value. - - Setting a value, does not necessarily mean that it will become the applied - value, due to the fact that the style property's value might have been set - earlier with a higher priority in external or embedded style declarations. - - In order to ensure that the value will be applied, you may have to append - "!important" to the value. -*/ -void QWebElement::setStyleProperty(const QString &name, const QString &value) -{ - if (!m_element || !m_element->isStyledElement()) - return; - - int propID = cssPropertyID(name); - CSSStyleDeclaration* style = static_cast<StyledElement*>(m_element)->style(); - if (!propID || !style) - return; - - ExceptionCode exception = 0; - style->setProperty(name, value, exception); -} - -/*! - Returns the list of classes of this element. -*/ -QStringList QWebElement::classes() const -{ - if (!hasAttribute(QLatin1String("class"))) - return QStringList(); - - QStringList classes = attribute(QLatin1String("class")).simplified().split(QLatin1Char(' '), QString::SkipEmptyParts); - classes.removeDuplicates(); - return classes; -} - -/*! - Returns true if this element has a class with the given \a name; otherwise - returns false. -*/ -bool QWebElement::hasClass(const QString &name) const -{ - QStringList list = classes(); - return list.contains(name); -} - -/*! - Adds the specified class with the given \a name to the element. -*/ -void QWebElement::addClass(const QString &name) -{ - QStringList list = classes(); - if (!list.contains(name)) { - list.append(name); - QString value = list.join(QLatin1String(" ")); - setAttribute(QLatin1String("class"), value); - } -} - -/*! - Removes the specified class with the given \a name from the element. -*/ -void QWebElement::removeClass(const QString &name) -{ - QStringList list = classes(); - if (list.contains(name)) { - list.removeAll(name); - QString value = list.join(QLatin1String(" ")); - setAttribute(QLatin1String("class"), value); - } -} - -/*! - Adds the specified class with the given \a name if it is not present. If - the class is already present, it will be removed. -*/ -void QWebElement::toggleClass(const QString &name) -{ - QStringList list = classes(); - if (list.contains(name)) - list.removeAll(name); - else - list.append(name); - - QString value = list.join(QLatin1String(" ")); - setAttribute(QLatin1String("class"), value); -} - -/*! - Appends the given \a element as the element's last child. - - If \a element is the child of another element, it is re-parented to this - element. If \a element is a child of this element, then its position in - the list of children is changed. - - Calling this function on a null element does nothing. - - \sa prependInside(), prependOutside(), appendOutside() -*/ -void QWebElement::appendInside(const QWebElement &element) -{ - if (!m_element || element.isNull()) - return; - - ExceptionCode exception = 0; - m_element->appendChild(element.m_element, exception); -} - -/*! - Appends the result of parsing \a markup as the element's last child. - - Calling this function on a null element does nothing. - - \sa prependInside(), prependOutside(), appendOutside() -*/ -void QWebElement::appendInside(const QString &markup) -{ - if (!m_element) - return; - - if (!m_element->isHTMLElement()) - return; - - HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); - RefPtr<DocumentFragment> fragment = htmlElement->Element::deprecatedCreateContextualFragment(markup); - - ExceptionCode exception = 0; - m_element->appendChild(fragment, exception); -} - -/*! - Prepends \a element as the element's first child. - - If \a element is the child of another element, it is re-parented to this - element. If \a element is a child of this element, then its position in - the list of children is changed. - - Calling this function on a null element does nothing. - - \sa appendInside(), prependOutside(), appendOutside() -*/ -void QWebElement::prependInside(const QWebElement &element) -{ - if (!m_element || element.isNull()) - return; - - ExceptionCode exception = 0; - - if (m_element->hasChildNodes()) - m_element->insertBefore(element.m_element, m_element->firstChild(), exception); - else - m_element->appendChild(element.m_element, exception); -} - -/*! - Prepends the result of parsing \a markup as the element's first child. - - Calling this function on a null element does nothing. - - \sa appendInside(), prependOutside(), appendOutside() -*/ -void QWebElement::prependInside(const QString &markup) -{ - if (!m_element) - return; - - if (!m_element->isHTMLElement()) - return; - - HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); - RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); - - ExceptionCode exception = 0; - - if (m_element->hasChildNodes()) - m_element->insertBefore(fragment, m_element->firstChild(), exception); - else - m_element->appendChild(fragment, exception); -} - - -/*! - Inserts the given \a element before this element. - - If \a element is the child of another element, it is re-parented to the - parent of this element. - - Calling this function on a null element does nothing. - - \sa appendInside(), prependInside(), appendOutside() -*/ -void QWebElement::prependOutside(const QWebElement &element) -{ - if (!m_element || element.isNull()) - return; - - if (!m_element->parentNode()) - return; - - ExceptionCode exception = 0; - m_element->parentNode()->insertBefore(element.m_element, m_element, exception); -} - -/*! - Inserts the result of parsing \a markup before this element. - - Calling this function on a null element does nothing. - - \sa appendInside(), prependInside(), appendOutside() -*/ -void QWebElement::prependOutside(const QString &markup) -{ - if (!m_element) - return; - - if (!m_element->parentNode()) - return; - - if (!m_element->isHTMLElement()) - return; - - HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); - RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); - - ExceptionCode exception = 0; - m_element->parentNode()->insertBefore(fragment, m_element, exception); -} - -/*! - Inserts the given \a element after this element. - - If \a element is the child of another element, it is re-parented to the - parent of this element. - - Calling this function on a null element does nothing. - - \sa appendInside(), prependInside(), prependOutside() -*/ -void QWebElement::appendOutside(const QWebElement &element) -{ - if (!m_element || element.isNull()) - return; - - if (!m_element->parentNode()) - return; - - ExceptionCode exception = 0; - if (!m_element->nextSibling()) - m_element->parentNode()->appendChild(element.m_element, exception); - else - m_element->parentNode()->insertBefore(element.m_element, m_element->nextSibling(), exception); -} - -/*! - Inserts the result of parsing \a markup after this element. - - Calling this function on a null element does nothing. - - \sa appendInside(), prependInside(), prependOutside() -*/ -void QWebElement::appendOutside(const QString &markup) -{ - if (!m_element) - return; - - if (!m_element->parentNode()) - return; - - if (!m_element->isHTMLElement()) - return; - - HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); - RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); - - ExceptionCode exception = 0; - if (!m_element->nextSibling()) - m_element->parentNode()->appendChild(fragment, exception); - else - m_element->parentNode()->insertBefore(fragment, m_element->nextSibling(), exception); -} - -/*! - Returns a clone of this element. - - The clone may be inserted at any point in the document. - - \sa appendInside(), prependInside(), prependOutside(), appendOutside() -*/ -QWebElement QWebElement::clone() const -{ - if (!m_element) - return QWebElement(); - - return QWebElement(m_element->cloneElementWithChildren().get()); -} - -/*! - Removes this element from the document and returns a reference to it. - - The element is still valid after removal, and can be inserted into other - parts of the document. - - \sa removeAllChildren(), removeFromDocument() -*/ -QWebElement &QWebElement::takeFromDocument() -{ - if (!m_element) - return *this; - - ExceptionCode exception = 0; - m_element->remove(exception); - - return *this; -} - -/*! - Removes this element from the document and makes it a null element. - - \sa removeAllChildren(), takeFromDocument() -*/ -void QWebElement::removeFromDocument() -{ - if (!m_element) - return; - - ExceptionCode exception = 0; - m_element->remove(exception); - m_element->deref(); - m_element = 0; -} - -/*! - Removes all children from this element. - - \sa removeFromDocument(), takeFromDocument() -*/ -void QWebElement::removeAllChildren() -{ - if (!m_element) - return; - - m_element->removeAllChildren(); -} - -// FIXME: This code, and all callers are wrong, and have no place in a -// WebKit implementation. These should be replaced with WebCore implementations. -static RefPtr<Node> findInsertionPoint(PassRefPtr<Node> root) -{ - RefPtr<Node> node = root; - - // Go as far down the tree as possible. - while (node->hasChildNodes() && node->firstChild()->isElementNode()) - node = node->firstChild(); - - // TODO: Implement SVG support - if (node->isHTMLElement()) { - HTMLElement* element = static_cast<HTMLElement*>(node.get()); - - // The insert point could be a non-enclosable tag and it can thus - // never have children, so go one up. Get the parent element, and not - // note as a root note will always exist. - if (element->ieForbidsInsertHTML()) - node = node->parentElement(); - } - - return node; -} - -/*! - Encloses the contents of this element with \a element. This element becomes - the child of the deepest descendant within \a element. - - ### illustration - - \sa encloseWith() -*/ -void QWebElement::encloseContentsWith(const QWebElement &element) -{ - if (!m_element || element.isNull()) - return; - - RefPtr<Node> insertionPoint = findInsertionPoint(element.m_element); - - if (!insertionPoint) - return; - - ExceptionCode exception = 0; - - // reparent children - for (RefPtr<Node> child = m_element->firstChild(); child;) { - RefPtr<Node> next = child->nextSibling(); - insertionPoint->appendChild(child, exception); - child = next; - } - - if (m_element->hasChildNodes()) - m_element->insertBefore(element.m_element, m_element->firstChild(), exception); - else - m_element->appendChild(element.m_element, exception); -} - -/*! - Encloses the contents of this element with the result of parsing \a markup. - This element becomes the child of the deepest descendant within \a markup. - - \sa encloseWith() -*/ -void QWebElement::encloseContentsWith(const QString &markup) -{ - if (!m_element) - return; - - if (!m_element->parentNode()) - return; - - if (!m_element->isHTMLElement()) - return; - - HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); - RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); - - if (!fragment || !fragment->firstChild()) - return; - - RefPtr<Node> insertionPoint = findInsertionPoint(fragment->firstChild()); - - if (!insertionPoint) - return; - - ExceptionCode exception = 0; - - // reparent children - for (RefPtr<Node> child = m_element->firstChild(); child;) { - RefPtr<Node> next = child->nextSibling(); - insertionPoint->appendChild(child, exception); - child = next; - } - - if (m_element->hasChildNodes()) - m_element->insertBefore(fragment, m_element->firstChild(), exception); - else - m_element->appendChild(fragment, exception); -} - -/*! - Encloses this element with \a element. This element becomes the child of - the deepest descendant within \a element. - - \sa replace() -*/ -void QWebElement::encloseWith(const QWebElement &element) -{ - if (!m_element || element.isNull()) - return; - - RefPtr<Node> insertionPoint = findInsertionPoint(element.m_element); - - if (!insertionPoint) - return; - - // Keep reference to these two nodes before pulling out this element and - // wrapping it in the fragment. The reason for doing it in this order is - // that once the fragment has been added to the document it is empty, so - // we no longer have access to the nodes it contained. - Node* parent = m_element->parentNode(); - Node* siblingNode = m_element->nextSibling(); - - ExceptionCode exception = 0; - insertionPoint->appendChild(m_element, exception); - - if (!siblingNode) - parent->appendChild(element.m_element, exception); - else - parent->insertBefore(element.m_element, siblingNode, exception); -} - -/*! - Encloses this element with the result of parsing \a markup. This element - becomes the child of the deepest descendant within \a markup. - - \sa replace() -*/ -void QWebElement::encloseWith(const QString &markup) -{ - if (!m_element) - return; - - if (!m_element->parentNode()) - return; - - if (!m_element->isHTMLElement()) - return; - - HTMLElement* htmlElement = static_cast<HTMLElement*>(m_element); - RefPtr<DocumentFragment> fragment = htmlElement->deprecatedCreateContextualFragment(markup); - - if (!fragment || !fragment->firstChild()) - return; - - RefPtr<Node> insertionPoint = findInsertionPoint(fragment->firstChild()); - - if (!insertionPoint) - return; - - // Keep reference to these two nodes before pulling out this element and - // wrapping it in the fragment. The reason for doing it in this order is - // that once the fragment has been added to the document it is empty, so - // we no longer have access to the nodes it contained. - Node* parent = m_element->parentNode(); - Node* siblingNode = m_element->nextSibling(); - - ExceptionCode exception = 0; - insertionPoint->appendChild(m_element, exception); - - if (!siblingNode) - parent->appendChild(fragment, exception); - else - parent->insertBefore(fragment, siblingNode, exception); -} - -/*! - Replaces this element with \a element. - - This method will not replace the <html>, <head> or <body> elements. - - \sa encloseWith() -*/ -void QWebElement::replace(const QWebElement &element) -{ - if (!m_element || element.isNull()) - return; - - appendOutside(element); - takeFromDocument(); -} - -/*! - Replaces this element with the result of parsing \a markup. - - This method will not replace the <html>, <head> or <body> elements. - - \sa encloseWith() -*/ -void QWebElement::replace(const QString &markup) -{ - if (!m_element) - return; - - appendOutside(markup); - takeFromDocument(); -} - -/*! - \internal - Walk \a node's parents until a valid QWebElement is found. - For example, a WebCore::Text node is not a valid Html QWebElement, but its - enclosing p tag is. -*/ -QWebElement QWebElement::enclosingElement(WebCore::Node* node) -{ - QWebElement element(node); - - while (element.isNull() && node) { - node = node->parentNode(); - element = QWebElement(node); - } - return element; -} - -/*! - \fn inline bool QWebElement::operator==(const QWebElement& o) const; - - Returns true if this element points to the same underlying DOM object as - \a o; otherwise returns false. -*/ - -/*! - \fn inline bool QWebElement::operator!=(const QWebElement& o) const; - - Returns true if this element points to a different underlying DOM object - than \a o; otherwise returns false. -*/ - - -/*! - Render the element into \a painter . -*/ -void QWebElement::render(QPainter* painter) -{ - WebCore::Element* e = m_element; - Document* doc = e ? e->document() : 0; - if (!doc) - return; - - Frame* frame = doc->frame(); - if (!frame || !frame->view() || !frame->contentRenderer()) - return; - - FrameView* view = frame->view(); - - view->updateLayoutAndStyleIfNeededRecursive(); - - IntRect rect = e->getRect(); - - if (rect.size().isEmpty()) - return; - - GraphicsContext context(painter); - - context.save(); - context.translate(-rect.x(), -rect.y()); - view->setNodeToDraw(e); - view->paintContents(&context, rect); - view->setNodeToDraw(0); - context.restore(); -} - -class QWebElementCollectionPrivate : public QSharedData -{ -public: - static QWebElementCollectionPrivate* create(const PassRefPtr<Node> &context, const QString &query); - - RefPtr<NodeList> m_result; - -private: - inline QWebElementCollectionPrivate() {} -}; - -QWebElementCollectionPrivate* QWebElementCollectionPrivate::create(const PassRefPtr<Node> &context, const QString &query) -{ - if (!context) - return 0; - - // Let WebKit do the hard work hehehe - ExceptionCode exception = 0; // ### - RefPtr<NodeList> nodes = context->querySelectorAll(query, exception); - if (!nodes) - return 0; - - QWebElementCollectionPrivate* priv = new QWebElementCollectionPrivate; - priv->m_result = nodes; - return priv; -} - -/*! - \class QWebElementCollection - \since 4.6 - \brief The QWebElementCollection class represents a collection of web elements. - \preliminary - - Elements in a document can be selected using QWebElement::findAll() or using the - QWebElement constructor. The collection is composed by choosing all elements in the - document that match a specified CSS selector expression. - - The number of selected elements is provided through the count() property. Individual - elements can be retrieved by index using at(). - - It is also possible to iterate through all elements in the collection using Qt's foreach - macro: - - \code - QWebElementCollection collection = document.findAll("p"); - foreach (QWebElement paraElement, collection) { - ... - } - \endcode -*/ - -/*! - Constructs an empty collection. -*/ -QWebElementCollection::QWebElementCollection() -{ -} - -/*! - Constructs a copy of \a other. -*/ -QWebElementCollection::QWebElementCollection(const QWebElementCollection &other) - : d(other.d) -{ -} - -/*! - Constructs a collection of elements from the list of child elements of \a contextElement that - match the specified CSS selector \a query. -*/ -QWebElementCollection::QWebElementCollection(const QWebElement &contextElement, const QString &query) -{ - d = QExplicitlySharedDataPointer<QWebElementCollectionPrivate>(QWebElementCollectionPrivate::create(contextElement.m_element, query)); -} - -/*! - Assigns \a other to this collection and returns a reference to this collection. -*/ -QWebElementCollection &QWebElementCollection::operator=(const QWebElementCollection &other) -{ - d = other.d; - return *this; -} - -/*! - Destroys the collection. -*/ -QWebElementCollection::~QWebElementCollection() -{ -} - -/*! \fn QWebElementCollection &QWebElementCollection::operator+=(const QWebElementCollection &other) - - Appends the items of the \a other list to this list and returns a - reference to this list. - - \sa operator+(), append() -*/ - -/*! - Returns a collection that contains all the elements of this collection followed - by all the elements in the \a other collection. Duplicates may occur in the result. - - \sa operator+=() -*/ -QWebElementCollection QWebElementCollection::operator+(const QWebElementCollection &other) const -{ - QWebElementCollection n = *this; n.d.detach(); n += other; return n; -} - -/*! - Extends the collection by appending all items of \a other. - - The resulting collection may include duplicate elements. - - \sa operator+=() -*/ -void QWebElementCollection::append(const QWebElementCollection &other) -{ - if (!d) { - *this = other; - return; - } - if (!other.d) - return; - Vector<RefPtr<Node> > nodes; - RefPtr<NodeList> results[] = { d->m_result, other.d->m_result }; - nodes.reserveInitialCapacity(results[0]->length() + results[1]->length()); - - for (int i = 0; i < 2; ++i) { - int j = 0; - Node* n = results[i]->item(j); - while (n) { - nodes.append(n); - n = results[i]->item(++j); - } - } - - d->m_result = StaticNodeList::adopt(nodes); -} - -/*! - Returns the number of elements in the collection. -*/ -int QWebElementCollection::count() const -{ - if (!d) - return 0; - return d->m_result->length(); -} - -/*! - Returns the element at index position \a i in the collection. -*/ -QWebElement QWebElementCollection::at(int i) const -{ - if (!d) - return QWebElement(); - Node* n = d->m_result->item(i); - return QWebElement(static_cast<Element*>(n)); -} - -/*! - \fn const QWebElement QWebElementCollection::operator[](int position) const - - Returns the element at the specified \a position in the collection. -*/ - -/*! \fn QWebElement QWebElementCollection::first() const - - Returns the first element in the collection. - - \sa last(), operator[](), at(), count() -*/ - -/*! \fn QWebElement QWebElementCollection::last() const - - Returns the last element in the collection. - - \sa first(), operator[](), at(), count() -*/ - -/*! - Returns a QList object with the elements contained in this collection. -*/ -QList<QWebElement> QWebElementCollection::toList() const -{ - if (!d) - return QList<QWebElement>(); - QList<QWebElement> elements; - int i = 0; - Node* n = d->m_result->item(i); - while (n) { - if (n->isElementNode()) - elements.append(QWebElement(static_cast<Element*>(n))); - n = d->m_result->item(++i); - } - return elements; -} - -/*! - \fn QWebElementCollection::const_iterator QWebElementCollection::begin() const - - Returns an STL-style iterator pointing to the first element in the collection. - - \sa end() -*/ - -/*! - \fn QWebElementCollection::const_iterator QWebElementCollection::end() const - - Returns an STL-style iterator pointing to the imaginary element after the - last element in the list. - - \sa begin() -*/ - -/*! - \class QWebElementCollection::const_iterator - \since 4.6 - \brief The QWebElementCollection::const_iterator class provides an STL-style const iterator for QWebElementCollection. - - QWebElementCollection provides STL style const iterators for fast low-level access to the elements. - - QWebElementCollection::const_iterator allows you to iterate over a QWebElementCollection. -*/ - -/*! - \fn QWebElementCollection::const_iterator::const_iterator(const const_iterator &other) - - Constructs a copy of \a other. -*/ - -/*! - \fn QWebElementCollection::const_iterator::const_iterator(const QWebElementCollection *collection, int index) - \internal -*/ - -/*! - \fn const QWebElement QWebElementCollection::const_iterator::operator*() const - - Returns the current element. -*/ - -/*! - \fn bool QWebElementCollection::const_iterator::operator==(const const_iterator &other) const - - Returns true if \a other points to the same item as this iterator; - otherwise returns false. - - \sa operator!=() -*/ - -/*! - \fn bool QWebElementCollection::const_iterator::operator!=(const const_iterator &other) const - - Returns true if \a other points to a different element than this; - iterator; otherwise returns false. - - \sa operator==() -*/ - -/*! - \fn QWebElementCollection::const_iterator &QWebElementCollection::const_iterator::operator++() - - The prefix ++ operator (\c{++it}) advances the iterator to the next element in the collection - and returns an iterator to the new current element. - - Calling this function on QWebElementCollection::end() leads to undefined results. - - \sa operator--() -*/ - -/*! - \fn QWebElementCollection::const_iterator QWebElementCollection::const_iterator::operator++(int) - - \overload - - The postfix ++ operator (\c{it++}) advances the iterator to the next element in the collection - and returns an iterator to the previously current element. - - Calling this function on QWebElementCollection::end() leads to undefined results. -*/ - -/*! - \fn QWebElementCollection::const_iterator &QWebElementCollection::const_iterator::operator--() - - The prefix -- operator (\c{--it}) makes the preceding element current and returns an - iterator to the new current element. - - Calling this function on QWebElementCollection::begin() leads to undefined results. - - \sa operator++() -*/ - -/*! - \fn QWebElementCollection::const_iterator QWebElementCollection::const_iterator::operator--(int) - - \overload - - The postfix -- operator (\c{it--}) makes the preceding element current and returns - an iterator to the previously current element. -*/ - -/*! - \fn QWebElementCollection::const_iterator &QWebElementCollection::const_iterator::operator+=(int j) - - Advances the iterator by \a j elements. If \a j is negative, the iterator goes backward. - - \sa operator-=(), operator+() -*/ - -/*! - \fn QWebElementCollection::const_iterator &QWebElementCollection::const_iterator::operator-=(int j) - - Makes the iterator go back by \a j elements. If \a j is negative, the iterator goes forward. - - \sa operator+=(), operator-() -*/ - -/*! - \fn QWebElementCollection::const_iterator QWebElementCollection::const_iterator::operator+(int j) const - - Returns an iterator to the element at \a j positions forward from this iterator. If \a j - is negative, the iterator goes backward. - - \sa operator-(), operator+=() -*/ - -/*! - \fn QWebElementCollection::const_iterator QWebElementCollection::const_iterator::operator-(int j) const - - Returns an iterator to the element at \a j positiosn backward from this iterator. - If \a j is negative, the iterator goes forward. - - \sa operator+(), operator-=() -*/ - -/*! - \fn int QWebElementCollection::const_iterator::operator-(const_iterator other) const - - Returns the number of elements between the item point to by \a other - and the element pointed to by this iterator. -*/ - -/*! - \fn bool QWebElementCollection::const_iterator::operator<(const const_iterator &other) const - - Returns true if the element pointed to by this iterator is less than the element pointed to - by the \a other iterator. -*/ - -/*! - \fn bool QWebElementCollection::const_iterator::operator<=(const const_iterator &other) const - - Returns true if the element pointed to by this iterator is less than or equal to the - element pointed to by the \a other iterator. -*/ - -/*! - \fn bool QWebElementCollection::const_iterator::operator>(const const_iterator &other) const - - Returns true if the element pointed to by this iterator is greater than the element pointed to - by the \a other iterator. -*/ - -/*! - \fn bool QWebElementCollection::const_iterator::operator>=(const const_iterator &other) const - - Returns true if the element pointed to by this iterator is greater than or equal to the - element pointed to by the \a other iterator. -*/ - -/*! - \fn QWebElementCollection::iterator QWebElementCollection::begin() - - Returns an STL-style iterator pointing to the first element in the collection. - - \sa end() -*/ - -/*! - \fn QWebElementCollection::iterator QWebElementCollection::end() - - Returns an STL-style iterator pointing to the imaginary element after the - last element in the list. - - \sa begin() -*/ - -/*! - \fn QWebElementCollection::const_iterator QWebElementCollection::constBegin() const - - Returns an STL-style iterator pointing to the first element in the collection. - - \sa end() -*/ - -/*! - \fn QWebElementCollection::const_iterator QWebElementCollection::constEnd() const - - Returns an STL-style iterator pointing to the imaginary element after the - last element in the list. - - \sa begin() -*/ - -/*! - \class QWebElementCollection::iterator - \since 4.6 - \brief The QWebElementCollection::iterator class provides an STL-style iterator for QWebElementCollection. - - QWebElementCollection provides STL style iterators for fast low-level access to the elements. - - QWebElementCollection::iterator allows you to iterate over a QWebElementCollection. -*/ - -/*! - \fn QWebElementCollection::iterator::iterator(const iterator &other) - - Constructs a copy of \a other. -*/ - -/*! - \fn QWebElementCollection::iterator::iterator(const QWebElementCollection *collection, int index) - \internal -*/ - -/*! - \fn const QWebElement QWebElementCollection::iterator::operator*() const - - Returns the current element. -*/ - -/*! - \fn bool QWebElementCollection::iterator::operator==(const iterator &other) const - - Returns true if \a other points to the same item as this iterator; - otherwise returns false. - - \sa operator!=() -*/ - -/*! - \fn bool QWebElementCollection::iterator::operator!=(const iterator &other) const - - Returns true if \a other points to a different element than this; - iterator; otherwise returns false. - - \sa operator==() -*/ - -/*! - \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator++() - - The prefix ++ operator (\c{++it}) advances the iterator to the next element in the collection - and returns an iterator to the new current element. - - Calling this function on QWebElementCollection::end() leads to undefined results. - - \sa operator--() -*/ - -/*! - \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator++(int) - - \overload - - The postfix ++ operator (\c{it++}) advances the iterator to the next element in the collection - and returns an iterator to the previously current element. - - Calling this function on QWebElementCollection::end() leads to undefined results. -*/ - -/*! - \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator--() - - The prefix -- operator (\c{--it}) makes the preceding element current and returns an - iterator to the new current element. - - Calling this function on QWebElementCollection::begin() leads to undefined results. - - \sa operator++() -*/ - -/*! - \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator--(int) - - \overload - - The postfix -- operator (\c{it--}) makes the preceding element current and returns - an iterator to the previously current element. -*/ - -/*! - \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator+=(int j) - - Advances the iterator by \a j elements. If \a j is negative, the iterator goes backward. - - \sa operator-=(), operator+() -*/ - -/*! - \fn QWebElementCollection::iterator &QWebElementCollection::iterator::operator-=(int j) - - Makes the iterator go back by \a j elements. If \a j is negative, the iterator goes forward. - - \sa operator+=(), operator-() -*/ - -/*! - \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator+(int j) const - - Returns an iterator to the element at \a j positions forward from this iterator. If \a j - is negative, the iterator goes backward. - - \sa operator-(), operator+=() -*/ - -/*! - \fn QWebElementCollection::iterator QWebElementCollection::iterator::operator-(int j) const - - Returns an iterator to the element at \a j positiosn backward from this iterator. - If \a j is negative, the iterator goes forward. - - \sa operator+(), operator-=() -*/ - -/*! - \fn int QWebElementCollection::iterator::operator-(iterator other) const - - Returns the number of elements between the item point to by \a other - and the element pointed to by this iterator. -*/ - -/*! - \fn bool QWebElementCollection::iterator::operator<(const iterator &other) const - - Returns true if the element pointed to by this iterator is less than the element pointed to - by the \a other iterator. -*/ - -/*! - \fn bool QWebElementCollection::iterator::operator<=(const iterator &other) const - - Returns true if the element pointed to by this iterator is less than or equal to the - element pointed to by the \a other iterator. -*/ - -/*! - \fn bool QWebElementCollection::iterator::operator>(const iterator &other) const - - Returns true if the element pointed to by this iterator is greater than the element pointed to - by the \a other iterator. -*/ - -/*! - \fn bool QWebElementCollection::iterator::operator>=(const iterator &other) const - - Returns true if the element pointed to by this iterator is greater than or equal to the - element pointed to by the \a other iterator. -*/ diff --git a/WebKit/qt/Api/qwebelement.h b/WebKit/qt/Api/qwebelement.h deleted file mode 100644 index b94c372..0000000 --- a/WebKit/qt/Api/qwebelement.h +++ /dev/null @@ -1,282 +0,0 @@ -/* - Copyright (C) 2009 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. -*/ - -#ifndef QWEBELEMENT_H -#define QWEBELEMENT_H - -#include <QtCore/qstring.h> -#include <QtCore/qstringlist.h> -#include <QtCore/qrect.h> -#include <QtCore/qvariant.h> -#include <QtCore/qshareddata.h> - -#include "qwebkitglobal.h" -namespace WebCore { - class Element; - class Node; -} - - -#if defined(WTF_USE_V8) && WTF_USE_V8 -namespace V8 { - namespace Bindings { - class QtWebElementRuntime; - } -} -#else -namespace JSC { - namespace Bindings { - class QtWebElementRuntime; - } -} -#endif - -QT_BEGIN_NAMESPACE -class QPainter; -QT_END_NAMESPACE - -class QWebFrame; -class QWebElementCollection; -class QWebElementPrivate; - -class QWEBKIT_EXPORT QWebElement { -public: - QWebElement(); - QWebElement(const QWebElement&); - QWebElement &operator=(const QWebElement&); - ~QWebElement(); - - bool operator==(const QWebElement& o) const; - bool operator!=(const QWebElement& o) const; - - bool isNull() const; - - QWebElementCollection findAll(const QString &selectorQuery) const; - QWebElement findFirst(const QString &selectorQuery) const; - - void setPlainText(const QString& text); - QString toPlainText() const; - - void setOuterXml(const QString& markup); - QString toOuterXml() const; - - void setInnerXml(const QString& markup); - QString toInnerXml() const; - - void setAttribute(const QString& name, const QString& value); - void setAttributeNS(const QString& namespaceUri, const QString& name, const QString& value); - QString attribute(const QString& name, const QString& defaultValue = QString()) const; - QString attributeNS(const QString& namespaceUri, const QString& name, const QString& defaultValue = QString()) const; - bool hasAttribute(const QString& name) const; - bool hasAttributeNS(const QString& namespaceUri, const QString& name) const; - void removeAttribute(const QString& name); - void removeAttributeNS(const QString& namespaceUri, const QString& name); - bool hasAttributes() const; - QStringList attributeNames(const QString& namespaceUri = QString()) const; - - QStringList classes() const; - bool hasClass(const QString& name) const; - void addClass(const QString& name); - void removeClass(const QString& name); - void toggleClass(const QString& name); - - bool hasFocus() const; - void setFocus(); - - QRect geometry() const; - - QString tagName() const; - QString prefix() const; - QString localName() const; - QString namespaceUri() const; - - QWebElement parent() const; - QWebElement firstChild() const; - QWebElement lastChild() const; - QWebElement nextSibling() const; - QWebElement previousSibling() const; - QWebElement document() const; - QWebFrame *webFrame() const; - - // TODO: Add QWebElementCollection overloads - // docs need example snippet - void appendInside(const QString& markup); - void appendInside(const QWebElement& element); - - // docs need example snippet - void prependInside(const QString& markup); - void prependInside(const QWebElement& element); - - // docs need example snippet - void appendOutside(const QString& markup); - void appendOutside(const QWebElement& element); - - // docs need example snippet - void prependOutside(const QString& markup); - void prependOutside(const QWebElement& element); - - // docs need example snippet - void encloseContentsWith(const QWebElement& element); - void encloseContentsWith(const QString& markup); - void encloseWith(const QString& markup); - void encloseWith(const QWebElement& element); - - void replace(const QString& markup); - void replace(const QWebElement& element); - - QWebElement clone() const; - QWebElement& takeFromDocument(); - void removeFromDocument(); - void removeAllChildren(); - - QVariant evaluateJavaScript(const QString& scriptSource); - - enum StyleResolveStrategy { - InlineStyle, - CascadedStyle, - ComputedStyle, - }; - QString styleProperty(const QString& name, StyleResolveStrategy strategy) const; - void setStyleProperty(const QString& name, const QString& value); - - void render(QPainter* painter); - -private: - explicit QWebElement(WebCore::Element*); - explicit QWebElement(WebCore::Node*); - - static QWebElement enclosingElement(WebCore::Node*); - - friend class DumpRenderTreeSupportQt; - friend class QWebFrame; - friend class QWebElementCollection; - friend class QWebHitTestResult; - friend class QWebHitTestResultPrivate; - friend class QWebPage; - -#if defined(WTF_USE_V8) && WTF_USE_V8 - friend class V8::Bindings::QtWebElementRuntime; -#else - friend class JSC::Bindings::QtWebElementRuntime; -#endif - - QWebElementPrivate* d; - WebCore::Element* m_element; -}; - -class QWebElementCollectionPrivate; - -class QWEBKIT_EXPORT QWebElementCollection -{ -public: - QWebElementCollection(); - QWebElementCollection(const QWebElement &contextElement, const QString &query); - QWebElementCollection(const QWebElementCollection &); - QWebElementCollection &operator=(const QWebElementCollection &); - ~QWebElementCollection(); - - QWebElementCollection operator+(const QWebElementCollection &other) const; - inline QWebElementCollection &operator+=(const QWebElementCollection &other) - { - append(other); return *this; - } - - void append(const QWebElementCollection &collection); - - int count() const; - QWebElement at(int i) const; - inline QWebElement operator[](int i) const { return at(i); } - - inline QWebElement first() const { return at(0); } - inline QWebElement last() const { return at(count() - 1); } - - QList<QWebElement> toList() const; - - class const_iterator { - public: - inline const_iterator(const QWebElementCollection* collection, int index) : i(index), collection(collection) {} - inline const_iterator(const const_iterator& o) : i(o.i), collection(o.collection) {} - - inline const QWebElement operator*() const { return collection->at(i); } - - inline bool operator==(const const_iterator& o) const { return i == o.i && collection == o.collection; } - inline bool operator!=(const const_iterator& o) const { return i != o.i || collection != o.collection; } - inline bool operator<(const const_iterator& o) const { return i < o.i; } - inline bool operator<=(const const_iterator& o) const { return i <= o.i; } - inline bool operator>(const const_iterator& o) const { return i > o.i; } - inline bool operator>=(const const_iterator& o) const { return i >= o.i; } - - inline const_iterator& operator++() { ++i; return *this; } - inline const_iterator operator++(int) { const_iterator n(collection, i); ++i; return n; } - inline const_iterator& operator--() { i--; return *this; } - inline const_iterator operator--(int) { const_iterator n(collection, i); i--; return n; } - inline const_iterator& operator+=(int j) { i += j; return *this; } - inline const_iterator& operator-=(int j) { i -= j; return *this; } - inline const_iterator operator+(int j) const { return const_iterator(collection, i + j); } - inline const_iterator operator-(int j) const { return const_iterator(collection, i - j); } - inline int operator-(const_iterator j) const { return i - j.i; } - private: - int i; - const QWebElementCollection* const collection; - }; - friend class const_iterator; - - inline const_iterator begin() const { return constBegin(); } - inline const_iterator end() const { return constEnd(); } - inline const_iterator constBegin() const { return const_iterator(this, 0); } - inline const_iterator constEnd() const { return const_iterator(this, count()); }; - - class iterator { - public: - inline iterator(const QWebElementCollection* collection, int index) : i(index), collection(collection) {} - inline iterator(const iterator& o) : i(o.i), collection(o.collection) {} - - inline QWebElement operator*() const { return collection->at(i); } - - inline bool operator==(const iterator& o) const { return i == o.i && collection == o.collection; } - inline bool operator!=(const iterator& o) const { return i != o.i || collection != o.collection; } - inline bool operator<(const iterator& o) const { return i < o.i; } - inline bool operator<=(const iterator& o) const { return i <= o.i; } - inline bool operator>(const iterator& o) const { return i > o.i; } - inline bool operator>=(const iterator& o) const { return i >= o.i; } - - inline iterator& operator++() { ++i; return *this; } - inline iterator operator++(int) { iterator n(collection, i); ++i; return n; } - inline iterator& operator--() { i--; return *this; } - inline iterator operator--(int) { iterator n(collection, i); i--; return n; } - inline iterator& operator+=(int j) { i += j; return *this; } - inline iterator& operator-=(int j) { i -= j; return *this; } - inline iterator operator+(int j) const { return iterator(collection, i + j); } - inline iterator operator-(int j) const { return iterator(collection, i - j); } - inline int operator-(iterator j) const { return i - j.i; } - private: - int i; - const QWebElementCollection* const collection; - }; - friend class iterator; - - inline iterator begin() { return iterator(this, 0); } - inline iterator end() { return iterator(this, count()); } -private: - QExplicitlySharedDataPointer<QWebElementCollectionPrivate> d; -}; - -Q_DECLARE_METATYPE(QWebElement) - -#endif // QWEBELEMENT_H diff --git a/WebKit/qt/Api/qwebframe.cpp b/WebKit/qt/Api/qwebframe.cpp deleted file mode 100644 index 701cfe0..0000000 --- a/WebKit/qt/Api/qwebframe.cpp +++ /dev/null @@ -1,1931 +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" - -#if USE(JSC) -#include "Bridge.h" -#include "CallFrame.h" -#elif USE(V8) -#include "V8Binding.h" -#endif -#include "Document.h" -#include "DocumentLoader.h" -#include "DragData.h" -#include "Element.h" -#include "FocusController.h" -#include "Frame.h" -#include "FrameLoaderClientQt.h" -#include "FrameTree.h" -#include "FrameView.h" -#if USE(JSC) -#include "GCController.h" -#elif USE(V8) -#include "V8GCController.h" -#endif -#include "GraphicsContext.h" -#include "HTMLMetaElement.h" -#include "HitTestResult.h" -#include "HTTPParsers.h" -#include "IconDatabase.h" -#include "InspectorController.h" -#if USE(JSC) -#include "JSDOMBinding.h" -#include "JSDOMWindowBase.h" -#include "JSLock.h" -#include "JSObject.h" -#elif USE(V8) -#include "V8DOMWrapper.h" -#include "V8DOMWindowShell.h" -#endif -#include "NetworkingContext.h" -#include "NodeList.h" -#include "Page.h" -#include "PlatformMouseEvent.h" -#include "PlatformWheelEvent.h" -#include "PrintContext.h" -#if USE(JSC) -#include "PutPropertySlot.h" -#endif -#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 "SelectionController.h" -#include "SubstituteData.h" -#include "SVGSMILElement.h" -#include "TiledBackingStore.h" -#include "htmlediting.h" -#include "markup.h" -#if USE(JSC) -#include "qt_instance.h" -#include "qt_runtime.h" -#endif -#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" -#if USE(JSC) -#include "runtime_object.h" -#include "runtime_root.h" -#endif -#if USE(TEXTURE_MAPPER) -#include "texmap/TextureMapper.h" -#include "texmap/TextureMapperPlatformLayer.h" -#endif -#include "wtf/HashMap.h" -#include <QMultiMap> -#include <qdebug.h> -#include <qevent.h> -#include <qfileinfo.h> -#include <qpainter.h> -#include <qprinter.h> -#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 - -bool QWEBKIT_EXPORT qtwebkit_webframe_scrollOverflow(QWebFrame* qFrame, int dx, int dy, const QPoint& pos) -{ - WebCore::Frame* frame = QWebFramePrivate::core(qFrame); - if (!frame || !frame->document() || !frame->view() || !frame->eventHandler()) - return false; - - QPoint contentsPos = frame->view()->windowToContents(pos); - Node* node = frame->document()->elementFromPoint(contentsPos.x(), contentsPos.y()); - if (!node) - return false; - - RenderObject* renderer = node->renderer(); - if (!renderer) - return false; - - if (renderer->isListBox()) - return false; - - RenderLayer* renderLayer = renderer->enclosingLayer(); - if (!renderLayer) - return false; - - bool scrolledHorizontal = false; - bool scrolledVertical = false; - - do { - if (dx > 0) - scrolledHorizontal = renderLayer->scroll(ScrollRight, ScrollByPixel, dx); - else if (dx < 0) - scrolledHorizontal = renderLayer->scroll(ScrollLeft, ScrollByPixel, qAbs(dx)); - - if (dy > 0) - scrolledVertical = renderLayer->scroll(ScrollDown, ScrollByPixel, dy); - else if (dy < 0) - scrolledVertical = renderLayer->scroll(ScrollUp, ScrollByPixel, qAbs(dy)); - - if (scrolledHorizontal || scrolledVertical) - return true; - - renderLayer = renderLayer->parent(); - } while (renderLayer); - - return false; -} - - -/*! - \internal - Scrolls nested frames starting at this frame, \a dx pixels to the right - and \a dy pixels downward. Both \a dx and \a dy may be negative. First attempts - to scroll elements with CSS overflow at position pos, followed by this frame. If this - frame doesn't scroll, attempts to scroll the parent -*/ -void QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy, const QPoint& pos) -{ - if (!qFrame) - return; - - if (qtwebkit_webframe_scrollOverflow(qFrame, dx, dy, pos)) - return; - - bool scrollHorizontal = false; - bool scrollVertical = false; - - do { - if (dx > 0) // scroll right - scrollHorizontal = qFrame->scrollBarValue(Qt::Horizontal) < qFrame->scrollBarMaximum(Qt::Horizontal); - else if (dx < 0) // scroll left - scrollHorizontal = qFrame->scrollBarValue(Qt::Horizontal) > qFrame->scrollBarMinimum(Qt::Horizontal); - - if (dy > 0) // scroll down - scrollVertical = qFrame->scrollBarValue(Qt::Vertical) < qFrame->scrollBarMaximum(Qt::Vertical); - else if (dy < 0) //scroll up - scrollVertical = qFrame->scrollBarValue(Qt::Vertical) > qFrame->scrollBarMinimum(Qt::Vertical); - - if (scrollHorizontal || scrollVertical) { - qFrame->scroll(dx, dy); - return; - } - - qFrame = qFrame->parentFrame(); - } while (qFrame); -} - -static inline ResourceRequestCachePolicy cacheLoadControlToCachePolicy(uint cacheLoadControl) -{ - switch (cacheLoadControl) { - case QNetworkRequest::AlwaysNetwork: - return WebCore::ReloadIgnoringCacheData; - case QNetworkRequest::PreferCache: - return WebCore::ReturnCacheDataElseLoad; - case QNetworkRequest::AlwaysCache: - return WebCore::ReturnCacheDataDontLoad; - default: - break; - } - return WebCore::UseProtocolCachePolicy; -} - -QWebFrameData::QWebFrameData(WebCore::Page* parentPage, WebCore::Frame* parentFrame, - WebCore::HTMLFrameOwnerElement* ownerFrameElement, - const WTF::String& frameName) - : name(frameName) - , ownerElement(ownerFrameElement) - , page(parentPage) - , allowsScrolling(true) - , marginWidth(0) - , marginHeight(0) -{ - frameLoaderClient = new FrameLoaderClientQt(); - frame = Frame::create(page, ownerElement, frameLoaderClient); - - // FIXME: All of the below should probably be moved over into WebCore - frame->tree()->setName(name); - if (parentFrame) - parentFrame->tree()->appendChild(frame); -} - -void QWebFramePrivate::init(QWebFrame *qframe, QWebFrameData *frameData) -{ - q = qframe; - - allowsScrolling = frameData->allowsScrolling; - marginWidth = frameData->marginWidth; - marginHeight = frameData->marginHeight; - frame = frameData->frame.get(); - frameLoaderClient = frameData->frameLoaderClient; - frameLoaderClient->setFrame(qframe, frame); - - frame->init(); -} - -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; - 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 ENABLE(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) && USE(TEXTURE_MAPPER) - renderCompositedLayers(context, IntRect(clip.boundingRect())); - renderRelativeCoords(context, (QWebFrame::RenderLayer)(QWebFrame::ScrollBarLayer | QWebFrame::PanIconLayer), clip); -#endif -} -#endif - -#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER) -void QWebFramePrivate::renderCompositedLayers(GraphicsContext* context, const IntRect& clip) -{ - if (!rootGraphicsLayer) - return; - - textureMapper->setGraphicsContext(context); - textureMapper->setImageInterpolationQuality(context->imageInterpolationQuality()); - textureMapper->setTextDrawingMode(context->textDrawingMode()); - QPainter* painter = context->platformContext(); - FrameView* view = frame->view(); - painter->save(); - painter->beginNativePainting(); - TextureMapperContentLayer::PaintOptions options; - options.visibleRect = clip; - options.targetRect = view->frameRect(); - options.viewportSize = view->size(); - options.opacity = painter->opacity(); - rootGraphicsLayer->paint(textureMapper.get(), options); - painter->endNativePainting(); - painter->restore(); -} -#endif - -void QWebFramePrivate::renderRelativeCoords(GraphicsContext* context, QWebFrame::RenderLayer layer, 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 (layer & QWebFrame::ContentsLayer) { - painter->save(); - for (int i = 0; i < vector.size(); ++i) { - const QRect& clipRect = vector.at(i); - - QRect intersectedRect = 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(); - - QRect rect = intersectedRect; - 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(); - } - painter->restore(); -#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER) - renderCompositedLayers(context, IntRect(clip.boundingRect())); -#endif - } - if (layer & (QWebFrame::PanIconLayer | QWebFrame::ScrollBarLayer)) { - 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 (layer & QWebFrame::ScrollBarLayer - && !view->scrollbarsSuppressed() - && (view->horizontalScrollbar() || view->verticalScrollbar())) { - context->save(); - - QRect rect = intersectedRect; - context->translate(x, y); - rect.translate(-x, -y); - - view->paintScrollbars(context, rect); - - context->restore(); - } - -#if ENABLE(PAN_SCROLLING) - if (layer & QWebFrame::PanIconLayer) - view->paintPanScrollIcon(context); -#endif - - painter->restore(); - } - } -} - -void QWebFrame::orientationChanged() -{ -#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION) - int orientation; - WebCore::Frame* frame = QWebFramePrivate::core(this); - - switch (d->m_orientation.reading()->orientation()) { - case QtMobility::QOrientationReading::TopUp: - orientation = 0; - break; - case QtMobility::QOrientationReading::TopDown: - orientation = 180; - break; - case QtMobility::QOrientationReading::LeftUp: - orientation = -90; - break; - case QtMobility::QOrientationReading::RightUp: - orientation = 90; - break; - case QtMobility::QOrientationReading::FaceUp: - case QtMobility::QOrientationReading::FaceDown: - // WebCore unable to handle it - default: - return; - } - frame->sendOrientationChangeEvent(orientation); -#endif -} -/*! - \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 *parent, QWebFrameData *frameData) - : QObject(parent) - , d(new QWebFramePrivate) -{ - d->page = parent; - d->init(this, frameData); - - if (!frameData->url.isEmpty()) { - WebCore::ResourceRequest request(frameData->url, frameData->referrer); - d->frame->loader()->load(request, frameData->name, false); - } -#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION) - connect(&d->m_orientation, SIGNAL(readingChanged()), this, SLOT(orientationChanged())); - d->m_orientation.start(); -#endif -} - -QWebFrame::QWebFrame(QWebFrame *parent, QWebFrameData *frameData) - : QObject(parent) - , d(new QWebFramePrivate) -{ - d->page = parent->d->page; - d->init(this, frameData); -#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION) - connect(&d->m_orientation, SIGNAL(readingChanged()), this, SLOT(orientationChanged())); - d->m_orientation.start(); -#endif -} - -QWebFrame::~QWebFrame() -{ - if (d->frame && d->frame->loader() && d->frame->loader()->client()) - static_cast<FrameLoaderClientQt*>(d->frame->loader()->client())->m_webFrame = 0; - - delete d; -} - -/*! - 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. - - 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 \a object will never be explicitly deleted by QtWebKit. -*/ -void QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object) -{ - addToJavaScriptWindowObject(name, object, QScriptEngine::QtOwnership); -} - -/*! - \fn void QWebFrame::addToJavaScriptWindowObject(const QString &name, QObject *object, QScriptEngine::ValueOwnership own) - \overload - - 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. - - 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, QScriptEngine::ValueOwnership ownership) -{ - if (!page()->settings()->testAttribute(QWebSettings::JavascriptEnabled)) - return; -#if USE(JSC) - JSC::JSLock lock(JSC::SilenceAssertionsOnly); - JSDOMWindow* window = toJSDOMWindow(d->frame, mainThreadNormalWorld()); - JSC::Bindings::RootObject* root; - if (ownership == QScriptEngine::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::JSObject* runtimeObject = - JSC::Bindings::QtInstance::getQtInstance(object, root, ownership)->createRuntimeObject(exec); - - JSC::PutPropertySlot slot; - window->put(exec, JSC::Identifier(exec, reinterpret_cast_ptr<const UChar*>(name.constData()), name.length()), runtimeObject, slot); -#elif USE(V8) - QScriptEngine* engine = d->frame->script()->qtScriptEngine(); - if (!engine) - return; - QScriptValue v = engine->newQObject(object, ownership); - engine->globalObject().property("window").setProperty(name, v); -#endif -} - -/*! - 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(); - 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 \o Key - \o Value - \row \o "description" - \o "This document is a tutorial about Qt development" - \row \o "keywords" - \o "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 QUrl ensureAbsoluteUrl(const QUrl &url) -{ - if (!url.isRelative()) - return url; - - return QUrl::fromLocalFile(QFileInfo(url.toLocalFile()).absoluteFilePath()); -} - -/*! - \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) -{ - const QUrl absolute = ensureAbsoluteUrl(url); - d->frame->loader()->writer()->begin(absolute); - d->frame->loader()->writer()->end(); - load(absolute); -} - -QUrl QWebFrame::url() const -{ - return d->frame->loader()->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 -{ - // There are some possible edge cases to be handled here, - // apart from checking if activeDocumentLoader is valid: - // - // * Method can be called while processing an unsucessful load. - // In this case, frameLoaderClient will hold the current error - // (m_loadError), and we will make use of it to recover the 'failingURL'. - // * If the 'failingURL' holds a null'ed string though, we fallback - // to 'outgoingReferrer' (it yet is safer than originalRequest). - FrameLoader* loader = d->frame->loader(); - FrameLoaderClientQt* loaderClient = d->frameLoaderClient; - - if (!loader->activeDocumentLoader() - || !loaderClient->m_loadError.isNull()) { - if (!loaderClient->m_loadError.failingURL().isNull()) - return QUrl(loaderClient->m_loadError.failingURL()); - else if (!loader->outgoingReferrer().isEmpty()) - return QUrl(loader->outgoingReferrer()); - } - - return loader->originalRequest().url(); -} -/*! - \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 -{ - return d->frame->loader()->baseURL(); -} - -/*! - \property QWebFrame::icon - \brief the icon associated with this frame - - \sa iconChanged(), QWebSettings::iconForUrl() -*/ - -QIcon QWebFrame::icon() const -{ - return QWebSettings::iconForUrl(d->frame->loader()->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) -{ - if (d->parentFrame()) - d->page->d->insideOpenCall = true; - - QUrl url = ensureAbsoluteUrl(req.url()); - - WebCore::ResourceRequest request(url); - - switch (operation) { - case QNetworkAccessManager::HeadOperation: - request.setHTTPMethod("HEAD"); - break; - case QNetworkAccessManager::GetOperation: - request.setHTTPMethod("GET"); - break; - case QNetworkAccessManager::PutOperation: - request.setHTTPMethod("PUT"); - break; - case QNetworkAccessManager::PostOperation: - request.setHTTPMethod("POST"); - break; - case QNetworkAccessManager::DeleteOperation: - request.setHTTPMethod("DELETE"); - break; -#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) - case QNetworkAccessManager::CustomOperation: - request.setHTTPMethod(req.attribute(QNetworkRequest::CustomVerbAttribute).toByteArray().constData()); - break; -#endif - case QNetworkAccessManager::UnknownOperation: - // eh? - break; - } - - QVariant cacheLoad = req.attribute(QNetworkRequest::CacheLoadControlAttribute); - if (cacheLoad.isValid()) { - bool ok; - uint cacheLoadValue = cacheLoad.toUInt(&ok); - if (ok) - request.setCachePolicy(cacheLoadControlToCachePolicy(cacheLoadValue)); - } - - QList<QByteArray> httpHeaders = req.rawHeaderList(); - for (int i = 0; i < httpHeaders.size(); ++i) { - const QByteArray &headerName = httpHeaders.at(i); - request.addHTTPHeaderField(QString::fromLatin1(headerName), QString::fromLatin1(req.rawHeader(headerName))); - } - - if (!body.isEmpty()) - request.setHTTPBody(WebCore::FormData::create(body.constData(), body.size())); - - d->frame->loader()->load(request, false); - - if (d->parentFrame()) - d->page->d->insideOpenCall = false; -} - -/*! - 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(request, substituteData, false); -} - -/*! - 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(request, substituteData, false); -} - -/*! - 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->setValue(value, Scrollbar::NotFromScrollAnimator); - } -} - -/*! - 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 -{ - if (!d->frame->view()) - return QPoint(0, 0); - - IntSize ofs = d->frame->view()->scrollOffset(); - 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().topLeft(); -} - -/*! - Return the geometry of the frame relative to it's parent frame. -*/ -QRect QWebFrame::geometry() const -{ - if (!d->frame->view()) - return QRect(); - return d->frame->view()->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 -{ - 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()); - - 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(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 // 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) { -#if USE(JSC) - int distance = 0; - JSC::JSValue v = d->frame->script()->executeScript(ScriptSourceCode(scriptSource)).jsValue(); - - rc = JSC::Bindings::convertValueToQVariant(proxy->globalObject(mainThreadNormalWorld())->globalExec(), v, QMetaType::Void, &distance); -#elif USE(V8) - QScriptEngine* engine = d->frame->script()->qtScriptEngine(); - if (!engine) - return rc; - rc = engine->evaluate(scriptSource).toVariant(); -#endif - } - 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()); -} - - -/*! - \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.point(); - 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(true) : 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(); - - if (innerNonSharedNode && innerNonSharedNode->document() - && innerNonSharedNode->document()->frame()) - frame = QWebFramePrivate::kit(innerNonSharedNode->document()->frame()); - - 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. -*/ -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; -} - -/*! - 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 the hit test was executed in. -*/ -QWebFrame *QWebHitTestResult::frame() const -{ - if (!d) - return 0; - return d->frame; -} diff --git a/WebKit/qt/Api/qwebframe.h b/WebKit/qt/Api/qwebframe.h deleted file mode 100644 index 8410962..0000000 --- a/WebKit/qt/Api/qwebframe.h +++ /dev/null @@ -1,242 +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. -*/ - -#ifndef QWEBFRAME_H -#define QWEBFRAME_H - -#include <QtCore/qobject.h> -#include <QtCore/qurl.h> -#include <QtCore/qvariant.h> -#include <QtGui/qicon.h> -#include <QtScript/qscriptengine.h> -#include <QtNetwork/qnetworkaccessmanager.h> -#include "qwebkitglobal.h" - -QT_BEGIN_NAMESPACE -class QRect; -class QPoint; -class QPainter; -class QPixmap; -class QMouseEvent; -class QWheelEvent; -class QNetworkRequest; -class QRegion; -class QPrinter; -QT_END_NAMESPACE - -class QWebNetworkRequest; -class QWebFramePrivate; -class QWebPage; -class QWebHitTestResult; -class QWebHistoryItem; -class QWebSecurityOrigin; -class QWebElement; -class QWebElementCollection; -class QWebScriptWorld; - -class DumpRenderTreeSupportQt; -namespace WebCore { - class WidgetPrivate; - class FrameLoaderClientQt; - class ChromeClientQt; - class PlatformLayerProxyQt; -} -class QWebFrameData; -class QWebHitTestResultPrivate; -class QWebFrame; - -class QWEBKIT_EXPORT QWebHitTestResult { -public: - QWebHitTestResult(); - QWebHitTestResult(const QWebHitTestResult &other); - QWebHitTestResult &operator=(const QWebHitTestResult &other); - ~QWebHitTestResult(); - - bool isNull() const; - - QPoint pos() const; - QRect boundingRect() const; - QWebElement enclosingBlockElement() const; - QString title() const; - - QString linkText() const; - QUrl linkUrl() const; - QUrl linkTitle() const; - QWebFrame *linkTargetFrame() const; - QWebElement linkElement() const; - - QString alternateText() const; // for img, area, input and applet - - QUrl imageUrl() const; - QPixmap pixmap() const; - - bool isContentEditable() const; - bool isContentSelected() const; - - QWebElement element() const; - - QWebFrame *frame() const; - -private: - QWebHitTestResult(QWebHitTestResultPrivate *priv); - QWebHitTestResultPrivate *d; - - friend class QWebFrame; - friend class QWebPagePrivate; - friend class QWebPage; -}; - -class QWEBKIT_EXPORT QWebFrame : public QObject { - Q_OBJECT - Q_PROPERTY(qreal textSizeMultiplier READ textSizeMultiplier WRITE setTextSizeMultiplier DESIGNABLE false) - Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor) - Q_PROPERTY(QString title READ title) - Q_PROPERTY(QUrl url READ url WRITE setUrl) - Q_PROPERTY(QUrl requestedUrl READ requestedUrl) - Q_PROPERTY(QUrl baseUrl READ baseUrl) - Q_PROPERTY(QIcon icon READ icon) - Q_PROPERTY(QSize contentsSize READ contentsSize) - Q_PROPERTY(QPoint scrollPosition READ scrollPosition WRITE setScrollPosition) - Q_PROPERTY(bool focus READ hasFocus) -private: - QWebFrame(QWebPage *parent, QWebFrameData *frameData); - QWebFrame(QWebFrame *parent, QWebFrameData *frameData); - ~QWebFrame(); - -public: - QWebPage *page() const; - - void load(const QUrl &url); - void load(const QNetworkRequest &request, - QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, - const QByteArray &body = QByteArray()); - void setHtml(const QString &html, const QUrl &baseUrl = QUrl()); - void setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl()); - - void addToJavaScriptWindowObject(const QString &name, QObject *object); - void addToJavaScriptWindowObject(const QString &name, QObject *object, QScriptEngine::ValueOwnership ownership); - QString toHtml() const; - QString toPlainText() const; - QString renderTreeDump() const; - - QString title() const; - void setUrl(const QUrl &url); - QUrl url() const; - QUrl requestedUrl() const; - QUrl baseUrl() const; - QIcon icon() const; - QMultiMap<QString, QString> metaData() const; - - QString frameName() const; - - QWebFrame *parentFrame() const; - QList<QWebFrame*> childFrames() const; - - Qt::ScrollBarPolicy scrollBarPolicy(Qt::Orientation orientation) const; - void setScrollBarPolicy(Qt::Orientation orientation, Qt::ScrollBarPolicy policy); - - void setScrollBarValue(Qt::Orientation orientation, int value); - int scrollBarValue(Qt::Orientation orientation) const; - int scrollBarMinimum(Qt::Orientation orientation) const; - int scrollBarMaximum(Qt::Orientation orientation) const; - QRect scrollBarGeometry(Qt::Orientation orientation) const; - - void scroll(int, int); - QPoint scrollPosition() const; - void setScrollPosition(const QPoint &pos); - - void scrollToAnchor(const QString& anchor); - - enum RenderLayer { - ContentsLayer = 0x10, - ScrollBarLayer = 0x20, - PanIconLayer = 0x40, - - AllLayers = 0xff - }; - - void render(QPainter*); - void render(QPainter*, const QRegion& clip); - void render(QPainter*, RenderLayer layer, const QRegion& clip = QRegion()); - - void setTextSizeMultiplier(qreal factor); - qreal textSizeMultiplier() const; - - qreal zoomFactor() const; - void setZoomFactor(qreal factor); - - bool hasFocus() const; - void setFocus(); - - QPoint pos() const; - QRect geometry() const; - QSize contentsSize() const; - - QWebElement documentElement() const; - QWebElementCollection findAllElements(const QString &selectorQuery) const; - QWebElement findFirstElement(const QString &selectorQuery) const; - - QWebHitTestResult hitTestContent(const QPoint &pos) const; - - virtual bool event(QEvent *); - - QWebSecurityOrigin securityOrigin() const; - -public Q_SLOTS: - QVariant evaluateJavaScript(const QString& scriptSource); -#ifndef QT_NO_PRINTER - void print(QPrinter *printer) const; -#endif - -private Q_SLOTS: - void orientationChanged(); - -Q_SIGNALS: - void javaScriptWindowObjectCleared(); - - void provisionalLoad(); - void titleChanged(const QString &title); - void urlChanged(const QUrl &url); - - void initialLayoutCompleted(); - - void iconChanged(); - - void contentsSizeChanged(const QSize &size); - - void loadStarted(); - void loadFinished(bool ok); - - void pageChanged(); - -private: - friend class QGraphicsWebView; - friend class QWebPage; - friend class QWebPagePrivate; - friend class QWebFramePrivate; - friend class DumpRenderTreeSupportQt; - friend class WebCore::WidgetPrivate; - friend class WebCore::FrameLoaderClientQt; - friend class WebCore::ChromeClientQt; - friend class WebCore::PlatformLayerProxyQt; - QWebFramePrivate *d; -}; - -#endif diff --git a/WebKit/qt/Api/qwebframe_p.h b/WebKit/qt/Api/qwebframe_p.h deleted file mode 100644 index ee8c463..0000000 --- a/WebKit/qt/Api/qwebframe_p.h +++ /dev/null @@ -1,152 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef QWEBFRAME_P_H -#define QWEBFRAME_P_H - -#include "qwebframe.h" -#include "qwebpage_p.h" - -#include "EventHandler.h" -#include "GraphicsContext.h" -#include "KURL.h" -#include "PlatformString.h" -#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION) -#include "qorientationsensor.h" -#endif -#include "qwebelement.h" -#include "wtf/RefPtr.h" -#include "Frame.h" -#include "ViewportArguments.h" - -#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER) -#include "texmap/TextureMapper.h" -#endif - - -namespace WebCore { - class FrameLoaderClientQt; - class FrameView; - class HTMLFrameOwnerElement; - class Scrollbar; - class TextureMapperContentLayer; -} -class QWebPage; - -class QWebFrameData { -public: - QWebFrameData(WebCore::Page*, WebCore::Frame* parentFrame = 0, - WebCore::HTMLFrameOwnerElement* = 0, - const WTF::String& frameName = WTF::String()); - - WebCore::KURL url; - WTF::String name; - WebCore::HTMLFrameOwnerElement* ownerElement; - WebCore::Page* page; - RefPtr<WebCore::Frame> frame; - WebCore::FrameLoaderClientQt* frameLoaderClient; - - WTF::String referrer; - bool allowsScrolling; - int marginWidth; - int marginHeight; -}; - -class QWebFramePrivate { -public: - QWebFramePrivate() - : q(0) - , horizontalScrollBarPolicy(Qt::ScrollBarAsNeeded) - , verticalScrollBarPolicy(Qt::ScrollBarAsNeeded) - , frameLoaderClient(0) - , frame(0) - , page(0) - , allowsScrolling(true) - , marginWidth(-1) - , marginHeight(-1) -#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER) - , rootGraphicsLayer(0) -#endif - {} - void init(QWebFrame* qframe, QWebFrameData* frameData); - void setPage(QWebPage*); - - inline QWebFrame *parentFrame() { return qobject_cast<QWebFrame*>(q->parent()); } - - WebCore::Scrollbar* horizontalScrollBar() const; - WebCore::Scrollbar* verticalScrollBar() const; - - static WebCore::Frame* core(const QWebFrame*); - static QWebFrame* kit(const WebCore::Frame*); - - void renderRelativeCoords(WebCore::GraphicsContext*, QWebFrame::RenderLayer, const QRegion& clip); -#if ENABLE(TILED_BACKING_STORE) - void renderFromTiledBackingStore(WebCore::GraphicsContext*, const QRegion& clip); -#endif - -#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER) - void renderCompositedLayers(WebCore::GraphicsContext* context, const WebCore::IntRect& clip); -#endif - QWebFrame *q; - Qt::ScrollBarPolicy horizontalScrollBarPolicy; - Qt::ScrollBarPolicy verticalScrollBarPolicy; - WebCore::FrameLoaderClientQt *frameLoaderClient; - WebCore::Frame *frame; - QWebPage *page; - - bool allowsScrolling; - int marginWidth; - int marginHeight; -#if USE(ACCELERATED_COMPOSITING) && USE(TEXTURE_MAPPER) - WebCore::TextureMapperContentLayer* rootGraphicsLayer; - OwnPtr<WebCore::TextureMapper> textureMapper; -#endif - -#if ENABLE(ORIENTATION_EVENTS) && ENABLE(DEVICE_ORIENTATION) - QtMobility::QOrientationSensor m_orientation; -#endif -}; - -class QWebHitTestResultPrivate { -public: - QWebHitTestResultPrivate() : isContentEditable(false), isContentSelected(false), isScrollBar(false) {} - QWebHitTestResultPrivate(const WebCore::HitTestResult &hitTest); - - QPoint pos; - QRect boundingRect; - QWebElement enclosingBlock; - QString title; - QString linkText; - QUrl linkUrl; - QString linkTitle; - QPointer<QWebFrame> linkTargetFrame; - QWebElement linkElement; - QString alternateText; - QUrl imageUrl; - QPixmap pixmap; - bool isContentEditable; - bool isContentSelected; - bool isScrollBar; - QPointer<QWebFrame> frame; - RefPtr<WebCore::Node> innerNode; - RefPtr<WebCore::Node> innerNonSharedNode; -}; - -#endif diff --git a/WebKit/qt/Api/qwebhistory.cpp b/WebKit/qt/Api/qwebhistory.cpp deleted file mode 100644 index a9761de..0000000 --- a/WebKit/qt/Api/qwebhistory.cpp +++ /dev/null @@ -1,560 +0,0 @@ -/* - Copyright (C) 2008 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 "qwebhistory.h" -#include "qwebhistory_p.h" -#include "qwebframe_p.h" - -#include "BackForwardListImpl.h" -#include "PlatformString.h" -#include "Image.h" -#include "KURL.h" -#include "Page.h" -#include "PageGroup.h" - -#include <QSharedData> -#include <QDebug> - -enum { - InitialHistoryVersion = 1, - DefaultHistoryVersion = InitialHistoryVersion -}; - -/*! - \class QWebHistoryItem - \since 4.4 - \brief The QWebHistoryItem class represents one item in the history of a QWebPage - - \inmodule QtWebKit - - Each QWebHistoryItem instance represents an entry in the history stack of a Web page, - containing information about the page, its location, and when it was last visited. - - The following table shows the properties of the page held by the history item, and - the functions used to access them. - - \table - \header \o Function \o Description - \row \o title() \o The page title. - \row \o url() \o The location of the page. - \row \o originalUrl() \o The URL used to access the page. - \row \o lastVisited() \o The date and time of the user's last visit to the page. - \row \o icon() \o The icon associated with the page that was provided by the server. - \row \o userData() \o The user specific data that was stored with the history item. - \endtable - - \note QWebHistoryItem objects are value based, but \e{explicitly shared}. Changing - a QWebHistoryItem instance by calling setUserData() will change all copies of that - instance. - - \sa QWebHistory, QWebPage::history(), QWebHistoryInterface -*/ - -/*! - Constructs a history item from \a other. The new item and \a other - will share their data, and modifying either this item or \a other will - modify both instances. -*/ -QWebHistoryItem::QWebHistoryItem(const QWebHistoryItem &other) - : d(other.d) -{ -} - -/*! - Assigns the \a other history item to this. This item and \a other - will share their data, and modifying either this item or \a other will - modify both instances. -*/ -QWebHistoryItem &QWebHistoryItem::operator=(const QWebHistoryItem &other) -{ - d = other.d; - return *this; -} - -/*! - Destroys the history item. -*/ -QWebHistoryItem::~QWebHistoryItem() -{ -} - -/*! - Returns the original URL associated with the history item. - - \sa url() -*/ -QUrl QWebHistoryItem::originalUrl() const -{ - if (d->item) - return d->item->originalURL(); - return QUrl(); -} - - -/*! - Returns the URL associated with the history item. - - \sa originalUrl(), title(), lastVisited() -*/ -QUrl QWebHistoryItem::url() const -{ - if (d->item) - return d->item->url(); - return QUrl(); -} - - -/*! - Returns the title of the page associated with the history item. - - \sa icon(), url(), lastVisited() -*/ -QString QWebHistoryItem::title() const -{ - if (d->item) - return d->item->title(); - return QString(); -} - - -/*! - Returns the date and time that the page associated with the item was last visited. - - \sa title(), icon(), url() -*/ -QDateTime QWebHistoryItem::lastVisited() const -{ - //FIXME : this will be wrong unless we correctly set lastVisitedTime ourselves - if (d->item) - return QDateTime::fromTime_t((uint)d->item->lastVisitedTime()); - return QDateTime(); -} - - -/*! - Returns the icon associated with the history item. - - \sa title(), url(), lastVisited() -*/ -QIcon QWebHistoryItem::icon() const -{ - if (d->item) - return *d->item->icon()->nativeImageForCurrentFrame(); - return QIcon(); -} - -/*! - \since 4.5 - Returns the user specific data that was stored with the history item. - - \sa setUserData() -*/ -QVariant QWebHistoryItem::userData() const -{ - if (d->item) - return d->item->userData(); - return QVariant(); -} - -/*! - \since 4.5 - - Stores user specific data \a userData with the history item. - - \note All copies of this item will be modified. - - \sa userData() -*/ -void QWebHistoryItem::setUserData(const QVariant& userData) -{ - if (d->item) - d->item->setUserData(userData); -} - -/*!* - \internal -*/ -QWebHistoryItem::QWebHistoryItem(QWebHistoryItemPrivate *priv) -{ - d = priv; -} - -/*! - \since 4.5 - Returns whether this is a valid history item. -*/ -bool QWebHistoryItem::isValid() const -{ - return d->item; -} - -/*! - \class QWebHistory - \since 4.4 - \brief The QWebHistory class represents the history of a QWebPage - - \inmodule QtWebKit - - Each QWebPage instance contains a history of visited pages that can be accessed - by QWebPage::history(). QWebHistory represents this history and makes it possible - to navigate it. - - The history uses the concept of a \e{current item}, dividing the pages visited - into those that can be visited by navigating \e back and \e forward using the - back() and forward() functions. The current item can be obtained by calling - currentItem(), and an arbitrary item in the history can be made the current - item by passing it to goToItem(). - - A list of items describing the pages that can be visited by going back can be - obtained by calling the backItems() function; similarly, items describing the - pages ahead of the current page can be obtained with the forwardItems() function. - The total list of items is obtained with the items() function. - - Just as with containers, functions are available to examine the history in terms - of a list. Arbitrary items in the history can be obtained with itemAt(), the total - number of items is given by count(), and the history can be cleared with the - clear() function. - - QWebHistory's state can be saved to a QDataStream using the >> operator and loaded - by using the << operator. - - \sa QWebHistoryItem, QWebHistoryInterface, QWebPage -*/ - - -QWebHistory::QWebHistory() - : d(0) -{ -} - -QWebHistory::~QWebHistory() -{ - delete d; -} - -/*! - Clears the history. - - \sa count(), items() -*/ -void QWebHistory::clear() -{ - //shortcut to private BackForwardListImpl - WebCore::BackForwardListImpl* lst = d->lst; - - //clear visited links - WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(lst)->page(); - if (page && page->groupPtr()) - page->groupPtr()->removeVisitedLinks(); - - //if count() == 0 then just return - if (!lst->entries().size()) - return; - - RefPtr<WebCore::HistoryItem> current = lst->currentItem(); - int capacity = lst->capacity(); - lst->setCapacity(0); - - lst->setCapacity(capacity); //revert capacity - lst->addItem(current.get()); //insert old current item - lst->goToItem(current.get()); //and set it as current again - - d->page()->updateNavigationActions(); -} - -/*! - Returns a list of all items currently in the history. - - \sa count(), clear() -*/ -QList<QWebHistoryItem> QWebHistory::items() const -{ - const WebCore::HistoryItemVector &items = d->lst->entries(); - - QList<QWebHistoryItem> ret; - for (unsigned i = 0; i < items.size(); ++i) { - QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get()); - ret.append(QWebHistoryItem(priv)); - } - return ret; -} - -/*! - Returns the list of items in the backwards history list. - At most \a maxItems entries are returned. - - \sa forwardItems() -*/ -QList<QWebHistoryItem> QWebHistory::backItems(int maxItems) const -{ - WebCore::HistoryItemVector items(maxItems); - d->lst->backListWithLimit(maxItems, items); - - QList<QWebHistoryItem> ret; - for (unsigned i = 0; i < items.size(); ++i) { - QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get()); - ret.append(QWebHistoryItem(priv)); - } - return ret; -} - -/*! - Returns the list of items in the forward history list. - At most \a maxItems entries are returned. - - \sa backItems() -*/ -QList<QWebHistoryItem> QWebHistory::forwardItems(int maxItems) const -{ - WebCore::HistoryItemVector items(maxItems); - d->lst->forwardListWithLimit(maxItems, items); - - QList<QWebHistoryItem> ret; - for (unsigned i = 0; i < items.size(); ++i) { - QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(items[i].get()); - ret.append(QWebHistoryItem(priv)); - } - return ret; -} - -/*! - Returns true if there is an item preceding the current item in the history; - otherwise returns false. - - \sa canGoForward() -*/ -bool QWebHistory::canGoBack() const -{ - return d->lst->backListCount() > 0; -} - -/*! - Returns true if we have an item to go forward to; otherwise returns false. - - \sa canGoBack() -*/ -bool QWebHistory::canGoForward() const -{ - return d->lst->forwardListCount() > 0; -} - -/*! - Set the current item to be the previous item in the history and goes to the - corresponding page; i.e., goes back one history item. - - \sa forward(), goToItem() -*/ -void QWebHistory::back() -{ - if (canGoBack()) { - WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page(); - page->goToItem(d->lst->backItem(), WebCore::FrameLoadTypeIndexedBackForward); - } -} - -/*! - Sets the current item to be the next item in the history and goes to the - corresponding page; i.e., goes forward one history item. - - \sa back(), goToItem() -*/ -void QWebHistory::forward() -{ - if (canGoForward()) { - WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page(); - page->goToItem(d->lst->forwardItem(), WebCore::FrameLoadTypeIndexedBackForward); - } -} - -/*! - Sets the current item to be the specified \a item in the history and goes to the page. - - \sa back(), forward() -*/ -void QWebHistory::goToItem(const QWebHistoryItem &item) -{ - WebCore::Page* page = static_cast<WebCore::BackForwardListImpl*>(d->lst)->page(); - page->goToItem(item.d->item, WebCore::FrameLoadTypeIndexedBackForward); -} - -/*! - Returns the item before the current item in the history. -*/ -QWebHistoryItem QWebHistory::backItem() const -{ - WebCore::HistoryItem *i = d->lst->backItem(); - QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i); - return QWebHistoryItem(priv); -} - -/*! - Returns the current item in the history. -*/ -QWebHistoryItem QWebHistory::currentItem() const -{ - WebCore::HistoryItem *i = d->lst->currentItem(); - QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i); - return QWebHistoryItem(priv); -} - -/*! - Returns the item after the current item in the history. -*/ -QWebHistoryItem QWebHistory::forwardItem() const -{ - WebCore::HistoryItem *i = d->lst->forwardItem(); - QWebHistoryItemPrivate *priv = new QWebHistoryItemPrivate(i); - return QWebHistoryItem(priv); -} - -/*! - \since 4.5 - Returns the index of the current item in history. -*/ -int QWebHistory::currentItemIndex() const -{ - return d->lst->backListCount(); -} - -/*! - Returns the item at index \a i in the history. -*/ -QWebHistoryItem QWebHistory::itemAt(int i) const -{ - QWebHistoryItemPrivate *priv; - if (i < 0 || i >= count()) - priv = new QWebHistoryItemPrivate(0); - else { - WebCore::HistoryItem *item = d->lst->entries()[i].get(); - priv = new QWebHistoryItemPrivate(item); - } - return QWebHistoryItem(priv); -} - -/*! - Returns the total number of items in the history. -*/ -int QWebHistory::count() const -{ - return d->lst->entries().size(); -} - -/*! - \since 4.5 - Returns the maximum number of items in the history. - - \sa setMaximumItemCount() -*/ -int QWebHistory::maximumItemCount() const -{ - return d->lst->capacity(); -} - -/*! - \since 4.5 - Sets the maximum number of items in the history to \a count. - - \sa maximumItemCount() -*/ -void QWebHistory::setMaximumItemCount(int count) -{ - d->lst->setCapacity(count); -} - -/*! - \since 4.6 - \fn QDataStream& operator<<(QDataStream& stream, const QWebHistory& history) - \relates QWebHistory - - \brief The operator<< function streams a history into a data stream. - - It saves the \a history into the specified \a stream. -*/ - -QDataStream& operator<<(QDataStream& target, const QWebHistory& history) -{ - QWebHistoryPrivate* d = history.d; - - int version = DefaultHistoryVersion; - - target << version; - target << history.count() << history.currentItemIndex(); - - const WebCore::HistoryItemVector &items = d->lst->entries(); - for (unsigned i = 0; i < items.size(); i++) - items[i].get()->saveState(target, version); - - return target; -} - -/*! - \fn QDataStream& operator>>(QDataStream& stream, QWebHistory& history) - \relates QWebHistory - \since 4.6 - - \brief The operator>> function loads a history from a data stream. - - Loads a QWebHistory from the specified \a stream into the given \a history. -*/ - -QDataStream& operator>>(QDataStream& source, QWebHistory& history) -{ - QWebHistoryPrivate* d = history.d; - - int version; - - source >> version; - - if (version == 1) { - int count; - int currentIndex; - source >> count >> currentIndex; - - history.clear(); - // only if there are elements - if (count) { - // after clear() is new clear HistoryItem (at the end we had to remove it) - WebCore::HistoryItem* nullItem = d->lst->currentItem(); - for (int i = 0; i < count; i++) { - WTF::PassRefPtr<WebCore::HistoryItem> item = WebCore::HistoryItem::create(); - item->restoreState(source, version); - d->lst->addItem(item); - } - d->lst->removeItem(nullItem); - // Update the HistoryController. - static_cast<WebCore::BackForwardListImpl*>(history.d->lst)->page()->mainFrame()->loader()->history()->setCurrentItem(history.d->lst->entries()[currentIndex].get()); - history.goToItem(history.itemAt(currentIndex)); - } - } - - d->page()->updateNavigationActions(); - - return source; -} - -QWebPagePrivate* QWebHistoryPrivate::page() -{ - return QWebFramePrivate::kit(static_cast<WebCore::BackForwardListImpl*>(lst)->page()->mainFrame())->page()->handle(); -} - -WebCore::HistoryItem* QWebHistoryItemPrivate::core(const QWebHistoryItem* q) -{ - return q->d->item; -} diff --git a/WebKit/qt/Api/qwebhistory.h b/WebKit/qt/Api/qwebhistory.h deleted file mode 100644 index 3456784..0000000 --- a/WebKit/qt/Api/qwebhistory.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef QWEBHISTORY_H -#define QWEBHISTORY_H - -#include <QtCore/qurl.h> -#include <QtCore/qstring.h> -#include <QtGui/qicon.h> -#include <QtCore/qdatetime.h> -#include <QtCore/qshareddata.h> - -#include "qwebkitglobal.h" - -class QWebPage; - -namespace WebCore { - class FrameLoaderClientQt; -} - -class QWebHistoryItemPrivate; - -class QWEBKIT_EXPORT QWebHistoryItem { -public: - QWebHistoryItem(const QWebHistoryItem &other); - QWebHistoryItem &operator=(const QWebHistoryItem &other); - ~QWebHistoryItem(); - - QUrl originalUrl() const; - QUrl url() const; - - QString title() const; - QDateTime lastVisited() const; - - QIcon icon() const; - - QVariant userData() const; - void setUserData(const QVariant& userData); - - bool isValid() const; - -private: - QWebHistoryItem(QWebHistoryItemPrivate *priv); - friend class QWebHistory; - friend class QWebPage; - friend class WebCore::FrameLoaderClientQt; - friend class QWebHistoryItemPrivate; - friend class DumpRenderTreeSupportQt; - //friend QDataStream & operator<<(QDataStream& out,const QWebHistoryItem& hist); - //friend QDataStream & operator>>(QDataStream& in,QWebHistoryItem& hist); - QExplicitlySharedDataPointer<QWebHistoryItemPrivate> d; -}; - - -class QWebHistoryPrivate; -class QWEBKIT_EXPORT QWebHistory { -public: - void clear(); - - QList<QWebHistoryItem> items() const; - QList<QWebHistoryItem> backItems(int maxItems) const; - QList<QWebHistoryItem> forwardItems(int maxItems) const; - - bool canGoBack() const; - bool canGoForward() const; - - void back(); - void forward(); - void goToItem(const QWebHistoryItem &item); - - QWebHistoryItem backItem() const; - QWebHistoryItem currentItem() const; - QWebHistoryItem forwardItem() const; - QWebHistoryItem itemAt(int i) const; - - int currentItemIndex() const; - - int count() const; - - int maximumItemCount() const; - void setMaximumItemCount(int count); - -private: - QWebHistory(); - ~QWebHistory(); - - friend class QWebPage; - friend class QWebPagePrivate; - friend QWEBKIT_EXPORT QDataStream& operator>>(QDataStream&, QWebHistory&); - friend QWEBKIT_EXPORT QDataStream& operator<<(QDataStream&, const QWebHistory&); - - Q_DISABLE_COPY(QWebHistory) - - QWebHistoryPrivate *d; -}; - -QWEBKIT_EXPORT QDataStream& operator<<(QDataStream& stream, const QWebHistory& history); -QWEBKIT_EXPORT QDataStream& operator>>(QDataStream& stream, QWebHistory& history); - -#endif diff --git a/WebKit/qt/Api/qwebhistory_p.h b/WebKit/qt/Api/qwebhistory_p.h deleted file mode 100644 index 44793b9..0000000 --- a/WebKit/qt/Api/qwebhistory_p.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef QWEBHISTORY_P_H -#define QWEBHISTORY_P_H - -#include "BackForwardListImpl.h" -#include "HistoryItem.h" -#include <QtCore/qglobal.h> -#include <QtCore/qshareddata.h> - -class QWebPagePrivate; - -class Q_AUTOTEST_EXPORT QWebHistoryItemPrivate : public QSharedData { -public: - static QExplicitlySharedDataPointer<QWebHistoryItemPrivate> get(QWebHistoryItem* q) - { - return q->d; - } - QWebHistoryItemPrivate(WebCore::HistoryItem* i) - { - if (i) - i->ref(); - item = i; - } - ~QWebHistoryItemPrivate() - { - if (item) - item->deref(); - } - - static WebCore::HistoryItem* core(const QWebHistoryItem* q); - - WebCore::HistoryItem* item; -}; - -class QWebHistoryPrivate : public QSharedData { -public: - QWebHistoryPrivate(WebCore::BackForwardListImpl* l) - { - l->ref(); - lst = l; - } - ~QWebHistoryPrivate() - { - lst->deref(); - } - - QWebPagePrivate* page(); - - WebCore::BackForwardListImpl* lst; -}; - - -#endif diff --git a/WebKit/qt/Api/qwebhistoryinterface.cpp b/WebKit/qt/Api/qwebhistoryinterface.cpp deleted file mode 100644 index 61cf5af..0000000 --- a/WebKit/qt/Api/qwebhistoryinterface.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/* - Copyright (C) 2007 Staikos Computing Services Inc. <info@staikos.net> - - 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. - - This class provides all functionality needed for tracking global history. -*/ - -#include "config.h" -#include "qwebhistoryinterface.h" - -#include <QCoreApplication> - -#include "PageGroup.h" -#include "PlatformString.h" - - -static QWebHistoryInterface* default_interface; - -static bool gRoutineAdded; - -static void gCleanupInterface() -{ - if (default_interface && !default_interface->parent()) - delete default_interface; - default_interface = 0; -} - -/*! - Sets a new default interface, \a defaultInterface, that will be used by all of WebKit - to keep track of visited links. - - If an interface without a parent has already been set, the old interface will be deleted. - When the application exists QWebHistoryInterface will automatically delete the - \a defaultInterface if it does not have a parent. -*/ -void QWebHistoryInterface::setDefaultInterface(QWebHistoryInterface* defaultInterface) -{ - if (default_interface == defaultInterface) - return; - - if (default_interface && !default_interface->parent()) - delete default_interface; - - default_interface = defaultInterface; - WebCore::PageGroup::removeAllVisitedLinks(); - - //### enable after the introduction of a version - //WebCore::PageGroup::setShouldTrackVisitedLinks(true); - - if (!gRoutineAdded) { - qAddPostRoutine(gCleanupInterface); - gRoutineAdded = true; - } -} - -/*! - Returns the default interface that will be used by WebKit. If no default interface has been set, - Webkit will not keep track of visited links and a null pointer will be returned. - \sa setDefaultInterface -*/ -QWebHistoryInterface* QWebHistoryInterface::defaultInterface() -{ - return default_interface; -} - -/*! - \class QWebHistoryInterface - \since 4.4 - \brief The QWebHistoryInterface class provides an interface to implement link history. - - \inmodule QtWebKit - - The QWebHistoryInterface is an interface that can be used to - keep track of visited links. It contains two pure virtual methods that - are called by the WebKit engine: addHistoryEntry() is used to add - urls that have been visited to the interface, while - historyContains() is used to query whether the given url has been - visited by the user. By default the QWebHistoryInterface is not set, so WebKit does not keep - track of visited links. - - \note The history tracked by QWebHistoryInterface is not specific to an instance of QWebPage - but applies to all pages. -*/ - -/*! - Constructs a new QWebHistoryInterface with parent \a parent. -*/ -QWebHistoryInterface::QWebHistoryInterface(QObject* parent) - : QObject(parent) -{ -} - -/*! - Destroys the interface. If this is currently the default interface it will be unset. -*/ -QWebHistoryInterface::~QWebHistoryInterface() -{ - if (default_interface == this) - default_interface = 0; -} - -/*! - \fn bool QWebHistoryInterface::historyContains(const QString &url) const = 0 - - Called by the WebKit engine to query whether a certain \a url has been visited by the user already. - Returns true if the \a url is part of the history of visited links; otherwise returns false. -*/ - -/*! - \fn void QWebHistoryInterface::addHistoryEntry(const QString &url) = 0 - - Called by WebKit to add another \a url to the list of visited pages. -*/ diff --git a/WebKit/qt/Api/qwebhistoryinterface.h b/WebKit/qt/Api/qwebhistoryinterface.h deleted file mode 100644 index a49c586..0000000 --- a/WebKit/qt/Api/qwebhistoryinterface.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - Copyright (C) 2007 Staikos Computing Services, Inc. <info@staikos.net> - - 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. - - This class provides all functionality needed for tracking global history. -*/ - -#ifndef QWEBHISTORYINTERFACE_H -#define QWEBHISTORYINTERFACE_H - -#include <QtCore/qobject.h> - -#include "qwebkitglobal.h" - -class QWEBKIT_EXPORT QWebHistoryInterface : public QObject { - Q_OBJECT -public: - QWebHistoryInterface(QObject *parent = 0); - ~QWebHistoryInterface(); - - static void setDefaultInterface(QWebHistoryInterface *defaultInterface); - static QWebHistoryInterface *defaultInterface(); - - virtual bool historyContains(const QString &url) const = 0; - virtual void addHistoryEntry(const QString &url) = 0; -}; - -#endif diff --git a/WebKit/qt/Api/qwebinspector.cpp b/WebKit/qt/Api/qwebinspector.cpp deleted file mode 100644 index 6706f2a..0000000 --- a/WebKit/qt/Api/qwebinspector.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/* - Copyright (C) 2009 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 "qwebinspector.h" - -#include "Element.h" -#include "InspectorController.h" -#include "qwebelement.h" -#include "qwebinspector_p.h" -#include "qwebpage_p.h" - -#include <QResizeEvent> - -/*! - \class QWebInspector - \since 4.6 - \inmodule QtWebKit - \brief The QWebInspector class allows the placement and control of a - QWebPage's inspector. - The inspector can display a page's hierarchy, its loading statistics and - the current state of its individual elements. It is mostly used by web - developers. - - The QWebPage to be inspected must be specified using the setPage() method. - - A typical use of QWebInspector follows: - - \snippet webkitsnippets/qtwebkit_qwebinspector_snippet.cpp 0 - - A QWebInspector can be made visible either programmatically using - setVisible(), or by the user through the attached QWebPage's context - menu. - - \note A QWebInspector will display a blank widget if either: - \list - \o page() is null - \o QWebSettings::DeveloperExtrasEnabled is false - \endlist - - \section1 Resources - - This class acts mostly as a container and a controller for the inspector. - Most of the resources needed by the inspector are owned by the associated - QWebPage and are allocated the first time that: - \list - \o an element is inspected - \o the QWebInspector is shown. - \endlist - - \section1 Inspector configuration persistence - - The inspector allows the user to configure some options through its - user interface (e.g. the resource tracking "Always enable" option). - These settings will be persisted automatically by QtWebKit only if - your application previously called QCoreApplication::setOrganizationName() - and QCoreApplication::setApplicationName(). - See QSettings's default constructor documentation for an explanation - of why this is necessary. -*/ - -/*! - Constructs an unbound QWebInspector with \a parent as its parent. -*/ -QWebInspector::QWebInspector(QWidget* parent) - : QWidget(parent) - , d(new QWebInspectorPrivate(this)) -{ -} - -/*! - Destroys the inspector. -*/ -QWebInspector::~QWebInspector() -{ - // Remove association principally to prevent deleting a child frontend - setPage(0); - delete d; - d = 0; -} - -/*! - Bind this inspector to the QWebPage to be inspected. - - \bold {Notes:} - \list - \o There can only be one QWebInspector associated with a QWebPage - and vice versa. - \o Calling this method with a null \a page will break the current association, if any. - \o If \a page is already associated to another QWebInspector, the association - will be replaced and the previous QWebInspector will become unbound - \endlist - - \sa page() -*/ -void QWebInspector::setPage(QWebPage* page) -{ - if (d->page) { - // Break currentPage-->this - d->page->d->setInspector(0); - } - if (page && page->d->inspector && page->d->inspector != this) { - // Break newPage<->newPageCurrentInspector - page->d->inspector->setPage(0); - } - - d->page = page; - - if (page) { - // Setup the reciprocal association - page->d->setInspector(this); - } -} - -/*! - Returns the inspected QWebPage. - If no web page is currently associated, a null pointer is returned. -*/ -QWebPage* QWebInspector::page() const -{ - return d->page; -} - -/*! \reimp */ -QSize QWebInspector::sizeHint() const -{ - return QSize(450, 300); -} - -/*! \reimp */ -bool QWebInspector::event(QEvent* ev) -{ - return QWidget::event(ev); -} - -/*! \reimp */ -void QWebInspector::resizeEvent(QResizeEvent* event) -{ - d->adjustFrontendSize(event->size()); -} - -/*! \reimp */ -void QWebInspector::showEvent(QShowEvent* event) -{ -#if ENABLE(INSPECTOR) - // Allows QWebInspector::show() to init the inspector. - if (d->page) - d->page->d->inspectorController()->show(); -#endif -} - -/*! \reimp */ -void QWebInspector::hideEvent(QHideEvent* event) -{ -#if ENABLE(INSPECTOR) - if (d->page) - d->page->d->inspectorController()->close(); -#endif -} - -/*! \reimp */ -void QWebInspector::closeEvent(QCloseEvent* event) -{ -#if ENABLE(INSPECTOR) - if (d->page) - d->page->d->inspectorController()->close(); -#endif -} - -/*! \internal */ -void QWebInspectorPrivate::setFrontend(QWidget* newFrontend) -{ - if (frontend) - frontend->setParent(0); - - frontend = newFrontend; - - if (frontend) { - frontend->setParent(q); - frontend->show(); - adjustFrontendSize(q->size()); - } -} - -/*! - * \internal - */ -void QWebInspectorPrivate::attachAndReplaceRemoteFrontend(QObject* newRemoteFrontend) -{ - if (remoteFrontend) - remoteFrontend->setParent(0); - - remoteFrontend = newRemoteFrontend; - - if (remoteFrontend) - remoteFrontend->setParent(q); -} - -/*! - * \internal - */ -void QWebInspectorPrivate::detachRemoteFrontend() -{ - if (remoteFrontend) { - remoteFrontend->deleteLater(); - remoteFrontend = 0; - } -} - -void QWebInspectorPrivate::adjustFrontendSize(const QSize& size) -{ - if (frontend) - frontend->resize(size); -} - diff --git a/WebKit/qt/Api/qwebinspector.h b/WebKit/qt/Api/qwebinspector.h deleted file mode 100644 index f192e92..0000000 --- a/WebKit/qt/Api/qwebinspector.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright (C) 2009 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. -*/ - -#ifndef QWEBINSPECTOR_H -#define QWEBINSPECTOR_H - -#include "qwebkitglobal.h" -#include "qwebpage.h" - -#include "qwebview.h" - -class QWebInspectorPrivate; - -class QWEBKIT_EXPORT QWebInspector : public QWidget { - Q_OBJECT -public: - QWebInspector(QWidget* parent = 0); - ~QWebInspector(); - - void setPage(QWebPage* page); - QWebPage* page() const; - - QSize sizeHint() const; - bool event(QEvent*); - -protected: - void resizeEvent(QResizeEvent* event); - void showEvent(QShowEvent* event); - void hideEvent(QHideEvent* event); - void closeEvent(QCloseEvent* event); - -private: - QWebInspectorPrivate* d; - - friend class QWebInspectorPrivate; - friend class QWebPage; - friend class QWebPagePrivate; - friend class WebCore::InspectorClientQt; - friend class WebCore::InspectorFrontendClientQt; -}; -#endif diff --git a/WebKit/qt/Api/qwebinspector_p.h b/WebKit/qt/Api/qwebinspector_p.h deleted file mode 100644 index 3099eb1..0000000 --- a/WebKit/qt/Api/qwebinspector_p.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright (C) 2008, 2009 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. -*/ - -#ifndef QWEBINSPECTOR_P_H -#define QWEBINSPECTOR_P_H - -QT_BEGIN_NAMESPACE -class QSize; -class QWidget; -QT_END_NAMESPACE -class QWebInspector; -class QWebPage; - -class QWebInspectorPrivate { -public: - QWebInspectorPrivate(QWebInspector* qq) - : q(qq) - , page(0) - , frontend(0) - , remoteFrontend(0) - {} - - void setFrontend(QWidget* newFrontend); - void attachAndReplaceRemoteFrontend(QObject* newRemoteFrontend); - void detachRemoteFrontend(); - void adjustFrontendSize(const QSize& size); - - QWebInspector* q; - QWebPage* page; - QWidget* frontend; - QObject* remoteFrontend; -}; - -#endif diff --git a/WebKit/qt/Api/qwebkitglobal.h b/WebKit/qt/Api/qwebkitglobal.h deleted file mode 100644 index 7ee56de..0000000 --- a/WebKit/qt/Api/qwebkitglobal.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef QWEBKITGLOBAL_H -#define QWEBKITGLOBAL_H - -#include <QtCore/qglobal.h> - -#define QTWEBKIT_VERSION_STR "2.2.0" -// QTWEBKIT_VERSION is (major << 16) + (minor << 8) + patch. Similar to Qt. -#define QTWEBKIT_VERSION 0x020200 -// Use: #if (QTWEBKIT_VERSION >= QTWEBKIT_VERSION_CHECK(2, 0, 0)). Similar to Qt. -#define QTWEBKIT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch)) - -#if defined(QT_MAKEDLL) /* create a Qt DLL library */ -# if defined(BUILDING_WEBKIT) -# define QWEBKIT_EXPORT Q_DECL_EXPORT -# else -# define QWEBKIT_EXPORT Q_DECL_IMPORT -# endif -#elif defined(QT_DLL) /* use a Qt DLL library */ -# define QWEBKIT_EXPORT Q_DECL_IMPORT -#endif - -#if !defined(QWEBKIT_EXPORT) -# if defined(QT_SHARED) -# define QWEBKIT_EXPORT Q_DECL_EXPORT -# else -# define QWEBKIT_EXPORT -# endif -#endif - -#endif // QWEBKITGLOBAL_H diff --git a/WebKit/qt/Api/qwebkitplatformplugin.h b/WebKit/qt/Api/qwebkitplatformplugin.h deleted file mode 100644 index b8cc984..0000000 --- a/WebKit/qt/Api/qwebkitplatformplugin.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (C) 2010 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. - * - */ - -#ifndef QWEBKITPLATFORMPLUGIN_H -#define QWEBKITPLATFORMPLUGIN_H - -/* - * Warning: The contents of this file is not part of the public QtWebKit API - * and may be changed from version to version or even be completely removed. -*/ - -#include <QObject> -#include <QUrl> - -class QWebSelectData -{ -public: - virtual ~QWebSelectData() {} - - enum ItemType { Option, Group, Separator }; - - virtual ItemType itemType(int) const = 0; - virtual QString itemText(int index) const = 0; - virtual QString itemToolTip(int index) const = 0; - virtual bool itemIsEnabled(int index) const = 0; - virtual bool itemIsSelected(int index) const = 0; - virtual int itemCount() const = 0; - virtual bool multiple() const = 0; -}; - -class QWebSelectMethod : public QObject -{ - Q_OBJECT -public: - virtual ~QWebSelectMethod() {} - - virtual void show(const QWebSelectData&) = 0; - virtual void hide() = 0; - -Q_SIGNALS: - void selectItem(int index, bool allowMultiplySelections, bool shift); - void didHide(); -}; - -class QWebNotificationData -{ -public: - virtual ~QWebNotificationData() {} - - virtual const QString title() const = 0; - virtual const QString message() const = 0; - virtual const QByteArray iconData() const = 0; - virtual const QUrl openerPageUrl() const = 0; -}; - -class QWebNotificationPresenter : public QObject -{ - Q_OBJECT -public: - QWebNotificationPresenter() {} - virtual ~QWebNotificationPresenter() {} - - virtual void showNotification(const QWebNotificationData*) = 0; - -Q_SIGNALS: - void notificationClosed(); - void notificationClicked(); -}; - -class QWebHapticFeedbackPlayer: public QObject -{ - Q_OBJECT -public: - QWebHapticFeedbackPlayer() {} - virtual ~QWebHapticFeedbackPlayer() {} - - enum HapticStrength { - None, Weak, Medium, Strong - }; - - enum HapticEvent { - Press, Release - }; - - virtual void playHapticFeedback(const HapticEvent, const QString& hapticType, const HapticStrength) = 0; -}; - -class QWebTouchModifier : public QObject -{ - Q_OBJECT -public: - virtual ~QWebTouchModifier() {} - - enum PaddingDirection { - Up, Right, Down, Left - }; - - virtual unsigned hitTestPaddingForTouch(const PaddingDirection) const = 0; -}; - -class QWebKitPlatformPlugin -{ -public: - virtual ~QWebKitPlatformPlugin() {} - - enum Extension { - MultipleSelections, - Notifications, - Haptics, - TouchInteraction - }; - - virtual bool supportsExtension(Extension extension) const = 0; - virtual QObject* createExtension(Extension extension) const = 0; -}; - -QT_BEGIN_NAMESPACE -Q_DECLARE_INTERFACE(QWebKitPlatformPlugin, "com.nokia.Qt.WebKit.PlatformPlugin/1.6"); -QT_END_NAMESPACE - -#endif // QWEBKITPLATFORMPLUGIN_H diff --git a/WebKit/qt/Api/qwebkitversion.cpp b/WebKit/qt/Api/qwebkitversion.cpp deleted file mode 100644 index 181913b..0000000 --- a/WebKit/qt/Api/qwebkitversion.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* - Copyright (C) 2009 Robert Hogan <robert@roberthogan.net> - - 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 <qwebkitversion.h> -#include <WebKitVersion.h> - -/*! - \relates QWebPage - \since 4.6 - Returns the version number of WebKit at run-time as a string (for - example, "531.3"). - - This version is commonly used in WebKit based browsers as part - of the user agent string. Web servers and JavaScript might use - it to identify the presence of certain WebKit engine features - and behaviour. - - The evolution of this version is bound to the releases of Apple's - Safari browser. For a version specific to the QtWebKit library, - see QTWEBKIT_VERSION - - \sa QWebPage::userAgentForUrl() -*/ -QString qWebKitVersion() -{ - return QString("%1.%2").arg(WEBKIT_MAJOR_VERSION).arg(WEBKIT_MINOR_VERSION); -} - -/*! - \relates QWebPage - \since 4.6 - Returns the 'major' version number of WebKit at run-time as an integer - (for example, 531). This is the version of WebKit the application - was compiled against. - - \sa qWebKitVersion() -*/ -int qWebKitMajorVersion() -{ - return WEBKIT_MAJOR_VERSION; -} - -/*! - \relates QWebPage - \since 4.6 - Returns the 'minor' version number of WebKit at run-time as an integer - (for example, 3). This is the version of WebKit the application - was compiled against. - - \sa qWebKitVersion() -*/ -int qWebKitMinorVersion() -{ - return WEBKIT_MINOR_VERSION; -} - -/*! - \macro QTWEBKIT_VERSION - \relates QWebPage - - This macro expands a numeric value of the form 0xMMNNPP (MM = - major, NN = minor, PP = patch) that specifies QtWebKit's version - number. For example, if you compile your application against QtWebKit - 2.1.2, the QTWEBKIT_VERSION macro will expand to 0x020102. - - You can use QTWEBKIT_VERSION to use the latest QtWebKit API where - available. - - \sa QT_VERSION -*/ - -/*! - \macro QTWEBKIT_VERSION_STR - \relates QWebPage - - This macro expands to a string that specifies QtWebKit's version number - (for example, "2.1.2"). This is the version against which the - application is compiled. - - \sa QTWEBKIT_VERSION -*/ - -/*! - \macro QTWEBKIT_VERSION_CHECK - \relates QWebPage - - Turns the major, minor and patch numbers of a version into an - integer, 0xMMNNPP (MM = major, NN = minor, PP = patch). This can - be compared with another similarly processed version id, for example - in a preprocessor statement: - - \code - #if QTWEBKIT_VERSION >= QTWEBKIT_VERSION_CHECK(2, 1, 0) - // code to use API new in QtWebKit 2.1.0 - #endif - \endcode -*/ diff --git a/WebKit/qt/Api/qwebkitversion.h b/WebKit/qt/Api/qwebkitversion.h deleted file mode 100644 index de79dd1..0000000 --- a/WebKit/qt/Api/qwebkitversion.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - Copyright (C) 2009 Robert Hogan <robert@roberthogan.net> - - 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 <QtCore/qstring.h> - -#ifndef qwebkitversion_h -#define qwebkitversion_h - -#include <QtCore/qstring.h> -#include "qwebkitglobal.h" - -QWEBKIT_EXPORT QString qWebKitVersion(); -QWEBKIT_EXPORT int qWebKitMajorVersion(); -QWEBKIT_EXPORT int qWebKitMinorVersion(); - -#endif // qwebkitversion_h diff --git a/WebKit/qt/Api/qwebpage.cpp b/WebKit/qt/Api/qwebpage.cpp deleted file mode 100644 index eab514b..0000000 --- a/WebKit/qt/Api/qwebpage.cpp +++ /dev/null @@ -1,4197 +0,0 @@ -/* - Copyright (C) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies) - Copyright (C) 2007 Staikos Computing Services Inc. - Copyright (C) 2007 Apple 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 "qwebpage.h" - -#include "qwebview.h" -#include "qwebframe.h" -#include "qwebpage_p.h" -#include "qwebframe_p.h" -#include "qwebhistory.h" -#include "qwebhistory_p.h" -#include "qwebinspector.h" -#include "qwebinspector_p.h" -#include "qwebsettings.h" -#include "qwebkitplatformplugin.h" -#include "qwebkitversion.h" - -#include "CSSComputedStyleDeclaration.h" -#include "CSSParser.h" -#include "ApplicationCacheStorage.h" -#include "BackForwardListImpl.h" -#include "MemoryCache.h" -#include "Chrome.h" -#include "ChromeClientQt.h" -#include "ClientRect.h" -#include "ContextMenu.h" -#include "ContextMenuClientQt.h" -#include "ContextMenuController.h" -#include "DeviceMotionClientQt.h" -#include "DeviceOrientationClientQt.h" -#include "DocumentLoader.h" -#include "DragClientQt.h" -#include "DragController.h" -#include "DragData.h" -#include "Editor.h" -#include "EditorClientQt.h" -#include "FocusController.h" -#include "FormState.h" -#include "Frame.h" -#include "FrameLoadRequest.h" -#include "FrameLoader.h" -#include "FrameLoader.h" -#include "FrameLoaderClientQt.h" -#include "FrameTree.h" -#include "FrameView.h" -#include "GeolocationPermissionClientQt.h" -#include "HTMLFormElement.h" -#include "HTMLFrameOwnerElement.h" -#include "HTMLInputElement.h" -#include "HTMLNames.h" -#include "HashMap.h" -#include "HitTestResult.h" -#include "Image.h" -#include "InspectorClientQt.h" -#include "InspectorController.h" -#include "InspectorServerQt.h" -#include "KURL.h" -#include "LocalizedStrings.h" -#include "Logging.h" -#include "MIMETypeRegistry.h" -#include "NavigationAction.h" -#include "NetworkingContext.h" -#include "NodeList.h" -#include "NotificationPresenterClientQt.h" -#include "NotImplemented.h" -#include "Page.h" -#include "PageClientQt.h" -#include "PageGroup.h" -#include "Pasteboard.h" -#include "PlatformKeyboardEvent.h" -#include "PlatformTouchEvent.h" -#include "PlatformWheelEvent.h" -#include "PluginDatabase.h" -#include "PluginDatabase.h" -#include "PluginPackage.h" -#include "ProgressTracker.h" -#include "QtPlatformPlugin.h" -#include "RefPtr.h" -#include "RenderTextControl.h" -#include "SchemeRegistry.h" -#include "Scrollbar.h" -#include "SecurityOrigin.h" -#include "Settings.h" -#include "TextIterator.h" -#include "WebPlatformStrategies.h" -#include "WindowFeatures.h" -#include "WorkerThread.h" -#include "runtime/InitializeThreading.h" -#include "wtf/Threading.h" - -#include <QApplication> -#include <QBasicTimer> -#include <QBitArray> -#include <QDebug> -#include <QDesktopWidget> -#include <QDragEnterEvent> -#include <QDragLeaveEvent> -#include <QDragMoveEvent> -#include <QDropEvent> -#include <QFileDialog> -#include <QHttpRequestHeader> -#include <QInputDialog> -#include <QLocale> -#include <QMessageBox> -#include <QNetworkProxy> -#include <QUndoStack> -#include <QUrl> -#include <QPainter> -#include <QClipboard> -#include <QSslSocket> -#include <QStyle> -#include <QSysInfo> -#include <QTextCharFormat> -#include <QTextDocument> -#include <QTouchEvent> -#include <QNetworkAccessManager> -#include <QNetworkRequest> -#if defined(Q_WS_X11) -#include <QX11Info> -#endif - - -using namespace WebCore; - -// from text/qfont.cpp -QT_BEGIN_NAMESPACE -extern Q_GUI_EXPORT int qt_defaultDpi(); -QT_END_NAMESPACE - -bool QWebPagePrivate::drtRun = false; - -// Lookup table mapping QWebPage::WebActions to the associated Editor commands -static const char* editorCommandWebActions[] = -{ - 0, // OpenLink, - - 0, // OpenLinkInNewWindow, - 0, // OpenFrameInNewWindow, - - 0, // DownloadLinkToDisk, - 0, // CopyLinkToClipboard, - - 0, // OpenImageInNewWindow, - 0, // DownloadImageToDisk, - 0, // CopyImageToClipboard, - - 0, // Back, - 0, // Forward, - 0, // Stop, - 0, // Reload, - - "Cut", // Cut, - "Copy", // Copy, - "Paste", // Paste, - - "Undo", // Undo, - "Redo", // Redo, - "MoveForward", // MoveToNextChar, - "MoveBackward", // MoveToPreviousChar, - "MoveWordForward", // MoveToNextWord, - "MoveWordBackward", // MoveToPreviousWord, - "MoveDown", // MoveToNextLine, - "MoveUp", // MoveToPreviousLine, - "MoveToBeginningOfLine", // MoveToStartOfLine, - "MoveToEndOfLine", // MoveToEndOfLine, - "MoveToBeginningOfParagraph", // MoveToStartOfBlock, - "MoveToEndOfParagraph", // MoveToEndOfBlock, - "MoveToBeginningOfDocument", // MoveToStartOfDocument, - "MoveToEndOfDocument", // MoveToEndOfDocument, - "MoveForwardAndModifySelection", // SelectNextChar, - "MoveBackwardAndModifySelection", // SelectPreviousChar, - "MoveWordForwardAndModifySelection", // SelectNextWord, - "MoveWordBackwardAndModifySelection", // SelectPreviousWord, - "MoveDownAndModifySelection", // SelectNextLine, - "MoveUpAndModifySelection", // SelectPreviousLine, - "MoveToBeginningOfLineAndModifySelection", // SelectStartOfLine, - "MoveToEndOfLineAndModifySelection", // SelectEndOfLine, - "MoveToBeginningOfParagraphAndModifySelection", // SelectStartOfBlock, - "MoveToEndOfParagraphAndModifySelection", // SelectEndOfBlock, - "MoveToBeginningOfDocumentAndModifySelection", //SelectStartOfDocument, - "MoveToEndOfDocumentAndModifySelection", // SelectEndOfDocument, - "DeleteWordBackward", // DeleteStartOfWord, - "DeleteWordForward", // DeleteEndOfWord, - - 0, // SetTextDirectionDefault, - 0, // SetTextDirectionLeftToRight, - 0, // SetTextDirectionRightToLeft, - - "ToggleBold", // ToggleBold, - "ToggleItalic", // ToggleItalic, - "ToggleUnderline", // ToggleUnderline, - - 0, // InspectElement, - - "InsertNewline", // InsertParagraphSeparator - "InsertLineBreak", // InsertLineSeparator - - "SelectAll", // SelectAll - 0, // ReloadAndBypassCache, - - "PasteAndMatchStyle", // PasteAndMatchStyle - "RemoveFormat", // RemoveFormat - "Strikethrough", // ToggleStrikethrough, - "Subscript", // ToggleSubscript - "Superscript", // ToggleSuperscript - "InsertUnorderedList", // InsertUnorderedList - "InsertOrderedList", // InsertOrderedList - "Indent", // Indent - "Outdent", // Outdent, - - "AlignCenter", // AlignCenter, - "AlignJustified", // AlignJustified, - "AlignLeft", // AlignLeft, - "AlignRight", // AlignRight, - - 0 // WebActionCount -}; - -// Lookup the appropriate editor command to use for WebAction \a action -const char* QWebPagePrivate::editorCommandForWebActions(QWebPage::WebAction action) -{ - if ((action > QWebPage::NoWebAction) && (action < int(sizeof(editorCommandWebActions) / sizeof(const char*)))) - return editorCommandWebActions[action]; - return 0; -} - -static inline DragOperation dropActionToDragOp(Qt::DropActions actions) -{ - unsigned result = 0; - if (actions & Qt::CopyAction) - result |= DragOperationCopy; - // DragOperationgeneric represents InternetExplorer's equivalent of Move operation, - // hence it should be considered as "move" - if (actions & Qt::MoveAction) - result |= (DragOperationMove | DragOperationGeneric); - if (actions & Qt::LinkAction) - result |= DragOperationLink; - return (DragOperation)result; -} - -static inline Qt::DropAction dragOpToDropAction(unsigned actions) -{ - Qt::DropAction result = Qt::IgnoreAction; - if (actions & DragOperationCopy) - result = Qt::CopyAction; - else if (actions & DragOperationMove) - result = Qt::MoveAction; - // DragOperationgeneric represents InternetExplorer's equivalent of Move operation, - // hence it should be considered as "move" - else if (actions & DragOperationGeneric) - result = Qt::MoveAction; - else if (actions & DragOperationLink) - result = Qt::LinkAction; - return result; -} - -QWebPagePrivate::QWebPagePrivate(QWebPage *qq) - : q(qq) - , page(0) - , client(0) - , mainFrame(0) -#ifndef QT_NO_UNDOSTACK - , undoStack(0) -#endif - , insideOpenCall(false) - , m_totalBytes(0) - , m_bytesReceived() - , clickCausedFocus(false) - , networkManager(0) - , forwardUnsupportedContent(false) - , smartInsertDeleteEnabled(true) - , selectTrailingWhitespaceEnabled(false) - , linkPolicy(QWebPage::DontDelegateLinks) - , viewportSize(QSize(0, 0)) - , pixelRatio(1) -#ifndef QT_NO_CONTEXTMENU - , currentContextMenu(0) -#endif - , settings(0) - , editable(false) - , useFixedLayout(false) - , pluginFactory(0) - , inspectorFrontend(0) - , inspector(0) - , inspectorIsInternalOnly(false) -{ - WebCore::InitializeLoggingChannelsIfNecessary(); - ScriptController::initializeThreading(); - WTF::initializeMainThread(); - WebCore::SecurityOrigin::setLocalLoadPolicy(WebCore::SecurityOrigin::AllowLocalLoadsForLocalAndSubstituteData); -#if QT_VERSION < QT_VERSION_CHECK(4, 7, 0) - WebCore::Font::setCodePath(WebCore::Font::Complex); -#endif - - WebPlatformStrategies::initialize(); - - Page::PageClients pageClients; - pageClients.chromeClient = new ChromeClientQt(q); - pageClients.contextMenuClient = new ContextMenuClientQt(); - pageClients.editorClient = new EditorClientQt(q); - pageClients.dragClient = new DragClientQt(q); - pageClients.inspectorClient = new InspectorClientQt(q); -#if ENABLE(DEVICE_ORIENTATION) - pageClients.deviceOrientationClient = new DeviceOrientationClientQt(q); - pageClients.deviceMotionClient = new DeviceMotionClientQt(q); -#endif - page = new Page(pageClients); - - settings = new QWebSettings(page->settings()); - - history.d = new QWebHistoryPrivate(static_cast<WebCore::BackForwardListImpl*>(page->backForwardList())); - memset(actions, 0, sizeof(actions)); - - PageGroup::setShouldTrackVisitedLinks(true); - -#if ENABLE(NOTIFICATIONS) - NotificationPresenterClientQt::notificationPresenter()->addClient(); -#endif -} - -QWebPagePrivate::~QWebPagePrivate() -{ - if (inspector && inspectorIsInternalOnly) { - // Since we have to delete an internal inspector, - // call setInspector(0) directly to prevent potential crashes - setInspector(0); - } -#ifndef QT_NO_CONTEXTMENU - delete currentContextMenu; -#endif -#ifndef QT_NO_UNDOSTACK - delete undoStack; -#endif - delete settings; - delete page; - - if (inspector) - inspector->setPage(0); - -#if ENABLE(NOTIFICATIONS) - NotificationPresenterClientQt::notificationPresenter()->removeClient(); -#endif -} - -WebCore::ViewportArguments QWebPagePrivate::viewportArguments() -{ - return page ? page->viewportArguments() : WebCore::ViewportArguments(); -} - -WebCore::Page* QWebPagePrivate::core(const QWebPage* page) -{ - return page->d->page; -} - -QWebPagePrivate* QWebPagePrivate::priv(QWebPage* page) -{ - return page->d; -} - -bool QWebPagePrivate::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type) -{ - if (insideOpenCall - && frame == mainFrame) - return true; - return q->acceptNavigationRequest(frame, request, type); -} - -void QWebPagePrivate::createMainFrame() -{ - if (!mainFrame) { - QWebFrameData frameData(page); - mainFrame = new QWebFrame(q, &frameData); - - emit q->frameCreated(mainFrame); - } -} - -static QWebPage::WebAction webActionForContextMenuAction(WebCore::ContextMenuAction action) -{ - switch (action) { - case WebCore::ContextMenuItemTagOpenLink: return QWebPage::OpenLink; - case WebCore::ContextMenuItemTagOpenLinkInNewWindow: return QWebPage::OpenLinkInNewWindow; - case WebCore::ContextMenuItemTagDownloadLinkToDisk: return QWebPage::DownloadLinkToDisk; - case WebCore::ContextMenuItemTagCopyLinkToClipboard: return QWebPage::CopyLinkToClipboard; - case WebCore::ContextMenuItemTagOpenImageInNewWindow: return QWebPage::OpenImageInNewWindow; - case WebCore::ContextMenuItemTagDownloadImageToDisk: return QWebPage::DownloadImageToDisk; - case WebCore::ContextMenuItemTagCopyImageToClipboard: return QWebPage::CopyImageToClipboard; - case WebCore::ContextMenuItemTagOpenFrameInNewWindow: return QWebPage::OpenFrameInNewWindow; - case WebCore::ContextMenuItemTagCopy: return QWebPage::Copy; - case WebCore::ContextMenuItemTagGoBack: return QWebPage::Back; - case WebCore::ContextMenuItemTagGoForward: return QWebPage::Forward; - case WebCore::ContextMenuItemTagStop: return QWebPage::Stop; - case WebCore::ContextMenuItemTagReload: return QWebPage::Reload; - case WebCore::ContextMenuItemTagCut: return QWebPage::Cut; - case WebCore::ContextMenuItemTagPaste: return QWebPage::Paste; - case WebCore::ContextMenuItemTagDefaultDirection: return QWebPage::SetTextDirectionDefault; - case WebCore::ContextMenuItemTagLeftToRight: return QWebPage::SetTextDirectionLeftToRight; - case WebCore::ContextMenuItemTagRightToLeft: return QWebPage::SetTextDirectionRightToLeft; - case WebCore::ContextMenuItemTagBold: return QWebPage::ToggleBold; - case WebCore::ContextMenuItemTagItalic: return QWebPage::ToggleItalic; - case WebCore::ContextMenuItemTagUnderline: return QWebPage::ToggleUnderline; - case WebCore::ContextMenuItemTagSelectAll: return QWebPage::SelectAll; -#if ENABLE(INSPECTOR) - case WebCore::ContextMenuItemTagInspectElement: return QWebPage::InspectElement; -#endif - default: break; - } - return QWebPage::NoWebAction; -} - -#ifndef QT_NO_CONTEXTMENU -QMenu *QWebPagePrivate::createContextMenu(const WebCore::ContextMenu *webcoreMenu, - const QList<WebCore::ContextMenuItem> *items, QBitArray *visitedWebActions) -{ - if (!client) - return 0; - - QMenu* menu = new QMenu(client->ownerWidget()); - for (int i = 0; i < items->count(); ++i) { - const ContextMenuItem &item = items->at(i); - switch (item.type()) { - case WebCore::CheckableActionType: /* fall through */ - case WebCore::ActionType: { - QWebPage::WebAction action = webActionForContextMenuAction(item.action()); - QAction *a = q->action(action); - if (a) { - ContextMenuItem it(item); - page->contextMenuController()->checkOrEnableIfNeeded(it); - PlatformMenuItemDescription desc = it.releasePlatformDescription(); - a->setEnabled(desc.enabled); - a->setChecked(desc.checked); - a->setCheckable(item.type() == WebCore::CheckableActionType); - - menu->addAction(a); - visitedWebActions->setBit(action); - } - break; - } - case WebCore::SeparatorType: - menu->addSeparator(); - break; - case WebCore::SubmenuType: { - QMenu *subMenu = createContextMenu(webcoreMenu, item.platformSubMenu(), visitedWebActions); - - bool anyEnabledAction = false; - - QList<QAction *> actions = subMenu->actions(); - for (int i = 0; i < actions.count(); ++i) { - if (actions.at(i)->isVisible()) - anyEnabledAction |= actions.at(i)->isEnabled(); - } - - // don't show sub-menus with just disabled actions - if (anyEnabledAction) { - subMenu->setTitle(item.title()); - menu->addAction(subMenu->menuAction()); - } else - delete subMenu; - break; - } - } - } - return menu; -} -#endif // QT_NO_CONTEXTMENU - -#ifndef QT_NO_ACTION -void QWebPagePrivate::_q_webActionTriggered(bool checked) -{ - QAction *a = qobject_cast<QAction *>(q->sender()); - if (!a) - return; - QWebPage::WebAction action = static_cast<QWebPage::WebAction>(a->data().toInt()); - q->triggerAction(action, checked); -} -#endif // QT_NO_ACTION - -void QWebPagePrivate::_q_cleanupLeakMessages() -{ -#ifndef NDEBUG - // Need this to make leak messages accurate. - cache()->setCapacities(0, 0, 0); -#endif -} - -void QWebPagePrivate::updateAction(QWebPage::WebAction action) -{ -#ifdef QT_NO_ACTION - Q_UNUSED(action) -#else - QAction *a = actions[action]; - if (!a || !mainFrame) - return; - - WebCore::FrameLoader *loader = mainFrame->d->frame->loader(); - WebCore::Editor *editor = page->focusController()->focusedOrMainFrame()->editor(); - - bool enabled = a->isEnabled(); - bool checked = a->isChecked(); - - switch (action) { - case QWebPage::Back: - enabled = page->canGoBackOrForward(-1); - break; - case QWebPage::Forward: - enabled = page->canGoBackOrForward(1); - break; - case QWebPage::Stop: - enabled = loader->isLoading(); - break; - case QWebPage::Reload: - case QWebPage::ReloadAndBypassCache: - enabled = !loader->isLoading(); - break; -#ifndef QT_NO_UNDOSTACK - case QWebPage::Undo: - case QWebPage::Redo: - // those two are handled by QUndoStack - break; -#endif // QT_NO_UNDOSTACK - case QWebPage::SelectAll: // editor command is always enabled - break; - case QWebPage::SetTextDirectionDefault: - case QWebPage::SetTextDirectionLeftToRight: - case QWebPage::SetTextDirectionRightToLeft: - enabled = editor->canEdit(); - checked = false; - break; - default: { - // see if it's an editor command - const char* commandName = editorCommandForWebActions(action); - - // if it's an editor command, let it's logic determine state - if (commandName) { - Editor::Command command = editor->command(commandName); - enabled = command.isEnabled(); - if (enabled) - checked = command.state() != FalseTriState; - else - checked = false; - } - break; - } - } - - a->setEnabled(enabled); - - if (a->isCheckable()) - a->setChecked(checked); -#endif // QT_NO_ACTION -} - -void QWebPagePrivate::updateNavigationActions() -{ - updateAction(QWebPage::Back); - updateAction(QWebPage::Forward); - updateAction(QWebPage::Stop); - updateAction(QWebPage::Reload); - updateAction(QWebPage::ReloadAndBypassCache); -} - -void QWebPagePrivate::updateEditorActions() -{ - updateAction(QWebPage::Cut); - updateAction(QWebPage::Copy); - updateAction(QWebPage::Paste); - updateAction(QWebPage::MoveToNextChar); - updateAction(QWebPage::MoveToPreviousChar); - updateAction(QWebPage::MoveToNextWord); - updateAction(QWebPage::MoveToPreviousWord); - updateAction(QWebPage::MoveToNextLine); - updateAction(QWebPage::MoveToPreviousLine); - updateAction(QWebPage::MoveToStartOfLine); - updateAction(QWebPage::MoveToEndOfLine); - updateAction(QWebPage::MoveToStartOfBlock); - updateAction(QWebPage::MoveToEndOfBlock); - updateAction(QWebPage::MoveToStartOfDocument); - updateAction(QWebPage::MoveToEndOfDocument); - updateAction(QWebPage::SelectNextChar); - updateAction(QWebPage::SelectPreviousChar); - updateAction(QWebPage::SelectNextWord); - updateAction(QWebPage::SelectPreviousWord); - updateAction(QWebPage::SelectNextLine); - updateAction(QWebPage::SelectPreviousLine); - updateAction(QWebPage::SelectStartOfLine); - updateAction(QWebPage::SelectEndOfLine); - updateAction(QWebPage::SelectStartOfBlock); - updateAction(QWebPage::SelectEndOfBlock); - updateAction(QWebPage::SelectStartOfDocument); - updateAction(QWebPage::SelectEndOfDocument); - updateAction(QWebPage::DeleteStartOfWord); - updateAction(QWebPage::DeleteEndOfWord); - updateAction(QWebPage::SetTextDirectionDefault); - updateAction(QWebPage::SetTextDirectionLeftToRight); - updateAction(QWebPage::SetTextDirectionRightToLeft); - updateAction(QWebPage::ToggleBold); - updateAction(QWebPage::ToggleItalic); - updateAction(QWebPage::ToggleUnderline); - updateAction(QWebPage::InsertParagraphSeparator); - updateAction(QWebPage::InsertLineSeparator); - updateAction(QWebPage::PasteAndMatchStyle); - updateAction(QWebPage::RemoveFormat); - updateAction(QWebPage::ToggleStrikethrough); - updateAction(QWebPage::ToggleSubscript); - updateAction(QWebPage::ToggleSuperscript); - updateAction(QWebPage::InsertUnorderedList); - updateAction(QWebPage::InsertOrderedList); - updateAction(QWebPage::Indent); - updateAction(QWebPage::Outdent); - updateAction(QWebPage::AlignCenter); - updateAction(QWebPage::AlignJustified); - updateAction(QWebPage::AlignLeft); - updateAction(QWebPage::AlignRight); -} - -void QWebPagePrivate::timerEvent(QTimerEvent *ev) -{ - int timerId = ev->timerId(); - if (timerId == tripleClickTimer.timerId()) - tripleClickTimer.stop(); - else - q->timerEvent(ev); -} - -template<class T> -void QWebPagePrivate::mouseMoveEvent(T* ev) -{ - WebCore::Frame* frame = QWebFramePrivate::core(mainFrame); - if (!frame->view()) - return; - - bool accepted = frame->eventHandler()->mouseMoved(PlatformMouseEvent(ev, 0)); - ev->setAccepted(accepted); -} - -template<class T> -void QWebPagePrivate::mousePressEvent(T* ev) -{ - WebCore::Frame* frame = QWebFramePrivate::core(mainFrame); - if (!frame->view()) - return; - - RefPtr<WebCore::Node> oldNode; - Frame* focusedFrame = page->focusController()->focusedFrame(); - if (Document* focusedDocument = focusedFrame ? focusedFrame->document() : 0) - oldNode = focusedDocument->focusedNode(); - - if (tripleClickTimer.isActive() - && (ev->pos() - tripleClick).manhattanLength() - < QApplication::startDragDistance()) { - mouseTripleClickEvent(ev); - return; - } - - bool accepted = false; - adjustPointForClicking(ev); - PlatformMouseEvent mev(ev, 1); - // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton - if (mev.button() != NoButton) - accepted = frame->eventHandler()->handleMousePressEvent(mev); - ev->setAccepted(accepted); - - RefPtr<WebCore::Node> newNode; - focusedFrame = page->focusController()->focusedFrame(); - if (Document* focusedDocument = focusedFrame ? focusedFrame->document() : 0) - newNode = focusedDocument->focusedNode(); - - if (newNode && oldNode != newNode) - clickCausedFocus = true; -} - -template<class T> -void QWebPagePrivate::mouseDoubleClickEvent(T *ev) -{ - WebCore::Frame* frame = QWebFramePrivate::core(mainFrame); - if (!frame->view()) - return; - - bool accepted = false; - PlatformMouseEvent mev(ev, 2); - // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton - if (mev.button() != NoButton) - accepted = frame->eventHandler()->handleMousePressEvent(mev); - ev->setAccepted(accepted); - - tripleClickTimer.start(QApplication::doubleClickInterval(), q); - tripleClick = QPointF(ev->pos()).toPoint(); -} - -template<class T> -void QWebPagePrivate::mouseTripleClickEvent(T *ev) -{ - WebCore::Frame* frame = QWebFramePrivate::core(mainFrame); - if (!frame->view()) - return; - - bool accepted = false; - PlatformMouseEvent mev(ev, 3); - // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton - if (mev.button() != NoButton) - accepted = frame->eventHandler()->handleMousePressEvent(mev); - ev->setAccepted(accepted); -} - -void QWebPagePrivate::handleClipboard(QEvent* ev, Qt::MouseButton button) -{ -#ifndef QT_NO_CLIPBOARD - if (QApplication::clipboard()->supportsSelection()) { - bool oldSelectionMode = Pasteboard::generalPasteboard()->isSelectionMode(); - Pasteboard::generalPasteboard()->setSelectionMode(true); - WebCore::Frame* focusFrame = page->focusController()->focusedOrMainFrame(); - if (button == Qt::LeftButton) { - if (focusFrame && (focusFrame->editor()->canCopy() || focusFrame->editor()->canDHTMLCopy())) { - focusFrame->editor()->copy(); - ev->setAccepted(true); - } - } else if (button == Qt::MidButton) { - if (focusFrame && (focusFrame->editor()->canPaste() || focusFrame->editor()->canDHTMLPaste())) { - focusFrame->editor()->paste(); - ev->setAccepted(true); - } - } - Pasteboard::generalPasteboard()->setSelectionMode(oldSelectionMode); - } -#endif -} - -template<class T> -void QWebPagePrivate::mouseReleaseEvent(T *ev) -{ - WebCore::Frame* frame = QWebFramePrivate::core(mainFrame); - if (!frame->view()) - return; - - bool accepted = false; - adjustPointForClicking(ev); - PlatformMouseEvent mev(ev, 0); - // ignore the event if we can't map Qt's mouse buttons to WebCore::MouseButton - if (mev.button() != NoButton) - accepted = frame->eventHandler()->handleMouseReleaseEvent(mev); - ev->setAccepted(accepted); - - handleClipboard(ev, ev->button()); - handleSoftwareInputPanel(ev->button(), QPointF(ev->pos()).toPoint()); -} - -void QWebPagePrivate::handleSoftwareInputPanel(Qt::MouseButton button, const QPoint& pos) -{ - Frame* frame = page->focusController()->focusedFrame(); - if (!frame) - return; - - if (client && client->inputMethodEnabled() - && frame->document()->focusedNode() - && button == Qt::LeftButton && qApp->autoSipEnabled()) { - QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel( - client->ownerWidget()->style()->styleHint(QStyle::SH_RequestSoftwareInputPanel)); - if (!clickCausedFocus || behavior == QStyle::RSIP_OnMouseClick) { - HitTestResult result = frame->eventHandler()->hitTestResultAtPoint(frame->view()->windowToContents(pos), false); - if (result.isContentEditable()) { - QEvent event(QEvent::RequestSoftwareInputPanel); - QApplication::sendEvent(client->ownerWidget(), &event); - } - } - } - - clickCausedFocus = false; -} - -#ifndef QT_NO_CONTEXTMENU -void QWebPagePrivate::contextMenuEvent(const QPoint& globalPos) -{ - QMenu *menu = q->createStandardContextMenu(); - if (menu) { - menu->exec(globalPos); - delete menu; - } -} -#endif // QT_NO_CONTEXTMENU - -/*! - \since 4.5 - This function creates the standard context menu which is shown when - the user clicks on the web page with the right mouse button. It is - called from the default contextMenuEvent() handler. The popup menu's - ownership is transferred to the caller. - */ -QMenu *QWebPage::createStandardContextMenu() -{ -#ifndef QT_NO_CONTEXTMENU - QMenu *menu = d->currentContextMenu; - d->currentContextMenu = 0; - return menu; -#else - return 0; -#endif -} - -#ifndef QT_NO_WHEELEVENT -template<class T> -void QWebPagePrivate::wheelEvent(T *ev) -{ - WebCore::Frame* frame = QWebFramePrivate::core(mainFrame); - if (!frame->view()) - return; - - WebCore::PlatformWheelEvent pev(ev); - bool accepted = frame->eventHandler()->handleWheelEvent(pev); - ev->setAccepted(accepted); -} -#endif // QT_NO_WHEELEVENT - -#ifndef QT_NO_SHORTCUT -QWebPage::WebAction QWebPagePrivate::editorActionForKeyEvent(QKeyEvent* event) -{ - static struct { - QKeySequence::StandardKey standardKey; - QWebPage::WebAction action; - } editorActions[] = { - { QKeySequence::Cut, QWebPage::Cut }, - { QKeySequence::Copy, QWebPage::Copy }, - { QKeySequence::Paste, QWebPage::Paste }, - { QKeySequence::Undo, QWebPage::Undo }, - { QKeySequence::Redo, QWebPage::Redo }, - { QKeySequence::MoveToNextChar, QWebPage::MoveToNextChar }, - { QKeySequence::MoveToPreviousChar, QWebPage::MoveToPreviousChar }, - { QKeySequence::MoveToNextWord, QWebPage::MoveToNextWord }, - { QKeySequence::MoveToPreviousWord, QWebPage::MoveToPreviousWord }, - { QKeySequence::MoveToNextLine, QWebPage::MoveToNextLine }, - { QKeySequence::MoveToPreviousLine, QWebPage::MoveToPreviousLine }, - { QKeySequence::MoveToStartOfLine, QWebPage::MoveToStartOfLine }, - { QKeySequence::MoveToEndOfLine, QWebPage::MoveToEndOfLine }, - { QKeySequence::MoveToStartOfBlock, QWebPage::MoveToStartOfBlock }, - { QKeySequence::MoveToEndOfBlock, QWebPage::MoveToEndOfBlock }, - { QKeySequence::MoveToStartOfDocument, QWebPage::MoveToStartOfDocument }, - { QKeySequence::MoveToEndOfDocument, QWebPage::MoveToEndOfDocument }, - { QKeySequence::SelectNextChar, QWebPage::SelectNextChar }, - { QKeySequence::SelectPreviousChar, QWebPage::SelectPreviousChar }, - { QKeySequence::SelectNextWord, QWebPage::SelectNextWord }, - { QKeySequence::SelectPreviousWord, QWebPage::SelectPreviousWord }, - { QKeySequence::SelectNextLine, QWebPage::SelectNextLine }, - { QKeySequence::SelectPreviousLine, QWebPage::SelectPreviousLine }, - { QKeySequence::SelectStartOfLine, QWebPage::SelectStartOfLine }, - { QKeySequence::SelectEndOfLine, QWebPage::SelectEndOfLine }, - { QKeySequence::SelectStartOfBlock, QWebPage::SelectStartOfBlock }, - { QKeySequence::SelectEndOfBlock, QWebPage::SelectEndOfBlock }, - { QKeySequence::SelectStartOfDocument, QWebPage::SelectStartOfDocument }, - { QKeySequence::SelectEndOfDocument, QWebPage::SelectEndOfDocument }, - { QKeySequence::DeleteStartOfWord, QWebPage::DeleteStartOfWord }, - { QKeySequence::DeleteEndOfWord, QWebPage::DeleteEndOfWord }, - { QKeySequence::InsertParagraphSeparator, QWebPage::InsertParagraphSeparator }, - { QKeySequence::InsertLineSeparator, QWebPage::InsertLineSeparator }, - { QKeySequence::SelectAll, QWebPage::SelectAll }, - { QKeySequence::UnknownKey, QWebPage::NoWebAction } - }; - - for (int i = 0; editorActions[i].standardKey != QKeySequence::UnknownKey; ++i) - if (event == editorActions[i].standardKey) - return editorActions[i].action; - - return QWebPage::NoWebAction; -} -#endif // QT_NO_SHORTCUT - -void QWebPagePrivate::keyPressEvent(QKeyEvent *ev) -{ - bool handled = false; - WebCore::Frame* frame = page->focusController()->focusedOrMainFrame(); - // we forward the key event to WebCore first to handle potential DOM - // defined event handlers and later on end up in EditorClientQt::handleKeyboardEvent - // to trigger editor commands via triggerAction(). - if (!handled) - handled = frame->eventHandler()->keyEvent(ev); - if (!handled) { - handled = true; - if (!handleScrolling(ev, frame)) { - switch (ev->key()) { - case Qt::Key_Back: - q->triggerAction(QWebPage::Back); - break; - case Qt::Key_Forward: - q->triggerAction(QWebPage::Forward); - break; - case Qt::Key_Stop: - q->triggerAction(QWebPage::Stop); - break; - case Qt::Key_Refresh: - q->triggerAction(QWebPage::Reload); - break; - case Qt::Key_Backspace: - if (ev->modifiers() == Qt::ShiftModifier) - q->triggerAction(QWebPage::Forward); - else - q->triggerAction(QWebPage::Back); - break; - default: - handled = false; - break; - } - } - } - - ev->setAccepted(handled); -} - -void QWebPagePrivate::keyReleaseEvent(QKeyEvent *ev) -{ - if (ev->isAutoRepeat()) { - ev->setAccepted(true); - return; - } - - WebCore::Frame* frame = page->focusController()->focusedOrMainFrame(); - bool handled = frame->eventHandler()->keyEvent(ev); - ev->setAccepted(handled); -} - -void QWebPagePrivate::focusInEvent(QFocusEvent*) -{ - FocusController *focusController = page->focusController(); - focusController->setActive(true); - focusController->setFocused(true); - if (!focusController->focusedFrame()) - focusController->setFocusedFrame(QWebFramePrivate::core(mainFrame)); -} - -void QWebPagePrivate::focusOutEvent(QFocusEvent*) -{ - // only set the focused frame inactive so that we stop painting the caret - // and the focus frame. But don't tell the focus controller so that upon - // focusInEvent() we can re-activate the frame. - FocusController *focusController = page->focusController(); - // Call setFocused first so that window.onblur doesn't get called twice - focusController->setFocused(false); - focusController->setActive(false); -} - -template<class T> -void QWebPagePrivate::dragEnterEvent(T* ev) -{ -#ifndef QT_NO_DRAGANDDROP - DragData dragData(ev->mimeData(), QPointF(ev->pos()).toPoint(), - QCursor::pos(), dropActionToDragOp(ev->possibleActions())); - Qt::DropAction action = dragOpToDropAction(page->dragController()->dragEntered(&dragData)); - ev->setDropAction(action); - if (action != Qt::IgnoreAction) - ev->acceptProposedAction(); -#endif -} - -template<class T> -void QWebPagePrivate::dragLeaveEvent(T *ev) -{ -#ifndef QT_NO_DRAGANDDROP - DragData dragData(0, IntPoint(), QCursor::pos(), DragOperationNone); - page->dragController()->dragExited(&dragData); - ev->accept(); -#endif -} - -template<class T> -void QWebPagePrivate::dragMoveEvent(T *ev) -{ -#ifndef QT_NO_DRAGANDDROP - DragData dragData(ev->mimeData(), QPointF(ev->pos()).toPoint(), - QCursor::pos(), dropActionToDragOp(ev->possibleActions())); - Qt::DropAction action = dragOpToDropAction(page->dragController()->dragUpdated(&dragData)); - ev->setDropAction(action); - if (action != Qt::IgnoreAction) - ev->acceptProposedAction(); -#endif -} - -template<class T> -void QWebPagePrivate::dropEvent(T *ev) -{ -#ifndef QT_NO_DRAGANDDROP - DragData dragData(ev->mimeData(), QPointF(ev->pos()).toPoint(), - QCursor::pos(), dropActionToDragOp(ev->possibleActions())); - if (page->dragController()->performDrag(&dragData)) - ev->acceptProposedAction(); -#endif -} - -void QWebPagePrivate::leaveEvent(QEvent*) -{ - // Fake a mouse move event just outside of the widget, since all - // the interesting mouse-out behavior like invalidating scrollbars - // is handled by the WebKit event handler's mouseMoved function. - QMouseEvent fakeEvent(QEvent::MouseMove, QCursor::pos(), Qt::NoButton, Qt::NoButton, Qt::NoModifier); - mouseMoveEvent(&fakeEvent); -} - -/*! - \property QWebPage::palette - \brief the page's palette - - The base brush of the palette is used to draw the background of the main frame. - - By default, this property contains the application's default palette. -*/ -void QWebPage::setPalette(const QPalette &pal) -{ - d->palette = pal; - if (!d->mainFrame || !d->mainFrame->d->frame->view()) - return; - - QBrush brush = pal.brush(QPalette::Base); - QColor backgroundColor = brush.style() == Qt::SolidPattern ? brush.color() : QColor(); - QWebFramePrivate::core(d->mainFrame)->view()->updateBackgroundRecursively(backgroundColor, !backgroundColor.alpha()); -} - -QPalette QWebPage::palette() const -{ - return d->palette; -} - -void QWebPagePrivate::inputMethodEvent(QInputMethodEvent *ev) -{ - WebCore::Frame *frame = page->focusController()->focusedOrMainFrame(); - WebCore::Editor *editor = frame->editor(); - - if (!editor->canEdit()) { - ev->ignore(); - return; - } - - Node* node = 0; - if (frame->selection()->rootEditableElement()) - node = frame->selection()->rootEditableElement()->shadowAncestorNode(); - - Vector<CompositionUnderline> underlines; - bool hasSelection = false; - - for (int i = 0; i < ev->attributes().size(); ++i) { - const QInputMethodEvent::Attribute& a = ev->attributes().at(i); - switch (a.type) { - case QInputMethodEvent::TextFormat: { - QTextCharFormat textCharFormat = a.value.value<QTextFormat>().toCharFormat(); - QColor qcolor = textCharFormat.underlineColor(); - underlines.append(CompositionUnderline(qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length)), Color(makeRGBA(qcolor.red(), qcolor.green(), qcolor.blue(), qcolor.alpha())), false)); - break; - } - case QInputMethodEvent::Cursor: { - frame->selection()->setCaretVisible(a.length); //if length is 0 cursor is invisible - if (a.length > 0) { - RenderObject* caretRenderer = frame->selection()->caretRenderer(); - if (caretRenderer) { - QColor qcolor = a.value.value<QColor>(); - caretRenderer->style()->setColor(Color(makeRGBA(qcolor.red(), qcolor.green(), qcolor.blue(), qcolor.alpha()))); - } - } - break; - } - case QInputMethodEvent::Selection: { - hasSelection = true; - // A selection in the inputMethodEvent is always reflected in the visible text - if (node) - setSelectionRange(node, qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length))); - - if (!ev->preeditString().isEmpty()) - editor->setComposition(ev->preeditString(), underlines, qMin(a.start, (a.start + a.length)), qMax(a.start, (a.start + a.length))); - else { - // If we are in the middle of a composition, an empty pre-edit string and a selection of zero - // cancels the current composition - if (editor->hasComposition() && (a.start + a.length == 0)) - editor->setComposition(QString(), underlines, 0, 0); - } - break; - } - } - } - - if (node && ev->replacementLength() > 0) { - int cursorPos = frame->selection()->extent().offsetInContainerNode(); - int start = cursorPos + ev->replacementStart(); - setSelectionRange(node, start, start + ev->replacementLength()); - // Commit regardless of whether commitString is empty, to get rid of selection. - editor->confirmComposition(ev->commitString()); - } else if (!ev->commitString().isEmpty()) { - if (editor->hasComposition()) - editor->confirmComposition(ev->commitString()); - else - editor->insertText(ev->commitString(), 0); - } else if (!hasSelection && !ev->preeditString().isEmpty()) - editor->setComposition(ev->preeditString(), underlines, 0, 0); - else if (ev->preeditString().isEmpty() && editor->hasComposition()) - editor->confirmComposition(String()); - - ev->accept(); -} - -#ifndef QT_NO_PROPERTIES -typedef struct { - const char* name; - double deferredRepaintDelay; - double initialDeferredRepaintDelayDuringLoading; - double maxDeferredRepaintDelayDuringLoading; - double deferredRepaintDelayIncrementDuringLoading; -} QRepaintThrottlingPreset; - -void QWebPagePrivate::dynamicPropertyChangeEvent(QDynamicPropertyChangeEvent* event) -{ - if (event->propertyName() == "_q_viewMode") { - page->setViewMode(Page::stringToViewMode(q->property("_q_viewMode").toString())); - } else if (event->propertyName() == "_q_HTMLTokenizerChunkSize") { - int chunkSize = q->property("_q_HTMLTokenizerChunkSize").toInt(); - q->handle()->page->setCustomHTMLTokenizerChunkSize(chunkSize); - } else if (event->propertyName() == "_q_HTMLTokenizerTimeDelay") { - double timeDelay = q->property("_q_HTMLTokenizerTimeDelay").toDouble(); - q->handle()->page->setCustomHTMLTokenizerTimeDelay(timeDelay); - } else if (event->propertyName() == "_q_RepaintThrottlingDeferredRepaintDelay") { - double p = q->property("_q_RepaintThrottlingDeferredRepaintDelay").toDouble(); - FrameView::setRepaintThrottlingDeferredRepaintDelay(p); - } else if (event->propertyName() == "_q_RepaintThrottlingnInitialDeferredRepaintDelayDuringLoading") { - double p = q->property("_q_RepaintThrottlingnInitialDeferredRepaintDelayDuringLoading").toDouble(); - FrameView::setRepaintThrottlingnInitialDeferredRepaintDelayDuringLoading(p); - } else if (event->propertyName() == "_q_RepaintThrottlingMaxDeferredRepaintDelayDuringLoading") { - double p = q->property("_q_RepaintThrottlingMaxDeferredRepaintDelayDuringLoading").toDouble(); - FrameView::setRepaintThrottlingMaxDeferredRepaintDelayDuringLoading(p); - } else if (event->propertyName() == "_q_RepaintThrottlingDeferredRepaintDelayIncrementDuringLoading") { - double p = q->property("_q_RepaintThrottlingDeferredRepaintDelayIncrementDuringLoading").toDouble(); - FrameView::setRepaintThrottlingDeferredRepaintDelayIncrementDuringLoading(p); - } else if (event->propertyName() == "_q_RepaintThrottlingPreset") { - static const QRepaintThrottlingPreset presets[] = { - { "NoThrottling", 0, 0, 0, 0 }, - { "Legacy", 0.025, 0, 2.5, 0.5 }, - { "Minimal", 0.01, 0, 1, 0.2 }, - { "Medium", 0.025, 1, 5, 0.5 }, - { "Heavy", 0.1, 2, 10, 1 } - }; - - QString p = q->property("_q_RepaintThrottlingPreset").toString(); - for(int i = 0; i < sizeof(presets) / sizeof(presets[0]); i++) { - if(p == presets[i].name) { - FrameView::setRepaintThrottlingDeferredRepaintDelay( - presets[i].deferredRepaintDelay); - FrameView::setRepaintThrottlingnInitialDeferredRepaintDelayDuringLoading( - presets[i].initialDeferredRepaintDelayDuringLoading); - FrameView::setRepaintThrottlingMaxDeferredRepaintDelayDuringLoading( - presets[i].maxDeferredRepaintDelayDuringLoading); - FrameView::setRepaintThrottlingDeferredRepaintDelayIncrementDuringLoading( - presets[i].deferredRepaintDelayIncrementDuringLoading); - break; - } - } - } -#if ENABLE(TILED_BACKING_STORE) - else if (event->propertyName() == "_q_TiledBackingStoreTileSize") { - WebCore::Frame* frame = QWebFramePrivate::core(q->mainFrame()); - if (!frame->tiledBackingStore()) - return; - QSize tileSize = q->property("_q_TiledBackingStoreTileSize").toSize(); - frame->tiledBackingStore()->setTileSize(tileSize); - } else if (event->propertyName() == "_q_TiledBackingStoreTileCreationDelay") { - WebCore::Frame* frame = QWebFramePrivate::core(q->mainFrame()); - if (!frame->tiledBackingStore()) - return; - int tileCreationDelay = q->property("_q_TiledBackingStoreTileCreationDelay").toInt(); - frame->tiledBackingStore()->setTileCreationDelay(static_cast<double>(tileCreationDelay) / 1000.); - } else if (event->propertyName() == "_q_TiledBackingStoreKeepAreaMultiplier") { - WebCore::Frame* frame = QWebFramePrivate::core(q->mainFrame()); - if (!frame->tiledBackingStore()) - return; - FloatSize keepMultiplier; - FloatSize coverMultiplier; - frame->tiledBackingStore()->getKeepAndCoverAreaMultipliers(keepMultiplier, coverMultiplier); - QSizeF qSize = q->property("_q_TiledBackingStoreKeepAreaMultiplier").toSizeF(); - keepMultiplier = FloatSize(qSize.width(), qSize.height()); - frame->tiledBackingStore()->setKeepAndCoverAreaMultipliers(keepMultiplier, coverMultiplier); - } else if (event->propertyName() == "_q_TiledBackingStoreCoverAreaMultiplier") { - WebCore::Frame* frame = QWebFramePrivate::core(q->mainFrame()); - if (!frame->tiledBackingStore()) - return; - FloatSize keepMultiplier; - FloatSize coverMultiplier; - frame->tiledBackingStore()->getKeepAndCoverAreaMultipliers(keepMultiplier, coverMultiplier); - QSizeF qSize = q->property("_q_TiledBackingStoreCoverAreaMultiplier").toSizeF(); - coverMultiplier = FloatSize(qSize.width(), qSize.height()); - frame->tiledBackingStore()->setKeepAndCoverAreaMultipliers(keepMultiplier, coverMultiplier); - } -#endif - else if (event->propertyName() == "_q_webInspectorServerPort") { - InspectorServerQt* inspectorServer = InspectorServerQt::server(); - inspectorServer->listen(inspectorServerPort()); - } -} -#endif - -void QWebPagePrivate::shortcutOverrideEvent(QKeyEvent* event) -{ - WebCore::Frame* frame = page->focusController()->focusedOrMainFrame(); - WebCore::Editor* editor = frame->editor(); - if (editor->canEdit()) { - if (event->modifiers() == Qt::NoModifier - || event->modifiers() == Qt::ShiftModifier - || event->modifiers() == Qt::KeypadModifier) { - if (event->key() < Qt::Key_Escape) { - event->accept(); - } else { - switch (event->key()) { - case Qt::Key_Return: - case Qt::Key_Enter: - case Qt::Key_Delete: - case Qt::Key_Home: - case Qt::Key_End: - case Qt::Key_Backspace: - case Qt::Key_Left: - case Qt::Key_Right: - case Qt::Key_Up: - case Qt::Key_Down: - case Qt::Key_Tab: - event->accept(); - default: - break; - } - } - } -#ifndef QT_NO_SHORTCUT - else if (editorActionForKeyEvent(event) != QWebPage::NoWebAction) - event->accept(); -#endif - } -} - -bool QWebPagePrivate::handleScrolling(QKeyEvent *ev, Frame *frame) -{ - ScrollDirection direction; - ScrollGranularity granularity; - -#ifndef QT_NO_SHORTCUT - if (ev == QKeySequence::MoveToNextPage - || (ev->key() == Qt::Key_Space && !(ev->modifiers() & Qt::ShiftModifier))) { - granularity = ScrollByPage; - direction = ScrollDown; - } else if (ev == QKeySequence::MoveToPreviousPage - || ((ev->key() == Qt::Key_Space) && (ev->modifiers() & Qt::ShiftModifier))) { - granularity = ScrollByPage; - direction = ScrollUp; - } else -#endif // QT_NO_SHORTCUT - if ((ev->key() == Qt::Key_Up && ev->modifiers() & Qt::ControlModifier) - || ev->key() == Qt::Key_Home) { - granularity = ScrollByDocument; - direction = ScrollUp; - } else if ((ev->key() == Qt::Key_Down && ev->modifiers() & Qt::ControlModifier) - || ev->key() == Qt::Key_End) { - granularity = ScrollByDocument; - direction = ScrollDown; - } else { - switch (ev->key()) { - case Qt::Key_Up: - granularity = ScrollByLine; - direction = ScrollUp; - break; - case Qt::Key_Down: - granularity = ScrollByLine; - direction = ScrollDown; - break; - case Qt::Key_Left: - granularity = ScrollByLine; - direction = ScrollLeft; - break; - case Qt::Key_Right: - granularity = ScrollByLine; - direction = ScrollRight; - break; - default: - return false; - } - } - - return frame->eventHandler()->scrollRecursively(direction, granularity); -} - -void QWebPagePrivate::adjustPointForClicking(QMouseEvent*) -{ - notImplemented(); -} - -void QWebPagePrivate::adjustPointForClicking(QGraphicsSceneMouseEvent* ev) -{ - QtPlatformPlugin platformPlugin; - QWebTouchModifier* touchModifier = platformPlugin.createTouchModifier(); - if (!touchModifier) - return; - - unsigned topPadding = touchModifier->hitTestPaddingForTouch(QWebTouchModifier::Up); - unsigned rightPadding = touchModifier->hitTestPaddingForTouch(QWebTouchModifier::Right); - unsigned bottomPadding = touchModifier->hitTestPaddingForTouch(QWebTouchModifier::Down); - unsigned leftPadding = touchModifier->hitTestPaddingForTouch(QWebTouchModifier::Left); - - delete touchModifier; - touchModifier = 0; - - if (!topPadding && !rightPadding && !bottomPadding && !leftPadding) - return; - - Document* startingDocument = page->mainFrame()->document(); - if (!startingDocument) - return; - - IntPoint originalPoint(QPointF(ev->pos()).toPoint()); - TouchAdjuster touchAdjuster(topPadding, rightPadding, bottomPadding, leftPadding); - IntPoint adjustedPoint = touchAdjuster.findCandidatePointForTouch(originalPoint, startingDocument); - if (adjustedPoint == IntPoint::zero()) - return; - - ev->setPos(QPointF(adjustedPoint)); -} - -bool QWebPagePrivate::touchEvent(QTouchEvent* event) -{ -#if ENABLE(TOUCH_EVENTS) - WebCore::Frame* frame = QWebFramePrivate::core(mainFrame); - if (!frame->view()) - return false; - - // Always accept the QTouchEvent so that we'll receive also TouchUpdate and TouchEnd events - event->setAccepted(true); - - // Return whether the default action was cancelled in the JS event handler - return frame->eventHandler()->handleTouchEvent(PlatformTouchEvent(event)); -#else - event->ignore(); - return false; -#endif -} - -/*! - This method is used by the input method to query a set of properties of the page - to be able to support complex input method operations as support for surrounding - text and reconversions. - - \a property specifies which property is queried. - - \sa QWidget::inputMethodEvent(), QInputMethodEvent, QInputContext -*/ -QVariant QWebPage::inputMethodQuery(Qt::InputMethodQuery property) const -{ - Frame* frame = d->page->focusController()->focusedFrame(); - if (!frame) - return QVariant(); - - WebCore::Editor* editor = frame->editor(); - - RenderObject* renderer = 0; - RenderTextControl* renderTextControl = 0; - - if (frame->selection()->rootEditableElement()) - renderer = frame->selection()->rootEditableElement()->shadowAncestorNode()->renderer(); - - if (renderer && renderer->isTextControl()) - renderTextControl = toRenderTextControl(renderer); - - switch (property) { - case Qt::ImMicroFocus: { - WebCore::FrameView* view = frame->view(); - if (view && view->needsLayout()) { - // We can't access absoluteCaretBounds() while the view needs to layout. - return QVariant(); - } - return QVariant(view->contentsToWindow(frame->selection()->absoluteCaretBounds())); - } - case Qt::ImFont: { - if (renderTextControl) { - RenderStyle* renderStyle = renderTextControl->style(); - return QVariant(QFont(renderStyle->font().font())); - } - return QVariant(QFont()); - } - case Qt::ImCursorPosition: { - if (editor->hasComposition()) - return QVariant(frame->selection()->end().offsetInContainerNode()); - return QVariant(frame->selection()->extent().offsetInContainerNode()); - } - case Qt::ImSurroundingText: { - if (renderTextControl) { - QString text = renderTextControl->text(); - RefPtr<Range> range = editor->compositionRange(); - if (range) - text.remove(range->startPosition().offsetInContainerNode(), TextIterator::rangeLength(range.get())); - return QVariant(text); - } - return QVariant(); - } - case Qt::ImCurrentSelection: { - if (!editor->hasComposition() && renderTextControl) { - int start = frame->selection()->start().offsetInContainerNode(); - int end = frame->selection()->end().offsetInContainerNode(); - if (end > start) - return QVariant(QString(renderTextControl->text()).mid(start, end - start)); - } - return QVariant(); - - } - case Qt::ImAnchorPosition: { - if (editor->hasComposition()) - return QVariant(frame->selection()->start().offsetInContainerNode()); - return QVariant(frame->selection()->base().offsetInContainerNode()); - } - case Qt::ImMaximumTextLength: { - if (frame->selection()->isContentEditable()) { - if (frame->document() && frame->document()->focusedNode()) { - if (frame->document()->focusedNode()->hasTagName(HTMLNames::inputTag)) { - HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(frame->document()->focusedNode()); - return QVariant(inputElement->maxLength()); - } - } - return QVariant(InputElement::s_maximumLength); - } - return QVariant(0); - } - default: - return QVariant(); - } -} - -/*! - \internal -*/ -void QWebPagePrivate::setInspector(QWebInspector* insp) -{ - if (inspector) - inspector->d->setFrontend(0); - - if (inspectorIsInternalOnly) { - QWebInspector* inspToDelete = inspector; - inspector = 0; - inspectorIsInternalOnly = false; - delete inspToDelete; // Delete after to prevent infinite recursion - } - - inspector = insp; - - // Give inspector frontend web view if previously created - if (inspector && inspectorFrontend) - inspector->d->setFrontend(inspectorFrontend); -} - -/*! - \internal - Returns the inspector and creates it if it wasn't created yet. - The instance created here will not be available through QWebPage's API. -*/ -QWebInspector* QWebPagePrivate::getOrCreateInspector() -{ -#if ENABLE(INSPECTOR) - if (!inspector) { - QWebInspector* insp = new QWebInspector; - insp->setPage(q); - inspectorIsInternalOnly = true; - - Q_ASSERT(inspector); // Associated through QWebInspector::setPage(q) - } -#endif - return inspector; -} - -/*! \internal */ -InspectorController* QWebPagePrivate::inspectorController() -{ -#if ENABLE(INSPECTOR) - return page->inspectorController(); -#else - return 0; -#endif -} - -quint16 QWebPagePrivate::inspectorServerPort() -{ -#if ENABLE(INSPECTOR) && !defined(QT_NO_PROPERTIES) - if (q && q->property("_q_webInspectorServerPort").isValid()) - return q->property("_q_webInspectorServerPort").toInt(); -#endif - return 0; -} - -static bool hasMouseListener(Element* element) -{ - ASSERT(element); - return element->hasEventListeners(eventNames().clickEvent) - || element->hasEventListeners(eventNames().mousedownEvent) - || element->hasEventListeners(eventNames().mouseupEvent); -} - -static bool isClickableElement(Element* element, RefPtr<NodeList> list) -{ - ASSERT(element); - bool isClickable = hasMouseListener(element); - if (!isClickable && list) { - Element* parent = element->parentElement(); - unsigned count = list->length(); - for (unsigned i = 0; i < count && parent; i++) { - if (list->item(i) != parent) - continue; - - isClickable = hasMouseListener(parent); - if (isClickable) - break; - - parent = parent->parentElement(); - } - } - - ExceptionCode ec = 0; - return isClickable - || element->webkitMatchesSelector("a,*:link,*:visited,*[role=button],button,input,select,label", ec) - || computedStyle(element)->getPropertyValue(cssPropertyID("cursor")) == "pointer"; -} - -static bool isValidFrameOwner(Element* element) -{ - ASSERT(element); - return element->isFrameOwnerElement() && static_cast<HTMLFrameOwnerElement*>(element)->contentFrame(); -} - -static Element* nodeToElement(Node* node) -{ - if (node && node->isElementNode()) - return static_cast<Element*>(node); - return 0; -} - -QWebPagePrivate::TouchAdjuster::TouchAdjuster(unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding) - : m_topPadding(topPadding) - , m_rightPadding(rightPadding) - , m_bottomPadding(bottomPadding) - , m_leftPadding(leftPadding) -{ -} - -IntPoint QWebPagePrivate::TouchAdjuster::findCandidatePointForTouch(const IntPoint& touchPoint, Document* document) const -{ - if (!document) - return IntPoint(); - - int x = touchPoint.x(); - int y = touchPoint.y(); - - RefPtr<NodeList> intersectedNodes = document->nodesFromRect(x, y, m_topPadding, m_rightPadding, m_bottomPadding, m_leftPadding, false); - if (!intersectedNodes) - return IntPoint(); - - Element* closestClickableElement = 0; - IntRect largestIntersectionRect; - FrameView* view = document->frame()->view(); - - // Touch rect in contents coordinates. - IntRect touchRect(HitTestResult::rectForPoint(view->windowToContents(IntPoint(x, y)), m_topPadding, m_rightPadding, m_bottomPadding, m_leftPadding)); - - // Iterate over the list of nodes hit looking for the one whose bounding area - // has largest intersection with the touch area (point + padding). - for (unsigned i = 0; i < intersectedNodes->length(); i++) { - Node* currentNode = intersectedNodes->item(i); - - Element* currentElement = nodeToElement(currentNode); - if (!currentElement || (!isClickableElement(currentElement, 0) && !isValidFrameOwner(currentElement))) - continue; - - IntRect currentElementBoundingRect = currentElement->getRect(); - currentElementBoundingRect.intersect(touchRect); - - if (currentElementBoundingRect.isEmpty()) - continue; - - int currentIntersectionRectArea = currentElementBoundingRect.width() * currentElementBoundingRect.height(); - int largestIntersectionRectArea = largestIntersectionRect.width() * largestIntersectionRect.height(); - if (currentIntersectionRectArea > largestIntersectionRectArea) { - closestClickableElement = currentElement; - largestIntersectionRect = currentElementBoundingRect; - } - } - - if (largestIntersectionRect.isEmpty()) - return IntPoint(); - - // Handle the case when user taps a inner frame. It is done in three steps: - // 1) Transform the original touch point to the inner document coordinates; - // 1) Call nodesFromRect for the inner document in case; - // 3) Re-add the inner frame offset (location) before passing the new clicking - // position to WebCore. - if (closestClickableElement->isFrameOwnerElement()) { - // Adjust client coordinates' origin to be top left of inner frame viewport. - PassRefPtr<ClientRect> rect = closestClickableElement->getBoundingClientRect(); - IntPoint newTouchPoint = touchPoint; - IntSize offset = IntSize(rect->left(), rect->top()); - newTouchPoint -= offset; - - HTMLFrameOwnerElement* owner = static_cast<HTMLFrameOwnerElement*>(closestClickableElement); - Document* childDocument = owner->contentFrame()->document(); - return findCandidatePointForTouch(newTouchPoint, childDocument); - } - return view->contentsToWindow(largestIntersectionRect).center(); -} - -/*! - \enum QWebPage::FindFlag - - This enum describes the options available to the findText() function. The options - can be OR-ed together from the following list: - - \value FindBackward Searches backwards instead of forwards. - \value FindCaseSensitively By default findText() works case insensitive. Specifying this option - changes the behaviour to a case sensitive find operation. - \value FindWrapsAroundDocument Makes findText() restart from the beginning of the document if the end - was reached and the text was not found. - \value HighlightAllOccurrences Highlights all existing occurrences of a specific string. -*/ - -/*! - \enum QWebPage::LinkDelegationPolicy - - This enum defines the delegation policies a webpage can have when activating links and emitting - the linkClicked() signal. - - \value DontDelegateLinks No links are delegated. Instead, QWebPage tries to handle them all. - \value DelegateExternalLinks When activating links that point to documents not stored on the - local filesystem or an equivalent - such as the Qt resource system - then linkClicked() is emitted. - \value DelegateAllLinks Whenever a link is activated the linkClicked() signal is emitted. - - \sa QWebPage::linkDelegationPolicy -*/ - -/*! - \enum QWebPage::NavigationType - - This enum describes the types of navigation available when browsing through hyperlinked - documents. - - \value NavigationTypeLinkClicked The user clicked on a link or pressed return on a focused link. - \value NavigationTypeFormSubmitted The user activated a submit button for an HTML form. - \value NavigationTypeBackOrForward Navigation to a previously shown document in the back or forward history is requested. - \value NavigationTypeReload The user activated the reload action. - \value NavigationTypeFormResubmitted An HTML form was submitted a second time. - \value NavigationTypeOther A navigation to another document using a method not listed above. - - \sa acceptNavigationRequest() -*/ - -/*! - \enum QWebPage::WebAction - - This enum describes the types of action which can be performed on the web page. - - Actions only have an effect when they are applicable. The availability of - actions can be be determined by checking \l{QAction::}{isEnabled()} on the - action returned by action(). - - One method of enabling the text editing, cursor movement, and text selection actions - is by setting \l contentEditable to true. - - \value NoWebAction No action is triggered. - \value OpenLink Open the current link. - \value OpenLinkInNewWindow Open the current link in a new window. - \value OpenFrameInNewWindow Replicate the current frame in a new window. - \value DownloadLinkToDisk Download the current link to the disk. - \value CopyLinkToClipboard Copy the current link to the clipboard. - \value OpenImageInNewWindow Open the highlighted image in a new window. - \value DownloadImageToDisk Download the highlighted image to the disk. - \value CopyImageToClipboard Copy the highlighted image to the clipboard. - \value Back Navigate back in the history of navigated links. - \value Forward Navigate forward in the history of navigated links. - \value Stop Stop loading the current page. - \value StopScheduledPageRefresh Stop all pending page refresh/redirect requests. - \value Reload Reload the current page. - \value ReloadAndBypassCache Reload the current page, but do not use any local cache. (Added in Qt 4.6) - \value Cut Cut the content currently selected into the clipboard. - \value Copy Copy the content currently selected into the clipboard. - \value Paste Paste content from the clipboard. - \value Undo Undo the last editing action. - \value Redo Redo the last editing action. - \value MoveToNextChar Move the cursor to the next character. - \value MoveToPreviousChar Move the cursor to the previous character. - \value MoveToNextWord Move the cursor to the next word. - \value MoveToPreviousWord Move the cursor to the previous word. - \value MoveToNextLine Move the cursor to the next line. - \value MoveToPreviousLine Move the cursor to the previous line. - \value MoveToStartOfLine Move the cursor to the start of the line. - \value MoveToEndOfLine Move the cursor to the end of the line. - \value MoveToStartOfBlock Move the cursor to the start of the block. - \value MoveToEndOfBlock Move the cursor to the end of the block. - \value MoveToStartOfDocument Move the cursor to the start of the document. - \value MoveToEndOfDocument Move the cursor to the end of the document. - \value SelectNextChar Select to the next character. - \value SelectPreviousChar Select to the previous character. - \value SelectNextWord Select to the next word. - \value SelectPreviousWord Select to the previous word. - \value SelectNextLine Select to the next line. - \value SelectPreviousLine Select to the previous line. - \value SelectStartOfLine Select to the start of the line. - \value SelectEndOfLine Select to the end of the line. - \value SelectStartOfBlock Select to the start of the block. - \value SelectEndOfBlock Select to the end of the block. - \value SelectStartOfDocument Select to the start of the document. - \value SelectEndOfDocument Select to the end of the document. - \value DeleteStartOfWord Delete to the start of the word. - \value DeleteEndOfWord Delete to the end of the word. - \value SetTextDirectionDefault Set the text direction to the default direction. - \value SetTextDirectionLeftToRight Set the text direction to left-to-right. - \value SetTextDirectionRightToLeft Set the text direction to right-to-left. - \value ToggleBold Toggle the formatting between bold and normal weight. - \value ToggleItalic Toggle the formatting between italic and normal style. - \value ToggleUnderline Toggle underlining. - \value InspectElement Show the Web Inspector with the currently highlighted HTML element. - \value InsertParagraphSeparator Insert a new paragraph. - \value InsertLineSeparator Insert a new line. - \value SelectAll Selects all content. - \value PasteAndMatchStyle Paste content from the clipboard with current style. - \value RemoveFormat Removes formatting and style. - \value ToggleStrikethrough Toggle the formatting between strikethrough and normal style. - \value ToggleSubscript Toggle the formatting between subscript and baseline. - \value ToggleSuperscript Toggle the formatting between supercript and baseline. - \value InsertUnorderedList Toggles the selection between an ordered list and a normal block. - \value InsertOrderedList Toggles the selection between an ordered list and a normal block. - \value Indent Increases the indentation of the currently selected format block by one increment. - \value Outdent Decreases the indentation of the currently selected format block by one increment. - \value AlignCenter Applies center alignment to content. - \value AlignJustified Applies full justification to content. - \value AlignLeft Applies left justification to content. - \value AlignRight Applies right justification to content. - - - \omitvalue WebActionCount - -*/ - -/*! - \enum QWebPage::WebWindowType - - This enum describes the types of window that can be created by the createWindow() function. - - \value WebBrowserWindow The window is a regular web browser window. - \value WebModalDialog The window acts as modal dialog. -*/ - - -/*! - \class QWebPage::ViewportAttributes - \since 4.7 - \brief The QWebPage::ViewportAttributes class describes hints that can be applied to a viewport. - - QWebPage::ViewportAttributes provides a description of a viewport, such as viewport geometry, - initial scale factor with limits, plus information about whether a user should be able - to scale the contents in the viewport or not, ie. by zooming. - - ViewportAttributes can be set by a web author using the viewport meta tag extension, documented - at \l{http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/usingtheviewport/usingtheviewport.html}{Safari Reference Library: Using the Viewport Meta Tag}. - - All values might not be set, as such when dealing with the hints, the developer needs to - check whether the values are valid. Negative values denote an invalid qreal value. - - \inmodule QtWebKit -*/ - -/*! - Constructs an empty QWebPage::ViewportAttributes. -*/ -QWebPage::ViewportAttributes::ViewportAttributes() - : d(0) - , m_initialScaleFactor(-1.0) - , m_minimumScaleFactor(-1.0) - , m_maximumScaleFactor(-1.0) - , m_devicePixelRatio(-1.0) - , m_isUserScalable(true) - , m_isValid(false) -{ - -} - -/*! - Constructs a QWebPage::ViewportAttributes which is a copy from \a other . -*/ -QWebPage::ViewportAttributes::ViewportAttributes(const QWebPage::ViewportAttributes& other) - : d(other.d) - , m_initialScaleFactor(other.m_initialScaleFactor) - , m_minimumScaleFactor(other.m_minimumScaleFactor) - , m_maximumScaleFactor(other.m_maximumScaleFactor) - , m_devicePixelRatio(other.m_devicePixelRatio) - , m_isUserScalable(other.m_isUserScalable) - , m_isValid(other.m_isValid) - , m_size(other.m_size) -{ - -} - -/*! - Destroys the QWebPage::ViewportAttributes. -*/ -QWebPage::ViewportAttributes::~ViewportAttributes() -{ - -} - -/*! - Assigns the given QWebPage::ViewportAttributes to this viewport hints and returns a - reference to this. -*/ -QWebPage::ViewportAttributes& QWebPage::ViewportAttributes::operator=(const QWebPage::ViewportAttributes& other) -{ - if (this != &other) { - d = other.d; - m_initialScaleFactor = other.m_initialScaleFactor; - m_minimumScaleFactor = other.m_minimumScaleFactor; - m_maximumScaleFactor = other.m_maximumScaleFactor; - m_isUserScalable = other.m_isUserScalable; - m_isValid = other.m_isValid; - m_size = other.m_size; - } - - return *this; -} - -/*! \fn inline bool QWebPage::ViewportAttributes::isValid() const - Returns whether this is a valid ViewportAttributes or not. - - An invalid ViewportAttributes will have an empty QSize, negative values for scale factors and - true for the boolean isUserScalable. -*/ - -/*! \fn inline QSize QWebPage::ViewportAttributes::size() const - Returns the size of the viewport. -*/ - -/*! \fn inline qreal QWebPage::ViewportAttributes::initialScaleFactor() const - Returns the initial scale of the viewport as a multiplier. -*/ - -/*! \fn inline qreal QWebPage::ViewportAttributes::minimumScaleFactor() const - Returns the minimum scale value of the viewport as a multiplier. -*/ - -/*! \fn inline qreal QWebPage::ViewportAttributes::maximumScaleFactor() const - Returns the maximum scale value of the viewport as a multiplier. -*/ - -/*! \fn inline bool QWebPage::ViewportAttributes::isUserScalable() const - Determines whether or not the scale can be modified by the user. -*/ - - -/*! - \class QWebPage - \since 4.4 - \brief The QWebPage class provides an object to view and edit web documents. - - \inmodule QtWebKit - - QWebPage holds a main frame responsible for web content, settings, the history - of navigated links and actions. This class can be used, together with QWebFrame, - to provide functionality like QWebView in a widget-less environment. - - QWebPage's API is very similar to QWebView, as you are still provided with - common functions like action() (known as - \l{QWebView::pageAction()}{pageAction}() in QWebView), triggerAction(), - findText() and settings(). More QWebView-like functions can be found in the - main frame of QWebPage, obtained via the mainFrame() function. For example, - the \l{QWebFrame::load()}{load}(), \l{QWebFrame::setUrl()}{setUrl}() and - \l{QWebFrame::setHtml()}{setHtml}() functions for QWebPage can be accessed - using QWebFrame. - - The loadStarted() signal is emitted when the page begins to load.The - loadProgress() signal, on the other hand, is emitted whenever an element - of the web page completes loading, such as an embedded image, a script, - etc. Finally, the loadFinished() signal is emitted when the page has - loaded completely. Its argument, either true or false, indicates whether - or not the load operation succeeded. - - \section1 Using QWebPage in a Widget-less Environment - - Before you begin painting a QWebPage object, you need to set the size of - the viewport by calling setViewportSize(). Then, you invoke the main - frame's render function (QWebFrame::render()). An example of this - is shown in the code snippet below. - - Suppose we have a \c Thumbnail class as follows: - - \snippet webkitsnippets/webpage/main.cpp 0 - - The \c Thumbnail's constructor takes in a \a url. We connect our QWebPage - object's \l{QWebPage::}{loadFinished()} signal to our private slot, - \c render(). - - \snippet webkitsnippets/webpage/main.cpp 1 - - The \c render() function shows how we can paint a thumbnail using a - QWebPage object. - - \snippet webkitsnippets/webpage/main.cpp 2 - - We begin by setting the \l{QWebPage::viewportSize()}{viewportSize} and - then we instantiate a QImage object, \c image, with the same size as our - \l{QWebPage::viewportSize()}{viewportSize}. This image is then sent - as a parameter to \c painter. Next, we render the contents of the main - frame and its subframes into \c painter. Finally, we save the scaled image. - - \sa QWebFrame -*/ - -/*! - Constructs an empty QWebPage with parent \a parent. -*/ -QWebPage::QWebPage(QObject *parent) - : QObject(parent) - , d(new QWebPagePrivate(this)) -{ - setView(qobject_cast<QWidget*>(parent)); - - connect(this, SIGNAL(loadProgress(int)), this, SLOT(_q_onLoadProgressChanged(int))); -#ifndef NDEBUG - connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(_q_cleanupLeakMessages())); -#endif -} - -/*! - Destroys the web page. -*/ -QWebPage::~QWebPage() -{ - d->createMainFrame(); - FrameLoader *loader = d->mainFrame->d->frame->loader(); - if (loader) - loader->detachFromParent(); - delete d; -} - -/*! - Returns the main frame of the page. - - The main frame provides access to the hierarchy of sub-frames and is also needed if you - want to explicitly render a web page into a given painter. - - \sa currentFrame() -*/ -QWebFrame *QWebPage::mainFrame() const -{ - d->createMainFrame(); - return d->mainFrame; -} - -/*! - Returns the frame currently active. - - \sa mainFrame(), frameCreated() -*/ -QWebFrame *QWebPage::currentFrame() const -{ - d->createMainFrame(); - WebCore::Frame *frame = d->page->focusController()->focusedOrMainFrame(); - return qobject_cast<QWebFrame*>(frame->loader()->networkingContext()->originatingObject()); -} - - -/*! - \since 4.6 - - Returns the frame at the given point \a pos, or 0 if there is no frame at - that position. - - \sa mainFrame(), currentFrame() -*/ -QWebFrame* QWebPage::frameAt(const QPoint& pos) const -{ - QWebFrame* webFrame = mainFrame(); - if (!webFrame->geometry().contains(pos)) - return 0; - QWebHitTestResult hitTestResult = webFrame->hitTestContent(pos); - return hitTestResult.frame(); -} - -/*! - Returns a pointer to the view's history of navigated web pages. -*/ -QWebHistory *QWebPage::history() const -{ - d->createMainFrame(); - return &d->history; -} - -/*! - Sets the \a view that is associated with the web page. - - \sa view() -*/ -void QWebPage::setView(QWidget* view) -{ - if (this->view() == view) - return; - - d->view = view; - setViewportSize(view ? view->size() : QSize(0, 0)); - - // If we have no client, we install a special client delegating - // the responsibility to the QWidget. This is the code path - // handling a.o. the "legacy" QWebView. - // - // If such a special delegate already exist, we substitute the view. - - if (d->client) { - if (d->client->isQWidgetClient()) - static_cast<PageClientQWidget*>(d->client.get())->view = view; - return; - } - - if (view) - d->client = new PageClientQWidget(view, this); -} - -/*! - Returns the view widget that is associated with the web page. - - \sa setView() -*/ -QWidget *QWebPage::view() const -{ - return d->view.data(); -} - -/*! - This function is called whenever a JavaScript program tries to print a \a message to the web browser's console. - - For example in case of evaluation errors the source URL may be provided in \a sourceID as well as the \a lineNumber. - - The default implementation prints nothing. -*/ -void QWebPage::javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID) -{ - Q_UNUSED(sourceID) - - // Catch plugin logDestroy message for LayoutTests/plugins/open-and-close-window-with-plugin.html - // At this point DRT's WebPage has already been destroyed - if (QWebPagePrivate::drtRun) { - if (message == "PLUGIN: NPP_Destroy") - fprintf (stdout, "CONSOLE MESSAGE: line %d: %s\n", lineNumber, message.toUtf8().constData()); - } -} - -/*! - This function is called whenever a JavaScript program running inside \a frame calls the alert() function with - the message \a msg. - - The default implementation shows the message, \a msg, with QMessageBox::information. -*/ -void QWebPage::javaScriptAlert(QWebFrame *frame, const QString& msg) -{ - Q_UNUSED(frame) -#ifndef QT_NO_MESSAGEBOX - QWidget* parent = (d->client) ? d->client->ownerWidget() : 0; - QMessageBox::information(parent, tr("JavaScript Alert - %1").arg(mainFrame()->url().host()), Qt::escape(msg), QMessageBox::Ok); -#endif -} - -/*! - This function is called whenever a JavaScript program running inside \a frame calls the confirm() function - with the message, \a msg. Returns true if the user confirms the message; otherwise returns false. - - The default implementation executes the query using QMessageBox::information with QMessageBox::Yes and QMessageBox::No buttons. -*/ -bool QWebPage::javaScriptConfirm(QWebFrame *frame, const QString& msg) -{ - Q_UNUSED(frame) -#ifdef QT_NO_MESSAGEBOX - return true; -#else - QWidget* parent = (d->client) ? d->client->ownerWidget() : 0; - return QMessageBox::Yes == QMessageBox::information(parent, tr("JavaScript Confirm - %1").arg(mainFrame()->url().host()), Qt::escape(msg), QMessageBox::Yes, QMessageBox::No); -#endif -} - -/*! - This function is called whenever a JavaScript program running inside \a frame tries to prompt the user for input. - The program may provide an optional message, \a msg, as well as a default value for the input in \a defaultValue. - - If the prompt was cancelled by the user the implementation should return false; otherwise the - result should be written to \a result and true should be returned. If the prompt was not cancelled by the - user, the implementation should return true and the result string must not be null. - - The default implementation uses QInputDialog::getText(). -*/ -bool QWebPage::javaScriptPrompt(QWebFrame *frame, const QString& msg, const QString& defaultValue, QString* result) -{ - Q_UNUSED(frame) - bool ok = false; -#ifndef QT_NO_INPUTDIALOG - QWidget* parent = (d->client) ? d->client->ownerWidget() : 0; - QString x = QInputDialog::getText(parent, tr("JavaScript Prompt - %1").arg(mainFrame()->url().host()), Qt::escape(msg), QLineEdit::Normal, defaultValue, &ok); - if (ok && result) - *result = x; -#endif - return ok; -} - -/*! - \fn bool QWebPage::shouldInterruptJavaScript() - \since 4.6 - This function is called when a JavaScript program is running for a long period of time. - - If the user wanted to stop the JavaScript the implementation should return true; otherwise false. - - The default implementation executes the query using QMessageBox::information with QMessageBox::Yes and QMessageBox::No buttons. - - \warning Because of binary compatibility constraints, this function is not virtual. If you want to - provide your own implementation in a QWebPage subclass, reimplement the shouldInterruptJavaScript() - slot in your subclass instead. QtWebKit will dynamically detect the slot and call it. -*/ -bool QWebPage::shouldInterruptJavaScript() -{ -#ifdef QT_NO_MESSAGEBOX - return false; -#else - QWidget* parent = (d->client) ? d->client->ownerWidget() : 0; - return QMessageBox::Yes == QMessageBox::information(parent, tr("JavaScript Problem - %1").arg(mainFrame()->url().host()), tr("The script on this page appears to have a problem. Do you want to stop the script?"), QMessageBox::Yes, QMessageBox::No); -#endif -} - -void QWebPage::setFeaturePermission(QWebFrame* frame, Feature feature, PermissionPolicy policy) -{ - switch (feature) { - case Notifications: -#if ENABLE(NOTIFICATIONS) - if (policy == PermissionGrantedByUser) - NotificationPresenterClientQt::notificationPresenter()->allowNotificationForFrame(frame->d->frame); -#endif - break; - case Geolocation: -#if ENABLE(GEOLOCATION) - GeolocationPermissionClientQt::geolocationPermissionClient()->setPermission(frame, policy); -#endif - break; - - default: - break; - } -} - -/*! - This function is called whenever WebKit wants to create a new window of the given \a type, for - example when a JavaScript program requests to open a document in a new window. - - If the new window can be created, the new window's QWebPage is returned; otherwise a null pointer is returned. - - If the view associated with the web page is a QWebView object, then the default implementation forwards - the request to QWebView's createWindow() function; otherwise it returns a null pointer. - - If \a type is WebModalDialog, the application must call setWindowModality(Qt::ApplicationModal) on the new window. - - \note In the cases when the window creation is being triggered by JavaScript, apart from - reimplementing this method application must also set the JavaScriptCanOpenWindows attribute - of QWebSettings to true in order for it to get called. - - \sa acceptNavigationRequest(), QWebView::createWindow() -*/ -QWebPage *QWebPage::createWindow(WebWindowType type) -{ - QWebView *webView = qobject_cast<QWebView*>(view()); - if (webView) { - QWebView *newView = webView->createWindow(type); - if (newView) - return newView->page(); - } - return 0; -} - -/*! - This function is called whenever WebKit encounters a HTML object element with type "application/x-qt-plugin". It is - called regardless of the value of QWebSettings::PluginsEnabled. The \a classid, \a url, \a paramNames and \a paramValues - correspond to the HTML object element attributes and child elements to configure the embeddable object. -*/ -QObject *QWebPage::createPlugin(const QString &classid, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues) -{ - Q_UNUSED(classid) - Q_UNUSED(url) - Q_UNUSED(paramNames) - Q_UNUSED(paramValues) - return 0; -} - -static void extractContentTypeFromHash(const HashSet<String>& types, QStringList* list) -{ - if (!list) - return; - - HashSet<String>::const_iterator endIt = types.end(); - for (HashSet<String>::const_iterator it = types.begin(); it != endIt; ++it) - *list << *it; -} - -static void extractContentTypeFromPluginVector(const Vector<PluginPackage*>& plugins, QStringList* list) -{ - if (!list) - return; - - for (unsigned int i = 0; i < plugins.size(); ++i) { - MIMEToDescriptionsMap::const_iterator map_it = plugins[i]->mimeToDescriptions().begin(); - MIMEToDescriptionsMap::const_iterator map_end = plugins[i]->mimeToDescriptions().end(); - for (; map_it != map_end; ++map_it) - *list << map_it->first; - } -} - -/*! - * Returns the list of all content types supported by QWebPage. - */ -QStringList QWebPage::supportedContentTypes() const -{ - QStringList mimeTypes; - - extractContentTypeFromHash(MIMETypeRegistry::getSupportedImageMIMETypes(), &mimeTypes); - extractContentTypeFromHash(MIMETypeRegistry::getSupportedNonImageMIMETypes(), &mimeTypes); - if (d->page->settings() && d->page->settings()->arePluginsEnabled()) - extractContentTypeFromPluginVector(PluginDatabase::installedPlugins()->plugins(), &mimeTypes); - - return mimeTypes; -} - -/*! - * Returns true if QWebPage can handle the given \a mimeType; otherwise, returns false. - */ -bool QWebPage::supportsContentType(const QString& mimeType) const -{ - const String type = mimeType.toLower(); - if (MIMETypeRegistry::isSupportedImageMIMEType(type)) - return true; - - if (MIMETypeRegistry::isSupportedNonImageMIMEType(type)) - return true; - - if (d->page->settings() && d->page->settings()->arePluginsEnabled() - && PluginDatabase::installedPlugins()->isMIMETypeRegistered(type)) - return true; - - return false; -} - -static WebCore::FrameLoadRequest frameLoadRequest(const QUrl &url, WebCore::Frame *frame) -{ - return WebCore::FrameLoadRequest(frame->document()->securityOrigin(), - WebCore::ResourceRequest(url, frame->loader()->outgoingReferrer())); -} - -static void openNewWindow(const QUrl& url, WebCore::Frame* frame) -{ - if (Page* oldPage = frame->page()) { - WindowFeatures features; - NavigationAction action; - if (Page* newPage = oldPage->chrome()->createWindow(frame, - frameLoadRequest(url, frame), features, action)) - newPage->chrome()->show(); - } -} - -static void collectChildFrames(QWebFrame* frame, QList<QWebFrame*>& list) -{ - list << frame->childFrames(); - QListIterator<QWebFrame*> it(frame->childFrames()); - while (it.hasNext()) { - collectChildFrames(it.next(), list); - } -} - -/*! - This function can be called to trigger the specified \a action. - It is also called by QtWebKit if the user triggers the action, for example - through a context menu item. - - If \a action is a checkable action then \a checked specified whether the action - is toggled or not. - - \sa action() -*/ -void QWebPage::triggerAction(WebAction action, bool) -{ - WebCore::Frame *frame = d->page->focusController()->focusedOrMainFrame(); - if (!frame) - return; - WebCore::Editor *editor = frame->editor(); - const char *command = 0; - - switch (action) { - case OpenLink: - if (QWebFrame *targetFrame = d->hitTestResult.linkTargetFrame()) { - WTF::RefPtr<WebCore::Frame> wcFrame = targetFrame->d->frame; - targetFrame->d->frame->loader()->loadFrameRequest(frameLoadRequest(d->hitTestResult.linkUrl(), wcFrame.get()), - /*lockHistory*/ false, /*lockBackForwardList*/ false, /*event*/ 0, - /*FormState*/ 0, SendReferrer); - break; - } - // fall through - case OpenLinkInNewWindow: - openNewWindow(d->hitTestResult.linkUrl(), frame); - break; - case OpenFrameInNewWindow: { - KURL url = frame->loader()->documentLoader()->unreachableURL(); - if (url.isEmpty()) - url = frame->loader()->documentLoader()->url(); - openNewWindow(url, frame); - break; - } - case CopyLinkToClipboard: { -#if defined(Q_WS_X11) - bool oldSelectionMode = Pasteboard::generalPasteboard()->isSelectionMode(); - Pasteboard::generalPasteboard()->setSelectionMode(true); - editor->copyURL(d->hitTestResult.linkUrl(), d->hitTestResult.linkText()); - Pasteboard::generalPasteboard()->setSelectionMode(oldSelectionMode); -#endif - editor->copyURL(d->hitTestResult.linkUrl(), d->hitTestResult.linkText()); - break; - } - case OpenImageInNewWindow: - openNewWindow(d->hitTestResult.imageUrl(), frame); - break; - case DownloadImageToDisk: - frame->loader()->client()->startDownload(WebCore::ResourceRequest(d->hitTestResult.imageUrl(), frame->loader()->outgoingReferrer())); - break; - case DownloadLinkToDisk: - frame->loader()->client()->startDownload(WebCore::ResourceRequest(d->hitTestResult.linkUrl(), frame->loader()->outgoingReferrer())); - break; -#ifndef QT_NO_CLIPBOARD - case CopyImageToClipboard: - QApplication::clipboard()->setPixmap(d->hitTestResult.pixmap()); - break; -#endif - case Back: - d->page->goBack(); - break; - case Forward: - d->page->goForward(); - break; - case Stop: - mainFrame()->d->frame->loader()->stopForUserCancel(); - d->updateNavigationActions(); - break; - case Reload: - mainFrame()->d->frame->loader()->reload(/*endtoendreload*/false); - break; - case ReloadAndBypassCache: - mainFrame()->d->frame->loader()->reload(/*endtoendreload*/true); - break; - case SetTextDirectionDefault: - editor->setBaseWritingDirection(NaturalWritingDirection); - break; - case SetTextDirectionLeftToRight: - editor->setBaseWritingDirection(LeftToRightWritingDirection); - break; - case SetTextDirectionRightToLeft: - editor->setBaseWritingDirection(RightToLeftWritingDirection); - break; - case InspectElement: { -#if ENABLE(INSPECTOR) - if (!d->hitTestResult.isNull()) { - d->getOrCreateInspector(); // Make sure the inspector is created - d->inspector->show(); // The inspector is expected to be shown on inspection - d->page->inspectorController()->inspect(d->hitTestResult.d->innerNonSharedNode.get()); - } -#endif - break; - } - case StopScheduledPageRefresh: { - QWebFrame* topFrame = mainFrame(); - topFrame->d->frame->navigationScheduler()->cancel(); - QList<QWebFrame*> childFrames; - collectChildFrames(topFrame, childFrames); - QListIterator<QWebFrame*> it(childFrames); - while (it.hasNext()) - it.next()->d->frame->navigationScheduler()->cancel(); - break; - } - default: - command = QWebPagePrivate::editorCommandForWebActions(action); - break; - } - - if (command) - editor->command(command).execute(); -} - -QSize QWebPage::viewportSize() const -{ - if (d->mainFrame && d->mainFrame->d->frame->view()) - return d->mainFrame->d->frame->view()->frameRect().size(); - - return d->viewportSize; -} - -/*! - \property QWebPage::viewportSize - \brief the size of the viewport - - The size affects for example the visibility of scrollbars - if the document is larger than the viewport. - - By default, for a newly-created Web page, this property contains a size with - zero width and height. - - \sa QWebFrame::render(), preferredContentsSize -*/ -void QWebPage::setViewportSize(const QSize &size) const -{ - d->viewportSize = size; - - QWebFrame *frame = mainFrame(); - if (frame->d->frame && frame->d->frame->view()) { - WebCore::FrameView* view = frame->d->frame->view(); - view->setFrameRect(QRect(QPoint(0, 0), size)); - view->adjustViewSize(); - } -} - -static int getintenv(const char* variable) -{ - bool ok; - int value = qgetenv(variable).toInt(&ok); - return (ok) ? value : -1; -} - -static QSize queryDeviceSizeForScreenContainingWidget(const QWidget* widget) -{ - QDesktopWidget* desktop = QApplication::desktop(); - if (!desktop) - return QSize(); - - QSize size; - - if (widget) { - // Returns the available geometry of the screen which contains widget. - // NOTE: this must be the the full screen size including any fixed status areas etc. - size = desktop->availableGeometry(widget).size(); - } else - size = desktop->availableGeometry().size(); - - // This must be in portrait mode, adjust if not. - if (size.width() > size.height()) { - int width = size.width(); - size.setWidth(size.height()); - size.setHeight(width); - } - - return size; -} - -/*! - Computes the optimal viewport configuration given the \a availableSize, when - user interface components are disregarded. - - The configuration is also dependent on the device screen size which is obtained - automatically. For testing purposes the size can be overridden by setting two - environment variables QTWEBKIT_DEVICE_WIDTH and QTWEBKIT_DEVICE_HEIGHT, which - both needs to be set. - - The ViewportAttributes includes a pixel density ratio, which will also be exposed to - the web author though the -webkit-pixel-ratio media feature. This is the ratio - between 1 density-independent pixel (DPI) and physical pixels. - - A density-independent pixel is equivalent to one physical pixel on a 160 DPI screen, - so on our platform assumes that as the baseline density. - - The conversion of DIP units to screen pixels is quite simple: - - pixels = DIPs * (density / 160). - - Thus, on a 240 DPI screen, 1 DIPs would equal 1.5 physical pixels. - - An invalid instance will be returned in the case an empty size is passed to the - method. - - \note The density is automatically obtained from the DPI of the screen where the page - is being shown, but as many X11 servers are reporting wrong DPI, it is possible to - override it using QX11Info::setAppDpiY(). -*/ - -QWebPage::ViewportAttributes QWebPage::viewportAttributesForSize(const QSize& availableSize) const -{ - static int desktopWidth = 980; - - ViewportAttributes result; - - if (availableSize.isEmpty()) - return result; // Returns an invalid instance. - - int deviceWidth = getintenv("QTWEBKIT_DEVICE_WIDTH"); - int deviceHeight = getintenv("QTWEBKIT_DEVICE_HEIGHT"); - - // Both environment variables need to be set - or they will be ignored. - if (deviceWidth < 0 && deviceHeight < 0) { - QSize size = queryDeviceSizeForScreenContainingWidget((d->client) ? d->client->ownerWidget() : 0); - deviceWidth = size.width(); - deviceHeight = size.height(); - } - - WebCore::ViewportAttributes conf = WebCore::computeViewportAttributes(d->viewportArguments(), desktopWidth, deviceWidth, deviceHeight, qt_defaultDpi(), availableSize); - - result.m_isValid = true; - result.m_size = conf.layoutSize; - result.m_initialScaleFactor = conf.initialScale; - result.m_minimumScaleFactor = conf.minimumScale; - result.m_maximumScaleFactor = conf.maximumScale; - result.m_devicePixelRatio = conf.devicePixelRatio; - result.m_isUserScalable = conf.userScalable; - - d->pixelRatio = conf.devicePixelRatio; - - return result; -} - -QSize QWebPage::preferredContentsSize() const -{ - QWebFrame* frame = d->mainFrame; - if (frame) { - WebCore::FrameView* view = frame->d->frame->view(); - if (view && view->useFixedLayout()) - return d->mainFrame->d->frame->view()->fixedLayoutSize(); - } - - return d->fixedLayoutSize; -} - -/*! - \property QWebPage::preferredContentsSize - \since 4.6 - \brief a custom size used for laying out the page contents. - - By default all pages are laid out using the viewport of the page as the base. - - As pages mostly are designed for desktop usage, they often do not layout properly - on small devices as the contents require a certain view width. For this reason - it is common to use a different layout size and then scale the contents to fit - within the actual view. - - If this property is set to a valid size, this size is used for all layout needs - instead of the size of the viewport. - - Setting an invalid size, makes the page fall back to using the viewport size for layout. - - \sa viewportSize -*/ -void QWebPage::setPreferredContentsSize(const QSize& size) const -{ - // FIXME: Rename this method to setCustomLayoutSize - - d->fixedLayoutSize = size; - - QWebFrame* frame = mainFrame(); - if (!frame->d->frame || !frame->d->frame->view()) - return; - - WebCore::FrameView* view = frame->d->frame->view(); - - if (size.isValid()) { - view->setUseFixedLayout(true); - view->setFixedLayoutSize(size); - } else if (view->useFixedLayout()) - view->setUseFixedLayout(false); - - view->layout(); -} - -/* - This function is to be called after any (animated) scroll/pan has ended, in the case the application handles the - scrolling/panning of the web contents. This is commonly used in combination with tiling where is it common for - the application to pan the actual view, which then resizes itself to the size of the contents. - - \note Calling this function makes WebKit stop trying to calculate the visibleContentRect. To turn that on - again, call this method with an empty rect. - - \sa QGraphicsWebView::resizesToContents, QWebSettings::TiledBackingStoreEnabled -*/ -void QWebPage::setActualVisibleContentRect(const QRect& rect) const -{ - QWebFrame* frame = mainFrame(); - if (!frame->d->frame || !frame->d->frame->view()) - return; - - WebCore::FrameView* view = frame->d->frame->view(); - view->setActualVisibleContentRect(rect); -} - -/*! - \fn bool QWebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type) - - This function is called whenever WebKit requests to navigate \a frame to the resource specified by \a request by means of - the specified navigation type \a type. - - If \a frame is a null pointer then navigation to a new window is requested. If the request is - accepted createWindow() will be called. - - The default implementation interprets the page's linkDelegationPolicy and emits linkClicked accordingly or returns true - to let QWebPage handle the navigation itself. - - \sa createWindow() -*/ -bool QWebPage::acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type) -{ - Q_UNUSED(frame) - if (type == NavigationTypeLinkClicked) { - switch (d->linkPolicy) { - case DontDelegateLinks: - return true; - - case DelegateExternalLinks: - if (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal(request.url().scheme())) - return true; - emit linkClicked(request.url()); - return false; - - case DelegateAllLinks: - emit linkClicked(request.url()); - return false; - } - } - return true; -} - -/*! - \property QWebPage::hasSelection - \brief whether this page contains selected content or not. - - \sa selectionChanged() -*/ -bool QWebPage::hasSelection() const -{ - d->createMainFrame(); - WebCore::Frame* frame = d->page->focusController()->focusedOrMainFrame(); - if (frame) - return (frame->selection()->selection().selectionType() != VisibleSelection::NoSelection); - return false; -} - -/*! - \property QWebPage::selectedText - \brief the text currently selected - - By default, this property contains an empty string. - - \sa selectionChanged(), selectedHtml() -*/ -QString QWebPage::selectedText() const -{ - d->createMainFrame(); - WebCore::Frame* frame = d->page->focusController()->focusedOrMainFrame(); - if (frame->selection()->selection().selectionType() == VisibleSelection::NoSelection) - return QString(); - return frame->editor()->selectedText(); -} - -/*! - \since 4.8 - \property QWebPage::selectedHtml - \brief the HTML currently selected - - By default, this property contains an empty string. - - \sa selectionChanged(), selectedText() -*/ -QString QWebPage::selectedHtml() const -{ - d->createMainFrame(); - return d->page->focusController()->focusedOrMainFrame()->editor()->selectedRange()->toHTML(); -} - -#ifndef QT_NO_ACTION -/*! - Returns a QAction for the specified WebAction \a action. - - The action is owned by the QWebPage but you can customize the look by - changing its properties. - - QWebPage also takes care of implementing the action, so that upon - triggering the corresponding action is performed on the page. - - \sa triggerAction() -*/ -QAction *QWebPage::action(WebAction action) const -{ - if (action == QWebPage::NoWebAction) return 0; - if (d->actions[action]) - return d->actions[action]; - - QString text; - QIcon icon; - QStyle *style = d->client ? d->client->style() : qApp->style(); - bool checkable = false; - - switch (action) { - case OpenLink: - text = contextMenuItemTagOpenLink(); - break; - case OpenLinkInNewWindow: - text = contextMenuItemTagOpenLinkInNewWindow(); - break; - case OpenFrameInNewWindow: - text = contextMenuItemTagOpenFrameInNewWindow(); - break; - - case DownloadLinkToDisk: - text = contextMenuItemTagDownloadLinkToDisk(); - break; - case CopyLinkToClipboard: - text = contextMenuItemTagCopyLinkToClipboard(); - break; - - case OpenImageInNewWindow: - text = contextMenuItemTagOpenImageInNewWindow(); - break; - case DownloadImageToDisk: - text = contextMenuItemTagDownloadImageToDisk(); - break; - case CopyImageToClipboard: - text = contextMenuItemTagCopyImageToClipboard(); - break; - - case Back: - text = contextMenuItemTagGoBack(); - icon = style->standardIcon(QStyle::SP_ArrowBack); - break; - case Forward: - text = contextMenuItemTagGoForward(); - icon = style->standardIcon(QStyle::SP_ArrowForward); - break; - case Stop: - text = contextMenuItemTagStop(); - icon = style->standardIcon(QStyle::SP_BrowserStop); - break; - case Reload: - text = contextMenuItemTagReload(); - icon = style->standardIcon(QStyle::SP_BrowserReload); - break; - - case Cut: - text = contextMenuItemTagCut(); - break; - case Copy: - text = contextMenuItemTagCopy(); - break; - case Paste: - text = contextMenuItemTagPaste(); - break; - case SelectAll: - text = contextMenuItemTagSelectAll(); - break; -#ifndef QT_NO_UNDOSTACK - case Undo: { - QAction *a = undoStack()->createUndoAction(d->q); - d->actions[action] = a; - return a; - } - case Redo: { - QAction *a = undoStack()->createRedoAction(d->q); - d->actions[action] = a; - return a; - } -#endif // QT_NO_UNDOSTACK - case MoveToNextChar: - text = tr("Move the cursor to the next character"); - break; - case MoveToPreviousChar: - text = tr("Move the cursor to the previous character"); - break; - case MoveToNextWord: - text = tr("Move the cursor to the next word"); - break; - case MoveToPreviousWord: - text = tr("Move the cursor to the previous word"); - break; - case MoveToNextLine: - text = tr("Move the cursor to the next line"); - break; - case MoveToPreviousLine: - text = tr("Move the cursor to the previous line"); - break; - case MoveToStartOfLine: - text = tr("Move the cursor to the start of the line"); - break; - case MoveToEndOfLine: - text = tr("Move the cursor to the end of the line"); - break; - case MoveToStartOfBlock: - text = tr("Move the cursor to the start of the block"); - break; - case MoveToEndOfBlock: - text = tr("Move the cursor to the end of the block"); - break; - case MoveToStartOfDocument: - text = tr("Move the cursor to the start of the document"); - break; - case MoveToEndOfDocument: - text = tr("Move the cursor to the end of the document"); - break; - case SelectNextChar: - text = tr("Select to the next character"); - break; - case SelectPreviousChar: - text = tr("Select to the previous character"); - break; - case SelectNextWord: - text = tr("Select to the next word"); - break; - case SelectPreviousWord: - text = tr("Select to the previous word"); - break; - case SelectNextLine: - text = tr("Select to the next line"); - break; - case SelectPreviousLine: - text = tr("Select to the previous line"); - break; - case SelectStartOfLine: - text = tr("Select to the start of the line"); - break; - case SelectEndOfLine: - text = tr("Select to the end of the line"); - break; - case SelectStartOfBlock: - text = tr("Select to the start of the block"); - break; - case SelectEndOfBlock: - text = tr("Select to the end of the block"); - break; - case SelectStartOfDocument: - text = tr("Select to the start of the document"); - break; - case SelectEndOfDocument: - text = tr("Select to the end of the document"); - break; - case DeleteStartOfWord: - text = tr("Delete to the start of the word"); - break; - case DeleteEndOfWord: - text = tr("Delete to the end of the word"); - break; - - case SetTextDirectionDefault: - text = contextMenuItemTagDefaultDirection(); - break; - case SetTextDirectionLeftToRight: - text = contextMenuItemTagLeftToRight(); - checkable = true; - break; - case SetTextDirectionRightToLeft: - text = contextMenuItemTagRightToLeft(); - checkable = true; - break; - - case ToggleBold: - text = contextMenuItemTagBold(); - checkable = true; - break; - case ToggleItalic: - text = contextMenuItemTagItalic(); - checkable = true; - break; - case ToggleUnderline: - text = contextMenuItemTagUnderline(); - checkable = true; - break; - - case InspectElement: - text = contextMenuItemTagInspectElement(); - break; - - case InsertParagraphSeparator: - text = tr("Insert a new paragraph"); - break; - case InsertLineSeparator: - text = tr("Insert a new line"); - break; - - case PasteAndMatchStyle: - text = tr("Paste and Match Style"); - break; - case RemoveFormat: - text = tr("Remove formatting"); - break; - - case ToggleStrikethrough: - text = tr("Strikethrough"); - checkable = true; - break; - case ToggleSubscript: - text = tr("Subscript"); - checkable = true; - break; - case ToggleSuperscript: - text = tr("Superscript"); - checkable = true; - break; - case InsertUnorderedList: - text = tr("Insert Bulleted List"); - checkable = true; - break; - case InsertOrderedList: - text = tr("Insert Numbered List"); - checkable = true; - break; - case Indent: - text = tr("Indent"); - break; - case Outdent: - text = tr("Outdent"); - break; - case AlignCenter: - text = tr("Center"); - break; - case AlignJustified: - text = tr("Justify"); - break; - case AlignLeft: - text = tr("Align Left"); - break; - case AlignRight: - text = tr("Align Right"); - break; - - case NoWebAction: - return 0; - } - - if (text.isEmpty()) - return 0; - - QAction *a = new QAction(d->q); - a->setText(text); - a->setData(action); - a->setCheckable(checkable); - a->setIcon(icon); - - connect(a, SIGNAL(triggered(bool)), - this, SLOT(_q_webActionTriggered(bool))); - - d->actions[action] = a; - d->updateAction(action); - return a; -} -#endif // QT_NO_ACTION - -/*! - \property QWebPage::modified - \brief whether the page contains unsubmitted form data, or the contents have been changed. - - By default, this property is false. - - \sa contentsChanged(), contentEditable, undoStack() -*/ -bool QWebPage::isModified() const -{ -#ifdef QT_NO_UNDOSTACK - return false; -#else - if (!d->undoStack) - return false; - return d->undoStack->canUndo(); -#endif // QT_NO_UNDOSTACK -} - -#ifndef QT_NO_UNDOSTACK -/*! - Returns a pointer to the undo stack used for editable content. - - \sa modified -*/ -QUndoStack *QWebPage::undoStack() const -{ - if (!d->undoStack) - d->undoStack = new QUndoStack(const_cast<QWebPage *>(this)); - - return d->undoStack; -} -#endif // QT_NO_UNDOSTACK - -/*! \reimp -*/ -bool QWebPage::event(QEvent *ev) -{ - switch (ev->type()) { - case QEvent::Timer: - d->timerEvent(static_cast<QTimerEvent*>(ev)); - break; - case QEvent::MouseMove: - d->mouseMoveEvent(static_cast<QMouseEvent*>(ev)); - break; - case QEvent::GraphicsSceneMouseMove: - d->mouseMoveEvent(static_cast<QGraphicsSceneMouseEvent*>(ev)); - break; - case QEvent::MouseButtonPress: - d->mousePressEvent(static_cast<QMouseEvent*>(ev)); - break; - case QEvent::GraphicsSceneMousePress: - d->mousePressEvent(static_cast<QGraphicsSceneMouseEvent*>(ev)); - break; - case QEvent::MouseButtonDblClick: - d->mouseDoubleClickEvent(static_cast<QMouseEvent*>(ev)); - break; - case QEvent::GraphicsSceneMouseDoubleClick: - d->mouseDoubleClickEvent(static_cast<QGraphicsSceneMouseEvent*>(ev)); - break; - case QEvent::MouseButtonRelease: - d->mouseReleaseEvent(static_cast<QMouseEvent*>(ev)); - break; - case QEvent::GraphicsSceneMouseRelease: - d->mouseReleaseEvent(static_cast<QGraphicsSceneMouseEvent*>(ev)); - break; -#ifndef QT_NO_CONTEXTMENU - case QEvent::ContextMenu: - d->contextMenuEvent(static_cast<QContextMenuEvent*>(ev)->globalPos()); - break; - case QEvent::GraphicsSceneContextMenu: - d->contextMenuEvent(static_cast<QGraphicsSceneContextMenuEvent*>(ev)->screenPos()); - break; -#endif -#ifndef QT_NO_WHEELEVENT - case QEvent::Wheel: - d->wheelEvent(static_cast<QWheelEvent*>(ev)); - break; - case QEvent::GraphicsSceneWheel: - d->wheelEvent(static_cast<QGraphicsSceneWheelEvent*>(ev)); - break; -#endif - case QEvent::KeyPress: - d->keyPressEvent(static_cast<QKeyEvent*>(ev)); - break; - case QEvent::KeyRelease: - d->keyReleaseEvent(static_cast<QKeyEvent*>(ev)); - break; - case QEvent::FocusIn: - d->focusInEvent(static_cast<QFocusEvent*>(ev)); - break; - case QEvent::FocusOut: - d->focusOutEvent(static_cast<QFocusEvent*>(ev)); - break; -#ifndef QT_NO_DRAGANDDROP - case QEvent::DragEnter: - d->dragEnterEvent(static_cast<QDragEnterEvent*>(ev)); - break; - case QEvent::GraphicsSceneDragEnter: - d->dragEnterEvent(static_cast<QGraphicsSceneDragDropEvent*>(ev)); - break; - case QEvent::DragLeave: - d->dragLeaveEvent(static_cast<QDragLeaveEvent*>(ev)); - break; - case QEvent::GraphicsSceneDragLeave: - d->dragLeaveEvent(static_cast<QGraphicsSceneDragDropEvent*>(ev)); - break; - case QEvent::DragMove: - d->dragMoveEvent(static_cast<QDragMoveEvent*>(ev)); - break; - case QEvent::GraphicsSceneDragMove: - d->dragMoveEvent(static_cast<QGraphicsSceneDragDropEvent*>(ev)); - break; - case QEvent::Drop: - d->dropEvent(static_cast<QDropEvent*>(ev)); - break; - case QEvent::GraphicsSceneDrop: - d->dropEvent(static_cast<QGraphicsSceneDragDropEvent*>(ev)); - break; -#endif - case QEvent::InputMethod: - d->inputMethodEvent(static_cast<QInputMethodEvent*>(ev)); - break; - case QEvent::ShortcutOverride: - d->shortcutOverrideEvent(static_cast<QKeyEvent*>(ev)); - break; - case QEvent::Leave: - d->leaveEvent(ev); - break; - case QEvent::TouchBegin: - case QEvent::TouchUpdate: - case QEvent::TouchEnd: - // Return whether the default action was cancelled in the JS event handler - return d->touchEvent(static_cast<QTouchEvent*>(ev)); -#ifndef QT_NO_PROPERTIES - case QEvent::DynamicPropertyChange: - d->dynamicPropertyChangeEvent(static_cast<QDynamicPropertyChangeEvent*>(ev)); - break; -#endif - default: - return QObject::event(ev); - } - - return true; -} - -/*! - Similar to QWidget::focusNextPrevChild() it focuses the next focusable web element - if \a next is true; otherwise the previous element is focused. - - Returns true if it can find a new focusable element, or false if it can't. -*/ -bool QWebPage::focusNextPrevChild(bool next) -{ - QKeyEvent ev(QEvent::KeyPress, Qt::Key_Tab, Qt::KeyboardModifiers(next ? Qt::NoModifier : Qt::ShiftModifier)); - d->keyPressEvent(&ev); - bool hasFocusedNode = false; - Frame *frame = d->page->focusController()->focusedFrame(); - if (frame) { - Document *document = frame->document(); - hasFocusedNode = document && document->focusedNode(); - } - //qDebug() << "focusNextPrevChild(" << next << ") =" << ev.isAccepted() << "focusedNode?" << hasFocusedNode; - return hasFocusedNode; -} - -/*! - \property QWebPage::contentEditable - \brief whether the content in this QWebPage is editable or not - \since 4.5 - - If this property is enabled the contents of the page can be edited by the user through a visible - cursor. If disabled (the default) only HTML elements in the web page with their - \c{contenteditable} attribute set are editable. - - \sa modified, contentsChanged(), WebAction -*/ -void QWebPage::setContentEditable(bool editable) -{ - if (d->editable != editable) { - d->editable = editable; - d->page->setTabKeyCyclesThroughElements(!editable); - if (d->mainFrame) { - WebCore::Frame* frame = d->mainFrame->d->frame; - if (editable) { - frame->editor()->applyEditingStyleToBodyElement(); - // FIXME: mac port calls this if there is no selectedDOMRange - //frame->setSelectionFromNone(); - } - } - - d->updateEditorActions(); - } -} - -bool QWebPage::isContentEditable() const -{ - return d->editable; -} - -/*! - \property QWebPage::forwardUnsupportedContent - \brief whether QWebPage should forward unsupported content - - If enabled, the unsupportedContent() signal is emitted with a network reply that - can be used to read the content. - - If disabled, the download of such content is aborted immediately. - - By default unsupported content is not forwarded. -*/ - -void QWebPage::setForwardUnsupportedContent(bool forward) -{ - d->forwardUnsupportedContent = forward; -} - -bool QWebPage::forwardUnsupportedContent() const -{ - return d->forwardUnsupportedContent; -} - -/*! - \property QWebPage::linkDelegationPolicy - \brief how QWebPage should delegate the handling of links through the - linkClicked() signal - - The default is to delegate no links. -*/ - -void QWebPage::setLinkDelegationPolicy(LinkDelegationPolicy policy) -{ - d->linkPolicy = policy; -} - -QWebPage::LinkDelegationPolicy QWebPage::linkDelegationPolicy() const -{ - return d->linkPolicy; -} - -#ifndef QT_NO_CONTEXTMENU -/*! - Filters the context menu event, \a event, through handlers for scrollbars and - custom event handlers in the web page. Returns true if the event was handled; - otherwise false. - - A web page may swallow a context menu event through a custom event handler, allowing for context - menus to be implemented in HTML/JavaScript. This is used by \l{http://maps.google.com/}{Google - Maps}, for example. -*/ -bool QWebPage::swallowContextMenuEvent(QContextMenuEvent *event) -{ - d->page->contextMenuController()->clearContextMenu(); - - if (QWebFrame* webFrame = frameAt(event->pos())) { - Frame* frame = QWebFramePrivate::core(webFrame); - if (Scrollbar* scrollbar = frame->view()->scrollbarAtPoint(PlatformMouseEvent(event, 1).pos())) - return scrollbar->contextMenu(PlatformMouseEvent(event, 1)); - } - - WebCore::Frame* focusedFrame = d->page->focusController()->focusedOrMainFrame(); - focusedFrame->eventHandler()->sendContextMenuEvent(PlatformMouseEvent(event, 1)); - ContextMenu *menu = d->page->contextMenuController()->contextMenu(); - // If the website defines its own handler then sendContextMenuEvent takes care of - // calling/showing it and the context menu pointer will be zero. This is the case - // on maps.google.com for example. - - return !menu; -} -#endif // QT_NO_CONTEXTMENU - -/*! - Updates the page's actions depending on the position \a pos. For example if \a pos is over an image - element the CopyImageToClipboard action is enabled. -*/ -void QWebPage::updatePositionDependentActions(const QPoint &pos) -{ -#ifndef QT_NO_ACTION - // First we disable all actions, but keep track of which ones were originally enabled. - QBitArray originallyEnabledWebActions(QWebPage::WebActionCount); - for (int i = ContextMenuItemTagNoAction; i < ContextMenuItemBaseApplicationTag; ++i) { - QWebPage::WebAction action = webActionForContextMenuAction(WebCore::ContextMenuAction(i)); - if (QAction *a = this->action(action)) { - originallyEnabledWebActions.setBit(action, a->isEnabled()); - a->setEnabled(false); - } - } -#endif // QT_NO_ACTION - - d->createMainFrame(); - WebCore::Frame* focusedFrame = d->page->focusController()->focusedOrMainFrame(); - HitTestResult result = focusedFrame->eventHandler()->hitTestResultAtPoint(focusedFrame->view()->windowToContents(pos), /*allowShadowContent*/ false); - - if (result.scrollbar()) - d->hitTestResult = QWebHitTestResult(); - else - d->hitTestResult = QWebHitTestResult(new QWebHitTestResultPrivate(result)); - - d->page->contextMenuController()->setHitTestResult(result); - d->page->contextMenuController()->populate(); - -#if ENABLE(INSPECTOR) - if (d->page->inspectorController()->enabled()) - d->page->contextMenuController()->addInspectElementItem(); -#endif - - QBitArray visitedWebActions(QWebPage::WebActionCount); - -#ifndef QT_NO_CONTEXTMENU - delete d->currentContextMenu; - - // Then we let createContextMenu() enable the actions that are put into the menu - d->currentContextMenu = d->createContextMenu(d->page->contextMenuController()->contextMenu(), d->page->contextMenuController()->contextMenu()->platformDescription(), &visitedWebActions); -#endif // QT_NO_CONTEXTMENU - -#ifndef QT_NO_ACTION - // Finally, we restore the original enablement for the actions that were not put into the menu. - originallyEnabledWebActions &= ~visitedWebActions; // Mask out visited actions (they're part of the menu) - for (int i = 0; i < QWebPage::WebActionCount; ++i) { - if (originallyEnabledWebActions.at(i)) { - if (QAction *a = this->action(QWebPage::WebAction(i))) - a->setEnabled(true); - } - } -#endif // QT_NO_ACTION - - // This whole process ensures that any actions put into to the context menu has the right - // enablement, while also keeping the correct enablement for actions that were left out of - // the menu. - -} - - - -/*! - \enum QWebPage::Extension - - This enum describes the types of extensions that the page can support. Before using these extensions, you - should verify that the extension is supported by calling supportsExtension(). - - \value ChooseMultipleFilesExtension Whether the web page supports multiple file selection. - This extension is invoked when the web content requests one or more file names, for example - as a result of the user clicking on a "file upload" button in a HTML form where multiple - file selection is allowed. - - \value ErrorPageExtension Whether the web page can provide an error page when loading fails. - (introduced in Qt 4.6) - - \sa ChooseMultipleFilesExtensionOption, ChooseMultipleFilesExtensionReturn, ErrorPageExtensionOption, ErrorPageExtensionReturn -*/ - -/*! - \enum QWebPage::ErrorDomain - \since 4.6 - - This enum describes the domain of an ErrorPageExtensionOption object (i.e. the layer in which the error occurred). - - \value QtNetwork The error occurred in the QtNetwork layer; the error code is of type QNetworkReply::NetworkError. - \value Http The error occurred in the HTTP layer; the error code is a HTTP status code (see QNetworkRequest::HttpStatusCodeAttribute). - \value WebKit The error is an internal WebKit error. -*/ - -/*! - \class QWebPage::ExtensionOption - \since 4.4 - \brief The ExtensionOption class provides an extended input argument to QWebPage's extension support. - - \inmodule QtWebKit - - \sa QWebPage::extension() QWebPage::ExtensionReturn -*/ - - -/*! - \class QWebPage::ExtensionReturn - \since 4.4 - \brief The ExtensionReturn class provides an output result from a QWebPage's extension. - - \inmodule QtWebKit - - \sa QWebPage::extension() QWebPage::ExtensionOption -*/ - -/*! - \class QWebPage::ErrorPageExtensionOption - \since 4.6 - \brief The ErrorPageExtensionOption class describes the option - for the error page extension. - - \inmodule QtWebKit - - The ErrorPageExtensionOption class holds the \a url for which an error occurred as well as - the associated \a frame. - - The error itself is reported by an error \a domain, the \a error code as well as \a errorString. - - \sa QWebPage::extension() QWebPage::ErrorPageExtensionReturn -*/ - -/*! - \variable QWebPage::ErrorPageExtensionOption::url - \brief the url for which an error occurred -*/ - -/*! - \variable QWebPage::ErrorPageExtensionOption::frame - \brief the frame associated with the error -*/ - -/*! - \variable QWebPage::ErrorPageExtensionOption::domain - \brief the domain that reported the error -*/ - -/*! - \variable QWebPage::ErrorPageExtensionOption::error - \brief the error code. Interpretation of the value depends on the \a domain - \sa QWebPage::ErrorDomain -*/ - -/*! - \variable QWebPage::ErrorPageExtensionOption::errorString - \brief a string that describes the error -*/ - -/*! - \class QWebPage::ErrorPageExtensionReturn - \since 4.6 - \brief The ErrorPageExtensionReturn describes the error page, which will be shown for the - frame for which the error occured. - - \inmodule QtWebKit - - The ErrorPageExtensionReturn class holds the data needed for creating an error page. Some are - optional such as \a contentType, which defaults to "text/html", as well as the \a encoding, which - is assumed to be UTF-8 if not indicated otherwise. - - The error page is stored in the \a content byte array, as HTML content. In order to convert a - QString to a byte array, the QString::toUtf8() method can be used. - - External objects such as stylesheets or images referenced in the HTML are located relative to - \a baseUrl. - - \sa QWebPage::extension() QWebPage::ErrorPageExtensionOption, QString::toUtf8() -*/ - -/*! - \fn QWebPage::ErrorPageExtensionReturn::ErrorPageExtensionReturn() - - Constructs a new error page object. -*/ - - -/*! - \variable QWebPage::ErrorPageExtensionReturn::contentType - \brief the error page's content type -*/ - -/*! - \variable QWebPage::ErrorPageExtensionReturn::encoding - \brief the error page encoding -*/ - -/*! - \variable QWebPage::ErrorPageExtensionReturn::baseUrl - \brief the base url - - External objects such as stylesheets or images referenced in the HTML are located relative to this url. -*/ - -/*! - \variable QWebPage::ErrorPageExtensionReturn::content - \brief the HTML content of the error page -*/ - -/*! - \class QWebPage::ChooseMultipleFilesExtensionOption - \since 4.5 - \brief The ChooseMultipleFilesExtensionOption class describes the option - for the multiple files selection extension. - - \inmodule QtWebKit - - The ChooseMultipleFilesExtensionOption class holds the frame originating the request - and the suggested filenames which might be provided. - - \sa QWebPage::extension() QWebPage::chooseFile(), QWebPage::ChooseMultipleFilesExtensionReturn -*/ - -/*! - \variable QWebPage::ChooseMultipleFilesExtensionOption::parentFrame - \brief The frame in which the request originated -*/ - -/*! - \variable QWebPage::ChooseMultipleFilesExtensionOption::suggestedFileNames - \brief The suggested filenames -*/ - -/*! - \variable QWebPage::ChooseMultipleFilesExtensionReturn::fileNames - \brief The selected filenames -*/ - -/*! - \class QWebPage::ChooseMultipleFilesExtensionReturn - \since 4.5 - \brief The ChooseMultipleFilesExtensionReturn describes the return value - for the multiple files selection extension. - - \inmodule QtWebKit - - The ChooseMultipleFilesExtensionReturn class holds the filenames selected by the user - when the extension is invoked. - - \sa QWebPage::extension() QWebPage::ChooseMultipleFilesExtensionOption -*/ - -/*! - This virtual function can be reimplemented in a QWebPage subclass to provide support for extensions. The \a option - argument is provided as input to the extension; the output results can be stored in \a output. - - The behavior of this function is determined by \a extension. The \a option - and \a output values are typically casted to the corresponding types (for - example, ChooseMultipleFilesExtensionOption and - ChooseMultipleFilesExtensionReturn for ChooseMultipleFilesExtension). - - You can call supportsExtension() to check if an extension is supported by the page. - - Returns true if the extension was called successfully; otherwise returns false. - - \sa supportsExtension(), Extension -*/ -bool QWebPage::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output) -{ -#ifndef QT_NO_FILEDIALOG - if (extension == ChooseMultipleFilesExtension) { - // FIXME: do not ignore suggestedFiles - QStringList suggestedFiles = static_cast<const ChooseMultipleFilesExtensionOption*>(option)->suggestedFileNames; - QWidget* parent = (d->client) ? d->client->ownerWidget() : 0; - QStringList names = QFileDialog::getOpenFileNames(parent, QString::null); - static_cast<ChooseMultipleFilesExtensionReturn*>(output)->fileNames = names; - return true; - } -#endif - - return false; -} - -/*! - This virtual function returns true if the web page supports \a extension; otherwise false is returned. - - \sa extension() -*/ -bool QWebPage::supportsExtension(Extension extension) const -{ -#ifndef QT_NO_FILEDIALOG - return extension == ChooseMultipleFilesExtension; -#else - Q_UNUSED(extension); - return false; -#endif -} - -/*! - Finds the specified string, \a subString, in the page, using the given \a options. - - If the HighlightAllOccurrences flag is passed, the function will highlight all occurrences - that exist in the page. All subsequent calls will extend the highlight, rather than - replace it, with occurrences of the new string. - - If the HighlightAllOccurrences flag is not passed, the function will select an occurrence - and all subsequent calls will replace the current occurrence with the next one. - - To clear the selection, just pass an empty string. - - Returns true if \a subString was found; otherwise returns false. -*/ -bool QWebPage::findText(const QString &subString, FindFlags options) -{ - ::TextCaseSensitivity caseSensitivity = ::TextCaseInsensitive; - if (options & FindCaseSensitively) - caseSensitivity = ::TextCaseSensitive; - - if (options & HighlightAllOccurrences) { - if (subString.isEmpty()) { - d->page->unmarkAllTextMatches(); - return true; - } else - return d->page->markAllMatchesForText(subString, caseSensitivity, true, 0); - } else { - if (subString.isEmpty()) { - d->page->mainFrame()->selection()->clear(); - Frame* frame = d->page->mainFrame()->tree()->firstChild(); - while (frame) { - frame->selection()->clear(); - frame = frame->tree()->traverseNextWithWrap(false); - } - } - ::FindDirection direction = ::FindDirectionForward; - if (options & FindBackward) - direction = ::FindDirectionBackward; - - const bool shouldWrap = options & FindWrapsAroundDocument; - - return d->page->findString(subString, caseSensitivity, direction, shouldWrap); - } -} - -/*! - Returns a pointer to the page's settings object. - - \sa QWebSettings::globalSettings() -*/ -QWebSettings *QWebPage::settings() const -{ - return d->settings; -} - -/*! - This function is called when the web content requests a file name, for example - as a result of the user clicking on a "file upload" button in a HTML form. - - A suggested filename may be provided in \a suggestedFile. The frame originating the - request is provided as \a parentFrame. - - \sa ChooseMultipleFilesExtension -*/ -QString QWebPage::chooseFile(QWebFrame *parentFrame, const QString& suggestedFile) -{ - Q_UNUSED(parentFrame) -#ifndef QT_NO_FILEDIALOG - QWidget* parent = (d->client) ? d->client->ownerWidget() : 0; - return QFileDialog::getOpenFileName(parent, QString::null, suggestedFile); -#else - return QString::null; -#endif -} - -/*! - Sets the QNetworkAccessManager \a manager responsible for serving network requests for this - QWebPage. - - \note It is currently not supported to change the network access manager after the - QWebPage has used it. The results of doing this are undefined. - - \sa networkAccessManager() -*/ -void QWebPage::setNetworkAccessManager(QNetworkAccessManager *manager) -{ - if (manager == d->networkManager) - return; - if (d->networkManager && d->networkManager->parent() == this) - delete d->networkManager; - d->networkManager = manager; -} - -/*! - Returns the QNetworkAccessManager that is responsible for serving network - requests for this QWebPage. - - \sa setNetworkAccessManager() -*/ -QNetworkAccessManager *QWebPage::networkAccessManager() const -{ - if (!d->networkManager) { - QWebPage *that = const_cast<QWebPage *>(this); - that->d->networkManager = new QNetworkAccessManager(that); - } - return d->networkManager; -} - -/*! - Sets the QWebPluginFactory \a factory responsible for creating plugins embedded into this - QWebPage. - - Note: The plugin factory is only used if the QWebSettings::PluginsEnabled attribute is enabled. - - \sa pluginFactory() -*/ -void QWebPage::setPluginFactory(QWebPluginFactory *factory) -{ - d->pluginFactory = factory; -} - -/*! - Returns the QWebPluginFactory that is responsible for creating plugins embedded into - this QWebPage. If no plugin factory is installed a null pointer is returned. - - \sa setPluginFactory() -*/ -QWebPluginFactory *QWebPage::pluginFactory() const -{ - return d->pluginFactory; -} - -/*! - This function is called when a user agent for HTTP requests is needed. You can reimplement this - function to dynamically return different user agents for different URLs, based on the \a url parameter. - - The default implementation returns the following value: - - "Mozilla/5.0 (%Platform%; %Security%; %Subplatform%; %Locale%) AppleWebKit/%WebKitVersion% (KHTML, like Gecko) %AppVersion Safari/%WebKitVersion%" - - On mobile platforms such as Symbian S60 and Maemo, "Mobile Safari" is used instead of "Safari". - - In this string the following values are replaced at run-time: - \list - \o %Platform% and %Subplatform% are expanded to the windowing system and the operation system. - \o %Security% expands to U if SSL is enabled, otherwise N. SSL is enabled if QSslSocket::supportsSsl() returns true. - \o %Locale% is replaced with QLocale::name(). The locale is determined from the view of the QWebPage. If no view is set on the QWebPage, - then a default constructed QLocale is used instead. - \o %WebKitVersion% is the version of WebKit the application was compiled against. - \o %AppVersion% expands to QCoreApplication::applicationName()/QCoreApplication::applicationVersion() if they're set; otherwise defaulting to Qt and the current Qt version. - \endlist -*/ -QString QWebPage::userAgentForUrl(const QUrl&) const -{ - // splitting the string in three and user QStringBuilder is better than using QString::arg() - static QString firstPart; - static QString secondPart; - static QString thirdPart; - - if (firstPart.isNull() || secondPart.isNull() || thirdPart.isNull()) { - QString firstPartTemp; - firstPartTemp.reserve(150); - firstPartTemp += QString::fromLatin1("Mozilla/5.0 (" - - // Platform -#ifdef Q_WS_MAC - "Macintosh" -#elif defined Q_WS_QWS - "QtEmbedded" -#elif defined Q_WS_WIN - "Windows" -#elif defined Q_WS_X11 - "X11" -#elif defined Q_OS_SYMBIAN - "Symbian" -#else - "Unknown" -#endif - ); - -#if defined Q_OS_SYMBIAN - QSysInfo::SymbianVersion symbianVersion = QSysInfo::symbianVersion(); - switch (symbianVersion) { - case QSysInfo::SV_9_2: - firstPartTemp += QString::fromLatin1("OS/9.2"); - break; - case QSysInfo::SV_9_3: - firstPartTemp += QString::fromLatin1("OS/9.3"); - break; - case QSysInfo::SV_9_4: - firstPartTemp += QString::fromLatin1("OS/9.4"); - break; - case QSysInfo::SV_SF_2: - firstPartTemp += QString::fromLatin1("/2"); - break; - case QSysInfo::SV_SF_3: - firstPartTemp += QString::fromLatin1("/3"); - break; - case QSysInfo::SV_SF_4: - firstPartTemp += QString::fromLatin1("/4"); - default: - break; - } -#endif - - firstPartTemp += QString::fromLatin1("; "); - - // SSL support -#if !defined(QT_NO_OPENSSL) - // we could check QSslSocket::supportsSsl() here, but this makes - // OpenSSL, certificates etc being loaded in all cases were QWebPage - // is used. This loading is not needed for non-https. - firstPartTemp += QString::fromLatin1("U; "); - // this may lead to a false positive: We indicate SSL since it is - // compiled in even though supportsSsl() might return false -#else - firstPartTemp += QString::fromLatin1("N; "); -#endif - - // Operating system -#ifdef Q_OS_AIX - firstPartTemp += QString::fromLatin1("AIX"); -#elif defined Q_OS_WIN32 - - switch (QSysInfo::WindowsVersion) { - case QSysInfo::WV_32s: - firstPartTemp += QString::fromLatin1("Windows 3.1"); - break; - case QSysInfo::WV_95: - firstPartTemp += QString::fromLatin1("Windows 95"); - break; - case QSysInfo::WV_98: - firstPartTemp += QString::fromLatin1("Windows 98"); - break; - case QSysInfo::WV_Me: - firstPartTemp += QString::fromLatin1("Windows 98; Win 9x 4.90"); - break; - case QSysInfo::WV_NT: - firstPartTemp += QString::fromLatin1("WinNT4.0"); - break; - case QSysInfo::WV_2000: - firstPartTemp += QString::fromLatin1("Windows NT 5.0"); - break; - case QSysInfo::WV_XP: - firstPartTemp += QString::fromLatin1("Windows NT 5.1"); - break; - case QSysInfo::WV_2003: - firstPartTemp += QString::fromLatin1("Windows NT 5.2"); - break; - case QSysInfo::WV_VISTA: - firstPartTemp += QString::fromLatin1("Windows NT 6.0"); - break; - case QSysInfo::WV_WINDOWS7: - firstPartTemp += QString::fromLatin1("Windows NT 6.1"); - break; - case QSysInfo::WV_CE: - firstPartTemp += QString::fromLatin1("Windows CE"); - break; - case QSysInfo::WV_CENET: - firstPartTemp += QString::fromLatin1("Windows CE .NET"); - break; - case QSysInfo::WV_CE_5: - firstPartTemp += QString::fromLatin1("Windows CE 5.x"); - break; - case QSysInfo::WV_CE_6: - firstPartTemp += QString::fromLatin1("Windows CE 6.x"); - break; - } - -#elif defined Q_OS_DARWIN -#ifdef __i386__ || __x86_64__ - firstPartTemp += QString::fromLatin1("Intel Mac OS X"); -#else - firstPartTemp += QString::fromLatin1("PPC Mac OS X"); -#endif - -#elif defined Q_OS_BSDI - firstPartTemp += QString::fromLatin1("BSD"); -#elif defined Q_OS_BSD4 - firstPartTemp += QString::fromLatin1("BSD Four"); -#elif defined Q_OS_CYGWIN - firstPartTemp += QString::fromLatin1("Cygwin"); -#elif defined Q_OS_DGUX - firstPartTemp += QString::fromLatin1("DG/UX"); -#elif defined Q_OS_DYNIX - firstPartTemp += QString::fromLatin1("DYNIX/ptx"); -#elif defined Q_OS_FREEBSD - firstPartTemp += QString::fromLatin1("FreeBSD"); -#elif defined Q_OS_HPUX - firstPartTemp += QString::fromLatin1("HP-UX"); -#elif defined Q_OS_HURD - firstPartTemp += QString::fromLatin1("GNU Hurd"); -#elif defined Q_OS_IRIX - firstPartTemp += QString::fromLatin1("SGI Irix"); -#elif defined Q_OS_LINUX - -#if defined(__x86_64__) - firstPartTemp += QString::fromLatin1("Linux x86_64"); -#elif defined(__i386__) - firstPartTemp += QString::fromLatin1("Linux i686"); -#else - firstPartTemp += QString::fromLatin1("Linux"); -#endif - -#elif defined Q_OS_LYNX - firstPartTemp += QString::fromLatin1("LynxOS"); -#elif defined Q_OS_NETBSD - firstPartTemp += QString::fromLatin1("NetBSD"); -#elif defined Q_OS_OS2 - firstPartTemp += QString::fromLatin1("OS/2"); -#elif defined Q_OS_OPENBSD - firstPartTemp += QString::fromLatin1("OpenBSD"); -#elif defined Q_OS_OS2EMX - firstPartTemp += QString::fromLatin1("OS/2"); -#elif defined Q_OS_OSF - firstPartTemp += QString::fromLatin1("HP Tru64 UNIX"); -#elif defined Q_OS_QNX6 - firstPartTemp += QString::fromLatin1("QNX RTP Six"); -#elif defined Q_OS_QNX - firstPartTemp += QString::fromLatin1("QNX"); -#elif defined Q_OS_RELIANT - firstPartTemp += QString::fromLatin1("Reliant UNIX"); -#elif defined Q_OS_SCO - firstPartTemp += QString::fromLatin1("SCO OpenServer"); -#elif defined Q_OS_SOLARIS - firstPartTemp += QString::fromLatin1("Sun Solaris"); -#elif defined Q_OS_ULTRIX - firstPartTemp += QString::fromLatin1("DEC Ultrix"); -#elif defined Q_OS_SYMBIAN - firstPartTemp += QLatin1Char(' '); - QSysInfo::S60Version s60Version = QSysInfo::s60Version(); - switch (s60Version) { - case QSysInfo::SV_S60_3_1: - firstPartTemp += QString::fromLatin1("Series60/3.1"); - break; - case QSysInfo::SV_S60_3_2: - firstPartTemp += QString::fromLatin1("Series60/3.2"); - break; - case QSysInfo::SV_S60_5_0: - firstPartTemp += QString::fromLatin1("Series60/5.0"); - break; - default: - break; - } -#elif defined Q_OS_UNIX - firstPartTemp += QString::fromLatin1("UNIX BSD/SYSV system"); -#elif defined Q_OS_UNIXWARE - firstPartTemp += QString::fromLatin1("UnixWare Seven, Open UNIX Eight"); -#else - firstPartTemp += QString::fromLatin1("Unknown"); -#endif - - // language is the split - firstPartTemp += QString::fromLatin1("; "); - firstPartTemp.squeeze(); - firstPart = firstPartTemp; - - QString secondPartTemp; - secondPartTemp.reserve(150); - secondPartTemp += QString::fromLatin1(") "); - - // webkit/qt version - secondPartTemp += QString::fromLatin1("AppleWebKit/"); - secondPartTemp += qWebKitVersion(); - secondPartTemp += QString::fromLatin1(" (KHTML, like Gecko) "); - - - // Application name split the third part - secondPartTemp.squeeze(); - secondPart = secondPartTemp; - - QString thirdPartTemp; - thirdPartTemp.reserve(150); -#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) - thirdPartTemp += QLatin1String(" Mobile Safari/"); -#else - thirdPartTemp += QLatin1String(" Safari/"); -#endif - thirdPartTemp += qWebKitVersion(); - thirdPartTemp.squeeze(); - thirdPart = thirdPartTemp; - Q_ASSERT(!firstPart.isNull()); - Q_ASSERT(!secondPart.isNull()); - Q_ASSERT(!thirdPart.isNull()); - } - - // Language - QString languageName; - if (d->client && d->client->ownerWidget()) - languageName = d->client->ownerWidget()->locale().name(); - else - languageName = QLocale().name(); - languageName.replace(QLatin1Char('_'), QLatin1Char('-')); - - // Application name/version - QString appName = QCoreApplication::applicationName(); - if (!appName.isEmpty()) { - QString appVer = QCoreApplication::applicationVersion(); - if (!appVer.isEmpty()) - appName.append(QLatin1Char('/') + appVer); - } else { - // Qt version - appName = QString::fromLatin1("Qt/") + QString::fromLatin1(qVersion()); - } - - return firstPart + languageName + secondPart + appName + thirdPart; -} - - -void QWebPagePrivate::_q_onLoadProgressChanged(int) -{ - m_totalBytes = page->progress()->totalPageAndResourceBytesToLoad(); - m_bytesReceived = page->progress()->totalBytesReceived(); -} - - -/*! - Returns the total number of bytes that were received from the network to render the current page, - including extra content such as embedded images. - - \sa bytesReceived() -*/ -quint64 QWebPage::totalBytes() const -{ - return d->m_totalBytes; -} - - -/*! - Returns the number of bytes that were received from the network to render the current page. - - \sa totalBytes(), loadProgress() -*/ -quint64 QWebPage::bytesReceived() const -{ - return d->m_bytesReceived; -} - -/*! - \since 4.7 - \fn void QWebPage::viewportChangeRequested() - - Page authors can provide the supplied values by using the viewport meta tag. More information - about this can be found at \l{http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/usingtheviewport/usingtheviewport.html}{Safari Reference Library: Using the Viewport Meta Tag}. - - \sa QWebPage::ViewportAttributes, setPreferredContentsSize(), QGraphicsWebView::setScale() -*/ - -/*! - \fn void QWebPage::loadStarted() - - This signal is emitted when a new load of the page is started. - - \sa loadFinished() -*/ - -/*! - \fn void QWebPage::loadProgress(int progress) - - This signal is emitted when the global progress status changes. - The current value is provided by \a progress and scales from 0 to 100, - which is the default range of QProgressBar. - It accumulates changes from all the child frames. - - \sa bytesReceived() -*/ - -/*! - \fn void QWebPage::loadFinished(bool ok) - - This signal is emitted when a load of the page is finished. - \a ok will indicate whether the load was successful or any error occurred. - - \sa loadStarted(), ErrorPageExtension -*/ - -/*! - \fn void QWebPage::linkHovered(const QString &link, const QString &title, const QString &textContent) - - This signal is emitted when the mouse hovers over a link. - - \a link contains the link url. - \a title is the link element's title, if it is specified in the markup. - \a textContent provides text within the link element, e.g., text inside an HTML anchor tag. - - When the mouse leaves the link element the signal is emitted with empty parameters. - - \sa linkClicked() -*/ - -/*! - \fn void QWebPage::statusBarMessage(const QString& text) - - This signal is emitted when the statusbar \a text is changed by the page. -*/ - -/*! - \fn void QWebPage::frameCreated(QWebFrame *frame) - - This signal is emitted whenever the page creates a new \a frame. - - \sa currentFrame() -*/ - -/*! - \fn void QWebPage::selectionChanged() - - This signal is emitted whenever the selection changes, either interactively - or programmatically (e.g. by calling triggerAction() with a selection action). - - \sa selectedText() -*/ - -/*! - \fn void QWebPage::contentsChanged() - \since 4.5 - - This signal is emitted whenever the text in form elements changes - as well as other editable content. - - \sa contentEditable, modified, QWebFrame::toHtml(), QWebFrame::toPlainText() -*/ - -/*! - \fn void QWebPage::geometryChangeRequested(const QRect& geom) - - This signal is emitted whenever the document wants to change the position and size of the - page to \a geom. This can happen for example through JavaScript. -*/ - -/*! - \fn void QWebPage::repaintRequested(const QRect& dirtyRect) - - This signal is emitted whenever this QWebPage should be updated and no view was set. - \a dirtyRect contains the area that needs to be updated. To paint the QWebPage get - the mainFrame() and call the render(QPainter*, const QRegion&) method with the - \a dirtyRect as the second parameter. - - \sa mainFrame() - \sa view() -*/ - -/*! - \fn void QWebPage::scrollRequested(int dx, int dy, const QRect& rectToScroll) - - This signal is emitted whenever the content given by \a rectToScroll needs - to be scrolled \a dx and \a dy downwards and no view was set. - - \sa view() -*/ - -/*! - \fn void QWebPage::windowCloseRequested() - - This signal is emitted whenever the page requests the web browser window to be closed, - for example through the JavaScript \c{window.close()} call. -*/ - -/*! - \fn void QWebPage::printRequested(QWebFrame *frame) - - This signal is emitted whenever the page requests the web browser to print \a frame, - for example through the JavaScript \c{window.print()} call. - - \sa QWebFrame::print(), QPrintPreviewDialog -*/ - -/*! - \fn void QWebPage::unsupportedContent(QNetworkReply *reply) - - This signal is emitted when WebKit cannot handle a link the user navigated to or a - web server's response includes a "Content-Disposition" header with the 'attachment' - directive. If "Content-Disposition" is present in \a reply, the web server is indicating - that the client should prompt the user to save the content regardless of content-type. - See RFC 2616 sections 19.5.1 for details about Content-Disposition. - - At signal emission time the meta-data of the QNetworkReply \a reply is available. - - \note This signal is only emitted if the forwardUnsupportedContent property is set to true. - - \sa downloadRequested() -*/ - -/*! - \fn void QWebPage::downloadRequested(const QNetworkRequest &request) - - This signal is emitted when the user decides to download a link. The url of - the link as well as additional meta-information is contained in \a request. - - \sa unsupportedContent() -*/ - -/*! - \fn void QWebPage::microFocusChanged() - - This signal is emitted when for example the position of the cursor in an editable form - element changes. It is used to inform input methods about the new on-screen position where - the user is able to enter text. This signal is usually connected to the - QWidget::updateMicroFocus() slot. -*/ - -/*! - \fn void QWebPage::linkClicked(const QUrl &url) - - This signal is emitted whenever the user clicks on a link and the page's linkDelegationPolicy - property is set to delegate the link handling for the specified \a url. - - By default no links are delegated and are handled by QWebPage instead. - - \note This signal possibly won't be emitted for clicked links which use - JavaScript to trigger navigation. - - \sa linkHovered() -*/ - -/*! - \fn void QWebPage::toolBarVisibilityChangeRequested(bool visible) - - This signal is emitted whenever the visibility of the toolbar in a web browser - window that hosts QWebPage should be changed to \a visible. -*/ - -/*! - \fn void QWebPage::statusBarVisibilityChangeRequested(bool visible) - - This signal is emitted whenever the visibility of the statusbar in a web browser - window that hosts QWebPage should be changed to \a visible. -*/ - -/*! - \fn void QWebPage::menuBarVisibilityChangeRequested(bool visible) - - This signal is emitted whenever the visibility of the menubar in a web browser - window that hosts QWebPage should be changed to \a visible. -*/ - -/*! - \fn void QWebPage::databaseQuotaExceeded(QWebFrame* frame, QString databaseName); - \since 4.5 - - This signal is emitted whenever the web site shown in \a frame is asking to store data - to the database \a databaseName and the quota allocated to that web site is exceeded. - - \sa QWebDatabase -*/ -/*! - \fn void QWebPage::applicationCacheQuotaExceeded(QWebSecurityOrigin* origin, quint64 defaultOriginQuota); - - This signal is emitted whenever the web site is asking to store data to the application cache - database databaseName and the quota allocated to that web site is exceeded. - -*/ - -/*! - \since 4.5 - \fn void QWebPage::saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item); - - This signal is emitted shortly before the history of navigated pages - in \a frame is changed, for example when navigating back in the history. - - The provided QWebHistoryItem, \a item, holds the history entry of the frame before - the change. - - A potential use-case for this signal is to store custom data in - the QWebHistoryItem associated to the frame, using QWebHistoryItem::setUserData(). -*/ - -/*! - \since 4.5 - \fn void QWebPage::restoreFrameStateRequested(QWebFrame* frame); - - This signal is emitted when the load of \a frame is finished and the application may now update its state accordingly. -*/ - -/*! - \fn QWebPagePrivate* QWebPage::handle() const - \internal -*/ - -#include "moc_qwebpage.cpp" diff --git a/WebKit/qt/Api/qwebpage.h b/WebKit/qt/Api/qwebpage.h deleted file mode 100644 index b66adb2..0000000 --- a/WebKit/qt/Api/qwebpage.h +++ /dev/null @@ -1,449 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef QWEBPAGE_H -#define QWEBPAGE_H - -#include "qwebsettings.h" -#include "qwebkitglobal.h" - -#include <QtCore/qobject.h> -#include <QtCore/qurl.h> -#include <QtGui/qwidget.h> - -QT_BEGIN_NAMESPACE -class QNetworkProxy; -class QUndoStack; -class QMenu; -class QNetworkRequest; -class QNetworkReply; -class QNetworkAccessManager; -QT_END_NAMESPACE - -class QWebElement; -class QWebFrame; -class QWebNetworkRequest; -class QWebHistory; - -class QWebFrameData; -class QWebHistoryItem; -class QWebHitTestResult; -class QWebNetworkInterface; -class QWebPagePrivate; -class QWebPluginFactory; -class QWebSecurityOrigin; -class QtViewportAttributesPrivate; - -namespace WebCore { - class ChromeClientQt; - class EditorClientQt; - class FrameLoaderClientQt; - class InspectorClientQt; - class InspectorServerRequestHandlerQt; - class InspectorFrontendClientQt; - class NotificationPresenterClientQt; - class GeolocationPermissionClientQt; - class ResourceHandle; - class HitTestResult; - class QNetworkReplyHandler; - - struct FrameLoadRequest; -} - -class QWEBKIT_EXPORT QWebPage : public QObject { - Q_OBJECT - - Q_PROPERTY(bool modified READ isModified) - Q_PROPERTY(QString selectedText READ selectedText) - Q_PROPERTY(QString selectedHtml READ selectedHtml) - Q_PROPERTY(bool hasSelection READ hasSelection) - Q_PROPERTY(QSize viewportSize READ viewportSize WRITE setViewportSize) - Q_PROPERTY(QSize preferredContentsSize READ preferredContentsSize WRITE setPreferredContentsSize) - Q_PROPERTY(bool forwardUnsupportedContent READ forwardUnsupportedContent WRITE setForwardUnsupportedContent) - Q_PROPERTY(LinkDelegationPolicy linkDelegationPolicy READ linkDelegationPolicy WRITE setLinkDelegationPolicy) - Q_PROPERTY(QPalette palette READ palette WRITE setPalette) - Q_PROPERTY(bool contentEditable READ isContentEditable WRITE setContentEditable) - Q_ENUMS(LinkDelegationPolicy NavigationType WebAction) -public: - enum NavigationType { - NavigationTypeLinkClicked, - NavigationTypeFormSubmitted, - NavigationTypeBackOrForward, - NavigationTypeReload, - NavigationTypeFormResubmitted, - NavigationTypeOther - }; - - enum WebAction { - NoWebAction = - 1, - - OpenLink, - - OpenLinkInNewWindow, - OpenFrameInNewWindow, - - DownloadLinkToDisk, - CopyLinkToClipboard, - - OpenImageInNewWindow, - DownloadImageToDisk, - CopyImageToClipboard, - - Back, - Forward, - Stop, - Reload, - - Cut, - Copy, - Paste, - - Undo, - Redo, - MoveToNextChar, - MoveToPreviousChar, - MoveToNextWord, - MoveToPreviousWord, - MoveToNextLine, - MoveToPreviousLine, - MoveToStartOfLine, - MoveToEndOfLine, - MoveToStartOfBlock, - MoveToEndOfBlock, - MoveToStartOfDocument, - MoveToEndOfDocument, - SelectNextChar, - SelectPreviousChar, - SelectNextWord, - SelectPreviousWord, - SelectNextLine, - SelectPreviousLine, - SelectStartOfLine, - SelectEndOfLine, - SelectStartOfBlock, - SelectEndOfBlock, - SelectStartOfDocument, - SelectEndOfDocument, - DeleteStartOfWord, - DeleteEndOfWord, - - SetTextDirectionDefault, - SetTextDirectionLeftToRight, - SetTextDirectionRightToLeft, - - ToggleBold, - ToggleItalic, - ToggleUnderline, - - InspectElement, - - InsertParagraphSeparator, - InsertLineSeparator, - - SelectAll, - ReloadAndBypassCache, - - PasteAndMatchStyle, - RemoveFormat, - - ToggleStrikethrough, - ToggleSubscript, - ToggleSuperscript, - InsertUnorderedList, - InsertOrderedList, - Indent, - Outdent, - - AlignCenter, - AlignJustified, - AlignLeft, - AlignRight, - - StopScheduledPageRefresh, - - WebActionCount - }; - - enum FindFlag { - FindBackward = 1, - FindCaseSensitively = 2, - FindWrapsAroundDocument = 4, - HighlightAllOccurrences = 8 - }; - Q_DECLARE_FLAGS(FindFlags, FindFlag) - - enum LinkDelegationPolicy { - DontDelegateLinks, - DelegateExternalLinks, - DelegateAllLinks - }; - - enum WebWindowType { - WebBrowserWindow, - WebModalDialog - }; - - enum PermissionPolicy { - PermissionUnknown, - PermissionGrantedByUser, - PermissionDeniedByUser - }; - - enum Feature { - Notifications, - Geolocation - }; - - class QWEBKIT_EXPORT ViewportAttributes { - public: - ViewportAttributes(); - ViewportAttributes(const QWebPage::ViewportAttributes& other); - - ~ViewportAttributes(); - - QWebPage::ViewportAttributes& operator=(const QWebPage::ViewportAttributes& other); - - inline qreal initialScaleFactor() const { return m_initialScaleFactor; } - inline qreal minimumScaleFactor() const { return m_minimumScaleFactor; } - inline qreal maximumScaleFactor() const { return m_maximumScaleFactor; } - inline qreal devicePixelRatio() const { return m_devicePixelRatio; } - inline bool isUserScalable() const { return m_isUserScalable; } - inline bool isValid() const { return m_isValid; } - inline QSize size() const { return m_size; } - - private: - QSharedDataPointer<QtViewportAttributesPrivate> d; - qreal m_initialScaleFactor; - qreal m_minimumScaleFactor; - qreal m_maximumScaleFactor; - qreal m_devicePixelRatio; - bool m_isUserScalable; - bool m_isValid; - QSize m_size; - - friend class WebCore::ChromeClientQt; - friend class QWebPage; - }; - - - explicit QWebPage(QObject *parent = 0); - ~QWebPage(); - - QWebFrame *mainFrame() const; - QWebFrame *currentFrame() const; - QWebFrame* frameAt(const QPoint& pos) const; - - QWebHistory *history() const; - QWebSettings *settings() const; - - void setView(QWidget *view); - QWidget *view() const; - - bool isModified() const; -#ifndef QT_NO_UNDOSTACK - QUndoStack *undoStack() const; -#endif - - void setNetworkAccessManager(QNetworkAccessManager *manager); - QNetworkAccessManager *networkAccessManager() const; - - void setPluginFactory(QWebPluginFactory *factory); - QWebPluginFactory *pluginFactory() const; - - quint64 totalBytes() const; - quint64 bytesReceived() const; - - bool hasSelection() const; - QString selectedText() const; - QString selectedHtml() const; - -#ifndef QT_NO_ACTION - QAction *action(WebAction action) const; -#endif - virtual void triggerAction(WebAction action, bool checked = false); - - QSize viewportSize() const; - void setViewportSize(const QSize &size) const; - ViewportAttributes viewportAttributesForSize(const QSize& availableSize) const; - - QSize preferredContentsSize() const; - void setPreferredContentsSize(const QSize &size) const; - void setActualVisibleContentRect(const QRect& rect) const; - - virtual bool event(QEvent*); - bool focusNextPrevChild(bool next); - - QVariant inputMethodQuery(Qt::InputMethodQuery property) const; - - bool findText(const QString &subString, FindFlags options = 0); - - void setForwardUnsupportedContent(bool forward); - bool forwardUnsupportedContent() const; - - void setLinkDelegationPolicy(LinkDelegationPolicy policy); - LinkDelegationPolicy linkDelegationPolicy() const; - - void setPalette(const QPalette &palette); - QPalette palette() const; - - void setContentEditable(bool editable); - bool isContentEditable() const; - -#ifndef QT_NO_CONTEXTMENU - bool swallowContextMenuEvent(QContextMenuEvent *event); -#endif - void updatePositionDependentActions(const QPoint &pos); - - QMenu *createStandardContextMenu(); - - void setFeaturePermission(QWebFrame* frame, Feature feature, PermissionPolicy policy); - - QStringList supportedContentTypes() const; - bool supportsContentType(const QString& mimeType) const; - - enum Extension { - ChooseMultipleFilesExtension, - ErrorPageExtension - }; - class ExtensionOption - {}; - class ExtensionReturn - {}; - - class ChooseMultipleFilesExtensionOption : public ExtensionOption { - public: - QWebFrame *parentFrame; - QStringList suggestedFileNames; - }; - - class ChooseMultipleFilesExtensionReturn : public ExtensionReturn { - public: - QStringList fileNames; - }; - - enum ErrorDomain { QtNetwork, Http, WebKit }; - class ErrorPageExtensionOption : public ExtensionOption { - public: - QUrl url; - QWebFrame* frame; - ErrorDomain domain; - int error; - QString errorString; - }; - - class ErrorPageExtensionReturn : public ExtensionReturn { - public: - ErrorPageExtensionReturn() : contentType(QLatin1String("text/html")), encoding(QLatin1String("utf-8")) {}; - QString contentType; - QString encoding; - QUrl baseUrl; - QByteArray content; - }; - - - virtual bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0); - virtual bool supportsExtension(Extension extension) const; - - inline QWebPagePrivate* handle() const { return d; } - -public Q_SLOTS: - bool shouldInterruptJavaScript(); - -Q_SIGNALS: - void loadStarted(); - void loadProgress(int progress); - void loadFinished(bool ok); - - void linkHovered(const QString &link, const QString &title, const QString &textContent); - void statusBarMessage(const QString& text); - void selectionChanged(); - void frameCreated(QWebFrame *frame); - void geometryChangeRequested(const QRect& geom); - void repaintRequested(const QRect& dirtyRect); - void scrollRequested(int dx, int dy, const QRect& scrollViewRect); - void windowCloseRequested(); - void printRequested(QWebFrame *frame); - void linkClicked(const QUrl &url); - - void toolBarVisibilityChangeRequested(bool visible); - void statusBarVisibilityChangeRequested(bool visible); - void menuBarVisibilityChangeRequested(bool visible); - - void unsupportedContent(QNetworkReply *reply); - void downloadRequested(const QNetworkRequest &request); - - void microFocusChanged(); - void contentsChanged(); - void databaseQuotaExceeded(QWebFrame* frame, QString databaseName); - void applicationCacheQuotaExceeded(QWebSecurityOrigin* origin, quint64 defaultOriginQuota); - - void saveFrameStateRequested(QWebFrame* frame, QWebHistoryItem* item); - void restoreFrameStateRequested(QWebFrame* frame); - - void viewportChangeRequested(); - - void featurePermissionRequested(QWebFrame* frame, QWebPage::Feature feature); - void featurePermissionRequestCanceled(QWebFrame* frame, QWebPage::Feature feature); - -protected: - virtual QWebPage *createWindow(WebWindowType type); - virtual QObject *createPlugin(const QString &classid, const QUrl &url, const QStringList ¶mNames, const QStringList ¶mValues); - - virtual bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, NavigationType type); - virtual QString chooseFile(QWebFrame *originatingFrame, const QString& oldFile); - virtual void javaScriptAlert(QWebFrame *originatingFrame, const QString& msg); - virtual bool javaScriptConfirm(QWebFrame *originatingFrame, const QString& msg); - virtual bool javaScriptPrompt(QWebFrame *originatingFrame, const QString& msg, const QString& defaultValue, QString* result); - virtual void javaScriptConsoleMessage(const QString& message, int lineNumber, const QString& sourceID); - - virtual QString userAgentForUrl(const QUrl& url) const; - -private: - Q_PRIVATE_SLOT(d, void _q_onLoadProgressChanged(int)) -#ifndef QT_NO_ACTION - Q_PRIVATE_SLOT(d, void _q_webActionTriggered(bool checked)) -#endif - Q_PRIVATE_SLOT(d, void _q_cleanupLeakMessages()) - - QWebPagePrivate *d; - - friend class QWebFrame; - friend class QWebPagePrivate; - friend class QWebView; - friend class QWebViewPrivate; - friend class QGraphicsWebView; - friend class QGraphicsWebViewPrivate; - friend class QWebInspector; - friend class WebCore::ChromeClientQt; - friend class WebCore::EditorClientQt; - friend class WebCore::FrameLoaderClientQt; - friend class WebCore::InspectorClientQt; - friend class WebCore::InspectorServerRequestHandlerQt; - friend class WebCore::InspectorFrontendClientQt; - friend class WebCore::NotificationPresenterClientQt; - friend class WebCore::GeolocationPermissionClientQt; - friend class WebCore::ResourceHandle; - friend class WebCore::QNetworkReplyHandler; - friend class DumpRenderTreeSupportQt; -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QWebPage::FindFlags) - -#endif diff --git a/WebKit/qt/Api/qwebpage_p.h b/WebKit/qt/Api/qwebpage_p.h deleted file mode 100644 index dc6da7e..0000000 --- a/WebKit/qt/Api/qwebpage_p.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - Copyright (C) 2008, 2009 Nokia Corporation and/or its subsidiary(-ies) - Copyright (C) 2008 Holger Hans Peter Freyther - - 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. -*/ - -#ifndef QWEBPAGE_P_H -#define QWEBPAGE_P_H - -#include <qbasictimer.h> -#include <qnetworkproxy.h> -#include <qpointer.h> -#include <qevent.h> -#include <qgraphicssceneevent.h> - -#include "qwebpage.h" -#include "qwebhistory.h" -#include "qwebframe.h" - -#include "IntPoint.h" -#include "KURL.h" -#include "PlatformString.h" - -#include <wtf/OwnPtr.h> -#include <wtf/RefPtr.h> - -#include "ViewportArguments.h" - -namespace WebCore { - class ChromeClientQt; - class ContextMenuClientQt; - class ContextMenuItem; - class ContextMenu; - class Document; - class EditorClientQt; - class Element; - class InspectorController; - class IntRect; - class Node; - class NodeList; - class Page; - class Frame; -} - -QT_BEGIN_NAMESPACE -class QUndoStack; -class QMenu; -class QBitArray; -QT_END_NAMESPACE - -class QWebInspector; -class QWebPageClient; - -class QtViewportAttributesPrivate : public QSharedData { -public: - QtViewportAttributesPrivate(QWebPage::ViewportAttributes* qq) - : q(qq) - { } - - QWebPage::ViewportAttributes* q; -}; - -class QWebPagePrivate { -public: - QWebPagePrivate(QWebPage*); - ~QWebPagePrivate(); - - static WebCore::Page* core(const QWebPage*); - static QWebPagePrivate* priv(QWebPage*); - - void createMainFrame(); -#ifndef QT_NO_CONTEXTMENU - QMenu* createContextMenu(const WebCore::ContextMenu* webcoreMenu, const QList<WebCore::ContextMenuItem>* items, QBitArray* visitedWebActions); -#endif - void _q_onLoadProgressChanged(int); - void _q_webActionTriggered(bool checked); - void _q_cleanupLeakMessages(); - void updateAction(QWebPage::WebAction action); - void updateNavigationActions(); - void updateEditorActions(); - - void timerEvent(QTimerEvent*); - - template<class T> void mouseMoveEvent(T*); - template<class T> void mousePressEvent(T*); - template<class T> void mouseDoubleClickEvent(T*); - template<class T> void mouseTripleClickEvent(T*); - template<class T> void mouseReleaseEvent(T*); -#ifndef QT_NO_CONTEXTMENU - void contextMenuEvent(const QPoint& globalPos); -#endif -#ifndef QT_NO_WHEELEVENT - template<class T> void wheelEvent(T*); -#endif - void keyPressEvent(QKeyEvent*); - void keyReleaseEvent(QKeyEvent*); - void focusInEvent(QFocusEvent*); - void focusOutEvent(QFocusEvent*); - - template<class T> void dragEnterEvent(T*); - template<class T> void dragLeaveEvent(T*); - template<class T> void dragMoveEvent(T*); - template<class T> void dropEvent(T*); - - void inputMethodEvent(QInputMethodEvent*); - -#ifndef QT_NO_PROPERTIES - void dynamicPropertyChangeEvent(QDynamicPropertyChangeEvent*); -#endif - - void shortcutOverrideEvent(QKeyEvent*); - void leaveEvent(QEvent*); - void handleClipboard(QEvent*, Qt::MouseButton); - void handleSoftwareInputPanel(Qt::MouseButton, const QPoint&); - bool handleScrolling(QKeyEvent*, WebCore::Frame*); - - // Returns whether the default action was cancelled in the JS event handler - bool touchEvent(QTouchEvent*); - - class TouchAdjuster { - public: - TouchAdjuster(unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding); - - WebCore::IntPoint findCandidatePointForTouch(const WebCore::IntPoint&, WebCore::Document*) const; - - private: - unsigned m_topPadding; - unsigned m_rightPadding; - unsigned m_bottomPadding; - unsigned m_leftPadding; - }; - - void adjustPointForClicking(QMouseEvent*); - void adjustPointForClicking(QGraphicsSceneMouseEvent*); - - void setInspector(QWebInspector*); - QWebInspector* getOrCreateInspector(); - WebCore::InspectorController* inspectorController(); - quint16 inspectorServerPort(); - - WebCore::ViewportArguments viewportArguments(); - -#ifndef QT_NO_SHORTCUT - static QWebPage::WebAction editorActionForKeyEvent(QKeyEvent* event); -#endif - static const char* editorCommandForWebActions(QWebPage::WebAction action); - - QWebPage *q; - WebCore::Page *page; - OwnPtr<QWebPageClient> client; - QPointer<QWebFrame> mainFrame; - -#ifndef QT_NO_UNDOSTACK - QUndoStack *undoStack; -#endif - - QWeakPointer<QWidget> view; - - bool insideOpenCall; - quint64 m_totalBytes; - quint64 m_bytesReceived; - - QPoint tripleClick; - QBasicTimer tripleClickTimer; - - bool clickCausedFocus; - - bool acceptNavigationRequest(QWebFrame *frame, const QNetworkRequest &request, QWebPage::NavigationType type); - QNetworkAccessManager *networkManager; - - bool forwardUnsupportedContent; - bool smartInsertDeleteEnabled; - bool selectTrailingWhitespaceEnabled; - QWebPage::LinkDelegationPolicy linkPolicy; - - QSize viewportSize; - QSize fixedLayoutSize; - qreal pixelRatio; - - QWebHistory history; - QWebHitTestResult hitTestResult; -#ifndef QT_NO_CONTEXTMENU - QPointer<QMenu> currentContextMenu; -#endif - QWebSettings *settings; - QPalette palette; - bool editable; - bool useFixedLayout; - - QAction *actions[QWebPage::WebActionCount]; - - QWebPluginFactory *pluginFactory; - - QWidget* inspectorFrontend; - QWebInspector* inspector; - bool inspectorIsInternalOnly; // True if created through the Inspect context menu action - Qt::DropAction m_lastDropAction; - - static bool drtRun; -}; - -#endif diff --git a/WebKit/qt/Api/qwebplugindatabase.cpp b/WebKit/qt/Api/qwebplugindatabase.cpp deleted file mode 100644 index a7a3b5f..0000000 --- a/WebKit/qt/Api/qwebplugindatabase.cpp +++ /dev/null @@ -1,393 +0,0 @@ -/* - Copyright (C) 2009 Jakub Wieczorek <faw217@gmail.com> - - 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 "qwebplugindatabase_p.h" - -#include "PluginDatabase.h" -#include "PluginPackage.h" - -using namespace WebCore; - -/*! - \internal - \typedef QWebPluginInfo::MimeType - \since 4.6 - \brief Represents a single MIME type supported by a plugin. -*/ - -/*! - \class QWebPluginInfo - \internal - \since 4.6 - \brief The QWebPluginInfo class represents a single Netscape plugin. - - A QWebPluginInfo object represents a Netscape plugin picked up by WebKit - and included in the plugin database. This class contains information about - the plugin, such as its name(), description(), a list of MIME types that it - supports (can be accessed with mimeTypes()) and the path of the plugin - file. - - Plugins can be enabled and disabled with setEnabled(). If a plugin is - disabled, it will not be used by WebKit to handle supported MIME types. To - check if a plugin is enabled or not, use enabled(). - - \sa QWebPluginDatabase -*/ - -/*! - Constructs a null QWebPluginInfo. -*/ -QWebPluginInfo::QWebPluginInfo() - : m_package(0) -{ -} - -QWebPluginInfo::QWebPluginInfo(PluginPackage* package) - : m_package(package) -{ - if (m_package) - m_package->ref(); -} - -/*! - Contructs a copy of \a other. -*/ -QWebPluginInfo::QWebPluginInfo(const QWebPluginInfo& other) - : m_package(other.m_package) -{ - if (m_package) - m_package->ref(); -} - -/*! - Destroys the plugin info. -*/ -QWebPluginInfo::~QWebPluginInfo() -{ - if (m_package) - m_package->deref(); -} - -/*! - Returns the name of the plugin. - - \sa description() -*/ -QString QWebPluginInfo::name() const -{ - if (!m_package) - return QString(); - return m_package->name(); -} - -/*! - Returns the description of the plugin. - - \sa name() -*/ -QString QWebPluginInfo::description() const -{ - if (!m_package) - return QString(); - return m_package->description(); -} - -/*! - Returns a list of MIME types supported by the plugin. - - \sa supportsMimeType() -*/ -QList<QWebPluginInfo::MimeType> QWebPluginInfo::mimeTypes() const -{ - if (m_package && m_mimeTypes.isEmpty()) { - const MIMEToDescriptionsMap& mimeToDescriptions = m_package->mimeToDescriptions(); - MIMEToDescriptionsMap::const_iterator end = mimeToDescriptions.end(); - - for (MIMEToDescriptionsMap::const_iterator it = mimeToDescriptions.begin(); it != end; ++it) { - MimeType mimeType; - mimeType.name = it->first; - mimeType.description = it->second; - - QStringList fileExtensions; - Vector<String> extensions = m_package->mimeToExtensions().get(mimeType.name); - - for (unsigned i = 0; i < extensions.size(); ++i) - fileExtensions.append(extensions[i]); - - mimeType.fileExtensions = fileExtensions; - m_mimeTypes.append(mimeType); - } - } - - return m_mimeTypes; -} - -/*! - Returns true if the plugin supports a specific \a mimeType; otherwise - returns false. - - \sa mimeTypes() -*/ -bool QWebPluginInfo::supportsMimeType(const QString& mimeType) const -{ - if (!m_package) - return false; - return m_package->mimeToDescriptions().contains(mimeType); -} - -/*! - Returns an absolute path to the plugin file. -*/ -QString QWebPluginInfo::path() const -{ - if (!m_package) - return QString(); - return m_package->path(); -} - -/*! - Returns true if the plugin is a null plugin; otherwise returns false. -*/ -bool QWebPluginInfo::isNull() const -{ - return !m_package; -} - -/*! - Enables or disables the plugin, depending on the \a enabled parameter. - - Disabled plugins will not be picked up by WebKit when looking for a plugin - supporting a particular MIME type. - - \sa isEnabled() -*/ -void QWebPluginInfo::setEnabled(bool enabled) -{ - if (!m_package) - return; - m_package->setEnabled(enabled); -} - -/*! - Returns true if the plugin is enabled; otherwise returns false. - - \sa setEnabled() -*/ -bool QWebPluginInfo::isEnabled() const -{ - if (!m_package) - return false; - return m_package->isEnabled(); -} - -/*! - Returns true if this plugin info is the same as the \a other plugin info. -*/ -bool QWebPluginInfo::operator==(const QWebPluginInfo& other) const -{ - return m_package == other.m_package; -} - -/*! - Returns true if this plugin info is different from the \a other plugin info. -*/ -bool QWebPluginInfo::operator!=(const QWebPluginInfo& other) const -{ - return m_package != other.m_package; -} - -/*! - Assigns the \a other plugin info to this plugin info, and returns a reference - to this plugin info. -*/ -QWebPluginInfo &QWebPluginInfo::operator=(const QWebPluginInfo& other) -{ - if (this == &other) - return *this; - - if (m_package) - m_package->deref(); - m_package = other.m_package; - if (m_package) - m_package->ref(); - m_mimeTypes = other.m_mimeTypes; - - return *this; -} - -/*! - \class QWebPluginDatabase - \internal - \since 4.6 - \brief The QWebPluginDatabase class provides an interface for managing - Netscape plugins used by WebKit in QWebPages. - - The QWebPluginDatabase class is a database of Netscape plugins that are used - by WebKit. The plugins are picked up by WebKit by looking up a set of search paths. - The default set can be accessed using defaultSearchPaths(). The search paths - can be changed, see searchPaths() and setSearchPaths(). Additional search paths - can also be added using addSearchPath(). - - The plugins that have been detected are exposed by the plugins() method. - The list contains QWebPlugin objects that hold both the metadata and the MIME - types that are supported by particular plugins. - - WebKit specifies a plugin for a MIME type by looking for the first plugin that - supports the specific MIME type. To get a plugin, that is used by WebKit to - handle a specific MIME type, you can use the pluginForMimeType() function. - - To change the way of resolving MIME types ambiguity, you can explicitly set - a preferred plugin for a specific MIME type, using setPreferredPluginForMimeType(). - - \sa QWebPluginInfo, QWebSettings::pluginDatabase() -*/ - -QWebPluginDatabase::QWebPluginDatabase(QObject* parent) - : QObject(parent) - , m_database(PluginDatabase::installedPlugins()) -{ -} - -QWebPluginDatabase::~QWebPluginDatabase() -{ -} - -/*! - Returns a list of plugins installed in the search paths. - - This list will contain disabled plugins, although they will not be used by - WebKit. - - \sa pluginForMimeType() -*/ -QList<QWebPluginInfo> QWebPluginDatabase::plugins() const -{ - QList<QWebPluginInfo> qwebplugins; - const Vector<PluginPackage*>& plugins = m_database->plugins(); - - for (unsigned int i = 0; i < plugins.size(); ++i) { - PluginPackage* plugin = plugins[i]; -#if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE) - if (!plugin->ensurePluginLoaded()) - continue; -#endif - qwebplugins.append(QWebPluginInfo(plugin)); - } - - return qwebplugins; -} - -/*! - Returns a default set of search paths. - - \sa searchPaths(), setSearchPaths() -*/ -QStringList QWebPluginDatabase::defaultSearchPaths() -{ - QStringList paths; - - const Vector<String>& directories = PluginDatabase::defaultPluginDirectories(); - for (unsigned int i = 0; i < directories.size(); ++i) - paths.append(directories[i]); - - return paths; -} - -/*! - Returns a list of search paths that are used by WebKit to look for plugins. - - \sa defaultSearchPaths(), setSearchPaths() -*/ -QStringList QWebPluginDatabase::searchPaths() const -{ - QStringList paths; - - const Vector<String>& directories = m_database->pluginDirectories(); - for (unsigned int i = 0; i < directories.size(); ++i) - paths.append(directories[i]); - - return paths; -} - -/*! - Changes the search paths to \a paths. - The database is automatically refreshed. - - \sa searchPaths(), defaultSearchPaths() -*/ -void QWebPluginDatabase::setSearchPaths(const QStringList& paths) -{ - Vector<String> directories; - - for (int i = 0; i < paths.count(); ++i) - directories.append(paths.at(i)); - - m_database->setPluginDirectories(directories); - // PluginDatabase::setPluginDirectories() does not refresh the database. - m_database->refresh(); -} - -/*! - Adds an additional \a path to the current set. - The database is automatically refreshed. - - \sa searchPaths(), setSearchPaths() -*/ -void QWebPluginDatabase::addSearchPath(const QString& path) -{ - m_database->addExtraPluginDirectory(path); - // PluginDatabase::addExtraPluginDirectory() does refresh the database. -} - -/*! - Refreshes the plugin database, adds new plugins that have been found and removes - the ones that are no longer available in the search paths. - - You can call this function when the set of plugins installed in the search paths - changes. You do not need to call this function when changing search paths, - in that case WebKit automatically refreshes the database. -*/ -void QWebPluginDatabase::refresh() -{ - m_database->refresh(); -} - -/*! - Returns the plugin that is currently used by WebKit for a given \a mimeType. - - \sa setPreferredPluginForMimeType() -*/ -QWebPluginInfo QWebPluginDatabase::pluginForMimeType(const QString& mimeType) -{ - return QWebPluginInfo(m_database->pluginForMIMEType(mimeType)); -} - -/*! - Changes the preferred plugin for a given \a mimeType to \a plugin. The \a plugin - has to support the given \a mimeType, otherwise the setting will have no effect. - - Calling the function with a null \a plugin resets the setting. - - \sa pluginForMimeType() -*/ -void QWebPluginDatabase::setPreferredPluginForMimeType(const QString& mimeType, const QWebPluginInfo& plugin) -{ - m_database->setPreferredPluginForMIMEType(mimeType, plugin.m_package); -} diff --git a/WebKit/qt/Api/qwebplugindatabase_p.h b/WebKit/qt/Api/qwebplugindatabase_p.h deleted file mode 100644 index b22c3de..0000000 --- a/WebKit/qt/Api/qwebplugindatabase_p.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright (C) 2009 Jakub Wieczorek <faw217@gmail.com> - - 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. -*/ - -#ifndef QWEBPLUGINDATABASE_H -#define QWEBPLUGINDATABASE_H - -#include "qwebkitglobal.h" -#include "qwebpluginfactory.h" - -#include <QtCore/qobject.h> -#include <QtCore/qstringlist.h> - -namespace WebCore { - class PluginDatabase; - class PluginPackage; -} - -class QWebPluginInfoPrivate; -class QWEBKIT_EXPORT QWebPluginInfo { -public: - QWebPluginInfo(); - QWebPluginInfo(const QWebPluginInfo& other); - QWebPluginInfo &operator=(const QWebPluginInfo& other); - ~QWebPluginInfo(); - -private: - QWebPluginInfo(WebCore::PluginPackage* package); - -public: - typedef QWebPluginFactory::MimeType MimeType; - - QString name() const; - QString description() const; - QList<MimeType> mimeTypes() const; - bool supportsMimeType(const QString& mimeType) const; - QString path() const; - - bool isNull() const; - - void setEnabled(bool enabled); - bool isEnabled() const; - - bool operator==(const QWebPluginInfo& other) const; - bool operator!=(const QWebPluginInfo& other) const; - - friend class QWebPluginDatabase; - -private: - QWebPluginInfoPrivate* d; - WebCore::PluginPackage* m_package; - mutable QList<MimeType> m_mimeTypes; -}; - -class QWebPluginDatabasePrivate; -class QWEBKIT_EXPORT QWebPluginDatabase : public QObject { - Q_OBJECT - -private: - QWebPluginDatabase(QObject* parent = 0); - ~QWebPluginDatabase(); - -public: - QList<QWebPluginInfo> plugins() const; - - static QStringList defaultSearchPaths(); - QStringList searchPaths() const; - void setSearchPaths(const QStringList& paths); - void addSearchPath(const QString& path); - - void refresh(); - - QWebPluginInfo pluginForMimeType(const QString& mimeType); - void setPreferredPluginForMimeType(const QString& mimeType, const QWebPluginInfo& plugin); - - friend class QWebSettings; - -private: - QWebPluginDatabasePrivate* d; - WebCore::PluginDatabase* m_database; -}; - -#endif // QWEBPLUGINDATABASE_H diff --git a/WebKit/qt/Api/qwebpluginfactory.cpp b/WebKit/qt/Api/qwebpluginfactory.cpp deleted file mode 100644 index b9180be..0000000 --- a/WebKit/qt/Api/qwebpluginfactory.cpp +++ /dev/null @@ -1,264 +0,0 @@ -/* - Copyright (C) 2008 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 "qwebpluginfactory.h" - -/*! - \class QWebPluginFactory - \since 4.4 - \brief The QWebPluginFactory class is used to embed custom data types in web pages. - - \inmodule QtWebKit - - The HTML \c{<object>} tag is used to embed arbitrary content into a web page, - for example: - - \code - <object type="application/x-pdf" data="http://qt.nokia.com/document.pdf" width="500" height="400"></object> - \endcode - - QtWebkit will natively handle the most basic data types like \c{text/html} and - \c{image/jpeg}, but for any advanced or custom data types you will need to - provide a handler yourself. - - QWebPluginFactory is a factory for creating plugins for QWebPage, where each - plugin provides support for one or more data types. A plugin factory can be - installed on a QWebPage using QWebPage::setPluginFactory(). - - \note The plugin factory is only used if plugins are enabled through QWebSettings. - - You provide a QWebPluginFactory by implementing the plugins() and the - create() methods. For plugins() it is necessary to describe the plugins the - factory can create, including a description and the supported MIME types. - The MIME types each plugin can handle should match the ones specified in - in the HTML \c{<object>} tag of your content. - - The create() method is called if the requested MIME type is supported. The - implementation has to return a new instance of the plugin requested for the - given MIME type and the specified URL. - - The plugins themselves are subclasses of QObject, but currently only plugins - based on either QWidget or QGraphicsWidget are supported. - -*/ - - -/*! - \class QWebPluginFactory::Plugin - \since 4.4 - \brief The QWebPluginFactory::Plugin structure describes the properties of a plugin a QWebPluginFactory can create. - - \inmodule QtWebKit -*/ - -/*! - \variable QWebPluginFactory::Plugin::name - The name of the plugin. -*/ - -/*! - \variable QWebPluginFactory::Plugin::description - The description of the plugin. -*/ - -/*! - \variable QWebPluginFactory::Plugin::mimeTypes - The list of mime types supported by the plugin. -*/ - -/*! - \class QWebPluginFactory::MimeType - \since 4.4 - \brief The QWebPluginFactory::MimeType structure describes a mime type supported by a plugin. - - \inmodule QtWebKit -*/ - -/*! - Returns true if this mimetype is the same as the \a other mime type. -*/ -bool QWebPluginFactory::MimeType::operator==(const MimeType& other) const -{ - return name == other.name - && description == other.description - && fileExtensions == other.fileExtensions; -} - -/*! - \fn bool QWebPluginFactory::MimeType::operator!=(const MimeType& other) const - - Returns true if this mimetype is different from the \a other mime type. -*/ - -/*! - \variable QWebPluginFactory::MimeType::name - - The full name of the MIME type; e.g., \c{text/plain} or \c{image/png}. -*/ - -/*! - \variable QWebPluginFactory::MimeType::description - The description of the mime type. -*/ - -/*! - \variable QWebPluginFactory::MimeType::fileExtensions - The list of file extensions that are used by this mime type. - - For example, a mime type for PDF documents would return "pdf" as its file extension. -*/ - -/*! - Constructs a QWebPluginFactory with parent \a parent. -*/ -QWebPluginFactory::QWebPluginFactory(QObject *parent) - : QObject(parent) -{ -} - -/*! - Destructor. -*/ -QWebPluginFactory::~QWebPluginFactory() -{ -} - -/*! - \fn QList<Plugin> QWebPluginFactory::plugins() const = 0 - - This function is reimplemented in subclasses to return a list of - supported plugins the factory can create. - - \note Currently, this function is only called when JavaScript programs - access the global \c plugins or \c mimetypes objects. -*/ - -/*! - This function is called to refresh the list of supported plugins. It may be called after a new plugin - has been installed in the system. -*/ -void QWebPluginFactory::refreshPlugins() -{ -} - -/*! - \fn QObject *QWebPluginFactory::create(const QString &mimeType, const QUrl &url, - const QStringList &argumentNames, const QStringList &argumentValues) const = 0 - - Implemented in subclasses to create a new plugin that can display content of - the MIME type given by \a mimeType. The URL of the content is provided in \a url. - The returned object should be a QWidget. - - The HTML object element can provide parameters through the \c{<param>} tag. - The name and the value attributes of these tags are specified by the - \a argumentNames and \a argumentValues string lists. - - For example: - - \code - <object type="application/x-pdf" data="http://qt.nokia.com/document.pdf" width="500" height="400"> - <param name="showTableOfContents" value="true" /> - <param name="hideThumbnails" value="false" /> - </object> - \endcode - - The above object element will result in a call to create() with the following arguments: - \table - \header \o Parameter - \o Value - \row \o mimeType - \o "application/x-pdf" - \row \o url - \o "http://qt.nokia.com/document.pdf" - \row \o argumentNames - \o "showTableOfContents" "hideThumbnails" - \row \o argumentVaues - \o "true" "false" - \endtable - - \note Ownership of the returned object will be transferred to the caller. -*/ - -/*! - \enum QWebPluginFactory::Extension - \internal - - This enum describes the types of extensions that the plugin factory can support. Before using these extensions, you - should verify that the extension is supported by calling supportsExtension(). - - Currently there are no extensions. -*/ - -/*! - \class QWebPluginFactory::ExtensionOption - \internal - \since 4.4 - \brief The ExtensionOption class provides an extended input argument to QWebPluginFactory's extension support. - - \inmodule QtWebKit - - \sa QWebPluginFactory::extension() -*/ - -/*! - \class QWebPluginFactory::ExtensionReturn - \internal - \since 4.4 - \brief The ExtensionOption class provides an extended output argument to QWebPluginFactory's extension support. - - \inmodule QtWebKit - - \sa QWebPluginFactory::extension() -*/ - -/*! - This virtual function can be reimplemented in a QWebPluginFactory subclass to provide support for extensions. The \a option - argument is provided as input to the extension; the output results can be stored in \a output. - - \internal - - The behaviour of this function is determined by \a extension. - - You can call supportsExtension() to check if an extension is supported by the factory. - - By default, no extensions are supported, and this function returns false. - - \sa supportsExtension(), Extension -*/ -bool QWebPluginFactory::extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output) -{ - Q_UNUSED(extension) - Q_UNUSED(option) - Q_UNUSED(output) - return false; -} - -/*! - This virtual function returns true if the plugin factory supports \a extension; otherwise false is returned. - - \internal - - \sa extension() -*/ -bool QWebPluginFactory::supportsExtension(Extension extension) const -{ - Q_UNUSED(extension) - return false; -} diff --git a/WebKit/qt/Api/qwebpluginfactory.h b/WebKit/qt/Api/qwebpluginfactory.h deleted file mode 100644 index 4a06b59..0000000 --- a/WebKit/qt/Api/qwebpluginfactory.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef QWEBPLUGINFACTORY_H -#define QWEBPLUGINFACTORY_H - -#include "qwebkitglobal.h" - -#include <QtCore/qobject.h> -#include <QtCore/qstringlist.h> - -QT_BEGIN_NAMESPACE -class QUrl; -class QString; -QT_END_NAMESPACE -class QWebPluginFactoryPrivate; - -class QWEBKIT_EXPORT QWebPluginFactory : public QObject { - Q_OBJECT -public: - struct QWEBKIT_EXPORT MimeType { - QString name; - QString description; - QStringList fileExtensions; - bool operator==(const MimeType& other) const; - inline bool operator!=(const MimeType& other) const { return !operator==(other); } - }; - - struct Plugin { - QString name; - QString description; - QList<MimeType> mimeTypes; - }; - - explicit QWebPluginFactory(QObject* parent = 0); - virtual ~QWebPluginFactory(); - - virtual QList<Plugin> plugins() const = 0; - virtual void refreshPlugins(); - - virtual QObject *create(const QString& mimeType, - const QUrl&, - const QStringList& argumentNames, - const QStringList& argumentValues) const = 0; - - enum Extension { - }; - class ExtensionOption - {}; - class ExtensionReturn - {}; - virtual bool extension(Extension extension, const ExtensionOption* option = 0, ExtensionReturn* output = 0); - virtual bool supportsExtension(Extension extension) const; - -private: - QWebPluginFactoryPrivate* d; -}; - -#endif diff --git a/WebKit/qt/Api/qwebscriptworld.cpp b/WebKit/qt/Api/qwebscriptworld.cpp deleted file mode 100644 index 7a44813..0000000 --- a/WebKit/qt/Api/qwebscriptworld.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright (C) 2010 Robert Hogan <robert@roberthogan.net> - - 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 "qwebscriptworld.h" -#include "qwebscriptworld_p.h" - -#include "KURL.h" -#include "ScriptController.h" -#include <QStringList> - -using namespace WebCore; - -/*! - Constructs a security origin from \a other. -*/ -QWebScriptWorld::QWebScriptWorld() -{ -#if USE(JSC) - d = new QWebScriptWorldPrivate(ScriptController::createWorld()); -#endif -} - -QWebScriptWorld::QWebScriptWorld(const QWebScriptWorld& other) - : d(other.d) -{ -} - -QWebScriptWorld &QWebScriptWorld::operator=(const QWebScriptWorld& other) -{ - d = other.d; - return *this; -} - -DOMWrapperWorld* QWebScriptWorld::world() const -{ - return d ? d->world.get() : 0; -} - -/*! - Destroys the security origin. -*/ -QWebScriptWorld::~QWebScriptWorld() -{ -} - diff --git a/WebKit/qt/Api/qwebscriptworld.h b/WebKit/qt/Api/qwebscriptworld.h deleted file mode 100644 index 6a9d6e0..0000000 --- a/WebKit/qt/Api/qwebscriptworld.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright (C) 2010 Robert Hogan <robert@roberthogan.net> - - 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. -*/ - -#ifndef QWebScriptWorld_h_ -#define QWebScriptWorld_h_ - -#include <QtCore/qurl.h> -#include <QtCore/qshareddata.h> - -#include "qwebkitglobal.h" - -namespace WebCore { - class DOMWrapperWorld; -} - -class QWebScriptWorldPrivate; -class QWebFrame; - -class QWEBKIT_EXPORT QWebScriptWorld { -public: - QWebScriptWorld(); - QWebScriptWorld(const QWebScriptWorld&); - QWebScriptWorld &operator=(const QWebScriptWorld&); - ~QWebScriptWorld(); - - WebCore::DOMWrapperWorld* world() const; - -private: - QExplicitlySharedDataPointer<QWebScriptWorldPrivate> d; - - friend class QWebFrame; -}; - -#endif diff --git a/WebKit/qt/Api/qwebscriptworld_p.h b/WebKit/qt/Api/qwebscriptworld_p.h deleted file mode 100644 index 7115eb2..0000000 --- a/WebKit/qt/Api/qwebscriptworld_p.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright (C) 2010 Robert Hogan <robert@roberthogan.net> - - 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. -*/ - -#ifndef _QWEBSCRIPTWORLD_P_H_ -#define _QWEBSCRIPTWORLD_P_H_ - -#include "RefPtr.h" - -namespace WebCore { - class DOMWrapperWorld; -} - -class QWebScriptWorldPrivate : public QSharedData { -public: - QWebScriptWorldPrivate(WTF::PassRefPtr<WebCore::DOMWrapperWorld> o) - { - Q_ASSERT(o); - world = o; - } - - ~QWebScriptWorldPrivate() - { - } - - WTF::RefPtr<WebCore::DOMWrapperWorld> world; -}; - -#endif diff --git a/WebKit/qt/Api/qwebsecurityorigin.cpp b/WebKit/qt/Api/qwebsecurityorigin.cpp deleted file mode 100644 index 08e8f69..0000000 --- a/WebKit/qt/Api/qwebsecurityorigin.cpp +++ /dev/null @@ -1,269 +0,0 @@ -/* - Copyright (C) 2008 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 "qwebsecurityorigin.h" - -#include "ApplicationCacheStorage.h" -#include "DatabaseTracker.h" -#include "KURL.h" -#include "SchemeRegistry.h" -#include "SecurityOrigin.h" -#include "qwebdatabase.h" -#include "qwebdatabase_p.h" -#include "qwebsecurityorigin_p.h" -#include <QStringList> - -using namespace WebCore; - -/*! - \class QWebSecurityOrigin - \since 4.5 - \brief The QWebSecurityOrigin class defines a security boundary for web sites. - - \inmodule QtWebKit - - QWebSecurityOrigin provides access to the security domains defined by web sites. - An origin consists of a host name, a scheme, and a port number. Web sites - with the same security origin can access each other's resources for client-side - scripting or databases. - - For example the site \c{http://www.example.com/my/page.html} is allowed to share the same - database as \c{http://www.example.com/my/overview.html}, or access each other's - documents when used in HTML frame sets and JavaScript. At the same time it prevents - \c{http://www.malicious.com/evil.html} from accessing \c{http://www.example.com/}'s resources, - because they are of a different security origin. - - By default local schemes like \c{file://} and \c{qrc://} are concidered to be in the same - security origin, and can access each other's resources. You can add additional local schemes - by using QWebSecurityOrigin::addLocalScheme(), or override the default same-origin behavior - by setting QWebSettings::LocalContentCanAccessFileUrls to \c{false}. - - \note Local resources are by default restricted from accessing remote content, which - means your \c{file://} will not be able to access \c{http://domain.com/foo.html}. You - can relax this restriction by setting QWebSettings::LocalContentCanAccessRemoteUrls to - \c{true}. - - Call QWebFrame::securityOrigin() to get the QWebSecurityOrigin for a frame in a - web page, and use host(), scheme() and port() to identify the security origin. - - Use databases() to access the databases defined within a security origin. The - disk usage of the origin's databases can be limited with setDatabaseQuota(). - databaseQuota() and databaseUsage() report the current limit as well as the - current usage. - - For more information refer to the - \l{http://en.wikipedia.org/wiki/Same_origin_policy}{"Same origin policy" Wikipedia Article}. - - \sa QWebFrame::securityOrigin() -*/ - -/*! - Constructs a security origin from \a other. -*/ -QWebSecurityOrigin::QWebSecurityOrigin(const QWebSecurityOrigin& other) : d(other.d) -{ -} - -/*! - Assigns the \a other security origin to this. -*/ -QWebSecurityOrigin& QWebSecurityOrigin::operator=(const QWebSecurityOrigin& other) -{ - d = other.d; - return *this; -} - -/*! - Returns the scheme defining the security origin. -*/ -QString QWebSecurityOrigin::scheme() const -{ - return d->origin->protocol(); -} - -/*! - Returns the host name defining the security origin. -*/ -QString QWebSecurityOrigin::host() const -{ - return d->origin->host(); -} - -/*! - Returns the port number defining the security origin. -*/ -int QWebSecurityOrigin::port() const -{ - return d->origin->port(); -} - -/*! - Returns the number of bytes all databases in the security origin - use on the disk. -*/ -qint64 QWebSecurityOrigin::databaseUsage() const -{ -#if ENABLE(DATABASE) - return DatabaseTracker::tracker().usageForOrigin(d->origin.get()); -#else - return 0; -#endif -} - -/*! - Returns the quota for the databases in the security origin. -*/ -qint64 QWebSecurityOrigin::databaseQuota() const -{ -#if ENABLE(DATABASE) - return DatabaseTracker::tracker().quotaForOrigin(d->origin.get()); -#else - return 0; -#endif -} - -/*! - Sets the quota for the databases in the security origin to \a quota bytes. - - If the quota is set to a value less than the current usage, the quota will remain - and no data will be purged to meet the new quota. However, no new data can be added - to databases in this origin. -*/ -void QWebSecurityOrigin::setDatabaseQuota(qint64 quota) -{ -#if ENABLE(DATABASE) - DatabaseTracker::tracker().setQuota(d->origin.get(), quota); -#endif -} - -void QWebSecurityOrigin::setApplicationCacheQuota(qint64 quota) -{ -#if ENABLE(OFFLINE_WEB_APPLICATIONS) - WebCore::cacheStorage().storeUpdatedQuotaForOrigin(d->origin.get(), quota); -#endif -} -/*! - Destroys the security origin. -*/ -QWebSecurityOrigin::~QWebSecurityOrigin() -{ -} - -/*! - \internal -*/ -QWebSecurityOrigin::QWebSecurityOrigin(QWebSecurityOriginPrivate* priv) -{ - d = priv; -} - -/*! - Returns a list of all security origins with a database quota defined. -*/ -QList<QWebSecurityOrigin> QWebSecurityOrigin::allOrigins() -{ - QList<QWebSecurityOrigin> webOrigins; - -#if ENABLE(DATABASE) - Vector<RefPtr<SecurityOrigin> > coreOrigins; - DatabaseTracker::tracker().origins(coreOrigins); - - for (unsigned i = 0; i < coreOrigins.size(); ++i) { - QWebSecurityOriginPrivate* priv = new QWebSecurityOriginPrivate(coreOrigins[i].get()); - webOrigins.append(priv); - } -#endif - - return webOrigins; -} - -/*! - Returns a list of all databases defined in the security origin. -*/ -QList<QWebDatabase> QWebSecurityOrigin::databases() const -{ - QList<QWebDatabase> databases; - -#if ENABLE(DATABASE) - Vector<String> nameVector; - - if (!DatabaseTracker::tracker().databaseNamesForOrigin(d->origin.get(), nameVector)) - return databases; - for (unsigned i = 0; i < nameVector.size(); ++i) { - QWebDatabasePrivate* priv = new QWebDatabasePrivate(); - priv->name = nameVector[i]; - priv->origin = this->d->origin; - QWebDatabase webDatabase(priv); - databases.append(webDatabase); - } -#endif - - return databases; -} - -/*! - \since 4.6 - - Adds the given \a scheme to the list of schemes that are considered equivalent - to the \c file: scheme. - - Cross domain restrictions depend on the two web settings QWebSettings::LocalContentCanAccessFileUrls - and QWebSettings::LocalContentCanAccessFileUrls. By default all local schemes are concidered to be - in the same security origin, and local schemes can not access remote content. -*/ -void QWebSecurityOrigin::addLocalScheme(const QString& scheme) -{ - SchemeRegistry::registerURLSchemeAsLocal(scheme); -} - -/*! - \since 4.6 - - Removes the given \a scheme from the list of local schemes. - - \note You can not remove the \c{file://} scheme from the list - of local schemes. - - \sa addLocalScheme() -*/ -void QWebSecurityOrigin::removeLocalScheme(const QString& scheme) -{ - SchemeRegistry::removeURLSchemeRegisteredAsLocal(scheme); -} - -/*! - \since 4.6 - Returns a list of all the schemes concidered to be local. - - By default this is \c{file://} and \c{qrc://}. - - \sa addLocalScheme(), removeLocalScheme() -*/ -QStringList QWebSecurityOrigin::localSchemes() -{ - QStringList list; - const URLSchemesMap& map = SchemeRegistry::localURLSchemes(); - URLSchemesMap::const_iterator end = map.end(); - for (URLSchemesMap::const_iterator i = map.begin(); i != end; ++i) { - const QString scheme = *i; - list.append(scheme); - } - return list; -} diff --git a/WebKit/qt/Api/qwebsecurityorigin.h b/WebKit/qt/Api/qwebsecurityorigin.h deleted file mode 100644 index 7328680..0000000 --- a/WebKit/qt/Api/qwebsecurityorigin.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef _WEBSECURITYORIGIN_H_ -#define _WEBSECURITYORIGIN_H_ - -#include <QtCore/qurl.h> -#include <QtCore/qshareddata.h> - -#include "qwebkitglobal.h" - -namespace WebCore { - class SecurityOrigin; - class ChromeClientQt; -} - -class QWebSecurityOriginPrivate; -class QWebDatabase; -class QWebFrame; - -class QWEBKIT_EXPORT QWebSecurityOrigin { -public: - static QList<QWebSecurityOrigin> allOrigins(); - static void addLocalScheme(const QString& scheme); - static void removeLocalScheme(const QString& scheme); - static QStringList localSchemes(); - - ~QWebSecurityOrigin(); - - QString scheme() const; - QString host() const; - int port() const; - - qint64 databaseUsage() const; - qint64 databaseQuota() const; - - void setDatabaseQuota(qint64 quota); - void setApplicationCacheQuota(qint64 quota); - - QList<QWebDatabase> databases() const; - - QWebSecurityOrigin(const QWebSecurityOrigin& other); - QWebSecurityOrigin &operator=(const QWebSecurityOrigin& other); -private: - friend class QWebDatabase; - friend class QWebFrame; - friend class WebCore::ChromeClientQt; - QWebSecurityOrigin(QWebSecurityOriginPrivate* priv); - -private: - QExplicitlySharedDataPointer<QWebSecurityOriginPrivate> d; -}; - -#endif diff --git a/WebKit/qt/Api/qwebsecurityorigin_p.h b/WebKit/qt/Api/qwebsecurityorigin_p.h deleted file mode 100644 index cdc93bd..0000000 --- a/WebKit/qt/Api/qwebsecurityorigin_p.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef _WEBSECURITYORIGIN_P_H_ -#define _WEBSECURITYORIGIN_P_H_ - -#include "SecurityOrigin.h" -#include "RefPtr.h" - -class QWebSecurityOriginPrivate : public QSharedData { -public: - QWebSecurityOriginPrivate(WebCore::SecurityOrigin* o) - { - Q_ASSERT(o); - origin = o; - } - ~QWebSecurityOriginPrivate() - { - } - WTF::RefPtr<WebCore::SecurityOrigin> origin; -}; - -#endif diff --git a/WebKit/qt/Api/qwebsettings.cpp b/WebKit/qt/Api/qwebsettings.cpp deleted file mode 100644 index ed425c2..0000000 --- a/WebKit/qt/Api/qwebsettings.cpp +++ /dev/null @@ -1,1124 +0,0 @@ -/* - Copyright (C) 2008 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 "qwebsettings.h" - -#include "qwebpage.h" -#include "qwebpage_p.h" -#include "qwebplugindatabase_p.h" - -#include "AbstractDatabase.h" -#include "MemoryCache.h" -#include "CrossOriginPreflightResultCache.h" -#include "FontCache.h" -#include "Page.h" -#include "PageCache.h" -#include "Settings.h" -#include "KURL.h" -#include "PlatformString.h" -#include "IconDatabase.h" -#include "PluginDatabase.h" -#include "Image.h" -#include "IntSize.h" -#include "ApplicationCacheStorage.h" -#include "DatabaseTracker.h" -#include "FileSystem.h" - -#include <QApplication> -#include <QDesktopServices> -#include <QDir> -#include <QHash> -#include <QSharedData> -#include <QUrl> -#include <QFileInfo> - -#include "NetworkStateNotifier.h" - -void QWEBKIT_EXPORT qt_networkAccessAllowed(bool isAllowed) -{ -#if ENABLE(QT_BEARER) - WebCore::networkStateNotifier().setNetworkAccessAllowed(isAllowed); -#endif -} - -class QWebSettingsPrivate { -public: - QWebSettingsPrivate(WebCore::Settings* wcSettings = 0) - : settings(wcSettings) - { - } - - QHash<int, QString> fontFamilies; - QHash<int, int> fontSizes; - QHash<int, bool> attributes; - QUrl userStyleSheetLocation; - QString defaultTextEncoding; - QString localStoragePath; - QString offlineWebApplicationCachePath; - qint64 offlineStorageDefaultQuota; - - void apply(); - WebCore::Settings* settings; -}; - -typedef QHash<int, QPixmap> WebGraphicHash; -Q_GLOBAL_STATIC(WebGraphicHash, _graphics) - -static void earlyClearGraphics() -{ - _graphics()->clear(); -} - -static WebGraphicHash* graphics() -{ - WebGraphicHash* hash = _graphics(); - - if (hash->isEmpty()) { - - // prevent ~QPixmap running after ~QApplication (leaks native pixmaps) - qAddPostRoutine(earlyClearGraphics); - - hash->insert(QWebSettings::MissingImageGraphic, QPixmap(QLatin1String(":webkit/resources/missingImage.png"))); - hash->insert(QWebSettings::MissingPluginGraphic, QPixmap(QLatin1String(":webkit/resources/nullPlugin.png"))); - hash->insert(QWebSettings::DefaultFrameIconGraphic, QPixmap(QLatin1String(":webkit/resources/urlIcon.png"))); - hash->insert(QWebSettings::TextAreaSizeGripCornerGraphic, QPixmap(QLatin1String(":webkit/resources/textAreaResizeCorner.png"))); - hash->insert(QWebSettings::DeleteButtonGraphic, QPixmap(QLatin1String(":webkit/resources/deleteButton.png"))); - hash->insert(QWebSettings::InputSpeechButtonGraphic, QPixmap(QLatin1String(":webkit/resources/inputSpeech.png"))); - } - - return hash; -} - -Q_GLOBAL_STATIC(QList<QWebSettingsPrivate*>, allSettings); - -void QWebSettingsPrivate::apply() -{ - if (settings) { - settings->setTextAreasAreResizable(true); - - QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; - - QString family = fontFamilies.value(QWebSettings::StandardFont, - global->fontFamilies.value(QWebSettings::StandardFont)); - settings->setStandardFontFamily(family); - - family = fontFamilies.value(QWebSettings::FixedFont, - global->fontFamilies.value(QWebSettings::FixedFont)); - settings->setFixedFontFamily(family); - - family = fontFamilies.value(QWebSettings::SerifFont, - global->fontFamilies.value(QWebSettings::SerifFont)); - settings->setSerifFontFamily(family); - - family = fontFamilies.value(QWebSettings::SansSerifFont, - global->fontFamilies.value(QWebSettings::SansSerifFont)); - settings->setSansSerifFontFamily(family); - - family = fontFamilies.value(QWebSettings::CursiveFont, - global->fontFamilies.value(QWebSettings::CursiveFont)); - settings->setCursiveFontFamily(family); - - family = fontFamilies.value(QWebSettings::FantasyFont, - global->fontFamilies.value(QWebSettings::FantasyFont)); - settings->setFantasyFontFamily(family); - - int size = fontSizes.value(QWebSettings::MinimumFontSize, - global->fontSizes.value(QWebSettings::MinimumFontSize)); - settings->setMinimumFontSize(size); - - size = fontSizes.value(QWebSettings::MinimumLogicalFontSize, - global->fontSizes.value(QWebSettings::MinimumLogicalFontSize)); - settings->setMinimumLogicalFontSize(size); - - size = fontSizes.value(QWebSettings::DefaultFontSize, - global->fontSizes.value(QWebSettings::DefaultFontSize)); - settings->setDefaultFontSize(size); - - size = fontSizes.value(QWebSettings::DefaultFixedFontSize, - global->fontSizes.value(QWebSettings::DefaultFixedFontSize)); - settings->setDefaultFixedFontSize(size); - - bool value = attributes.value(QWebSettings::AutoLoadImages, - global->attributes.value(QWebSettings::AutoLoadImages)); - settings->setLoadsImagesAutomatically(value); - - value = attributes.value(QWebSettings::JavascriptEnabled, - global->attributes.value(QWebSettings::JavascriptEnabled)); - settings->setJavaScriptEnabled(value); -#if USE(ACCELERATED_COMPOSITING) - value = attributes.value(QWebSettings::AcceleratedCompositingEnabled, - global->attributes.value(QWebSettings::AcceleratedCompositingEnabled)); - - settings->setAcceleratedCompositingEnabled(value); -#endif -#if ENABLE(3D_CANVAS) - value = attributes.value(QWebSettings::WebGLEnabled, - global->attributes.value(QWebSettings::WebGLEnabled)); - - settings->setWebGLEnabled(value); -#endif - - value = attributes.value(QWebSettings::HyperlinkAuditingEnabled, - global->attributes.value(QWebSettings::HyperlinkAuditingEnabled)); - - settings->setHyperlinkAuditingEnabled(value); - - value = attributes.value(QWebSettings::JavascriptCanOpenWindows, - global->attributes.value(QWebSettings::JavascriptCanOpenWindows)); - settings->setJavaScriptCanOpenWindowsAutomatically(value); - - value = attributes.value(QWebSettings::JavascriptCanCloseWindows, - global->attributes.value(QWebSettings::JavascriptCanCloseWindows)); - settings->setAllowScriptsToCloseWindows(value); - - value = attributes.value(QWebSettings::JavaEnabled, - global->attributes.value(QWebSettings::JavaEnabled)); - settings->setJavaEnabled(value); - - value = attributes.value(QWebSettings::PluginsEnabled, - global->attributes.value(QWebSettings::PluginsEnabled)); - settings->setPluginsEnabled(value); - - value = attributes.value(QWebSettings::PrivateBrowsingEnabled, - global->attributes.value(QWebSettings::PrivateBrowsingEnabled)); - settings->setPrivateBrowsingEnabled(value); - - value = attributes.value(QWebSettings::SpatialNavigationEnabled, - global->attributes.value(QWebSettings::SpatialNavigationEnabled)); - settings->setSpatialNavigationEnabled(value); - - value = attributes.value(QWebSettings::JavascriptCanAccessClipboard, - global->attributes.value(QWebSettings::JavascriptCanAccessClipboard)); - settings->setDOMPasteAllowed(value); - settings->setJavaScriptCanAccessClipboard(value); - - value = attributes.value(QWebSettings::DeveloperExtrasEnabled, - global->attributes.value(QWebSettings::DeveloperExtrasEnabled)); - settings->setDeveloperExtrasEnabled(value); - - value = attributes.value(QWebSettings::FrameFlatteningEnabled, - global->attributes.value(QWebSettings::FrameFlatteningEnabled)); - settings->setFrameFlatteningEnabled(value); - - QUrl location = !userStyleSheetLocation.isEmpty() ? userStyleSheetLocation : global->userStyleSheetLocation; - settings->setUserStyleSheetLocation(WebCore::KURL(location)); - - QString encoding = !defaultTextEncoding.isEmpty() ? defaultTextEncoding: global->defaultTextEncoding; - settings->setDefaultTextEncodingName(encoding); - - QString storagePath = !localStoragePath.isEmpty() ? localStoragePath : global->localStoragePath; - settings->setLocalStorageDatabasePath(storagePath); - - value = attributes.value(QWebSettings::PrintElementBackgrounds, - global->attributes.value(QWebSettings::PrintElementBackgrounds)); - settings->setShouldPrintBackgrounds(value); - -#if ENABLE(DATABASE) - value = attributes.value(QWebSettings::OfflineStorageDatabaseEnabled, - global->attributes.value(QWebSettings::OfflineStorageDatabaseEnabled)); - WebCore::AbstractDatabase::setIsAvailable(value); -#endif - - value = attributes.value(QWebSettings::OfflineWebApplicationCacheEnabled, - global->attributes.value(QWebSettings::OfflineWebApplicationCacheEnabled)); - settings->setOfflineWebApplicationCacheEnabled(value); - - value = attributes.value(QWebSettings::LocalStorageEnabled, - global->attributes.value(QWebSettings::LocalStorageEnabled)); - settings->setLocalStorageEnabled(value); - - value = attributes.value(QWebSettings::LocalContentCanAccessRemoteUrls, - global->attributes.value(QWebSettings::LocalContentCanAccessRemoteUrls)); - settings->setAllowUniversalAccessFromFileURLs(value); - - value = attributes.value(QWebSettings::LocalContentCanAccessFileUrls, - global->attributes.value(QWebSettings::LocalContentCanAccessFileUrls)); - settings->setAllowFileAccessFromFileURLs(value); - - value = attributes.value(QWebSettings::XSSAuditingEnabled, - global->attributes.value(QWebSettings::XSSAuditingEnabled)); - settings->setXSSAuditorEnabled(value); - -#if ENABLE(TILED_BACKING_STORE) - value = attributes.value(QWebSettings::TiledBackingStoreEnabled, - global->attributes.value(QWebSettings::TiledBackingStoreEnabled)); - settings->setTiledBackingStoreEnabled(value); -#endif - - value = attributes.value(QWebSettings::SiteSpecificQuirksEnabled, - global->attributes.value(QWebSettings::SiteSpecificQuirksEnabled)); - settings->setNeedsSiteSpecificQuirks(value); - - settings->setUsesPageCache(WebCore::pageCache()->capacity()); - } else { - QList<QWebSettingsPrivate*> settings = *::allSettings(); - for (int i = 0; i < settings.count(); ++i) - settings[i]->apply(); - } -} - -/*! - Returns the global settings object. - - Any setting changed on the default object is automatically applied to all - QWebPage instances where the particular setting is not overriden already. -*/ -QWebSettings* QWebSettings::globalSettings() -{ - static QWebSettings* global = 0; - if (!global) - global = new QWebSettings; - return global; -} - -/*! - \class QWebSettings - \since 4.4 - \brief The QWebSettings class provides an object to store the settings used - by QWebPage and QWebFrame. - - \inmodule QtWebKit - - Each QWebPage object has its own QWebSettings object, which configures the - settings for that page. If a setting is not configured, then it is looked - up in the global settings object, which can be accessed using - globalSettings(). - - QWebSettings allows configuration of browser properties, such as font sizes and - families, the location of a custom style sheet, and generic attributes like - JavaScript and plugins. Individual attributes are set using the setAttribute() - function. The \l{QWebSettings::WebAttribute}{WebAttribute} enum further describes - each attribute. - - QWebSettings also configures global properties such as the web page memory - cache, icon database, local database storage and offline - applications storage. - - \section1 Enabling Plugins - - Support for browser plugins can enabled by setting the - \l{QWebSettings::PluginsEnabled}{PluginsEnabled} attribute. For many applications, - this attribute is enabled for all pages by setting it on the - \l{globalSettings()}{global settings object}. QtWebKit will always ignore this setting - when processing Qt plugins. The decision to allow a Qt plugin is made by the client - in its reimplementation of QWebPage::createPlugin(). - - \section1 Web Application Support - - WebKit provides support for features specified in \l{HTML 5} that improve the - performance and capabilities of Web applications. These include client-side - (offline) storage and the use of a Web application cache. - - Client-side (offline) storage is an improvement over the use of cookies to - store persistent data in Web applications. Applications can configure and - enable the use of an offline storage database by calling the - setOfflineStoragePath() with an appropriate file path, and can limit the quota - for each application by calling setOfflineStorageDefaultQuota(). - - \sa QWebPage::settings(), QWebView::settings(), {Web Browser} -*/ - -/*! - \enum QWebSettings::FontFamily - - This enum describes the generic font families defined by CSS 2. - For more information see the - \l{http://www.w3.org/TR/REC-CSS2/fonts.html#generic-font-families}{CSS standard}. - - \value StandardFont - \value FixedFont - \value SerifFont - \value SansSerifFont - \value CursiveFont - \value FantasyFont -*/ - -/*! - \enum QWebSettings::FontSize - - This enum describes the font sizes configurable through QWebSettings. - - \value MinimumFontSize The hard minimum font size. - \value MinimumLogicalFontSize The minimum logical font size that is applied - when zooming out with QWebFrame::setTextSizeMultiplier(). - \value DefaultFontSize The default font size for regular text. - \value DefaultFixedFontSize The default font size for fixed-pitch text. -*/ - -/*! - \enum QWebSettings::WebGraphic - - This enums describes the standard graphical elements used in webpages. - - \value MissingImageGraphic The replacement graphic shown when an image could not be loaded. - \value MissingPluginGraphic The replacement graphic shown when a plugin could not be loaded. - \value DefaultFrameIconGraphic The default icon for QWebFrame::icon(). - \value TextAreaSizeGripCornerGraphic The graphic shown for the size grip of text areas. - \value DeleteButtonGraphic The graphic shown for the WebKit-Editing-Delete-Button in Deletion UI. -*/ - -/*! - \enum QWebSettings::WebAttribute - - This enum describes various attributes that are configurable through QWebSettings. - - \value AutoLoadImages Specifies whether images are automatically loaded in - web pages. This is enabled by default. - \value DnsPrefetchEnabled Specifies whether QtWebkit will try to pre-fetch DNS entries to - speed up browsing. This only works as a global attribute. Only for Qt 4.6 and later. This is disabled by default. - \value JavascriptEnabled Enables or disables the running of JavaScript - programs. This is enabled by default - \value JavaEnabled Enables or disables Java applets. - Currently Java applets are not supported. - \value PluginsEnabled Enables or disables plugins in Web pages (e.g. using NPAPI). Qt plugins - with a mimetype such as "application/x-qt-plugin" are not affected by this setting. This is disabled by default. - \value PrivateBrowsingEnabled Private browsing prevents WebKit from - recording visited pages in the history and storing web page icons. This is disabled by default. - \value JavascriptCanOpenWindows Specifies whether JavaScript programs - can open new windows. This is disabled by default. - \value JavascriptCanCloseWindows Specifies whether JavaScript programs - can close windows. This is disabled by default. - \value JavascriptCanAccessClipboard Specifies whether JavaScript programs - can read or write to the clipboard. This is disabled by default. - \value DeveloperExtrasEnabled Enables extra tools for Web developers. - Currently this enables the "Inspect" element in the context menu as - well as the use of QWebInspector which controls the web inspector - for web site debugging. This is disabled by default. - \value SpatialNavigationEnabled Enables or disables the Spatial Navigation - feature, which consists in the ability to navigate between focusable - elements in a Web page, such as hyperlinks and form controls, by using - Left, Right, Up and Down arrow keys. For example, if a user presses the - Right key, heuristics determine whether there is an element he might be - trying to reach towards the right and which element he probably wants. - This is disabled by default. - \value LinksIncludedInFocusChain Specifies whether hyperlinks should be - included in the keyboard focus chain. This is enabled by default. - \value ZoomTextOnly Specifies whether the zoom factor on a frame applies - only to the text or to all content. This is disabled by default. - \value PrintElementBackgrounds Specifies whether the background color and images - are also drawn when the page is printed. This is enabled by default. - \value OfflineStorageDatabaseEnabled Specifies whether support for the HTML 5 - offline storage feature is enabled or not. This is disabled by default. - \value OfflineWebApplicationCacheEnabled Specifies whether support for the HTML 5 - web application cache feature is enabled or not. This is disabled by default. - \value LocalStorageEnabled Specifies whether support for the HTML 5 - local storage feature is enabled or not. This is disabled by default. - \value LocalStorageDatabaseEnabled \e{This enum value is deprecated.} Use - QWebSettings::LocalStorageEnabled instead. - \value LocalContentCanAccessRemoteUrls Specifies whether locally loaded documents are - allowed to access remote urls. This is disabled by default. For more information - about security origins and local vs. remote content see QWebSecurityOrigin. - \value LocalContentCanAccessFileUrls Specifies whether locally loaded documents are - allowed to access other local urls. This is enabled by default. For more information - about security origins and local vs. remote content see QWebSecurityOrigin. - \value XSSAuditingEnabled Specifies whether load requests should be monitored for cross-site - scripting attempts. Suspicious scripts will be blocked and reported in the inspector's - JavaScript console. Enabling this feature might have an impact on performance - and it is disabled by default. - \value AcceleratedCompositingEnabled This feature, when used in conjunction with - QGraphicsWebView, accelerates animations of web content. CSS animations of the transform and - opacity properties will be rendered by composing the cached content of the animated elements. - This is enabled by default. - \value TiledBackingStoreEnabled This setting enables the tiled backing store feature - for a QGraphicsWebView. With the tiled backing store enabled, the web page contents in and around - the current visible area is speculatively cached to bitmap tiles. The tiles are automatically kept - in sync with the web page as it changes. Enabling tiling can significantly speed up painting heavy - operations like scrolling. Enabling the feature increases memory consumption. It does not work well - with contents using CSS fixed positioning (see also \l{QGraphicsWebView::}{resizesToContents} property). - \l{QGraphicsWebView::}{tiledBackingStoreFrozen} property allows application to temporarily - freeze the contents of the backing store. This is disabled by default. - \value FrameFlatteningEnabled With this setting each subframe is expanded to its contents. - On touch devices, it is desired to not have any scrollable sub parts of the page - as it results in a confusing user experience, with scrolling sometimes scrolling sub parts - and at other times scrolling the page itself. For this reason iframes and framesets are - barely usable on touch devices. This will flatten all the frames to become one scrollable page. - This is disabled by default. - \value SiteSpecificQuirksEnabled This setting enables WebKit's workaround for broken sites. It is - enabled by default. -*/ - -/*! - \internal -*/ -QWebSettings::QWebSettings() - : d(new QWebSettingsPrivate) -{ - // Initialize our global defaults - d->fontSizes.insert(QWebSettings::MinimumFontSize, 0); - d->fontSizes.insert(QWebSettings::MinimumLogicalFontSize, 0); - d->fontSizes.insert(QWebSettings::DefaultFontSize, 16); - d->fontSizes.insert(QWebSettings::DefaultFixedFontSize, 13); - - QFont defaultFont; - defaultFont.setStyleHint(QFont::Serif); - d->fontFamilies.insert(QWebSettings::StandardFont, defaultFont.defaultFamily()); - d->fontFamilies.insert(QWebSettings::SerifFont, defaultFont.defaultFamily()); - -#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) - defaultFont.setStyleHint(QFont::Fantasy); - d->fontFamilies.insert(QWebSettings::FantasyFont, defaultFont.defaultFamily()); - - defaultFont.setStyleHint(QFont::Cursive); - d->fontFamilies.insert(QWebSettings::CursiveFont, defaultFont.defaultFamily()); -#else - d->fontFamilies.insert(QWebSettings::FantasyFont, defaultFont.defaultFamily()); - d->fontFamilies.insert(QWebSettings::CursiveFont, defaultFont.defaultFamily()); -#endif - - defaultFont.setStyleHint(QFont::SansSerif); - d->fontFamilies.insert(QWebSettings::SansSerifFont, defaultFont.defaultFamily()); - -#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) - defaultFont.setStyleHint(QFont::Monospace); -#else - defaultFont.setStyleHint(QFont::TypeWriter); -#endif - d->fontFamilies.insert(QWebSettings::FixedFont, defaultFont.defaultFamily()); - - d->attributes.insert(QWebSettings::AutoLoadImages, true); - d->attributes.insert(QWebSettings::DnsPrefetchEnabled, false); - d->attributes.insert(QWebSettings::JavascriptEnabled, true); - d->attributes.insert(QWebSettings::SpatialNavigationEnabled, false); - d->attributes.insert(QWebSettings::LinksIncludedInFocusChain, true); - d->attributes.insert(QWebSettings::ZoomTextOnly, false); - d->attributes.insert(QWebSettings::PrintElementBackgrounds, true); - d->attributes.insert(QWebSettings::OfflineStorageDatabaseEnabled, false); - d->attributes.insert(QWebSettings::OfflineWebApplicationCacheEnabled, false); - d->attributes.insert(QWebSettings::LocalStorageEnabled, false); - d->attributes.insert(QWebSettings::LocalContentCanAccessRemoteUrls, false); - d->attributes.insert(QWebSettings::LocalContentCanAccessFileUrls, true); - d->attributes.insert(QWebSettings::AcceleratedCompositingEnabled, true); - d->attributes.insert(QWebSettings::WebGLEnabled, false); - d->attributes.insert(QWebSettings::HyperlinkAuditingEnabled, false); - d->attributes.insert(QWebSettings::TiledBackingStoreEnabled, false); - d->attributes.insert(QWebSettings::FrameFlatteningEnabled, false); - d->attributes.insert(QWebSettings::SiteSpecificQuirksEnabled, true); - d->offlineStorageDefaultQuota = 5 * 1024 * 1024; - d->defaultTextEncoding = QLatin1String("iso-8859-1"); -} - -/*! - \internal -*/ -QWebSettings::QWebSettings(WebCore::Settings* settings) - : d(new QWebSettingsPrivate(settings)) -{ - d->settings = settings; - d->apply(); - allSettings()->append(d); -} - -/*! - \internal -*/ -QWebSettings::~QWebSettings() -{ - if (d->settings) - allSettings()->removeAll(d); - - delete d; -} - -/*! - Sets the font size for \a type to \a size. -*/ -void QWebSettings::setFontSize(FontSize type, int size) -{ - d->fontSizes.insert(type, size); - d->apply(); -} - -/*! - Returns the default font size for \a type. -*/ -int QWebSettings::fontSize(FontSize type) const -{ - int defaultValue = 0; - if (d->settings) { - QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; - defaultValue = global->fontSizes.value(type); - } - return d->fontSizes.value(type, defaultValue); -} - -/*! - Resets the font size for \a type to the size specified in the global - settings object. - - This function has no effect on the global QWebSettings instance. -*/ -void QWebSettings::resetFontSize(FontSize type) -{ - if (d->settings) { - d->fontSizes.remove(type); - d->apply(); - } -} - -/*! - Specifies the location of a user stylesheet to load with every web page. - - The \a location must be either a path on the local filesystem, or a data URL - with UTF-8 and Base64 encoded data, such as: - - "data:text/css;charset=utf-8;base64,cCB7IGJhY2tncm91bmQtY29sb3I6IHJlZCB9Ow==" - - \note If the base64 data is not valid, the style will not be applied. - - \sa userStyleSheetUrl() -*/ -void QWebSettings::setUserStyleSheetUrl(const QUrl& location) -{ - d->userStyleSheetLocation = location; - d->apply(); -} - -/*! - Returns the location of the user stylesheet. - - \sa setUserStyleSheetUrl() -*/ -QUrl QWebSettings::userStyleSheetUrl() const -{ - return d->userStyleSheetLocation; -} - -/*! - \since 4.6 - Specifies the default text encoding system. - - The \a encoding, must be a string describing an encoding such as "utf-8", - "iso-8859-1", etc. If left empty a default value will be used. For a more - extensive list of encoding names see \l{QTextCodec} - - \sa defaultTextEncoding() -*/ -void QWebSettings::setDefaultTextEncoding(const QString& encoding) -{ - d->defaultTextEncoding = encoding; - d->apply(); -} - -/*! - \since 4.6 - Returns the default text encoding. - - \sa setDefaultTextEncoding() -*/ -QString QWebSettings::defaultTextEncoding() const -{ - return d->defaultTextEncoding; -} - -/*! - Sets the path of the icon database to \a path. The icon database is used - to store "favicons" associated with web sites. - - \a path must point to an existing directory. - - Setting an empty path disables the icon database. - - \sa iconDatabasePath(), clearIconDatabase() -*/ -void QWebSettings::setIconDatabasePath(const QString& path) -{ - WebCore::iconDatabase()->delayDatabaseCleanup(); - - if (!path.isEmpty()) { - WebCore::iconDatabase()->setEnabled(true); - QFileInfo info(path); - if (info.isDir() && info.isWritable()) - WebCore::iconDatabase()->open(path); - } else { - WebCore::iconDatabase()->setEnabled(false); - WebCore::iconDatabase()->close(); - } -} - -/*! - Returns the path of the icon database or an empty string if the icon - database is disabled. - - \sa setIconDatabasePath(), clearIconDatabase() -*/ -QString QWebSettings::iconDatabasePath() -{ - if (WebCore::iconDatabase()->isEnabled() && WebCore::iconDatabase()->isOpen()) - return WebCore::iconDatabase()->databasePath(); - else - return QString(); -} - -/*! - Clears the icon database. -*/ -void QWebSettings::clearIconDatabase() -{ - if (WebCore::iconDatabase()->isEnabled() && WebCore::iconDatabase()->isOpen()) - WebCore::iconDatabase()->removeAllIcons(); -} - -/*! - Returns the web site's icon for \a url. - - If the web site does not specify an icon \bold OR if the icon is not in the - database, a null QIcon is returned. - - \note The returned icon's size is arbitrary. - - \sa setIconDatabasePath() -*/ -QIcon QWebSettings::iconForUrl(const QUrl& url) -{ - WebCore::Image* image = WebCore::iconDatabase()->iconForPageURL(WebCore::KURL(url).string(), - WebCore::IntSize(16, 16)); - if (!image) - return QPixmap(); - - QPixmap* icon = image->nativeImageForCurrentFrame(); - if (!icon) - return QPixmap(); - - return* icon; -} - -/* - Returns the plugin database object. - -QWebPluginDatabase *QWebSettings::pluginDatabase() -{ - static QWebPluginDatabase* database = 0; - if (!database) - database = new QWebPluginDatabase(); - return database; -} -*/ - -/*! - Sets \a graphic to be drawn when QtWebKit needs to draw an image of the - given \a type. - - For example, when an image cannot be loaded, the pixmap specified by - \l{QWebSettings::WebGraphic}{MissingImageGraphic} is drawn instead. - - \sa webGraphic() -*/ -void QWebSettings::setWebGraphic(WebGraphic type, const QPixmap& graphic) -{ - WebGraphicHash* h = graphics(); - if (graphic.isNull()) - h->remove(type); - else - h->insert(type, graphic); -} - -/*! - Returns a previously set pixmap used to draw replacement graphics of the - specified \a type. - - \sa setWebGraphic() -*/ -QPixmap QWebSettings::webGraphic(WebGraphic type) -{ - return graphics()->value(type); -} - -/*! - Frees up as much memory as possible by cleaning all memory caches such - as page, object and font cache. - - \since 4.6 - */ -void QWebSettings::clearMemoryCaches() -{ - // Turn the cache on and off. Disabling the object cache will remove all - // resources from the cache. They may still live on if they are referenced - // by some Web page though. - if (!WebCore::cache()->disabled()) { - WebCore::cache()->setDisabled(true); - WebCore::cache()->setDisabled(false); - } - - int pageCapacity = WebCore::pageCache()->capacity(); - // Setting size to 0, makes all pages be released. - WebCore::pageCache()->setCapacity(0); - WebCore::pageCache()->releaseAutoreleasedPagesNow(); - WebCore::pageCache()->setCapacity(pageCapacity); - - // Invalidating the font cache and freeing all inactive font data. - WebCore::fontCache()->invalidate(); - - // Empty the Cross-Origin Preflight cache - WebCore::CrossOriginPreflightResultCache::shared().empty(); -} - -/*! - Sets the maximum number of pages to hold in the memory page cache to \a pages. - - The Page Cache allows for a nicer user experience when navigating forth or back - to pages in the forward/back history, by pausing and resuming up to \a pages. - - For more information about the feature, please refer to: - - http://webkit.org/blog/427/webkit-page-cache-i-the-basics/ -*/ -void QWebSettings::setMaximumPagesInCache(int pages) -{ - QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; - WebCore::pageCache()->setCapacity(qMax(0, pages)); - global->apply(); -} - -/*! - Returns the maximum number of web pages that are kept in the memory cache. -*/ -int QWebSettings::maximumPagesInCache() -{ - return WebCore::pageCache()->capacity(); -} - -/*! - Specifies the capacities for the memory cache for dead objects such as - stylesheets or scripts. - - The \a cacheMinDeadCapacity specifies the \e minimum number of bytes that - dead objects should consume when the cache is under pressure. - - \a cacheMaxDead is the \e maximum number of bytes that dead objects should - consume when the cache is \bold not under pressure. - - \a totalCapacity specifies the \e maximum number of bytes that the cache - should consume \bold overall. - - The cache is enabled by default. Calling setObjectCacheCapacities(0, 0, 0) - will disable the cache. Calling it with one non-zero enables it again. -*/ -void QWebSettings::setObjectCacheCapacities(int cacheMinDeadCapacity, int cacheMaxDead, int totalCapacity) -{ - bool disableCache = !cacheMinDeadCapacity && !cacheMaxDead && !totalCapacity; - WebCore::cache()->setDisabled(disableCache); - - WebCore::cache()->setCapacities(qMax(0, cacheMinDeadCapacity), - qMax(0, cacheMaxDead), - qMax(0, totalCapacity)); -} - -/*! - Sets the actual font family to \a family for the specified generic family, - \a which. -*/ -void QWebSettings::setFontFamily(FontFamily which, const QString& family) -{ - d->fontFamilies.insert(which, family); - d->apply(); -} - -/*! - Returns the actual font family for the specified generic font family, - \a which. -*/ -QString QWebSettings::fontFamily(FontFamily which) const -{ - QString defaultValue; - if (d->settings) { - QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; - defaultValue = global->fontFamilies.value(which); - } - return d->fontFamilies.value(which, defaultValue); -} - -/*! - Resets the actual font family specified by \a which to the one set - in the global QWebSettings instance. - - This function has no effect on the global QWebSettings instance. -*/ -void QWebSettings::resetFontFamily(FontFamily which) -{ - if (d->settings) { - d->fontFamilies.remove(which); - d->apply(); - } -} - -/*! - \fn void QWebSettings::setAttribute(WebAttribute attribute, bool on) - - Enables or disables the specified \a attribute feature depending on the - value of \a on. -*/ -void QWebSettings::setAttribute(WebAttribute attr, bool on) -{ - d->attributes.insert(attr, on); - d->apply(); -} - -/*! - \fn bool QWebSettings::testAttribute(WebAttribute attribute) const - - Returns true if \a attribute is enabled; otherwise returns false. -*/ -bool QWebSettings::testAttribute(WebAttribute attr) const -{ - bool defaultValue = false; - if (d->settings) { - QWebSettingsPrivate* global = QWebSettings::globalSettings()->d; - defaultValue = global->attributes.value(attr); - } - return d->attributes.value(attr, defaultValue); -} - -/*! - \fn void QWebSettings::resetAttribute(WebAttribute attribute) - - Resets the setting of \a attribute to the value specified in the - global QWebSettings instance. - - This function has no effect on the global QWebSettings instance. - - \sa globalSettings() -*/ -void QWebSettings::resetAttribute(WebAttribute attr) -{ - if (d->settings) { - d->attributes.remove(attr); - d->apply(); - } -} - -/*! - \since 4.5 - - Sets \a path as the save location for HTML5 client-side database storage data. - - \a path must point to an existing directory. - - Setting an empty path disables the feature. - - Support for client-side databases can enabled by setting the - \l{QWebSettings::OfflineStorageDatabaseEnabled}{OfflineStorageDatabaseEnabled} attribute. - - \sa offlineStoragePath() -*/ -void QWebSettings::setOfflineStoragePath(const QString& path) -{ -#if ENABLE(DATABASE) - WebCore::DatabaseTracker::tracker().setDatabaseDirectoryPath(path); -#endif -} - -/*! - \since 4.5 - - Returns the path of the HTML5 client-side database storage or an empty string if the - feature is disabled. - - \sa setOfflineStoragePath() -*/ -QString QWebSettings::offlineStoragePath() -{ -#if ENABLE(DATABASE) - return WebCore::DatabaseTracker::tracker().databaseDirectoryPath(); -#else - return QString(); -#endif -} - -/*! - \since 4.5 - - Sets the value of the default quota for new offline storage databases - to \a maximumSize. -*/ -void QWebSettings::setOfflineStorageDefaultQuota(qint64 maximumSize) -{ - QWebSettings::globalSettings()->d->offlineStorageDefaultQuota = maximumSize; -} - -/*! - \since 4.5 - - Returns the value of the default quota for new offline storage databases. -*/ -qint64 QWebSettings::offlineStorageDefaultQuota() -{ - return QWebSettings::globalSettings()->d->offlineStorageDefaultQuota; -} - -/*! - \since 4.6 - - Sets the path for HTML5 offline web application cache storage to \a path. - - An application cache acts like an HTTP cache in some sense. For documents - that use the application cache via JavaScript, the loader engine will - first ask the application cache for the contents, before hitting the - network. - - The feature is described in details at: - http://dev.w3.org/html5/spec/Overview.html#appcache - - \a path must point to an existing directory. - - Setting an empty path disables the feature. - - Support for offline web application cache storage can enabled by setting the - \l{QWebSettings::OfflineWebApplicationCacheEnabled}{OfflineWebApplicationCacheEnabled} attribute. - - \sa offlineWebApplicationCachePath() -*/ -void QWebSettings::setOfflineWebApplicationCachePath(const QString& path) -{ -#if ENABLE(OFFLINE_WEB_APPLICATIONS) - WebCore::cacheStorage().setCacheDirectory(path); -#endif -} - -/*! - \since 4.6 - - Returns the path of the HTML5 offline web application cache storage - or an empty string if the feature is disabled. - - \sa setOfflineWebApplicationCachePath() -*/ -QString QWebSettings::offlineWebApplicationCachePath() -{ -#if ENABLE(OFFLINE_WEB_APPLICATIONS) - return WebCore::cacheStorage().cacheDirectory(); -#else - return QString(); -#endif -} - -/*! - \since 4.6 - - Sets the value of the quota for the offline web application cache - to \a maximumSize. -*/ -void QWebSettings::setOfflineWebApplicationCacheQuota(qint64 maximumSize) -{ -#if ENABLE(OFFLINE_WEB_APPLICATIONS) - WebCore::cacheStorage().empty(); - WebCore::cacheStorage().vacuumDatabaseFile(); - WebCore::cacheStorage().setMaximumSize(maximumSize); -#endif -} - -/*! - \since 4.6 - - Returns the value of the quota for the offline web application cache. -*/ -qint64 QWebSettings::offlineWebApplicationCacheQuota() -{ -#if ENABLE(OFFLINE_WEB_APPLICATIONS) - return WebCore::cacheStorage().maximumSize(); -#else - return 0; -#endif -} - -/*! - \since 4.6 - - Sets the path for HTML5 local storage to \a path. - - For more information on HTML5 local storage see the - \l{http://www.w3.org/TR/webstorage/#the-localstorage-attribute}{Web Storage standard}. - - Support for local storage can enabled by setting the - \l{QWebSettings::LocalStorageEnabled}{LocalStorageEnabled} attribute. - - \sa localStoragePath() -*/ -void QWebSettings::setLocalStoragePath(const QString& path) -{ - d->localStoragePath = path; - d->apply(); -} - -/*! - \since 4.6 - - Returns the path for HTML5 local storage. - - \sa setLocalStoragePath() -*/ -QString QWebSettings::localStoragePath() const -{ - return d->localStoragePath; -} - -/*! - \since 4.6 - - Enables WebKit data persistence and sets the path to \a path. - If \a path is empty, the user-specific data location specified by - \l{QDesktopServices::DataLocation}{DataLocation} will be used instead. - - This method will simultaneously set and enable the iconDatabasePath(), - localStoragePath(), offlineStoragePath() and offlineWebApplicationCachePath(). - - \sa localStoragePath() -*/ -void QWebSettings::enablePersistentStorage(const QString& path) -{ -#ifndef QT_NO_DESKTOPSERVICES - QString storagePath; - - if (path.isEmpty()) { - - storagePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation); - if (storagePath.isEmpty()) - storagePath = WebCore::pathByAppendingComponent(QDir::homePath(), QCoreApplication::applicationName()); - } else - storagePath = path; - - WebCore::makeAllDirectories(storagePath); - - QWebSettings::setIconDatabasePath(storagePath); - QWebSettings::setOfflineWebApplicationCachePath(storagePath); - QWebSettings::setOfflineStoragePath(WebCore::pathByAppendingComponent(storagePath, "Databases")); - QWebSettings::globalSettings()->setLocalStoragePath(WebCore::pathByAppendingComponent(storagePath, "LocalStorage")); - QWebSettings::globalSettings()->setAttribute(QWebSettings::LocalStorageEnabled, true); - QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true); - QWebSettings::globalSettings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true); - -#if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE) - // All applications can share the common QtWebkit cache file(s). - // Path is not configurable and uses QDesktopServices::CacheLocation by default. - QString cachePath = QDesktopServices::storageLocation(QDesktopServices::CacheLocation); - WebCore::makeAllDirectories(cachePath); - - QFileInfo info(cachePath); - if (info.isDir() && info.isWritable()) { - WebCore::PluginDatabase::setPersistentMetadataCacheEnabled(true); - WebCore::PluginDatabase::setPersistentMetadataCachePath(cachePath); - } -#endif -#endif -} - -/*! - \fn QWebSettingsPrivate* QWebSettings::handle() const - \internal -*/ diff --git a/WebKit/qt/Api/qwebsettings.h b/WebKit/qt/Api/qwebsettings.h deleted file mode 100644 index 0569ab0..0000000 --- a/WebKit/qt/Api/qwebsettings.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef QWEBSETTINGS_H -#define QWEBSETTINGS_H - -#include "qwebkitglobal.h" - -#include <QtCore/qstring.h> -#include <QtGui/qpixmap.h> -#include <QtGui/qicon.h> -#include <QtCore/qshareddata.h> - -namespace WebCore { - class Settings; -} - -class QWebPage; -class QWebPluginDatabase; -class QWebSettingsPrivate; -QT_BEGIN_NAMESPACE -class QUrl; -QT_END_NAMESPACE - -class QWEBKIT_EXPORT QWebSettings { -public: - enum FontFamily { - StandardFont, - FixedFont, - SerifFont, - SansSerifFont, - CursiveFont, - FantasyFont - }; - enum WebAttribute { - AutoLoadImages, - JavascriptEnabled, - JavaEnabled, - PluginsEnabled, - PrivateBrowsingEnabled, - JavascriptCanOpenWindows, - JavascriptCanAccessClipboard, - DeveloperExtrasEnabled, - LinksIncludedInFocusChain, - ZoomTextOnly, - PrintElementBackgrounds, - OfflineStorageDatabaseEnabled, - OfflineWebApplicationCacheEnabled, - LocalStorageEnabled, -#if defined(QT_DEPRECATED) || defined(qdoc) - LocalStorageDatabaseEnabled = LocalStorageEnabled, -#endif - LocalContentCanAccessRemoteUrls, - DnsPrefetchEnabled, - XSSAuditingEnabled, - AcceleratedCompositingEnabled, - SpatialNavigationEnabled, - LocalContentCanAccessFileUrls, - TiledBackingStoreEnabled, - FrameFlatteningEnabled, - SiteSpecificQuirksEnabled, - JavascriptCanCloseWindows, - WebGLEnabled, - HyperlinkAuditingEnabled - }; - enum WebGraphic { - MissingImageGraphic, - MissingPluginGraphic, - DefaultFrameIconGraphic, - TextAreaSizeGripCornerGraphic, - DeleteButtonGraphic, - InputSpeechButtonGraphic - }; - enum FontSize { - MinimumFontSize, - MinimumLogicalFontSize, - DefaultFontSize, - DefaultFixedFontSize - }; - - static QWebSettings *globalSettings(); - - void setFontFamily(FontFamily which, const QString &family); - QString fontFamily(FontFamily which) const; - void resetFontFamily(FontFamily which); - - void setFontSize(FontSize type, int size); - int fontSize(FontSize type) const; - void resetFontSize(FontSize type); - - void setAttribute(WebAttribute attr, bool on); - bool testAttribute(WebAttribute attr) const; - void resetAttribute(WebAttribute attr); - - void setUserStyleSheetUrl(const QUrl &location); - QUrl userStyleSheetUrl() const; - - void setDefaultTextEncoding(const QString &encoding); - QString defaultTextEncoding() const; - - static void setIconDatabasePath(const QString &location); - static QString iconDatabasePath(); - static void clearIconDatabase(); - static QIcon iconForUrl(const QUrl &url); - - //static QWebPluginDatabase *pluginDatabase(); - - static void setWebGraphic(WebGraphic type, const QPixmap &graphic); - static QPixmap webGraphic(WebGraphic type); - - static void setMaximumPagesInCache(int pages); - static int maximumPagesInCache(); - static void setObjectCacheCapacities(int cacheMinDeadCapacity, int cacheMaxDead, int totalCapacity); - - static void setOfflineStoragePath(const QString& path); - static QString offlineStoragePath(); - static void setOfflineStorageDefaultQuota(qint64 maximumSize); - static qint64 offlineStorageDefaultQuota(); - - static void setOfflineWebApplicationCachePath(const QString& path); - static QString offlineWebApplicationCachePath(); - static void setOfflineWebApplicationCacheQuota(qint64 maximumSize); - static qint64 offlineWebApplicationCacheQuota(); - - void setLocalStoragePath(const QString& path); - QString localStoragePath() const; - - static void clearMemoryCaches(); - - static void enablePersistentStorage(const QString& path = QString()); - - inline QWebSettingsPrivate* handle() const { return d; } - -private: - friend class QWebPagePrivate; - friend class QWebSettingsPrivate; - - Q_DISABLE_COPY(QWebSettings) - - QWebSettings(); - QWebSettings(WebCore::Settings *settings); - ~QWebSettings(); - - QWebSettingsPrivate *d; -}; - -#endif diff --git a/WebKit/qt/Api/qwebview.cpp b/WebKit/qt/Api/qwebview.cpp deleted file mode 100644 index f4b23f3..0000000 --- a/WebKit/qt/Api/qwebview.cpp +++ /dev/null @@ -1,1256 +0,0 @@ -/* - Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) - Copyright (C) 2008 Holger Hans Peter Freyther - Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in> - - 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 "qwebview.h" - -#include "Page.h" -#include "QWebPageClient.h" -#include "Settings.h" -#include "qwebframe.h" -#include "qwebpage_p.h" -#include "qbitmap.h" -#include "qevent.h" -#include "qpainter.h" -#include "qprinter.h" -#include "qdir.h" -#include "qfile.h" - -class QWebViewPrivate { -public: - QWebViewPrivate(QWebView *view) - : view(view) - , page(0) - , renderHints(QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform) - { - Q_ASSERT(view); - } - - virtual ~QWebViewPrivate(); - - void _q_pageDestroyed(); - void detachCurrentPage(); - - QWebView *view; - QWebPage *page; - - QPainter::RenderHints renderHints; -}; - -QWebViewPrivate::~QWebViewPrivate() -{ - detachCurrentPage(); -} - -void QWebViewPrivate::_q_pageDestroyed() -{ - page = 0; - view->setPage(0); -} - -#ifdef Q_WS_MAEMO_5 -#include "qabstractkineticscroller.h" -#include "qapplication.h" - -// QCoreApplication::sendSpontaneousEvent() is private, hence this friend wrapper -bool qt_sendSpontaneousEvent(QObject* receiver, QEvent* ev) -{ - return QCoreApplication::sendSpontaneousEvent(receiver, ev); -} - -class QWebViewKineticScroller : public QObject, public QAbstractKineticScroller { -public: - QWebViewKineticScroller() - : QObject() - , QAbstractKineticScroller() - , m_view(0) - , m_ignoreEvents(false) - { - } - - void setWidget(QWebView* widget) - { - if (m_view) { - m_view->removeEventFilter(this); - QWebFrame* frame = m_view->page()->mainFrame(); - frame->setScrollBarPolicy(Qt::Vertical, m_oldVerticalScrollBarPolicy); - frame->setScrollBarPolicy(Qt::Horizontal, m_oldHorizontalScrollBarPolicy); - } - - m_view = widget; - setParent(m_view); - if (m_view) { - QWebFrame* frame = m_view->page()->mainFrame(); - m_oldHorizontalScrollBarPolicy = frame->scrollBarPolicy(Qt::Horizontal); - m_oldVerticalScrollBarPolicy = frame->scrollBarPolicy(Qt::Vertical); - frame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); - frame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); - m_view->installEventFilter(this); - } - } - -protected: - bool eventFilter(QObject* o, QEvent* ev) - { - if (!o || m_view != o || m_ignoreEvents || !m_view->isEnabled()) - return QObject::eventFilter(o, ev); - - bool res = false; - - switch (ev->type()) { - case QEvent::MouseButtonPress: { - // remember the frame where the button was pressed - QWebFrame* hitFrame = scrollingFrameAt(static_cast<QMouseEvent*>(ev)->pos()); - if (hitFrame) - m_frame = hitFrame; - // fall through - } - case QEvent::MouseMove: - case QEvent::MouseButtonRelease: - case QEvent::MouseButtonDblClick: - res = handleMouseEvent(static_cast<QMouseEvent*>(ev)); - break; - default: - break; - } - return res ? true : QObject::eventFilter(o, ev); - } - - void cancelLeftMouseButtonPress(const QPoint& /* globalPressPos */) - { - QMouseEvent cmem(QEvent::MouseMove, QPoint(-INT_MAX, -INT_MAX), Qt::LeftButton, QApplication::mouseButtons() | Qt::LeftButton, QApplication::keyboardModifiers()); - sendEvent(m_view, &cmem); - QMouseEvent cmer(QEvent::MouseButtonRelease, QPoint(-INT_MAX, -INT_MAX), Qt::LeftButton, QApplication::mouseButtons() & ~Qt::LeftButton, QApplication::keyboardModifiers()); - sendEvent(m_view, &cmer); - } - - QWebFrame* currentFrame() const - { - if (m_frame) - return m_frame; - - if (m_view) - return m_view->page()->mainFrame(); - - return 0; - } - - // Returns the innermost frame at the given position that can scroll. - QWebFrame* scrollingFrameAt(const QPoint& pos) const - { - QWebFrame* hitFrame = 0; - if (m_view) { - QWebFrame* frame = m_view->page()->mainFrame(); - hitFrame = frame->hitTestContent(pos).frame(); - QSize range = hitFrame->contentsSize() - hitFrame->geometry().size(); - - while (hitFrame && range.width() <= 1 && range.height() <= 1) - hitFrame = hitFrame->parentFrame(); - - return hitFrame; - } - } - - QPoint maximumScrollPosition() const - { - QWebFrame* frame = currentFrame(); - QSize s = frame ? frame->contentsSize() - frame->geometry().size() : QSize(0, 0); - return QPoint(qMax(0, s.width()), qMax(0, s.height())); - } - - QPoint scrollPosition() const - { - QWebFrame* frame = currentFrame(); - return frame ? frame->scrollPosition() : QPoint(); - } - - QSize viewportSize() const - { - return m_view ? m_view->page()->viewportSize() : QSize(); - } - - void setScrollPosition(const QPoint& point, const QPoint& /* overShootDelta */) - { - QWebFrame* frame = currentFrame(); - if (frame) - frame->setScrollPosition(point); - } - - void sendEvent(QWidget* w, QEvent* ev) - { - m_ignoreEvents = true; - qt_sendSpontaneousEvent(w, ev); - m_ignoreEvents = false; - } - - QWebView* m_view; - bool m_ignoreEvents; - QPointer<QWebFrame> m_frame; - Qt::ScrollBarPolicy m_oldVerticalScrollBarPolicy; - Qt::ScrollBarPolicy m_oldHorizontalScrollBarPolicy; -}; - -#endif // Q_WS_MAEMO_5 - - -/*! - \class QWebView - \since 4.4 - \brief The QWebView class provides a widget that is used to view and edit - web documents. - \ingroup advanced - - \inmodule QtWebKit - - QWebView is the main widget component of the QtWebKit web browsing module. - It can be used in various applications to display web content live from the - Internet. - - The image below shows QWebView previewed in \QD with a Nokia website. - - \image qwebview-url.png - - A web site can be loaded onto QWebView with the load() function. Like all - Qt widgets, the show() function must be invoked in order to display - QWebView. The snippet below illustrates this: - - \snippet webkitsnippets/simple/main.cpp Using QWebView - - Alternatively, setUrl() can also be used to load a web site. If you have - the HTML content readily available, you can use setHtml() instead. - - The loadStarted() signal is emitted when the view begins loading. The - loadProgress() signal, on the other hand, is emitted whenever an element of - the web view completes loading, such as an embedded image, a script, etc. - Finally, the loadFinished() signal is emitted when the view has loaded - completely. It's argument - either \c true or \c false - indicates - load success or failure. - - The page() function returns a pointer to the web page object. See - \l{Elements of QWebView} for an explanation of how the web page - is related to the view. To modify your web view's settings, you can access - the QWebSettings object with the settings() function. With QWebSettings, - you can change the default fonts, enable or disable features such as - JavaScript and plugins. - - The title of an HTML document can be accessed with the title() property. - Additionally, a web site 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 - textSizeMultiplier() property can be used to change the overall size of - the text displayed in the web view. - - If you require a custom context menu, you can implement it by reimplementing - \l{QWidget::}{contextMenuEvent()} and populating your QMenu with the actions - obtained from pageAction(). More functionality such as reloading the view, - copying selected text to the clipboard, or pasting into the view, is also - encapsulated within the QAction objects returned by pageAction(). These - actions can be programmatically triggered using triggerPageAction(). - Alternatively, the actions can be added to a toolbar or a menu directly. - QWebView maintains the state of the returned actions but allows - modification of action properties such as \l{QAction::}{text} or - \l{QAction::}{icon}. - - A QWebView 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. - - If you want to provide support for web sites that allow the user to open - new windows, such as pop-up windows, you can subclass QWebView and - reimplement the createWindow() function. - - \section1 Elements of QWebView - - QWebView consists of other objects such as QWebFrame and QWebPage. The - flowchart below shows these elements are related. - - \image qwebview-diagram.png - - \note It is possible to use QWebPage and QWebFrame, without using QWebView, - if you do not require QWidget attributes. Nevertheless, QtWebKit depends - on QtGui, so you should use a QApplication instead of QCoreApplication. - - \sa {Previewer Example}, {Web Browser}, {Form Extractor Example}, - {Google Chat Example}, {Fancy Browser Example} -*/ - -/*! - Constructs an empty QWebView with parent \a parent. - - \sa load() -*/ -QWebView::QWebView(QWidget *parent) - : QWidget(parent) -{ - d = new QWebViewPrivate(this); - -#if !defined(Q_WS_QWS) && !defined(Q_OS_SYMBIAN) - setAttribute(Qt::WA_InputMethodEnabled); -#endif - - setAttribute(Qt::WA_AcceptTouchEvents); -#if defined(Q_WS_MAEMO_5) - QAbstractKineticScroller* scroller = new QWebViewKineticScroller(); - static_cast<QWebViewKineticScroller*>(scroller)->setWidget(this); - setProperty("kineticScroller", QVariant::fromValue(scroller)); -#endif - setAcceptDrops(true); - - setMouseTracking(true); - setFocusPolicy(Qt::WheelFocus); -} - -/*! - Destroys the web view. -*/ -QWebView::~QWebView() -{ - delete d; -} - -/*! - Returns a pointer to the underlying web page. - - \sa setPage() -*/ -QWebPage *QWebView::page() const -{ - if (!d->page) { - QWebView *that = const_cast<QWebView *>(this); - that->setPage(new QWebPage(that)); - } - return d->page; -} - -void QWebViewPrivate::detachCurrentPage() -{ - if (!page) - return; - - page->d->view.clear(); - - // if the page client is the special client constructed for - // delegating the responsibilities to a QWidget, we need - // to destroy it. - - if (page->d->client && page->d->client->isQWidgetClient()) - page->d->client.clear(); - - page->d->client.release(); - - // if the page was created by us, we own it and need to - // destroy it as well. - - if (page->parent() == view) - delete page; - else - page->disconnect(view); - - page = 0; -} - -/*! - Makes \a page the new web page of the web view. - - The parent QObject of the provided page remains the owner - of the object. If the current document is a child of the web - view, it will be deleted. - - \sa page() -*/ -void QWebView::setPage(QWebPage* page) -{ - if (d->page == page) - return; - - d->detachCurrentPage(); - d->page = page; - - if (d->page) { - d->page->setView(this); - d->page->setPalette(palette()); - // #### connect signals - QWebFrame *mainFrame = d->page->mainFrame(); - connect(mainFrame, SIGNAL(titleChanged(QString)), - this, SIGNAL(titleChanged(QString))); - connect(mainFrame, SIGNAL(iconChanged()), - this, SIGNAL(iconChanged())); - connect(mainFrame, SIGNAL(urlChanged(QUrl)), - this, SIGNAL(urlChanged(QUrl))); - - connect(d->page, SIGNAL(loadStarted()), - this, SIGNAL(loadStarted())); - connect(d->page, SIGNAL(loadProgress(int)), - this, SIGNAL(loadProgress(int))); - connect(d->page, SIGNAL(loadFinished(bool)), - this, SIGNAL(loadFinished(bool))); - connect(d->page, SIGNAL(statusBarMessage(QString)), - this, SIGNAL(statusBarMessage(QString))); - connect(d->page, SIGNAL(linkClicked(QUrl)), - this, SIGNAL(linkClicked(QUrl))); - connect(d->page, SIGNAL(selectionChanged()), - this, SIGNAL(selectionChanged())); - - connect(d->page, SIGNAL(microFocusChanged()), - this, SLOT(updateMicroFocus())); - connect(d->page, SIGNAL(destroyed()), - this, SLOT(_q_pageDestroyed())); - } - setAttribute(Qt::WA_OpaquePaintEvent, d->page); - update(); -} - -/*! - Loads the specified \a url and displays it. - - \note The view remains the same until enough data has arrived to display the new \a url. - - \sa setUrl(), url(), urlChanged(), QUrl::fromUserInput() -*/ -void QWebView::load(const QUrl &url) -{ - page()->mainFrame()->load(url); -} - -/*! - \fn void QWebView::load(const QNetworkRequest &request, QNetworkAccessManager::Operation operation, const QByteArray &body) - - Loads a network request, \a request, 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 url. - - \sa url(), urlChanged() -*/ - -void QWebView::load(const QNetworkRequest &request, - QNetworkAccessManager::Operation operation, - const QByteArray &body) -{ - page()->mainFrame()->load(request, operation, body); -} - -/*! - Sets the content of the web view to the specified \a html. - - External objects such as stylesheets or images referenced in the HTML - document are located relative to \a baseUrl. - - The \a html is loaded immediately; external objects are 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. Alternatively, the - encoding can also be specified by the web server. - - This is a convenience function equivalent to setContent(html, "text/html", baseUrl). - - \warning This function works only for HTML, for other mime types (i.e. XHTML, SVG) - setContent() should be used instead. - - \sa load(), setContent(), QWebFrame::toHtml(), QWebFrame::setContent() -*/ -void QWebView::setHtml(const QString &html, const QUrl &baseUrl) -{ - page()->mainFrame()->setHtml(html, baseUrl); -} - -/*! - Sets the content of the web view 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. - - \sa load(), setHtml(), QWebFrame::toHtml() -*/ -void QWebView::setContent(const QByteArray &data, const QString &mimeType, const QUrl &baseUrl) -{ - page()->mainFrame()->setContent(data, mimeType, baseUrl); -} - -/*! - Returns a pointer to the view's history of navigated web pages. - - It is equivalent to - - \snippet webkitsnippets/qtwebkit_qwebview_snippet.cpp 0 -*/ -QWebHistory *QWebView::history() const -{ - return page()->history(); -} - -/*! - Returns a pointer to the view/page specific settings object. - - It is equivalent to - - \snippet webkitsnippets/qtwebkit_qwebview_snippet.cpp 1 - - \sa QWebSettings::globalSettings() -*/ -QWebSettings *QWebView::settings() const -{ - return page()->settings(); -} - -/*! - \property QWebView::title - \brief the title of the web page currently viewed - - By default, this property contains an empty string. - - \sa titleChanged() -*/ -QString QWebView::title() const -{ - if (d->page) - return d->page->mainFrame()->title(); - return QString(); -} - -/*! - \property QWebView::url - \brief the url of the web page currently viewed - - Setting this property clears the view and loads the URL. - - By default, this property contains an empty, invalid URL. - - \sa load(), urlChanged() -*/ - -void QWebView::setUrl(const QUrl &url) -{ - page()->mainFrame()->setUrl(url); -} - -QUrl QWebView::url() const -{ - if (d->page) - return d->page->mainFrame()->url(); - return QUrl(); -} - -/*! - \property QWebView::icon - \brief the icon associated with the web page currently viewed - - By default, this property contains a null icon. - - \sa iconChanged(), QWebSettings::iconForUrl() -*/ -QIcon QWebView::icon() const -{ - if (d->page) - return d->page->mainFrame()->icon(); - return QIcon(); -} - -/*! - \property QWebView::hasSelection - \brief whether this page contains selected content or not. - - By default, this property is false. - - \sa selectionChanged() -*/ -bool QWebView::hasSelection() const -{ - if (d->page) - return d->page->hasSelection(); - return false; -} - -/*! - \property QWebView::selectedText - \brief the text currently selected - - By default, this property contains an empty string. - - \sa findText(), selectionChanged(), selectedHtml() -*/ -QString QWebView::selectedText() const -{ - if (d->page) - return d->page->selectedText(); - return QString(); -} - -/*! - \since 4.8 - \property QWebView::selectedHtml - \brief the HTML currently selected - - By default, this property contains an empty string. - - \sa findText(), selectionChanged(), selectedText() -*/ -QString QWebView::selectedHtml() const -{ - if (d->page) - return d->page->selectedHtml(); - return QString(); -} - -#ifndef QT_NO_ACTION -/*! - Returns a pointer to a QAction that encapsulates the specified web action \a action. -*/ -QAction *QWebView::pageAction(QWebPage::WebAction action) const -{ - return page()->action(action); -} -#endif - -/*! - Triggers the specified \a action. If it is a checkable action the specified - \a checked state is assumed. - - The following example triggers the copy action and therefore copies any - selected text to the clipboard. - - \snippet webkitsnippets/qtwebkit_qwebview_snippet.cpp 2 - - \sa pageAction() -*/ -void QWebView::triggerPageAction(QWebPage::WebAction action, bool checked) -{ - page()->triggerAction(action, checked); -} - -/*! - \property QWebView::modified - \brief whether the document was modified by the user - - Parts of HTML documents can be editable for example through the - \c{contenteditable} attribute on HTML elements. - - By default, this property is false. -*/ -bool QWebView::isModified() const -{ - if (d->page) - return d->page->isModified(); - return false; -} - -/* -Qt::TextInteractionFlags QWebView::textInteractionFlags() const -{ - // ### FIXME (add to page) - return Qt::TextInteractionFlags(); -} -*/ - -/* - \property QWebView::textInteractionFlags - \brief how the view should handle user input - - Specifies how the user can interact with the text on the page. -*/ - -/* -void QWebView::setTextInteractionFlags(Qt::TextInteractionFlags flags) -{ - Q_UNUSED(flags) - // ### FIXME (add to page) -} -*/ - -/*! - \reimp -*/ -QSize QWebView::sizeHint() const -{ - return QSize(800, 600); // ####... -} - -/*! - \property QWebView::zoomFactor - \since 4.5 - \brief the zoom factor for the view -*/ - -void QWebView::setZoomFactor(qreal factor) -{ - page()->mainFrame()->setZoomFactor(factor); -} - -qreal QWebView::zoomFactor() const -{ - return page()->mainFrame()->zoomFactor(); -} - -/*! - \property QWebView::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. - - By default, this property contains a value of 1.0. -*/ - -/*! - Sets the value of the multiplier used to scale the text in a Web page to - the \a factor specified. -*/ -void QWebView::setTextSizeMultiplier(qreal factor) -{ - page()->mainFrame()->setTextSizeMultiplier(factor); -} - -/*! - Returns the value of the multiplier used to scale the text in a Web page. -*/ -qreal QWebView::textSizeMultiplier() const -{ - return page()->mainFrame()->textSizeMultiplier(); -} - -/*! - \property QWebView::renderHints - \since 4.6 - \brief the default render hints for the view - - These hints are used to initialize QPainter before painting the Web page. - - QPainter::TextAntialiasing and QPainter::SmoothPixmapTransform are enabled by default. - - \note This property is not available on Symbian. However, the getter and - setter functions can still be used directly. - - \sa QPainter::renderHints() -*/ - -/*! - \since 4.6 - Returns the render hints used by the view to render content. - - \sa QPainter::renderHints() -*/ -QPainter::RenderHints QWebView::renderHints() const -{ - return d->renderHints; -} - -/*! - \since 4.6 - Sets the render hints used by the view to the specified \a hints. - - \sa QPainter::setRenderHints() -*/ -void QWebView::setRenderHints(QPainter::RenderHints hints) -{ - if (hints == d->renderHints) - return; - d->renderHints = hints; - update(); -} - -/*! - \since 4.6 - If \a enabled is true, enables the specified render \a hint; otherwise - disables it. - - \sa renderHints, QPainter::renderHints() -*/ -void QWebView::setRenderHint(QPainter::RenderHint hint, bool enabled) -{ - QPainter::RenderHints oldHints = d->renderHints; - if (enabled) - d->renderHints |= hint; - else - d->renderHints &= ~hint; - if (oldHints != d->renderHints) - update(); -} - - -/*! - Finds the specified string, \a subString, in the page, using the given \a options. - - If the HighlightAllOccurrences flag is passed, the function will highlight all occurrences - that exist in the page. All subsequent calls will extend the highlight, rather than - replace it, with occurrences of the new string. - - If the HighlightAllOccurrences flag is not passed, the function will select an occurrence - and all subsequent calls will replace the current occurrence with the next one. - - To clear the selection, just pass an empty string. - - Returns true if \a subString was found; otherwise returns false. - - \sa selectedText(), selectionChanged() -*/ -bool QWebView::findText(const QString &subString, QWebPage::FindFlags options) -{ - if (d->page) - return d->page->findText(subString, options); - return false; -} - -/*! \reimp -*/ -bool QWebView::event(QEvent *e) -{ - if (d->page) { -#ifndef QT_NO_CONTEXTMENU - if (e->type() == QEvent::ContextMenu) { - if (!isEnabled()) - return false; - QContextMenuEvent *event = static_cast<QContextMenuEvent *>(e); - if (d->page->swallowContextMenuEvent(event)) { - e->accept(); - return true; - } - d->page->updatePositionDependentActions(event->pos()); - } else -#endif // QT_NO_CONTEXTMENU - if (e->type() == QEvent::ShortcutOverride) { - d->page->event(e); -#ifndef QT_NO_CURSOR - } else if (e->type() == QEvent::CursorChange) { - // An unsetCursor will set the cursor to Qt::ArrowCursor. - // Thus this cursor change might be a QWidget::unsetCursor() - // If this is not the case and it came from WebCore, the - // QWebPageClient already has set its cursor internally - // to Qt::ArrowCursor, so updating the cursor is always - // right, as it falls back to the last cursor set by - // WebCore. - // FIXME: Add a QEvent::CursorUnset or similar to Qt. - if (cursor().shape() == Qt::ArrowCursor) - d->page->d->client->resetCursor(); -#endif - } else if (e->type() == QEvent::TouchBegin - || e->type() == QEvent::TouchEnd - || e->type() == QEvent::TouchUpdate) { - d->page->event(e); - - // Always return true so that we'll receive also TouchUpdate and TouchEnd events - return true; - } else if (e->type() == QEvent::Leave) - d->page->event(e); - } - - return QWidget::event(e); -} - -/*! - Prints the main frame to the given \a printer. - - \sa QWebFrame::print(), QPrintPreviewDialog -*/ -void QWebView::print(QPrinter *printer) const -{ -#ifndef QT_NO_PRINTER - page()->mainFrame()->print(printer); -#endif -} - -/*! - Convenience slot that stops loading the document. - - It is equivalent to - - \snippet webkitsnippets/qtwebkit_qwebview_snippet.cpp 3 - - \sa reload(), pageAction(), loadFinished() -*/ -void QWebView::stop() -{ - if (d->page) - d->page->triggerAction(QWebPage::Stop); -} - -/*! - Convenience slot that loads the previous document in the list of documents - built by navigating links. Does nothing if there is no previous document. - - It is equivalent to - - \snippet webkitsnippets/qtwebkit_qwebview_snippet.cpp 4 - - \sa forward(), pageAction() -*/ -void QWebView::back() -{ - if (d->page) - d->page->triggerAction(QWebPage::Back); -} - -/*! - Convenience slot that loads the next document in the list of documents - built by navigating links. Does nothing if there is no next document. - - It is equivalent to - - \snippet webkitsnippets/qtwebkit_qwebview_snippet.cpp 5 - - \sa back(), pageAction() -*/ -void QWebView::forward() -{ - if (d->page) - d->page->triggerAction(QWebPage::Forward); -} - -/*! - Reloads the current document. - - \sa stop(), pageAction(), loadStarted() -*/ -void QWebView::reload() -{ - if (d->page) - d->page->triggerAction(QWebPage::Reload); -} - -/*! \reimp -*/ -void QWebView::resizeEvent(QResizeEvent *e) -{ - if (d->page) - d->page->setViewportSize(e->size()); -} - -/*! \reimp -*/ -void QWebView::paintEvent(QPaintEvent *ev) -{ - if (!d->page) - return; -#ifdef QWEBKIT_TIME_RENDERING - QTime time; - time.start(); -#endif - - QWebFrame *frame = d->page->mainFrame(); - QPainter p(this); - p.setRenderHints(d->renderHints); - - frame->render(&p, ev->region()); - -#ifdef QWEBKIT_TIME_RENDERING - int elapsed = time.elapsed(); - qDebug() << "paint event on " << ev->region() << ", took to render = " << elapsed; -#endif -} - -/*! - This function is called from the createWindow() method of the associated QWebPage, - each time the page wants to create a new window of the given \a type. This might - be the result, for example, of a JavaScript request to open a document in a new window. - - \note If the createWindow() method of the associated page is reimplemented, this - method is not called, unless explicitly done so in the reimplementation. - - \note In the cases when the window creation is being triggered by JavaScript, apart from - reimplementing this method application must also set the JavaScriptCanOpenWindows attribute - of QWebSettings to true in order for it to get called. - - \sa QWebPage::createWindow(), QWebPage::acceptNavigationRequest() -*/ -QWebView *QWebView::createWindow(QWebPage::WebWindowType type) -{ - Q_UNUSED(type) - return 0; -} - -/*! \reimp -*/ -void QWebView::mouseMoveEvent(QMouseEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } -} - -/*! \reimp -*/ -void QWebView::mousePressEvent(QMouseEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } -} - -/*! \reimp -*/ -void QWebView::mouseDoubleClickEvent(QMouseEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } -} - -/*! \reimp -*/ -void QWebView::mouseReleaseEvent(QMouseEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } -} - -#ifndef QT_NO_CONTEXTMENU -/*! \reimp -*/ -void QWebView::contextMenuEvent(QContextMenuEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } -} -#endif // QT_NO_CONTEXTMENU - -#ifndef QT_NO_WHEELEVENT -/*! \reimp -*/ -void QWebView::wheelEvent(QWheelEvent* ev) -{ - if (d->page) { - const bool accepted = ev->isAccepted(); - d->page->event(ev); - ev->setAccepted(accepted); - } -} -#endif // QT_NO_WHEELEVENT - -/*! \reimp -*/ -void QWebView::keyPressEvent(QKeyEvent* ev) -{ - if (d->page) - d->page->event(ev); - if (!ev->isAccepted()) - QWidget::keyPressEvent(ev); -} - -/*! \reimp -*/ -void QWebView::keyReleaseEvent(QKeyEvent* ev) -{ - if (d->page) - d->page->event(ev); - if (!ev->isAccepted()) - QWidget::keyReleaseEvent(ev); -} - -/*! \reimp -*/ -void QWebView::focusInEvent(QFocusEvent* ev) -{ - if (d->page) - d->page->event(ev); - else - QWidget::focusInEvent(ev); -} - -/*! \reimp -*/ -void QWebView::focusOutEvent(QFocusEvent* ev) -{ - if (d->page) - d->page->event(ev); - else - QWidget::focusOutEvent(ev); -} - -/*! \reimp -*/ -void QWebView::dragEnterEvent(QDragEnterEvent* ev) -{ -#ifndef QT_NO_DRAGANDDROP - if (d->page) - d->page->event(ev); -#endif -} - -/*! \reimp -*/ -void QWebView::dragLeaveEvent(QDragLeaveEvent* ev) -{ -#ifndef QT_NO_DRAGANDDROP - if (d->page) - d->page->event(ev); -#endif -} - -/*! \reimp -*/ -void QWebView::dragMoveEvent(QDragMoveEvent* ev) -{ -#ifndef QT_NO_DRAGANDDROP - if (d->page) - d->page->event(ev); -#endif -} - -/*! \reimp -*/ -void QWebView::dropEvent(QDropEvent* ev) -{ -#ifndef QT_NO_DRAGANDDROP - if (d->page) - d->page->event(ev); -#endif -} - -/*! \reimp -*/ -bool QWebView::focusNextPrevChild(bool next) -{ - if (d->page && d->page->focusNextPrevChild(next)) - return true; - return QWidget::focusNextPrevChild(next); -} - -/*!\reimp -*/ -QVariant QWebView::inputMethodQuery(Qt::InputMethodQuery property) const -{ - if (d->page) - return d->page->inputMethodQuery(property); - return QVariant(); -} - -/*!\reimp -*/ -void QWebView::inputMethodEvent(QInputMethodEvent *e) -{ - if (d->page) - d->page->event(e); -} - -/*!\reimp -*/ -void QWebView::changeEvent(QEvent *e) -{ - if (d->page && e->type() == QEvent::PaletteChange) - d->page->setPalette(palette()); - QWidget::changeEvent(e); -} - -/*! - \fn void QWebView::titleChanged(const QString &title) - - This signal is emitted whenever the \a title of the main frame changes. - - \sa title() -*/ - -/*! - \fn void QWebView::urlChanged(const QUrl &url) - - This signal is emitted when the \a url of the view changes. - - \sa url(), load() -*/ - -/*! - \fn void QWebView::statusBarMessage(const QString& text) - - This signal is emitted when the status bar \a text is changed by the page. -*/ - -/*! - \fn void QWebView::iconChanged() - - This signal is emitted whenever the icon of the page is loaded or changes. - - In order for icons to be loaded, you will need to set an icon database path - using QWebSettings::setIconDatabasePath(). - - \sa icon(), QWebSettings::setIconDatabasePath() -*/ - -/*! - \fn void QWebView::loadStarted() - - This signal is emitted when a new load of the page is started. - - \sa loadProgress(), loadFinished() -*/ - -/*! - \fn void QWebView::loadFinished(bool ok) - - This signal is emitted when a load of the page is finished. - \a ok will indicate whether the load was successful or any error occurred. - - \sa loadStarted() -*/ - -/*! - \fn void QWebView::selectionChanged() - - This signal is emitted whenever the selection changes. - - \sa selectedText() -*/ - -/*! - \fn void QWebView::loadProgress(int progress) - - This signal is emitted every time an element in the web page - completes loading and the overall loading progress advances. - - This signal tracks the progress of all child frames. - - The current value is provided by \a progress and scales from 0 to 100, - which is the default range of QProgressBar. - - \sa loadStarted(), loadFinished() -*/ - -/*! - \fn void QWebView::linkClicked(const QUrl &url) - - This signal is emitted whenever the user clicks on a link and the page's linkDelegationPolicy - property is set to delegate the link handling for the specified \a url. - - \sa QWebPage::linkDelegationPolicy() -*/ - -#include "moc_qwebview.cpp" - diff --git a/WebKit/qt/Api/qwebview.h b/WebKit/qt/Api/qwebview.h deleted file mode 100644 index 8b28f62..0000000 --- a/WebKit/qt/Api/qwebview.h +++ /dev/null @@ -1,167 +0,0 @@ -/* - Copyright (C) 2008 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. -*/ - -#ifndef QWEBVIEW_H -#define QWEBVIEW_H - -#include "qwebkitglobal.h" -#include "qwebpage.h" -#include <QtGui/qwidget.h> -#include <QtGui/qicon.h> -#include <QtGui/qpainter.h> -#include <QtCore/qurl.h> -#include <QtNetwork/qnetworkaccessmanager.h> - -QT_BEGIN_NAMESPACE -class QNetworkRequest; -class QPrinter; -QT_END_NAMESPACE - -class QWebPage; -class QWebViewPrivate; -class QWebNetworkRequest; - -class QWEBKIT_EXPORT QWebView : public QWidget { - Q_OBJECT - Q_PROPERTY(QString title READ title) - Q_PROPERTY(QUrl url READ url WRITE setUrl) - Q_PROPERTY(QIcon icon READ icon) - Q_PROPERTY(QString selectedText READ selectedText) - Q_PROPERTY(QString selectedHtml READ selectedHtml) - Q_PROPERTY(bool hasSelection READ hasSelection) - Q_PROPERTY(bool modified READ isModified) - //Q_PROPERTY(Qt::TextInteractionFlags textInteractionFlags READ textInteractionFlags WRITE setTextInteractionFlags) - Q_PROPERTY(qreal textSizeMultiplier READ textSizeMultiplier WRITE setTextSizeMultiplier DESIGNABLE false) - Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor) - - Q_PROPERTY(QPainter::RenderHints renderHints READ renderHints WRITE setRenderHints) - Q_FLAGS(QPainter::RenderHints) -public: - explicit QWebView(QWidget* parent = 0); - virtual ~QWebView(); - - QWebPage* page() const; - void setPage(QWebPage* page); - - void load(const QUrl& url); - void load(const QNetworkRequest& request, - QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation, - const QByteArray &body = QByteArray()); - void setHtml(const QString& html, const QUrl& baseUrl = QUrl()); - void setContent(const QByteArray& data, const QString& mimeType = QString(), const QUrl& baseUrl = QUrl()); - - QWebHistory* history() const; - QWebSettings* settings() const; - - QString title() const; - void setUrl(const QUrl &url); - QUrl url() const; - QIcon icon() const; - - bool hasSelection() const; - QString selectedText() const; - QString selectedHtml() const; - -#ifndef QT_NO_ACTION - QAction* pageAction(QWebPage::WebAction action) const; -#endif - void triggerPageAction(QWebPage::WebAction action, bool checked = false); - - bool isModified() const; - - /* - Qt::TextInteractionFlags textInteractionFlags() const; - void setTextInteractionFlags(Qt::TextInteractionFlags flags); - void setTextInteractionFlag(Qt::TextInteractionFlag flag); - */ - - QVariant inputMethodQuery(Qt::InputMethodQuery property) const; - - QSize sizeHint() const; - - qreal zoomFactor() const; - void setZoomFactor(qreal factor); - - void setTextSizeMultiplier(qreal factor); - qreal textSizeMultiplier() const; - - QPainter::RenderHints renderHints() const; - void setRenderHints(QPainter::RenderHints hints); - void setRenderHint(QPainter::RenderHint hint, bool enabled = true); - - bool findText(const QString& subString, QWebPage::FindFlags options = 0); - - virtual bool event(QEvent*); - -public Q_SLOTS: - void stop(); - void back(); - void forward(); - void reload(); - - void print(QPrinter*) const; - -Q_SIGNALS: - void loadStarted(); - void loadProgress(int progress); - void loadFinished(bool); - void titleChanged(const QString& title); - void statusBarMessage(const QString& text); - void linkClicked(const QUrl&); - void selectionChanged(); - void iconChanged(); - void urlChanged(const QUrl&); - -protected: - void resizeEvent(QResizeEvent*); - void paintEvent(QPaintEvent*); - - virtual QWebView *createWindow(QWebPage::WebWindowType type); - - virtual void changeEvent(QEvent*); - virtual void mouseMoveEvent(QMouseEvent*); - virtual void mousePressEvent(QMouseEvent*); - virtual void mouseDoubleClickEvent(QMouseEvent*); - virtual void mouseReleaseEvent(QMouseEvent*); -#ifndef QT_NO_CONTEXTMENU - virtual void contextMenuEvent(QContextMenuEvent*); -#endif -#ifndef QT_NO_WHEELEVENT - virtual void wheelEvent(QWheelEvent*); -#endif - virtual void keyPressEvent(QKeyEvent*); - virtual void keyReleaseEvent(QKeyEvent*); - virtual void dragEnterEvent(QDragEnterEvent*); - virtual void dragLeaveEvent(QDragLeaveEvent*); - virtual void dragMoveEvent(QDragMoveEvent*); - virtual void dropEvent(QDropEvent*); - virtual void focusInEvent(QFocusEvent*); - virtual void focusOutEvent(QFocusEvent*); - virtual void inputMethodEvent(QInputMethodEvent*); - - virtual bool focusNextPrevChild(bool next); - -private: - friend class QWebPage; - QWebViewPrivate* d; - Q_PRIVATE_SLOT(d, void _q_pageDestroyed()) -}; - -#endif // QWEBVIEW_H |