summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets
diff options
context:
space:
mode:
authorMichal Klocek <michal.klocek@qt.io>2021-10-21 14:59:04 +0200
committerMichal Klocek <michal.klocek@qt.io>2021-11-23 08:09:23 +0100
commit1dd823a9a9a0ca34a7c359c45689b50a1350602e (patch)
treec3c509ad1420398c67fa8992bf527e57babc5215 /src/webenginewidgets
parent8a48e2c4e03e406ea80763e5afdfd68cefbc77a9 (diff)
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 Change-Id: Ic0e7115cd17eb58f3d58f70fefbc197dfb7a6493 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io> (cherry picked from commit 89bb3c97eee9cd4bf9fb536f024715e606e49ae0)
Diffstat (limited to 'src/webenginewidgets')
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp
index 6414ac050..889a6be76 100644
--- a/src/webenginewidgets/api/qwebengineview.cpp
+++ b/src/webenginewidgets/api/qwebengineview.cpp
@@ -153,11 +153,14 @@ void QWebEngineViewPrivate::widgetChanged(QtWebEngineCore::RenderWidgetHostViewQ
q->layout()->removeWidget(oldWidget);
oldWidget->hide();
#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)
// An earlier QAccessible::queryAccessibleInterface() call may have already registered a default
// QAccessibleInterface for newWidget: remove it first to avoid assert in QAccessibleCache::insert().