diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/API/qt')
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); \ -} |