diff options
author | Kari Oikarinen <kari.oikarinen@qt.io> | 2020-03-10 09:45:58 +0200 |
---|---|---|
committer | Kari Oikarinen <kari.oikarinen@qt.io> | 2020-03-10 09:45:58 +0200 |
commit | 2f88f91de1fd97bb45f71b3ab9b3ad2b4a3ba8aa (patch) | |
tree | a433088831993682b603afba05fd2d0a8e2720be | |
parent | 62e55be6b8a23003ca877d917e5ef0cd3ff4110f (diff) | |
parent | b3458b3c3b7bfb02b194fef38709710ebb9f296d (diff) |
Merge 5.14 into 5.14.2
Change-Id: I50afabc6022fea5b3db2a7dcb8659b654573661f
-rw-r--r-- | src/core/permission_manager_qt.cpp | 3 | ||||
-rw-r--r-- | src/core/web_contents_adapter.cpp | 5 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 15 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p_p.h | 1 | ||||
-rw-r--r-- | src/webengine/doc/src/qtwebengine-qmlmodule.qdoc | 4 | ||||
-rw-r--r-- | src/webengine/render_widget_host_view_qt_delegate_quick.cpp | 31 | ||||
-rw-r--r-- | src/webengine/render_widget_host_view_qt_delegate_quick.h | 3 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.cpp | 13 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview.h | 4 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebengineview_p.h | 1 | ||||
-rw-r--r-- | src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp | 22 | ||||
-rw-r--r-- | src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h | 4 | ||||
-rw-r--r-- | tests/auto/quick/qquickwebengineview/BLACKLIST | 2 | ||||
-rw-r--r-- | tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp | 31 | ||||
-rw-r--r-- | tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp | 6 | ||||
-rw-r--r-- | tools/scripts/gn_find_mocables.py | 4 |
16 files changed, 109 insertions, 40 deletions
diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp index 9e8687a47..decc6dd7c 100644 --- a/src/core/permission_manager_qt.cpp +++ b/src/core/permission_manager_qt.cpp @@ -67,6 +67,8 @@ ProfileAdapter::PermissionType toQt(content::PermissionType type) return ProfileAdapter::ClipboardWrite; case content::PermissionType::NOTIFICATIONS: return ProfileAdapter::NotificationPermission; + case content::PermissionType::ACCESSIBILITY_EVENTS: + return ProfileAdapter::UnsupportedPermission; case content::PermissionType::FLASH: case content::PermissionType::MIDI_SYSEX: case content::PermissionType::PROTECTED_MEDIA_IDENTIFIER: @@ -74,7 +76,6 @@ ProfileAdapter::PermissionType toQt(content::PermissionType type) case content::PermissionType::DURABLE_STORAGE: case content::PermissionType::BACKGROUND_SYNC: case content::PermissionType::SENSORS: - case content::PermissionType::ACCESSIBILITY_EVENTS: case content::PermissionType::PAYMENT_HANDLER: case content::PermissionType::BACKGROUND_FETCH: case content::PermissionType::IDLE_DETECTION: diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index a7579f916..31731fe99 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -1011,7 +1011,10 @@ QAccessibleInterface *WebContentsAdapter::browserAccessible() CHECK_INITIALIZED(nullptr); content::RenderViewHost *rvh = m_webContents->GetRenderViewHost(); Q_ASSERT(rvh); - content::BrowserAccessibilityManager *manager = static_cast<content::RenderFrameHostImpl*>(rvh->GetMainFrame())->GetOrCreateBrowserAccessibilityManager(); + content::RenderFrameHostImpl *rfh = static_cast<content::RenderFrameHostImpl *>(rvh->GetMainFrame()); + if (!rfh) + return nullptr; + content::BrowserAccessibilityManager *manager = rfh->GetOrCreateBrowserAccessibilityManager(); if (!manager) // FIXME! return nullptr; content::BrowserAccessibility *acc = manager->GetRoot(); diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 3ce202695..dead005b0 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -744,6 +744,17 @@ QQuickWebEngineViewAccessible::QQuickWebEngineViewAccessible(QQuickWebEngineView : QAccessibleObject(o) {} +bool QQuickWebEngineViewAccessible::isValid() const +{ + if (!QAccessibleObject::isValid()) + return false; + + if (!engineView() || !engineView()->d_func()) + return false; + + return true; +} + QAccessibleInterface *QQuickWebEngineViewAccessible::parent() const { QQuickItem *parent = engineView()->parentItem(); @@ -767,9 +778,9 @@ int QQuickWebEngineViewAccessible::childCount() const QAccessibleInterface *QQuickWebEngineViewAccessible::child(int index) const { - if (index == 0 && engineView()) + if (index == 0 && isValid()) return engineView()->d_func()->adapter->browserAccessible(); - return 0; + return nullptr; } int QQuickWebEngineViewAccessible::indexOfChild(const QAccessibleInterface *c) const diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index 6408767b3..3969ee244 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -234,6 +234,7 @@ class QQuickWebEngineViewAccessible : public QAccessibleObject { public: QQuickWebEngineViewAccessible(QQuickWebEngineView *o); + bool isValid() const override; QAccessibleInterface *parent() const override; QAccessibleInterface *focusChild() const override; int childCount() const override; diff --git a/src/webengine/doc/src/qtwebengine-qmlmodule.qdoc b/src/webengine/doc/src/qtwebengine-qmlmodule.qdoc index 44e6c7e27..4fd7e3a3b 100644 --- a/src/webengine/doc/src/qtwebengine-qmlmodule.qdoc +++ b/src/webengine/doc/src/qtwebengine-qmlmodule.qdoc @@ -35,9 +35,9 @@ The QML types can be imported into your application using the following import statements in your .qml file: - \badcode + \qml import QtWebEngine 1.10 - \endcode + \endqml To link against the module, add the following QT variable to your qmake .pro file: diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp index ede85ca69..d5aae271f 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.cpp +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.cpp @@ -226,6 +226,13 @@ bool RenderWidgetHostViewQtDelegateQuick::event(QEvent *event) void RenderWidgetHostViewQtDelegateQuick::focusInEvent(QFocusEvent *event) { +#if QT_CONFIG(accessibility) + if (QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(this)->focusChild()) { + QAccessibleEvent focusEvent(iface, QAccessible::Focus); + QAccessible::updateAccessibility(&focusEvent); + } +#endif // QT_CONFIG(accessibility) + m_client->forwardEvent(event); } @@ -380,9 +387,17 @@ RenderWidgetHostViewQtDelegateQuickAccessible::RenderWidgetHostViewQtDelegateQui { } +bool RenderWidgetHostViewQtDelegateQuickAccessible::isValid() const +{ + if (!viewAccessible() || !viewAccessible()->isValid()) + return false; + + return QAccessibleObject::isValid(); +} + QAccessibleInterface *RenderWidgetHostViewQtDelegateQuickAccessible::parent() const { - return QAccessible::queryAccessibleInterface(m_view)->parent(); + return viewAccessible()->parent(); } QString RenderWidgetHostViewQtDelegateQuickAccessible::text(QAccessible::Text) const @@ -397,29 +412,33 @@ QAccessible::Role RenderWidgetHostViewQtDelegateQuickAccessible::role() const QAccessible::State RenderWidgetHostViewQtDelegateQuickAccessible::state() const { - return QAccessible::queryAccessibleInterface(m_view)->state(); + return viewAccessible()->state(); } QAccessibleInterface *RenderWidgetHostViewQtDelegateQuickAccessible::focusChild() const { - return QAccessible::queryAccessibleInterface(m_view)->focusChild(); + return viewAccessible()->focusChild(); } int RenderWidgetHostViewQtDelegateQuickAccessible::childCount() const { - return QAccessible::queryAccessibleInterface(m_view)->childCount(); + return viewAccessible()->childCount(); } QAccessibleInterface *RenderWidgetHostViewQtDelegateQuickAccessible::child(int index) const { - return QAccessible::queryAccessibleInterface(m_view)->child(index); + return viewAccessible()->child(index); } int RenderWidgetHostViewQtDelegateQuickAccessible::indexOfChild(const QAccessibleInterface *c) const { - return QAccessible::queryAccessibleInterface(m_view)->indexOfChild(c); + return viewAccessible()->indexOfChild(c); } +QQuickWebEngineViewAccessible *RenderWidgetHostViewQtDelegateQuickAccessible::viewAccessible() const +{ + return static_cast<QQuickWebEngineViewAccessible *>(QAccessible::queryAccessibleInterface(m_view)); +} #endif // QT_CONFIG(accessibility) } // namespace QtWebEngineCore diff --git a/src/webengine/render_widget_host_view_qt_delegate_quick.h b/src/webengine/render_widget_host_view_qt_delegate_quick.h index 6874aac2b..f70de50d7 100644 --- a/src/webengine/render_widget_host_view_qt_delegate_quick.h +++ b/src/webengine/render_widget_host_view_qt_delegate_quick.h @@ -47,6 +47,7 @@ QT_BEGIN_NAMESPACE class QQuickWebEngineView; +class QQuickWebEngineViewAccessible; class QQuickWebEngineViewPrivate; QT_END_NAMESPACE @@ -122,6 +123,7 @@ class RenderWidgetHostViewQtDelegateQuickAccessible : public QAccessibleObject public: RenderWidgetHostViewQtDelegateQuickAccessible(RenderWidgetHostViewQtDelegateQuick *o, QQuickWebEngineView *view); + bool isValid() const override; QAccessibleInterface *parent() const override; QString text(QAccessible::Text t) const override; QAccessible::Role role() const override; @@ -133,6 +135,7 @@ public: int indexOfChild(const QAccessibleInterface *) const override; private: + QQuickWebEngineViewAccessible *viewAccessible() const; QQuickWebEngineView *m_view; }; #endif // QT_CONFIG(accessibility) diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index a51f9b7a5..b06d99478 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -471,6 +471,17 @@ void QWebEngineView::dropEvent(QDropEvent *e) #endif // QT_CONFIG(draganddrop) #ifndef QT_NO_ACCESSIBILITY +bool QWebEngineViewAccessible::isValid() const +{ + if (!QAccessibleWidget::isValid()) + return false; + + if (!view() || !view()->d_func() || !view()->d_func()->page || !view()->d_func()->page->d_func()) + return false; + + return true; +} + QAccessibleInterface *QWebEngineViewAccessible::focusChild() const { if (child(0) && child(0)->focusChild()) @@ -485,7 +496,7 @@ int QWebEngineViewAccessible::childCount() const QAccessibleInterface *QWebEngineViewAccessible::child(int index) const { - if (index == 0 && view() && view()->page()) + if (index == 0 && isValid()) return view()->page()->d_func()->adapter->browserAccessible(); return nullptr; } diff --git a/src/webenginewidgets/api/qwebengineview.h b/src/webenginewidgets/api/qwebengineview.h index 63a68f46c..04c8ece74 100644 --- a/src/webenginewidgets/api/qwebengineview.h +++ b/src/webenginewidgets/api/qwebengineview.h @@ -53,6 +53,7 @@ class QContextMenuEvent; class QUrl; class QWebEnginePage; class QWebEngineSettings; +class QWebEngineViewAccessible; class QWebEngineViewPrivate; class QWEBENGINEWIDGETS_EXPORT QWebEngineView : public QWidget { @@ -141,6 +142,9 @@ private: friend class QWebEnginePage; friend class QWebEnginePagePrivate; +#if QT_CONFIG(accessibility) + friend class QWebEngineViewAccessible; +#endif }; QT_END_NAMESPACE diff --git a/src/webenginewidgets/api/qwebengineview_p.h b/src/webenginewidgets/api/qwebengineview_p.h index dd0a5bedf..a3c619cea 100644 --- a/src/webenginewidgets/api/qwebengineview_p.h +++ b/src/webenginewidgets/api/qwebengineview_p.h @@ -87,6 +87,7 @@ public: QWebEngineViewAccessible(QWebEngineView *o) : QAccessibleWidget(o) {} + bool isValid() const override; QAccessibleInterface *focusChild() const override; int childCount() const override; QAccessibleInterface *child(int index) const override; diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp index 8ba312822..fdd6d1c4f 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp @@ -41,6 +41,7 @@ #include "qwebenginepage_p.h" #include "qwebengineview.h" +#include "qwebengineview_p.h" #include <QGuiApplication> #include <QLayout> #include <QMouseEvent> @@ -490,24 +491,37 @@ RenderWidgetHostViewQtDelegateWidgetAccessible::RenderWidgetHostViewQtDelegateWi { } +bool RenderWidgetHostViewQtDelegateWidgetAccessible::isValid() const +{ + if (!viewAccessible() || !viewAccessible()->isValid()) + return false; + + return QAccessibleWidget::isValid(); +} + QAccessibleInterface *RenderWidgetHostViewQtDelegateWidgetAccessible::focusChild() const { - return QAccessible::queryAccessibleInterface(m_view)->focusChild(); + return viewAccessible()->focusChild(); } int RenderWidgetHostViewQtDelegateWidgetAccessible::childCount() const { - return QAccessible::queryAccessibleInterface(m_view)->childCount(); + return viewAccessible()->childCount(); } QAccessibleInterface *RenderWidgetHostViewQtDelegateWidgetAccessible::child(int index) const { - return QAccessible::queryAccessibleInterface(m_view)->child(index); + return viewAccessible()->child(index); } int RenderWidgetHostViewQtDelegateWidgetAccessible::indexOfChild(const QAccessibleInterface *c) const { - return QAccessible::queryAccessibleInterface(m_view)->indexOfChild(c); + return viewAccessible()->indexOfChild(c); +} + +QWebEngineViewAccessible *RenderWidgetHostViewQtDelegateWidgetAccessible::viewAccessible() const +{ + return static_cast<QWebEngineViewAccessible *>(QAccessible::queryAccessibleInterface(m_view)); } #endif // QT_CONFIG(accessibility) diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h index df1806b6f..c7783117a 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h @@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE class QWebEnginePage; class QWebEngineView; +class QWebEngineViewAccessible; class QWebEnginePagePrivate; QT_END_NAMESPACE @@ -123,11 +124,14 @@ class RenderWidgetHostViewQtDelegateWidgetAccessible : public QAccessibleWidget public: RenderWidgetHostViewQtDelegateWidgetAccessible(RenderWidgetHostViewQtDelegateWidget *o, QWebEngineView *view); + bool isValid() const override; QAccessibleInterface *focusChild() const override; int childCount() const override; QAccessibleInterface *child(int index) const override; int indexOfChild(const QAccessibleInterface *child) const override; + private: + QWebEngineViewAccessible *viewAccessible() const; QWebEngineView *m_view; }; #endif // QT_CONFIG(accessibility) diff --git a/tests/auto/quick/qquickwebengineview/BLACKLIST b/tests/auto/quick/qquickwebengineview/BLACKLIST index d4d5c9844..e69de29bb 100644 --- a/tests/auto/quick/qquickwebengineview/BLACKLIST +++ b/tests/auto/quick/qquickwebengineview/BLACKLIST @@ -1,2 +0,0 @@ -[transparentWebEngineViews] -windows diff --git a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp index 6f9cb9c69..04be25abe 100644 --- a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp +++ b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp @@ -421,32 +421,29 @@ void tst_QQuickWebEngineView::transparentWebEngineViews() webEngineView1->setSize(QSizeF(300, 400)); webEngineView1->loadHtml("<html><body bgcolor=\"red\"></body></html>"); - QVERIFY(waitForLoadSucceeded(webEngineView1.data())); - webEngineView1->setVisible(true); + QVERIFY(waitForLoadSucceeded(webEngineView1.data(), 30000)); webEngineView2->setSize(QSizeF(300, 400)); webEngineView2->setUrl(urlFromTestPath("/html/basic_page.html")); QVERIFY(waitForLoadSucceeded(webEngineView2.data())); // Result image: black text on red background. - const QImage grabbedWindow = tryToGrabWindowUntil(m_window.data(), [] (const QImage &image) { - return image.pixelColor(0, 0) == QColor(Qt::red); + QSet<QRgb> colors; + tryToGrabWindowUntil(m_window.data(), [&colors] (const QImage &image) { + colors.clear(); + for (int i = 0; i < image.width(); i++) + for (int j = 0; j < image.height(); j++) + colors.insert(image.pixel(i, j)); + return colors.count() > 1; }); - QSet<int> redComponents; - for (int i = 0, width = grabbedWindow.width(); i < width; i++) { - for (int j = 0, height = grabbedWindow.height(); j < height; j++) { - QColor color(grabbedWindow.pixel(i, j)); - redComponents.insert(color.red()); - // There are no green or blue components between red and black. - QVERIFY(color.green() == 0); - QVERIFY(color.blue() == 0); - } + QVERIFY(colors.count() > 1); + QVERIFY(colors.contains(qRgb(0, 0, 0))); // black + QVERIFY(colors.contains(qRgb(255, 0, 0))); // red + for (auto color : colors) { + QCOMPARE(qGreen(color), 0); + QCOMPARE(qBlue(color), 0); } - - QVERIFY(redComponents.count() > 1); - QVERIFY(redComponents.contains(0)); // black - QVERIFY(redComponents.contains(255)); // red } void tst_QQuickWebEngineView::inputMethod() diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 206e53a38..94ce92e40 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -824,11 +824,13 @@ void tst_QWebEnginePage::localStorageVisibility() QVERIFY(evaluateJavaScriptSync(&webPage1, QString("(window.localStorage != undefined)")).toBool()); QVERIFY(!evaluateJavaScriptSync(&webPage2, QString("(window.localStorage != undefined)")).toBool()); - // Switching the feature off does not actively remove the object from webPage1. + // Toggle local setting for every page and... webPage1.settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, false); webPage2.settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true); + // ...first check second page (for storage to appear) as applying settings is batched and done asynchronously + QTRY_VERIFY(evaluateJavaScriptSync(&webPage2, QString("(window.localStorage != undefined)")).toBool()); + // Switching the feature off does not actively remove the object from webPage1. QVERIFY(evaluateJavaScriptSync(&webPage1, QString("(window.localStorage != undefined)")).toBool()); - QVERIFY(evaluateJavaScriptSync(&webPage2, QString("(window.localStorage != undefined)")).toBool()); // The object disappears only after reloading. webPage1.triggerAction(QWebEnginePage::Reload); diff --git a/tools/scripts/gn_find_mocables.py b/tools/scripts/gn_find_mocables.py index d1f682456..4dc2576e3 100644 --- a/tools/scripts/gn_find_mocables.py +++ b/tools/scripts/gn_find_mocables.py @@ -58,10 +58,10 @@ for f in filter(os.path.isfile, files): includedMocs.add(im.group(1)) for mocable in includedMocs: - print "Found included moc: " + mocable + print("Found included moc: " + mocable) assert len(includedMocs) == 0 , "Included mocs are not supported !" for mocable in mocables: - print mocable + print(mocable) sys.exit(0) |