diff options
author | Michal Klocek <michal.klocek@qt.io> | 2021-10-21 14:59:04 +0200 |
---|---|---|
committer | Michal Klocek <michal.klocek@qt.io> | 2021-11-16 16:46:55 +0000 |
commit | 89bb3c97eee9cd4bf9fb536f024715e606e49ae0 (patch) | |
tree | ac9f15c108582a411a59d899323892b0c165cfd8 /src/webenginequick/api | |
parent | 05560ed24561535e264995dc3c09d4ae4873f95c (diff) | |
download | qtwebengine-89bb3c97eee9cd4bf9fb536f024715e606e49ae0.tar.gz |
Do not access accessibility from qt post routines
It seems accessing accessibility from qt post routines ends
badly since caches are gone already.
Add closingDown() function to web context, which is similar to
QCoreApplication::closingDown(), however return true on
post routine.
Guard delete accessibility calls.
Note the widget part is not necessary, but added for completeness,
since only qml can release profiles due to garbage collection.
Fixes: QTBUG-90904
Pick-to: 6.2 6.2.2 5.15
Change-Id: Ic0e7115cd17eb58f3d58f70fefbc197dfb7a6493
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'src/webenginequick/api')
-rw-r--r-- | src/webenginequick/api/qquickwebengineview.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/webenginequick/api/qquickwebengineview.cpp b/src/webenginequick/api/qquickwebengineview.cpp index 42460ca34..837aed7e3 100644 --- a/src/webenginequick/api/qquickwebengineview.cpp +++ b/src/webenginequick/api/qquickwebengineview.cpp @@ -75,6 +75,7 @@ #include <QtWebEngineCore/private/qwebenginehistory_p.h> #include <QtWebEngineCore/private/qwebenginenewwindowrequest_p.h> #include <QtWebEngineCore/private/qwebenginescriptcollection_p.h> +#include <QtWebEngineCore/private/qtwebenginecoreglobal_p.h> #include <QtCore/qloggingcategory.h> #include <QtCore/qmimedata.h> @@ -927,11 +928,14 @@ void QQuickWebEngineViewPrivate::widgetChanged(RenderWidgetHostViewQtDelegateQui if (oldWidget) { oldWidget->setParentItem(nullptr); #if QT_CONFIG(accessibility) - QAccessible::deleteAccessibleInterface(QAccessible::uniqueId(QAccessible::queryAccessibleInterface(oldWidget))); + if (!QtWebEngineCore::closingDown()) + QAccessible::deleteAccessibleInterface( + QAccessible::uniqueId(QAccessible::queryAccessibleInterface(oldWidget))); #endif } if (newWidget) { + Q_ASSERT(!QtWebEngineCore::closingDown()); #if QT_CONFIG(accessibility) QAccessible::registerAccessibleInterface(new QtWebEngineCore::RenderWidgetHostViewQtDelegateQuickAccessible(newWidget, q)); #endif |