summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/permission_manager_qt.cpp3
-rw-r--r--src/core/web_contents_adapter.cpp5
-rw-r--r--src/webengine/api/qquickwebengineview.cpp15
-rw-r--r--src/webengine/api/qquickwebengineview_p_p.h1
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.cpp31
-rw-r--r--src/webengine/render_widget_host_view_qt_delegate_quick.h3
-rw-r--r--src/webenginewidgets/api/qwebengineview.cpp13
-rw-r--r--src/webenginewidgets/api/qwebengineview.h4
-rw-r--r--src/webenginewidgets/api/qwebengineview_p.h1
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.cpp22
-rw-r--r--src/webenginewidgets/render_widget_host_view_qt_delegate_widget.h4
11 files changed, 87 insertions, 15 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 9dc2f7b8b..138ea7039 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -1010,7 +1010,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 8f5313a9d..bcbf95569 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -750,6 +750,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();
@@ -773,9 +784,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 1f024167f..6f9b552ec 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -235,6 +235,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/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)