summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/qt
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/API/qt')
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp74
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp218
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h48
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h21
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qtwebsecurityorigin.cpp60
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qtwebsecurityorigin_p.h57
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest.cpp14
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest_p.h6
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest.cpp24
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h11
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwebpreferences.cpp16
-rw-r--r--Source/WebKit2/UIProcess/API/qt/qwebpreferences_p.h5
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h1
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp7
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro3
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_origin.qml57
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp4
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp6
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/tests.pri2
-rw-r--r--Source/WebKit2/UIProcess/API/qt/tests/util.h10
20 files changed, 520 insertions, 124 deletions
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp
index 22c6703c4..d164a6b85 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp
@@ -29,6 +29,7 @@
#include <QtQuick/QQuickCanvas>
#include <QtQuick/QSGGeometryNode>
#include <QtQuick/QSGMaterial>
+#include <private/qsgrendernode_p.h>
QQuickWebPage::QQuickWebPage(QQuickWebView* viewportItem)
: QQuickItem(viewportItem)
@@ -97,7 +98,7 @@ void QQuickWebPagePrivate::paintToCurrentGLContext()
transform.scale(contentsScale, contentsScale);
float opacity = computeEffectiveOpacity(q);
- QRectF clipRect = q->parentItem()->mapRectToScene(q->parentItem()->boundingRect());
+ QRectF clipRect = viewportItem->mapRectToScene(viewportItem->boundingRect());
if (!clipRect.isValid())
return;
@@ -109,57 +110,22 @@ void QQuickWebPagePrivate::paintToCurrentGLContext()
drawingArea->paintToCurrentGLContext(transform, opacity, clipRect);
}
-struct PageProxyMaterial;
-struct PageProxyNode;
-
-// FIXME: temporary until Qt Scenegraph will support custom painting.
-struct PageProxyMaterialShader : public QSGMaterialShader {
- virtual void updateState(const RenderState& state, QSGMaterial* newMaterial, QSGMaterial* oldMaterial);
- virtual char const* const* attributeNames() const
- {
- static char const* const attr[] = { "vertex", 0 };
- return attr;
- }
-
- // vertexShader and fragmentShader are no-op shaders.
- // All real painting is gone by TextureMapper through LayerTreeHostProxy.
- virtual const char* vertexShader() const
- {
- return "attribute highp vec4 vertex; \n"
- "void main() { gl_Position = vertex; }";
- }
-
- virtual const char* fragmentShader() const
- {
- return "void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); }";
- }
-};
-
-struct PageProxyMaterial : public QSGMaterial {
- PageProxyMaterial(PageProxyNode* node) : m_node(node) { }
-
- QSGMaterialType* type() const
+struct PageProxyNode : public QSGRenderNode {
+ PageProxyNode(QQuickWebPagePrivate* page)
+ : m_pagePrivate(page)
{
- static QSGMaterialType type;
- return &type;
}
- QSGMaterialShader* createShader() const
+ virtual StateFlags changedStates()
{
- return new PageProxyMaterialShader;
+ return StateFlags(DepthState) | StencilState | ScissorState | ColorState | BlendState
+ | CullState | ViewportState;
}
- PageProxyNode* m_node;
-};
-
-struct PageProxyNode : public QSGGeometryNode {
- PageProxyNode(QQuickWebPagePrivate* page) :
- m_pagePrivate(page)
- , m_material(this)
- , m_geometry(QSGGeometry::defaultAttributes_Point2D(), 4)
+ virtual void render(const RenderState &)
{
- setGeometry(&m_geometry);
- setMaterial(&m_material);
+ if (m_pagePrivate)
+ m_pagePrivate->paintToCurrentGLContext();
}
~PageProxyNode()
@@ -169,22 +135,8 @@ struct PageProxyNode : public QSGGeometryNode {
}
QQuickWebPagePrivate* m_pagePrivate;
- PageProxyMaterial m_material;
- QSGGeometry m_geometry;
};
-void PageProxyMaterialShader::updateState(const RenderState& state, QSGMaterial* newMaterial, QSGMaterial* oldMaterial)
-{
- if (!newMaterial)
- return;
-
- PageProxyNode* node = static_cast<PageProxyMaterial*>(newMaterial)->m_node;
- // FIXME: Normally we wouldn't paint inside QSGMaterialShader::updateState,
- // but this is a temporary hack until custom paint nodes are available.
- if (node->m_pagePrivate)
- node->m_pagePrivate->paintToCurrentGLContext();
-}
-
QSGNode* QQuickWebPage::updatePaintNode(QSGNode* oldNode, UpdatePaintNodeData*)
{
if (!(flags() & ItemHasContents)) {
@@ -242,13 +194,15 @@ QTransform QQuickWebPage::transformFromItem() const
QTransform QQuickWebPage::transformToItem() const
{
- return QTransform(d->contentsScale, 0, 0, 0, d->contentsScale, 0, x(), y(), 1);
+ QPointF pos = d->viewportItem->pageItemPos();
+ return QTransform(d->contentsScale, 0, 0, 0, d->contentsScale, 0, pos.x(), pos.y(), 1);
}
void QQuickWebPagePrivate::updateSize()
{
QSizeF scaledSize = contentsSize * contentsScale;
q->setSize(scaledSize);
+ viewportItem->updateContentsSize(scaledSize);
}
void QQuickWebPagePrivate::resetPaintNode()
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
index 7ea6d347c..f40e28924 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp
@@ -51,6 +51,7 @@
#include <WebCore/IntPoint.h>
#include <WebCore/IntRect.h>
#include <WKOpenPanelResultListener.h>
+#include <wtf/Assertions.h>
#include <wtf/text/WTFString.h>
using namespace WebCore;
@@ -66,12 +67,16 @@ static QQuickWebViewPrivate* createPrivateObject(QQuickWebView* publicObject)
QQuickWebViewPrivate::QQuickWebViewPrivate(QQuickWebView* viewport)
: q_ptr(viewport)
+ , flickProvider(0)
, alertDialog(0)
, confirmDialog(0)
, promptDialog(0)
, authenticationDialog(0)
, certificateVerificationDialog(0)
, itemSelector(0)
+ , proxyAuthenticationDialog(0)
+ , userDidOverrideContentWidth(false)
+ , userDidOverrideContentHeight(false)
, m_navigatorQtObjectEnabled(false)
, m_renderToOffscreenBuffer(false)
{
@@ -112,6 +117,7 @@ void QQuickWebViewPrivate::initialize(WKContextRef contextRef, WKPageGroupRef pa
// Any page setting should preferrable be set before creating the page.
webPageProxy->pageGroup()->preferences()->setAcceleratedCompositingEnabled(true);
webPageProxy->pageGroup()->preferences()->setForceCompositingMode(true);
+ webPageProxy->pageGroup()->preferences()->setFrameFlatteningEnabled(true);
pageClient.initialize(q_ptr, pageViewPrivate->eventHandler.data(), &undoController);
webPageProxy->initializeWebPage();
@@ -131,6 +137,12 @@ void QQuickWebViewPrivate::disableMouseEvents()
q->setAcceptHoverEvents(false);
}
+QPointF QQuickWebViewPrivate::pageItemPos()
+{
+ ASSERT(pageView);
+ return pageView->pos();
+}
+
void QQuickWebViewPrivate::loadDidSucceed()
{
Q_Q(QQuickWebView);
@@ -200,14 +212,6 @@ void QQuickWebViewPrivate::handleDownloadRequest(DownloadProxy* download)
context->downloadManager()->addDownload(download, downloadItem);
}
-void QQuickWebViewPrivate::_q_viewportTrajectoryVectorChanged(const QPointF& trajectoryVector)
-{
- DrawingAreaProxy* drawingArea = webPageProxy->drawingArea();
- if (!drawingArea)
- return;
- drawingArea->setVisibleContentRectTrajectoryVector(trajectoryVector);
-}
-
void QQuickWebViewPrivate::_q_onVisibleChanged()
{
webPageProxy->viewStateDidChange(WebPageProxy::ViewIsVisible);
@@ -301,6 +305,25 @@ void QQuickWebViewPrivate::handleAuthenticationRequiredRequest(const QString& ho
password = dialogRunner.password();
}
+void QQuickWebViewPrivate::handleProxyAuthenticationRequiredRequest(const QString& hostname, uint16_t port, const QString& prefilledUsername, QString& username, QString& password)
+{
+ if (!proxyAuthenticationDialog)
+ return;
+
+ Q_Q(QQuickWebView);
+ QtDialogRunner dialogRunner;
+ if (!dialogRunner.initForProxyAuthentication(proxyAuthenticationDialog, q, hostname, port, prefilledUsername))
+ return;
+
+ setViewInAttachedProperties(dialogRunner.dialog());
+ disableMouseEvents();
+ dialogRunner.exec();
+ enableMouseEvents();
+
+ username = dialogRunner.username();
+ password = dialogRunner.password();
+}
+
bool QQuickWebViewPrivate::handleCertificateVerificationRequest(const QString& hostname)
{
if (!certificateVerificationDialog)
@@ -445,7 +468,7 @@ void QQuickWebViewLegacyPrivate::updateViewportSize()
// The fixed layout is handled by the FrameView and the drawing area doesn't behave differently
// whether its fixed or not. We still need to tell the drawing area which part of it
// has to be rendered on tiles, and in desktop mode it's all of it.
- webPageProxy->drawingArea()->setVisibleContentsRectAndScale(IntRect(IntPoint(), viewportSize), 1);
+ webPageProxy->drawingArea()->setVisibleContentsRectForScaling(IntRect(IntPoint(), viewportSize), 1);
}
QQuickWebViewFlickablePrivate::QQuickWebViewFlickablePrivate(QQuickWebView* viewport)
@@ -468,16 +491,52 @@ void QQuickWebViewFlickablePrivate::initialize(WKContextRef contextRef, WKPageGr
webPageProxy->setUseFixedLayout(true);
}
+QPointF QQuickWebViewFlickablePrivate::pageItemPos()
+{
+ // Flickable moves its contentItem so we need to take that position into account,
+ // as well as the potential displacement of the page on the contentItem because
+ // of additional QML items.
+ qreal xPos = flickProvider->contentItem()->x() + pageView->x();
+ qreal yPos = flickProvider->contentItem()->y() + pageView->y();
+ return QPointF(xPos, yPos);
+}
+
+void QQuickWebViewFlickablePrivate::updateContentsSize(const QSizeF& size)
+{
+ ASSERT(flickProvider);
+
+ // Make sure that the contentItem is sized to the page
+ // if the user did not add other flickable items in QML.
+ // If the user adds items in QML he has to make sure to
+ // also bind the contentWidth and contentHeight accordingly.
+ // This is in accordance with normal QML Flickable behaviour.
+ if (!userDidOverrideContentWidth)
+ flickProvider->setContentWidth(size.width());
+ if (!userDidOverrideContentHeight)
+ flickProvider->setContentHeight(size.height());
+}
+
void QQuickWebViewFlickablePrivate::onComponentComplete()
{
Q_Q(QQuickWebView);
- interactionEngine.reset(new QtViewportInteractionEngine(q, pageView.data()));
+
+ ASSERT(!flickProvider);
+ flickProvider = new QtFlickProvider(q, pageView.data());
+
+ // Propagate flickable signals.
+ const QQuickWebViewExperimental* experimental = q->experimental();
+ QObject::connect(flickProvider, SIGNAL(contentWidthChanged()), experimental, SIGNAL(contentWidthChanged()));
+ QObject::connect(flickProvider, SIGNAL(contentHeightChanged()), experimental, SIGNAL(contentHeightChanged()));
+ QObject::connect(flickProvider, SIGNAL(contentXChanged()), experimental, SIGNAL(contentXChanged()));
+ QObject::connect(flickProvider, SIGNAL(contentYChanged()), experimental, SIGNAL(contentYChanged()));
+
+ interactionEngine.reset(new QtViewportInteractionEngine(q, pageView.data(), flickProvider));
pageView->eventHandler()->setViewportInteractionEngine(interactionEngine.data());
QObject::connect(interactionEngine.data(), SIGNAL(contentSuspendRequested()), q, SLOT(_q_suspend()));
QObject::connect(interactionEngine.data(), SIGNAL(contentResumeRequested()), q, SLOT(_q_resume()));
- QObject::connect(interactionEngine.data(), SIGNAL(viewportTrajectoryVectorChanged(const QPointF&)), q, SLOT(_q_viewportTrajectoryVectorChanged(const QPointF&)));
- QObject::connect(interactionEngine.data(), SIGNAL(visibleContentRectAndScaleChanged()), q, SLOT(_q_updateVisibleContentRectAndScale()));
+ QObject::connect(interactionEngine.data(), SIGNAL(contentWasMoved(const QPointF&)), q, SLOT(_q_commitPositionChange(const QPointF&)));
+ QObject::connect(interactionEngine.data(), SIGNAL(contentWasScaled()), q, SLOT(_q_commitScaleChange()));
_q_resume();
@@ -533,15 +592,17 @@ void QQuickWebViewFlickablePrivate::updateViewportSize()
if (viewportSize.isEmpty() || !interactionEngine)
return;
+ flickProvider->setViewportSize(viewportSize);
+
// Let the WebProcess know about the new viewport size, so that
// it can resize the content accordingly.
webPageProxy->setViewportSize(viewportSize);
interactionEngine->applyConstraints(computeViewportConstraints());
- _q_updateVisibleContentRectAndScale();
+ _q_commitScaleChange();
}
-void QQuickWebViewFlickablePrivate::_q_updateVisibleContentRectAndScale()
+void QQuickWebViewFlickablePrivate::_q_commitScaleChange()
{
DrawingAreaProxy* drawingArea = webPageProxy->drawingArea();
if (!drawingArea)
@@ -551,12 +612,31 @@ void QQuickWebViewFlickablePrivate::_q_updateVisibleContentRectAndScale()
const QRectF visibleRectInCSSCoordinates = q->mapRectToWebContent(q->boundingRect()).intersected(pageView->boundingRect());
float scale = pageView->contentsScale();
+ // This is only for our QML ViewportInfo debugging API.
+ q->experimental()->viewportInfo()->didUpdateCurrentScale();
+
QRect alignedVisibleContentRect = visibleRectInCSSCoordinates.toAlignedRect();
- drawingArea->setVisibleContentsRectAndScale(alignedVisibleContentRect, scale);
+ drawingArea->setVisibleContentsRectForScaling(alignedVisibleContentRect, scale);
+
+ webPageProxy->setFixedVisibleContentRect(alignedVisibleContentRect);
+}
+
+void QQuickWebViewPrivate::_q_commitPositionChange(const QPointF& trajectoryVector)
+{
+ DrawingAreaProxy* drawingArea = webPageProxy->drawingArea();
+ if (!drawingArea)
+ return;
+
+ Q_Q(QQuickWebView);
+ const QRectF visibleRectInCSSCoordinates = q->mapRectToWebContent(q->boundingRect()).intersected(pageView->boundingRect());
+
+ QRect alignedVisibleContentRect = visibleRectInCSSCoordinates.toAlignedRect();
+ drawingArea->setVisibleContentsRectForPanning(alignedVisibleContentRect, trajectoryVector);
+
+ if (!trajectoryVector.isNull())
+ return;
- // FIXME: Once we support suspend and resume, this should be delayed until the page is active if the page is suspended.
webPageProxy->setFixedVisibleContentRect(alignedVisibleContentRect);
- q->experimental()->viewportInfo()->didUpdateCurrentScale();
}
void QQuickWebViewFlickablePrivate::_q_suspend()
@@ -576,7 +656,8 @@ void QQuickWebViewFlickablePrivate::_q_resume()
postTransitionState->apply();
}
- _q_updateVisibleContentRectAndScale();
+ // FIXME: Revise this.
+ _q_commitScaleChange();
}
void QQuickWebViewFlickablePrivate::pageDidRequestScroll(const QPoint& pos)
@@ -794,6 +875,20 @@ void QQuickWebViewExperimental::setAuthenticationDialog(QDeclarativeComponent* a
emit authenticationDialogChanged();
}
+QDeclarativeComponent* QQuickWebViewExperimental::proxyAuthenticationDialog() const
+{
+ Q_D(const QQuickWebView);
+ return d->proxyAuthenticationDialog;
+}
+
+void QQuickWebViewExperimental::setProxyAuthenticationDialog(QDeclarativeComponent* proxyAuthenticationDialog)
+{
+ Q_D(QQuickWebView);
+ if (d->proxyAuthenticationDialog == proxyAuthenticationDialog)
+ return;
+ d->proxyAuthenticationDialog = proxyAuthenticationDialog;
+ emit proxyAuthenticationDialogChanged();
+}
QDeclarativeComponent* QQuickWebViewExperimental::certificateVerificationDialog() const
{
Q_D(const QQuickWebView);
@@ -910,6 +1005,78 @@ QQuickWebPage* QQuickWebViewExperimental::page()
return q_ptr->page();
}
+QDeclarativeListProperty<QObject> QQuickWebViewExperimental::flickableData()
+{
+ Q_D(const QQuickWebView);
+ ASSERT(d->flickProvider);
+ return d->flickProvider->flickableData();
+}
+
+QQuickItem* QQuickWebViewExperimental::contentItem()
+{
+ Q_D(QQuickWebView);
+ ASSERT(d->flickProvider);
+ return d->flickProvider->contentItem();
+}
+
+qreal QQuickWebViewExperimental::contentWidth() const
+{
+ Q_D(const QQuickWebView);
+ ASSERT(d->flickProvider);
+ return d->flickProvider->contentWidth();
+}
+
+void QQuickWebViewExperimental::setContentWidth(qreal width)
+{
+ Q_D(QQuickWebView);
+ ASSERT(d->flickProvider);
+ d->userDidOverrideContentWidth = true;
+ d->flickProvider->setContentWidth(width);
+}
+
+qreal QQuickWebViewExperimental::contentHeight() const
+{
+ Q_D(const QQuickWebView);
+ ASSERT(d->flickProvider);
+ return d->flickProvider->contentHeight();
+}
+
+void QQuickWebViewExperimental::setContentHeight(qreal height)
+{
+ Q_D(QQuickWebView);
+ ASSERT(d->flickProvider);
+ d->userDidOverrideContentHeight = true;
+ d->flickProvider->setContentHeight(height);
+}
+
+qreal QQuickWebViewExperimental::contentX() const
+{
+ Q_D(const QQuickWebView);
+ ASSERT(d->flickProvider);
+ return d->flickProvider->contentX();
+}
+
+void QQuickWebViewExperimental::setContentX(qreal x)
+{
+ Q_D(QQuickWebView);
+ ASSERT(d->flickProvider);
+ d->flickProvider->setContentX(x);
+}
+
+qreal QQuickWebViewExperimental::contentY() const
+{
+ Q_D(const QQuickWebView);
+ ASSERT(d->flickProvider);
+ return d->flickProvider->contentY();
+}
+
+void QQuickWebViewExperimental::setContentY(qreal y)
+{
+ Q_D(QQuickWebView);
+ ASSERT(d->flickProvider);
+ d->flickProvider->setContentY(y);
+}
+
QQuickWebView::QQuickWebView(QQuickItem* parent)
: QQuickItem(parent)
, d_ptr(createPrivateObject(this))
@@ -1071,6 +1238,8 @@ QVariant QQuickWebView::inputMethodQuery(Qt::InputMethodQuery property) const
return QString(state.selectedText);
case Qt::ImMaximumTextLength:
return QVariant(); // No limit.
+ case Qt::ImHints:
+ return int(Qt::InputMethodHints(state.inputMethodHints));
default:
// Rely on the base implementation for ImEnabled, ImHints and ImPreferredLanguage.
return QQuickItem::inputMethodQuery(property);
@@ -1225,6 +1394,7 @@ bool QQuickWebView::event(QEvent* ev)
case QEvent::FocusOut:
case QEvent::TouchBegin:
case QEvent::TouchEnd:
+ case QEvent::TouchCancel:
case QEvent::TouchUpdate:
if (d->pageView->eventHandler()->handleEvent(ev))
return true;
@@ -1256,4 +1426,16 @@ void QQuickWebView::loadHtml(const QString& html, const QUrl& baseUrl)
d->webPageProxy->loadHTMLString(html, baseUrl.toString());
}
+QPointF QQuickWebView::pageItemPos()
+{
+ Q_D(QQuickWebView);
+ return d->pageItemPos();
+}
+
+void QQuickWebView::updateContentsSize(const QSizeF& size)
+{
+ Q_D(QQuickWebView);
+ d->updateContentsSize(size);
+}
+
#include "moc_qquickwebview_p.cpp"
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h
index 69f1cd81b..674c18fe7 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h
@@ -76,6 +76,7 @@ class QWEBKIT_EXPORT QQuickWebView : public QQuickItem {
Q_PROPERTY(bool canReload READ canReload NOTIFY navigationStateChanged FINAL)
Q_ENUMS(NavigationRequestAction)
Q_ENUMS(ErrorDomain)
+ Q_ENUMS(NavigationType)
public:
enum NavigationRequestAction {
@@ -89,6 +90,16 @@ public:
HttpErrorDomain,
DownloadErrorDomain
};
+
+ enum NavigationType {
+ LinkClickedNavigation,
+ FormSubmittedNavigation,
+ BackForwardNavigation,
+ ReloadNavigation,
+ FormResubmittedNavigation,
+ OtherNavigation
+ };
+
QQuickWebView(QQuickItem* parent = 0);
virtual ~QQuickWebView();
@@ -116,6 +127,10 @@ public:
static void platformInitialize(); // Only needed by WTR.
+ // Internal API used by WebPage.
+ void updateContentsSize(const QSizeF&);
+ QPointF pageItemPos();
+
public Q_SLOTS:
void load(const QUrl&);
void loadHtml(const QString& html, const QUrl& baseUrl = QUrl());
@@ -168,8 +183,9 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_suspend());
Q_PRIVATE_SLOT(d_func(), void _q_resume());
- Q_PRIVATE_SLOT(d_func(), void _q_viewportTrajectoryVectorChanged(const QPointF&));
- Q_PRIVATE_SLOT(d_func(), void _q_updateVisibleContentRectAndScale());
+ Q_PRIVATE_SLOT(d_func(), void _q_commitPositionChange(const QPointF&));
+ Q_PRIVATE_SLOT(d_func(), void _q_commitScaleChange());
+
Q_PRIVATE_SLOT(d_func(), void _q_onOpenPanelFilesSelected());
Q_PRIVATE_SLOT(d_func(), void _q_onOpenPanelFinished(int result));
Q_PRIVATE_SLOT(d_func(), void _q_onVisibleChanged());
@@ -209,11 +225,21 @@ QML_DECLARE_TYPEINFO(QQuickWebView, QML_HAS_ATTACHED_PROPERTIES)
class QWEBKIT_EXPORT QQuickWebViewExperimental : public QObject {
Q_OBJECT
Q_PROPERTY(QQuickWebPage* page READ page CONSTANT FINAL)
+
+ // QML Flickable API.
+ Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged)
+ Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged)
+ Q_PROPERTY(qreal contentX READ contentX WRITE setContentX NOTIFY contentXChanged)
+ Q_PROPERTY(qreal contentY READ contentY WRITE setContentY NOTIFY contentYChanged)
+ Q_PROPERTY(QQuickItem* contentItem READ contentItem CONSTANT)
+ Q_PROPERTY(QDeclarativeListProperty<QObject> flickableData READ flickableData)
+
Q_PROPERTY(QWebNavigationHistory* navigationHistory READ navigationHistory CONSTANT FINAL)
Q_PROPERTY(QDeclarativeComponent* alertDialog READ alertDialog WRITE setAlertDialog NOTIFY alertDialogChanged)
Q_PROPERTY(QDeclarativeComponent* confirmDialog READ confirmDialog WRITE setConfirmDialog NOTIFY confirmDialogChanged)
Q_PROPERTY(QDeclarativeComponent* promptDialog READ promptDialog WRITE setPromptDialog NOTIFY promptDialogChanged)
Q_PROPERTY(QDeclarativeComponent* authenticationDialog READ authenticationDialog WRITE setAuthenticationDialog NOTIFY authenticationDialogChanged)
+ Q_PROPERTY(QDeclarativeComponent* proxyAuthenticationDialog READ proxyAuthenticationDialog WRITE setProxyAuthenticationDialog NOTIFY proxyAuthenticationDialogChanged)
Q_PROPERTY(QDeclarativeComponent* certificateVerificationDialog READ certificateVerificationDialog WRITE setCertificateVerificationDialog NOTIFY certificateVerificationDialogChanged)
Q_PROPERTY(QDeclarativeComponent* itemSelector READ itemSelector WRITE setItemSelector NOTIFY itemSelectorChanged)
Q_PROPERTY(QWebPreferences* preferences READ preferences CONSTANT FINAL)
@@ -241,6 +267,8 @@ public:
void setCertificateVerificationDialog(QDeclarativeComponent*);
QDeclarativeComponent* itemSelector() const;
void setItemSelector(QDeclarativeComponent*);
+ QDeclarativeComponent* proxyAuthenticationDialog() const;
+ void setProxyAuthenticationDialog(QDeclarativeComponent*);
QWebViewportInfo* viewportInfo();
@@ -253,9 +281,20 @@ public:
static int schemeDelegates_Count(QDeclarativeListProperty<QQuickUrlSchemeDelegate>*);
static void schemeDelegates_Clear(QDeclarativeListProperty<QQuickUrlSchemeDelegate>*);
QDeclarativeListProperty<QQuickUrlSchemeDelegate> schemeDelegates();
+ QDeclarativeListProperty<QObject> flickableData();
void invokeApplicationSchemeHandler(WTF::PassRefPtr<WebKit::QtRefCountedNetworkRequestData>);
void sendApplicationSchemeReply(QQuickNetworkReply*);
+ QQuickItem* contentItem();
+ qreal contentWidth() const;
+ void setContentWidth(qreal);
+ qreal contentHeight() const;
+ void setContentHeight(qreal);
+ qreal contentX() const;
+ void setContentX(qreal);
+ qreal contentY() const;
+ void setContentY(qreal);
+
// C++ only
bool renderToOffscreenBuffer() const;
void setRenderToOffscreenBuffer(bool enable);
@@ -268,6 +307,10 @@ public Q_SLOTS:
void postMessage(const QString&);
Q_SIGNALS:
+ void contentWidthChanged();
+ void contentHeightChanged();
+ void contentXChanged();
+ void contentYChanged();
void alertDialogChanged();
void confirmDialogChanged();
void promptDialogChanged();
@@ -277,6 +320,7 @@ Q_SIGNALS:
void downloadRequested(QWebDownloadItem* downloadItem);
void permissionRequested(QWebPermissionRequest* permission);
void messageReceived(const QVariantMap& message);
+ void proxyAuthenticationDialogChanged();
private:
QQuickWebView* q_ptr;
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h
index 9e27ce322..300b4759d 100644
--- a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h
@@ -22,6 +22,7 @@
#define qquickwebview_p_p_h
#include "DrawingAreaProxy.h"
+#include "QtFlickProvider.h"
#include "QtPageClient.h"
#include "QtViewportInteractionEngine.h"
#include "QtWebPageLoadClient.h"
@@ -68,6 +69,9 @@ public:
void enableMouseEvents();
void disableMouseEvents();
+ virtual QPointF pageItemPos();
+ virtual void updateContentsSize(const QSizeF&) { }
+
virtual void loadDidSucceed();
virtual void onComponentComplete() { }
virtual void loadDidCommit() { }
@@ -80,11 +84,13 @@ public:
virtual QtViewportInteractionEngine* viewportInteractionEngine() { return 0; }
virtual void updateViewportSize() { }
void updateTouchViewportSize();
- virtual void _q_updateVisibleContentRectAndScale() { }
virtual void _q_suspend() { }
virtual void _q_resume() { }
- void _q_viewportTrajectoryVectorChanged(const QPointF&);
+
+ virtual void _q_commitScaleChange() { }
+ void _q_commitPositionChange(const QPointF&);
+
void _q_onOpenPanelFilesSelected();
void _q_onOpenPanelFinished(int result);
void _q_onVisibleChanged();
@@ -98,6 +104,7 @@ public:
void handleAuthenticationRequiredRequest(const QString& hostname, const QString& realm, const QString& prefilledUsername, QString& username, QString& password);
bool handleCertificateVerificationRequest(const QString& hostname);
+ void handleProxyAuthenticationRequiredRequest(const QString& hostname, uint16_t port, const QString& prefilledUsername, QString& username, QString& password);
void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; }
void setViewInAttachedProperties(QObject*);
@@ -133,6 +140,7 @@ protected:
QScopedPointer<QQuickWebPage> pageView;
QQuickWebView* q_ptr;
+ QtFlickProvider* flickProvider;
QDeclarativeComponent* alertDialog;
QDeclarativeComponent* confirmDialog;
@@ -140,11 +148,14 @@ protected:
QDeclarativeComponent* authenticationDialog;
QDeclarativeComponent* certificateVerificationDialog;
QDeclarativeComponent* itemSelector;
+ QDeclarativeComponent* proxyAuthenticationDialog;
WebCore::ViewportArguments viewportArguments;
QFileDialog* fileDialog;
WKOpenPanelResultListenerRef openPanelResultListener;
+ bool userDidOverrideContentWidth;
+ bool userDidOverrideContentHeight;
bool m_navigatorQtObjectEnabled;
bool m_renderToOffscreenBuffer;
QUrl m_iconURL;
@@ -166,6 +177,9 @@ public:
virtual ~QQuickWebViewFlickablePrivate();
virtual void initialize(WKContextRef contextRef = 0, WKPageGroupRef pageGroupRef = 0);
+ virtual QPointF pageItemPos();
+ virtual void updateContentsSize(const QSizeF&);
+
virtual void loadDidSucceed();
virtual void onComponentComplete();
virtual void loadDidCommit();
@@ -173,9 +187,10 @@ public:
virtual void didChangeViewportProperties(const WebCore::ViewportArguments& args);
virtual QtViewportInteractionEngine* viewportInteractionEngine() { return interactionEngine.data(); }
virtual void updateViewportSize();
- virtual void _q_updateVisibleContentRectAndScale();
+
virtual void _q_suspend();
virtual void _q_resume();
+ virtual void _q_commitScaleChange();
virtual void pageDidRequestScroll(const QPoint& pos);
virtual void didChangeContentsSize(const QSize& newSize);
diff --git a/Source/WebKit2/UIProcess/API/qt/qtwebsecurityorigin.cpp b/Source/WebKit2/UIProcess/API/qt/qtwebsecurityorigin.cpp
new file mode 100644
index 000000000..4491dc40a
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/qt/qtwebsecurityorigin.cpp
@@ -0,0 +1,60 @@
+/*
+ Copyright (C) 2012 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 "qtwebsecurityorigin_p.h"
+
+#include <QtCore/QFileInfo>
+#include <QtCore/QStringList>
+#include <SchemeRegistry.h>
+#include <SecurityOrigin.h>
+#include <WebKit2/WKBase.h>
+#include <WebKit2/WKRetainPtr.h>
+#include <WebKit2/WKSecurityOrigin.h>
+
+using namespace WebCore;
+
+QtWebSecurityOrigin::QtWebSecurityOrigin(QObject* parent)
+ : QObject(parent)
+{
+}
+
+QtWebSecurityOrigin::~QtWebSecurityOrigin()
+{
+}
+
+QString QtWebSecurityOrigin::host() const
+{
+ return m_url.host();
+}
+
+QString QtWebSecurityOrigin::scheme() const
+{
+ return m_url.scheme();
+}
+
+QString QtWebSecurityOrigin::path() const
+{
+ return m_url.path();
+}
+
+int QtWebSecurityOrigin::port() const
+{
+ return m_url.port();
+}
diff --git a/Source/WebKit2/UIProcess/API/qt/qtwebsecurityorigin_p.h b/Source/WebKit2/UIProcess/API/qt/qtwebsecurityorigin_p.h
new file mode 100644
index 000000000..df09fb8ea
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/qt/qtwebsecurityorigin_p.h
@@ -0,0 +1,57 @@
+/*
+ Copyright (C) 2012 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 qtwebsecurityorigin_p_h
+#define qtwebsecurityorigin_p_h
+
+#include "qwebkitglobal.h"
+
+#include <QtCore/QDataStream>
+#include <QtCore/QObject>
+#include <QtCore/QString>
+#include <QtCore/QUrl>
+#include <QtCore/qshareddata.h>
+
+class QWEBKIT_EXPORT QtWebSecurityOrigin : public QObject {
+ Q_OBJECT
+ Q_PROPERTY(QString scheme READ scheme CONSTANT)
+ Q_PROPERTY(QString host READ host CONSTANT)
+ Q_PROPERTY(int port READ port CONSTANT)
+ Q_PROPERTY(QString path READ path CONSTANT)
+
+public:
+ QtWebSecurityOrigin(QObject* parent = 0);
+ virtual ~QtWebSecurityOrigin();
+
+ QString scheme() const;
+ QString host() const;
+ int port() const;
+ QString path() const;
+
+ // Used to set security information in a permission request event (e.g.
+ // geolocation permission)
+ void setScheme(const QString& scheme) { m_url.setScheme(scheme); }
+ void setHost(const QString& host) { m_url.setHost(host); }
+ void setPath(const QString& path) { m_url.setPath(path); }
+ void setPort(int port) { m_url.setPort(port); }
+
+private:
+ QUrl m_url;
+};
+
+#endif // qtwebsecurityorigin_p_h
diff --git a/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest.cpp b/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest.cpp
index 5208a061c..3a63f80e3 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest.cpp
@@ -25,12 +25,14 @@
class QWebNavigationRequestPrivate {
public:
- QWebNavigationRequestPrivate(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button, Qt::KeyboardModifiers modifiers)
+ QWebNavigationRequestPrivate(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button,
+ Qt::KeyboardModifiers modifiers, QQuickWebView::NavigationType navigationType)
: url(url)
, originatingUrl(originatingUrl)
, button(button)
, modifiers(modifiers)
, action(QQuickWebView::AcceptRequest)
+ , navigationType(navigationType)
{
}
@@ -43,11 +45,13 @@ public:
Qt::MouseButton button;
Qt::KeyboardModifiers modifiers;
int action;
+ QQuickWebView::NavigationType navigationType;
};
-QWebNavigationRequest::QWebNavigationRequest(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button, Qt::KeyboardModifiers modifiers, QObject* parent)
+QWebNavigationRequest::QWebNavigationRequest(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button,
+ Qt::KeyboardModifiers modifiers, QQuickWebView::NavigationType navigationType, QObject* parent)
: QObject(parent)
- , d(new QWebNavigationRequestPrivate(url, originatingUrl, button, modifiers))
+ , d(new QWebNavigationRequestPrivate(url, originatingUrl, button, modifiers, navigationType))
{
}
@@ -90,3 +94,7 @@ int QWebNavigationRequest::action() const
return int(d->action);
}
+QQuickWebView::NavigationType QWebNavigationRequest::navigationType() const
+{
+ return d->navigationType;
+}
diff --git a/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest_p.h b/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest_p.h
index 986b1c12d..46333f0e8 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qwebnavigationrequest_p.h
@@ -20,6 +20,7 @@
#ifndef qwebnavigationrequest_p_h
#define qwebnavigationrequest_p_h
+#include "qquickwebview_p.h"
#include "qwebkitglobal.h"
#include <QtCore/QObject>
@@ -34,9 +35,11 @@ class QWEBKIT_EXPORT QWebNavigationRequest : public QObject {
Q_PROPERTY(int button READ button CONSTANT FINAL)
Q_PROPERTY(int modifiers READ modifiers CONSTANT FINAL)
Q_PROPERTY(int action READ action WRITE setAction NOTIFY actionChanged FINAL)
+ Q_PROPERTY(QQuickWebView::NavigationType navigationType READ navigationType CONSTANT FINAL)
public:
- QWebNavigationRequest(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button, Qt::KeyboardModifiers modifiers, QObject* parent = 0);
+ QWebNavigationRequest(const QUrl& url, const QUrl& originatingUrl, Qt::MouseButton button, Qt::KeyboardModifiers modifiers,
+ QQuickWebView::NavigationType navigationType, QObject* parent = 0);
~QWebNavigationRequest();
QUrl url() const;
@@ -46,6 +49,7 @@ public:
int action() const;
void setAction(int action);
+ QQuickWebView::NavigationType navigationType() const;
Q_SIGNALS:
void actionChanged();
diff --git a/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest.cpp b/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest.cpp
index 16a438560..c4c1af825 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest.cpp
@@ -34,7 +34,15 @@ public:
, request(permissionRequest)
, allow(false)
{
+ WKRetainPtr<WKStringRef> url = adoptWK(WKSecurityOriginCopyProtocol(origin.get()));
+ securityInfo.setScheme(WKStringCopyQString(url.get()));
+
+ WKRetainPtr<WKStringRef> host = adoptWK(WKSecurityOriginCopyHost(origin.get()));
+ securityInfo.setHost(WKStringCopyQString(host.get()));
+
+ securityInfo.setPort(static_cast<int>(WKSecurityOriginGetPort(origin.get())));
}
+
~QWebPermissionRequestPrivate()
{
}
@@ -42,6 +50,7 @@ public:
WKRetainPtr<WKSecurityOriginRef> origin;
QWebPermissionRequest::RequestType type;
WKRetainPtr<WKGeolocationPermissionRequestRef> request;
+ QtWebSecurityOrigin securityInfo;
bool allow;
};
@@ -88,19 +97,8 @@ bool QWebPermissionRequest::allow() const
return d->allow;
}
-QString QWebPermissionRequest::scheme() const
-{
- WKRetainPtr<WKStringRef> url = adoptWK(WKSecurityOriginCopyProtocol(d->origin.get()));
- return WKStringCopyQString(url.get());
-}
-
-QString QWebPermissionRequest::host() const
+QtWebSecurityOrigin* QWebPermissionRequest::securityOrigin()
{
- WKRetainPtr<WKStringRef> origin = adoptWK(WKSecurityOriginCopyHost(d->origin.get()));
- return WKStringCopyQString(origin.get());
+ return &(d->securityInfo);
}
-int QWebPermissionRequest::port() const
-{
- return static_cast<int>(WKSecurityOriginGetPort(d->origin.get()));
-}
diff --git a/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h b/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h
index 5824c4ccd..4708b71a6 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qwebpermissionrequest_p.h
@@ -20,6 +20,7 @@
#ifndef qwebpermissionrequest_p_h
#define qwebpermissionrequest_p_h
+#include "qtwebsecurityorigin_p.h"
#include "qwebkitglobal.h"
#include <QtCore/QObject>
@@ -32,10 +33,8 @@ class QWebPermissionRequestPrivate;
class QWEBKIT_EXPORT QWebPermissionRequest : public QObject {
Q_OBJECT
Q_PROPERTY(bool allow READ allow WRITE setAllow)
- Q_PROPERTY(RequestType type READ type)
- Q_PROPERTY(QString scheme READ scheme)
- Q_PROPERTY(QString host READ host)
- Q_PROPERTY(int port READ port)
+ Q_PROPERTY(RequestType type READ type CONSTANT)
+ Q_PROPERTY(QtWebSecurityOrigin* origin READ securityOrigin)
Q_ENUMS(RequestType)
public:
@@ -48,12 +47,10 @@ public:
RequestType type() const;
bool allow() const;
- QString scheme() const;
- QString host() const;
- int port() const;
public Q_SLOTS:
void setAllow(bool);
+ QtWebSecurityOrigin* securityOrigin();
private:
friend class QWebPermissionRequestPrivate;
diff --git a/Source/WebKit2/UIProcess/API/qt/qwebpreferences.cpp b/Source/WebKit2/UIProcess/API/qt/qwebpreferences.cpp
index 71c11afe5..835c698db 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwebpreferences.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/qwebpreferences.cpp
@@ -54,6 +54,8 @@ bool QWebPreferencesPrivate::testAttribute(QWebPreferencesPrivate::WebAttribute
return WKPreferencesGetPrivateBrowsingEnabled(preferencesRef());
case DnsPrefetchEnabled:
return WKPreferencesGetDNSPrefetchingEnabled(preferencesRef());
+ case FrameFlatteningEnabled:
+ return WKPreferencesGetFrameFlatteningEnabled(preferencesRef());
default:
ASSERT_NOT_REACHED();
return false;
@@ -87,6 +89,9 @@ void QWebPreferencesPrivate::setAttribute(QWebPreferencesPrivate::WebAttribute a
case DnsPrefetchEnabled:
WKPreferencesSetDNSPrefetchingEnabled(preferencesRef(), enable);
break;
+ case FrameFlatteningEnabled:
+ WKPreferencesSetFrameFlatteningEnabled(preferencesRef(), enable);
+ break;
default:
ASSERT_NOT_REACHED();
}
@@ -293,6 +298,17 @@ void QWebPreferences::setNavigatorQtObjectEnabled(bool enable)
emit navigatorQtObjectEnabledChanged();
}
+bool QWebPreferences::frameFlatteningEnabled() const
+{
+ return d->testAttribute(QWebPreferencesPrivate::FrameFlatteningEnabled);
+}
+
+void QWebPreferences::setFrameFlatteningEnabled(bool enable)
+{
+ d->setAttribute(QWebPreferencesPrivate::FrameFlatteningEnabled, enable);
+ emit frameFlatteningEnabledChanged();
+}
+
QString QWebPreferences::standardFontFamily() const
{
return d->fontFamily(QWebPreferencesPrivate::StandardFont);
diff --git a/Source/WebKit2/UIProcess/API/qt/qwebpreferences_p.h b/Source/WebKit2/UIProcess/API/qt/qwebpreferences_p.h
index 29df04cea..82b738fbf 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwebpreferences_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qwebpreferences_p.h
@@ -40,6 +40,7 @@ public:
Q_PROPERTY(bool privateBrowsingEnabled READ privateBrowsingEnabled WRITE setPrivateBrowsingEnabled NOTIFY privateBrowsingEnabledChanged FINAL)
Q_PROPERTY(bool dnsPrefetchEnabled READ dnsPrefetchEnabled WRITE setDnsPrefetchEnabled NOTIFY dnsPrefetchEnabledChanged FINAL)
Q_PROPERTY(bool navigatorQtObjectEnabled READ navigatorQtObjectEnabled WRITE setNavigatorQtObjectEnabled NOTIFY navigatorQtObjectEnabledChanged FINAL)
+ Q_PROPERTY(bool frameFlatteningEnabled READ frameFlatteningEnabled WRITE setFrameFlatteningEnabled NOTIFY frameFlatteningEnabledChanged FINAL)
Q_PROPERTY(QString standardFontFamily READ standardFontFamily WRITE setStandardFontFamily NOTIFY standardFontFamilyChanged FINAL)
Q_PROPERTY(QString fixedFontFamily READ fixedFontFamily WRITE setFixedFontFamily NOTIFY fixedFontFamilyChanged FINAL)
@@ -79,6 +80,9 @@ public:
bool navigatorQtObjectEnabled() const;
void setNavigatorQtObjectEnabled(bool);
+ bool frameFlatteningEnabled() const;
+ void setFrameFlatteningEnabled(bool enable);
+
QString standardFontFamily() const;
void setStandardFontFamily(const QString& family);
@@ -116,6 +120,7 @@ Q_SIGNALS:
void privateBrowsingEnabledChanged();
void dnsPrefetchEnabledChanged();
void navigatorQtObjectEnabledChanged();
+ void frameFlatteningEnabledChanged();
void standardFontFamilyChanged();
void fixedFontFamilyChanged();
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h b/Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h
index 7170f6594..f7838f072 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h
+++ b/Source/WebKit2/UIProcess/API/qt/tests/bytearraytestdata.h
@@ -33,6 +33,7 @@ class QWEBKIT_EXPORT ByteArrayTestData : public QObject {
public:
ByteArrayTestData(QObject* parent = 0);
+ virtual ~ByteArrayTestData() { }
QVariant latin1Data() const;
QVariant utf8Data() const;
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp b/Source/WebKit2/UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp
index f1a81bc18..3ad4729a9 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/tests/publicapi/tst_publicapi.cpp
@@ -43,6 +43,12 @@ static QStringList expectedAPI = QStringList()
<< "QQuickWebView.NetworkErrorDomain --> ErrorDomain"
<< "QQuickWebView.HttpErrorDomain --> ErrorDomain"
<< "QQuickWebView.DownloadErrorDomain --> ErrorDomain"
+ << "QQuickWebView.LinkClickedNavigation --> NavigationType"
+ << "QQuickWebView.FormSubmittedNavigation --> NavigationType"
+ << "QQuickWebView.BackForwardNavigation --> NavigationType"
+ << "QQuickWebView.ReloadNavigation --> NavigationType"
+ << "QQuickWebView.FormResubmittedNavigation --> NavigationType"
+ << "QQuickWebView.OtherNavigation --> NavigationType"
<< "QQuickWebView.title --> QString"
<< "QQuickWebView.url --> QUrl"
<< "QQuickWebView.icon --> QUrl"
@@ -73,6 +79,7 @@ static QStringList expectedAPI = QStringList()
<< "QWebNavigationRequest.button --> int"
<< "QWebNavigationRequest.modifiers --> int"
<< "QWebNavigationRequest.action --> int"
+ << "QWebNavigationRequest.navigationType --> QQuickWebView::NavigationType"
<< "QWebNavigationRequest.actionChanged() --> void"
;
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro
index 8cd15ff4d..7f4e3d12f 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro
+++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView.pro
@@ -27,4 +27,5 @@ OTHER_FILES += \
WebView/tst_preferences.qml \
WebView/tst_properties.qml \
WebView/tst_titleChanged.qml \
- WebView/tst_applicationScheme.qml
+ WebView/tst_applicationScheme.qml \
+ WebView/tst_origin.qml
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_origin.qml b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_origin.qml
new file mode 100644
index 000000000..70745d8d6
--- /dev/null
+++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_origin.qml
@@ -0,0 +1,57 @@
+import QtQuick 2.0
+import QtTest 1.0
+import QtWebKit 3.0
+import QtWebKit.experimental 1.0
+
+WebView {
+ id: webView
+ width: 200
+ height: 200
+
+ property bool success: true
+ property int port: 0
+ property string scheme: "file"
+
+ SignalSpy {
+ id: spy
+ target: experimental
+ signalName: "permissionRequested"
+ }
+
+ experimental.onPermissionRequested: {
+ if (permission.origin.port != webView.port) {
+ console.log("Expected port value should be zero.")
+ webView.success = false
+ }
+
+ if (permission.origin.scheme != webView.scheme) {
+ console.log("Expected scheme should be \"file\".")
+ webView.success = false
+ }
+ }
+
+ TestCase {
+ name: "WebViewSecurityOrigin"
+
+ // Delayed windowShown to workaround problems with Qt5 in debug mode.
+ when: false
+ Timer {
+ running: parent.windowShown
+ repeat: false
+ interval: 1
+ onTriggered: parent.when = true
+ }
+
+ function init() {
+ spy.clear()
+ }
+
+ function test_permissionRequest() {
+ compare(spy.count, 0)
+ webView.load(Qt.resolvedUrl("../common/geolocation.html"))
+ spy.wait()
+ compare(spy.count, 1)
+ compare(webView.success, true)
+ }
+ }
+}
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp
index a80c5c389..bcc246db4 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/tst_qmltests.cpp
@@ -21,9 +21,9 @@
#include "../util.h"
#include "qquickwebview_p.h"
+#include <QGuiApplication>
#include <QVarLengthArray>
#include <QtQuickTest/quicktest.h>
-#include <QtWidgets/QApplication>
int main(int argc, char** argv)
{
@@ -42,7 +42,7 @@ int main(int argc, char** argv)
// Instantiate QApplication to prevent quick_test_main to instantiate a QGuiApplication.
// This can be removed as soon as we do not use QtWidgets any more.
- QApplication app(argc, argv);
+ QGuiApplication app(argc, argv);
qmlRegisterType<ByteArrayTestData>("Test", 1, 0, "ByteArrayTestData");
#ifdef DISABLE_FLICKABLE_VIEWPORT
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp
index db3f9c977..12886b314 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp
+++ b/Source/WebKit2/UIProcess/API/qt/tests/qquickwebview/tst_qquickwebview.cpp
@@ -352,11 +352,11 @@ void tst_QQuickWebView::scrollRequest()
// COMPARE with the position requested in the html
// Use qRound as that is also used when calculating the position
// in WebKit.
- int y = -qRound(50 * webView()->page()->contentsScale());
- QVERIFY(webView()->page()->pos().y() == y);
+ int y = qRound(50 * webView()->page()->contentsScale());
+ QVERIFY(webView()->experimental()->contentY() == y);
}
-QTWEBKIT_API_TEST_MAIN(tst_QQuickWebView)
+QTEST_MAIN(tst_QQuickWebView)
#include "tst_qquickwebview.moc"
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/tests.pri b/Source/WebKit2/UIProcess/API/qt/tests/tests.pri
index ed91d3942..faf445397 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/tests.pri
+++ b/Source/WebKit2/UIProcess/API/qt/tests/tests.pri
@@ -9,7 +9,7 @@ SOURCES += ../util.cpp \
../bytearraytestdata.cpp
INCLUDEPATH += $$PWD
-QT += testlib declarative widgets quick
+QT += testlib declarative quick
CONFIG += qtwebkit
diff --git a/Source/WebKit2/UIProcess/API/qt/tests/util.h b/Source/WebKit2/UIProcess/API/qt/tests/util.h
index 007964fe5..1c052bc9a 100644
--- a/Source/WebKit2/UIProcess/API/qt/tests/util.h
+++ b/Source/WebKit2/UIProcess/API/qt/tests/util.h
@@ -29,13 +29,3 @@
void addQtWebProcessToPath();
bool waitForSignal(QObject*, const char* signal, int timeout = 10000);
void suppressDebugOutput();
-
-#define QTWEBKIT_API_TEST_MAIN(TestObject) \
-int main(int argc, char** argv) \
-{ \
- suppressDebugOutput(); \
- QApplication app(argc, argv); \
- QTEST_DISABLE_KEYPAD_NAVIGATION \
- TestObject tc; \
- return QTest::qExec(&tc, argc, argv); \
-}