summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2014-07-07 10:28:48 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2014-07-09 15:09:44 +0200
commita9853701193c81c65f80a606943864cd9b1f4431 (patch)
tree401b380f8636830f8dedbcf40f23a156285fa156
parentbef6cc644f176a69a85c68126bd0d7e50ab5757e (diff)
Add core accessibility
This commit adds the basics to bridge the blink accessibility classes to QAccessibleInterfaces. Note that it needs two follow up commits to implement the bridging from the QWidget/Qt Quick worlds. [ChangeLog][Accessibility] QtWebEngine now has accessibility support, enabling assistive technology such as screen readers to work with it. Change-Id: Ied1d97e61a024115ac7a9245331211f6d9fac1b4 Reviewed-by: Zeno Albisser <zeno.albisser@digia.com> Reviewed-by: Andras Becsi <andras.becsi@digia.com>
-rw-r--r--src/core/browser_accessibility_delegate_qt.cpp94
-rw-r--r--src/core/browser_accessibility_delegate_qt.h79
-rw-r--r--src/core/browser_accessibility_manager_qt.cpp119
-rw-r--r--src/core/browser_accessibility_manager_qt.h83
-rw-r--r--src/core/browser_accessibility_qt.cpp393
-rw-r--r--src/core/browser_accessibility_qt.h83
-rw-r--r--src/core/core_gyp_generator.pro5
-rw-r--r--src/core/qtwebengine_extras.gypi9
-rw-r--r--src/core/render_widget_host_view_qt.cpp44
-rw-r--r--src/core/render_widget_host_view_qt.h7
-rw-r--r--src/core/web_contents_adapter.cpp8
-rw-r--r--src/core/web_contents_adapter.h3
-rw-r--r--src/core/web_contents_adapter_client.h3
-rw-r--r--src/webengine/api/qquickwebengineview.cpp6
-rw-r--r--src/webengine/api/qquickwebengineview_p_p.h1
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp5
-rw-r--r--src/webenginewidgets/api/qwebenginepage_p.h1
17 files changed, 936 insertions, 7 deletions
diff --git a/src/core/browser_accessibility_delegate_qt.cpp b/src/core/browser_accessibility_delegate_qt.cpp
new file mode 100644
index 000000000..a692b2621
--- /dev/null
+++ b/src/core/browser_accessibility_delegate_qt.cpp
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "browser_accessibility_delegate_qt.h"
+
+#include <QtCore/qglobal.h>
+
+BrowserAccessibilityDelegateQt::BrowserAccessibilityDelegateQt(content::RenderWidgetHostViewBase *rwhv)
+ : m_rwhv(rwhv)
+{
+ Q_ASSERT(m_rwhv);
+}
+
+bool BrowserAccessibilityDelegateQt::HasFocus() const
+{
+ return m_rwhv->HasFocus();
+}
+
+gfx::Rect BrowserAccessibilityDelegateQt::GetViewBounds() const
+{
+ return m_rwhv->GetViewBounds();
+}
+
+void BrowserAccessibilityDelegateQt::SetAccessibilityFocus(int acc_obj_id)
+{
+}
+
+void BrowserAccessibilityDelegateQt::AccessibilityDoDefaultAction(int acc_obj_id)
+{
+}
+
+void BrowserAccessibilityDelegateQt::AccessibilityScrollToMakeVisible(
+ int acc_obj_id, gfx::Rect subfocus)
+{
+}
+
+void BrowserAccessibilityDelegateQt::AccessibilityScrollToPoint(
+ int acc_obj_id, gfx::Point point)
+{
+}
+
+void BrowserAccessibilityDelegateQt::AccessibilitySetTextSelection(
+ int acc_obj_id, int start_offset, int end_offset)
+{
+}
+
+gfx::Point BrowserAccessibilityDelegateQt::GetLastTouchEventLocation() const
+{
+ return gfx::Point();
+}
+
+void BrowserAccessibilityDelegateQt::FatalAccessibilityTreeError()
+{
+ qWarning("BrowserAccessibilityDelegateQt::FatalAccessibilityTreeError");
+ m_rwhv->SetBrowserAccessibilityManager(0);
+}
diff --git a/src/core/browser_accessibility_delegate_qt.h b/src/core/browser_accessibility_delegate_qt.h
new file mode 100644
index 000000000..1174f2378
--- /dev/null
+++ b/src/core/browser_accessibility_delegate_qt.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BROWSER_ACCESSIBILITY_DELEGATE_QT_H
+#define BROWSER_ACCESSIBILITY_DELEGATE_QT_H
+
+#include <QtCore/qglobal.h>
+
+#include "content/browser/accessibility/browser_accessibility_manager.h"
+#include "content/browser/renderer_host/render_widget_host_view_base.h"
+
+class BrowserAccessibilityDelegateQt
+ : public content::BrowserAccessibilityDelegate
+{
+public:
+ BrowserAccessibilityDelegateQt(content::RenderWidgetHostViewBase *rwhv);
+
+ virtual bool HasFocus() const Q_DECL_OVERRIDE;
+ virtual void SetAccessibilityFocus(int acc_obj_id) Q_DECL_OVERRIDE;
+
+ virtual void AccessibilityDoDefaultAction(int acc_obj_id) Q_DECL_OVERRIDE;
+
+ virtual gfx::Rect GetViewBounds() const Q_DECL_OVERRIDE;
+ virtual void AccessibilityScrollToMakeVisible(
+ int acc_obj_id, gfx::Rect subfocus) Q_DECL_OVERRIDE;
+ virtual void AccessibilityScrollToPoint(
+ int acc_obj_id, gfx::Point point) Q_DECL_OVERRIDE;
+
+ virtual void AccessibilitySetTextSelection(
+ int acc_obj_id, int start_offset, int end_offset) Q_DECL_OVERRIDE;
+
+ virtual gfx::Point GetLastTouchEventLocation() const Q_DECL_OVERRIDE;
+
+ virtual void FatalAccessibilityTreeError() Q_DECL_OVERRIDE;
+
+private:
+ Q_DISABLE_COPY(BrowserAccessibilityDelegateQt)
+ content::RenderWidgetHostViewBase *m_rwhv;
+};
+
+#endif
diff --git a/src/core/browser_accessibility_manager_qt.cpp b/src/core/browser_accessibility_manager_qt.cpp
new file mode 100644
index 000000000..8c2c3444a
--- /dev/null
+++ b/src/core/browser_accessibility_manager_qt.cpp
@@ -0,0 +1,119 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "browser_accessibility_manager_qt.h"
+
+#include "third_party/WebKit/public/web/WebAXEnums.h"
+#include "browser_accessibility_qt.h"
+
+using namespace blink;
+
+namespace content {
+
+BrowserAccessibility *BrowserAccessibilityFactoryQt::Create()
+{
+ return new BrowserAccessibilityQt();
+}
+
+BrowserAccessibilityManagerQt::BrowserAccessibilityManagerQt(
+ QObject* parentObject,
+ const AccessibilityNodeData& src,
+ BrowserAccessibilityDelegate* delegate,
+ BrowserAccessibilityFactory* factory)
+ : BrowserAccessibilityManager(delegate, factory)
+ , m_parentObject(parentObject) {
+ Initialize(src);
+}
+
+QAccessibleInterface *BrowserAccessibilityManagerQt::rootParentAccessible()
+{
+ return QAccessible::queryAccessibleInterface(m_parentObject);
+}
+
+void BrowserAccessibilityManagerQt::NotifyRootChanged()
+{
+}
+
+void BrowserAccessibilityManagerQt::NotifyAccessibilityEvent(blink::WebAXEvent event_type,
+ BrowserAccessibility* node)
+{
+ BrowserAccessibilityQt *iface = static_cast<BrowserAccessibilityQt*>(node);
+
+ switch (event_type) {
+ case WebAXEventFocus: {
+ QAccessibleEvent event(iface, QAccessible::Focus);
+ QAccessible::updateAccessibility(&event);
+ break;
+ }
+ case WebAXEventCheckedStateChanged: {
+ BrowserAccessibilityQt *iface = static_cast<BrowserAccessibilityQt*>(node);
+ QAccessible::State change;
+ change.checked = true;
+ QAccessibleStateChangeEvent event(iface, change);
+ QAccessible::updateAccessibility(&event);
+ break;
+ }
+ case WebAXEventValueChanged: {
+ QVariant value;
+ if (QAccessibleValueInterface *valueIface = iface->valueInterface())
+ value = valueIface->currentValue();
+ QAccessibleValueChangeEvent event(iface, value);
+ QAccessible::updateAccessibility(&event);
+ break;
+ }
+ case WebAXEventChildrenChanged:
+ break;
+ case WebAXEventLayoutComplete:
+ break;
+ case WebAXEventLoadComplete:
+ break;
+ case WebAXEventTextChanged:
+ break;
+ case WebAXEventTextInserted:
+ break;
+ case WebAXEventTextRemoved:
+ break;
+ default:
+ break;
+ }
+}
+
+}
diff --git a/src/core/browser_accessibility_manager_qt.h b/src/core/browser_accessibility_manager_qt.h
new file mode 100644
index 000000000..e3cca81ce
--- /dev/null
+++ b/src/core/browser_accessibility_manager_qt.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BROWSER_ACCESSIBILITY_MANAGER_QT_H
+#define BROWSER_ACCESSIBILITY_MANAGER_QT_H
+
+#include "content/browser/accessibility/browser_accessibility_manager.h"
+#include <QtCore/qobject.h>
+
+QT_BEGIN_NAMESPACE
+class QAccessibleInterface;
+QT_END_NAMESPACE
+
+namespace content {
+
+class BrowserAccessibilityFactoryQt : public BrowserAccessibilityFactory
+{
+public:
+ BrowserAccessibility* Create() Q_DECL_OVERRIDE;
+};
+
+class BrowserAccessibilityManagerQt : public BrowserAccessibilityManager
+{
+public:
+ BrowserAccessibilityManagerQt(
+ QObject* parentObject,
+ const AccessibilityNodeData& src,
+ BrowserAccessibilityDelegate* delegate,
+ BrowserAccessibilityFactory* factory = new BrowserAccessibilityFactoryQt());
+
+ void NotifyRootChanged() Q_DECL_OVERRIDE;
+ void NotifyAccessibilityEvent(
+ blink::WebAXEvent event_type,
+ BrowserAccessibility* node) Q_DECL_OVERRIDE;
+
+ QAccessibleInterface *rootParentAccessible();
+
+private:
+ Q_DISABLE_COPY(BrowserAccessibilityManagerQt)
+ QObject *m_parentObject;
+};
+
+}
+
+#endif
diff --git a/src/core/browser_accessibility_qt.cpp b/src/core/browser_accessibility_qt.cpp
new file mode 100644
index 000000000..bfbb3f69b
--- /dev/null
+++ b/src/core/browser_accessibility_qt.cpp
@@ -0,0 +1,393 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "browser_accessibility_qt.h"
+
+#include "content/common/accessibility_node_data.h"
+#include "third_party/WebKit/public/web/WebAXEnums.h"
+#include "type_conversion.h"
+#include "browser_accessibility_manager_qt.h"
+
+using namespace blink;
+
+namespace content {
+
+BrowserAccessibilityQt::BrowserAccessibilityQt()
+{
+ QAccessible::registerAccessibleInterface(this);
+}
+
+bool BrowserAccessibilityQt::isValid() const
+{
+ return true;
+}
+
+QObject *BrowserAccessibilityQt::object() const
+{
+ return 0;
+}
+
+QAccessibleInterface *BrowserAccessibilityQt::childAt(int x, int y) const
+{
+ return 0;
+}
+
+QAccessibleInterface *BrowserAccessibilityQt::parent() const
+{
+ BrowserAccessibility *p = BrowserAccessibility::parent();
+ if (p)
+ return static_cast<BrowserAccessibilityQt*>(p);
+ return static_cast<BrowserAccessibilityManagerQt*>(manager())->rootParentAccessible();
+}
+
+QAccessibleInterface *BrowserAccessibilityQt::child(int index) const
+{
+ return static_cast<BrowserAccessibilityQt*>(BrowserAccessibility::PlatformGetChild(index));
+}
+
+int BrowserAccessibilityQt::childCount() const
+{
+ return child_count();
+}
+
+int BrowserAccessibilityQt::indexOfChild(const QAccessibleInterface *iface) const
+{
+
+ const BrowserAccessibilityQt *child = static_cast<const BrowserAccessibilityQt*>(iface);
+ return child->index_in_parent();
+}
+
+QString BrowserAccessibilityQt::text(QAccessible::Text t) const
+{
+ std::string name_str = name();
+ return toQt(name_str);
+}
+
+void BrowserAccessibilityQt::setText(QAccessible::Text t, const QString &text)
+{
+}
+
+QRect BrowserAccessibilityQt::rect() const
+{
+ gfx::Rect bounds = GetGlobalBoundsRect();
+ return QRect(bounds.x(), bounds.y(), bounds.width(), bounds.height());
+}
+
+QAccessible::Role BrowserAccessibilityQt::role() const
+{
+ switch (BrowserAccessibility::role()) {
+ case WebAXRoleUnknown:
+ return QAccessible::NoRole;
+
+ // Used by Chromium to distinguish between the root of the tree
+ // for this page, and a web area for a frame within this page.
+ case WebAXRoleWebArea:
+ case WebAXRoleRootWebArea: // not sure if we need to make a diff here, but this seems common
+ return QAccessible::Document;
+
+ // These roles all directly correspond to blink accessibility roles,
+ // keep these alphabetical.
+ case WebAXRoleAlert:
+ return QAccessible::AlertMessage;
+ case WebAXRoleAnnotation:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleApplication:
+ return QAccessible::Application;
+ case WebAXRoleArticle:
+ return QAccessible::Document; // FIXME
+ case WebAXRoleBrowser:
+ return QAccessible::Document; // FIXME
+ case WebAXRoleBusyIndicator:
+ return QAccessible::Animation; // FIXME
+ case WebAXRoleButton:
+ return QAccessible::Button;
+ case WebAXRoleCanvas:
+ return QAccessible::Canvas;
+ case WebAXRoleCell:
+ return QAccessible::Cell;
+ case WebAXRoleCheckBox:
+ return QAccessible::CheckBox;
+ case WebAXRoleColorWell:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleColumn:
+ return QAccessible::Column;
+ case WebAXRoleColumnHeader:
+ return QAccessible::ColumnHeader;
+ case WebAXRoleComboBox:
+ return QAccessible::ComboBox;
+ case WebAXRoleDefinition:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleDescriptionListDetail:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleDescriptionListTerm:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleDialog:
+ return QAccessible::Dialog;
+ case WebAXRoleDirectory:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleDisclosureTriangle:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleDiv:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleDocument:
+ return QAccessible::Document;
+ case WebAXRoleDrawer:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleEditableText:
+ return QAccessible::EditableText;
+ case WebAXRoleFooter:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleForm:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleGrid:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleGroup:
+ return QAccessible::Grouping;
+ case WebAXRoleGrowArea:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleHeading:
+ return QAccessible::StaticText; // FIXME
+ case WebAXRoleHelpTag:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleHorizontalRule:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleIgnored:
+ return QAccessible::NoRole;
+ case WebAXRoleImage:
+ return QAccessible::Graphic;
+ case WebAXRoleImageMap:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleImageMapLink:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleIncrementor:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleLabel:
+ return QAccessible::StaticText;
+ case WebAXRoleLink:
+ return QAccessible::Link;
+ case WebAXRoleList:
+ return QAccessible::List;
+ case WebAXRoleListBox:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleListBoxOption:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleListItem:
+ return QAccessible::ListItem;
+ case WebAXRoleListMarker:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleLog:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleMarquee:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleMath:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleMatte:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleMenu:
+ return QAccessible::PopupMenu;
+ case WebAXRoleMenuBar:
+ return QAccessible::MenuBar;
+ case WebAXRoleMenuItem:
+ return QAccessible::MenuItem;
+ case WebAXRoleMenuButton:
+ return QAccessible::MenuItem;
+ case WebAXRoleMenuListOption:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleMenuListPopup:
+ return QAccessible::PopupMenu;
+ case WebAXRoleNote:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleOutline:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleParagraph:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRolePopUpButton:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRolePresentational:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleProgressIndicator:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleRadioButton:
+ return QAccessible::RadioButton;
+ case WebAXRoleRadioGroup:
+ return QAccessible::RadioButton;
+ case WebAXRoleRegion:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleRow:
+ return QAccessible::Row;
+ case WebAXRoleRowHeader:
+ return QAccessible::RowHeader;
+ case WebAXRoleRuler:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleRulerMarker:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleScrollArea:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleScrollBar:
+ return QAccessible::ScrollBar;
+ case WebAXRoleSheet:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleSlider:
+ return QAccessible::Slider;
+ case WebAXRoleSliderThumb:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleSpinButton:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleSpinButtonPart:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleSplitter:
+ return QAccessible::Splitter;
+ case WebAXRoleSplitGroup:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleStaticText:
+ return QAccessible::StaticText;
+ case WebAXRoleStatus:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleSVGRoot:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleSystemWide:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleTab:
+ return QAccessible::PageTab;
+ case WebAXRoleTable:
+ return QAccessible::Table;
+ case WebAXRoleTableHeaderContainer:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleTabGroup: // blink doesn't use (uses ROLE_TAB_LIST)
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleTabList:
+ return QAccessible::PageTabList;
+ case WebAXRoleTabPanel:
+ return QAccessible::PageTab;
+ case WebAXRoleTextArea:
+ return QAccessible::EditableText;
+ case WebAXRoleTextField:
+ return QAccessible::EditableText;
+ case WebAXRoleTimer:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleToggleButton:
+ return QAccessible::Button; // FIXME
+ case WebAXRoleToolbar:
+ return QAccessible::ToolBar;
+ case WebAXRoleUserInterfaceTooltip:
+ return QAccessible::ToolTip;
+ case WebAXRoleTree:
+ return QAccessible::Tree;
+ case WebAXRoleTreeGrid:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleTreeItem:
+ return QAccessible::TreeItem;
+ case WebAXRoleValueIndicator:
+ return QAccessible::NoRole; // FIXME
+ case WebAXRoleWindow:
+ return QAccessible::Window;
+ }
+ return QAccessible::NoRole;
+}
+
+QAccessible::State BrowserAccessibilityQt::state() const
+{
+ QAccessible::State state = QAccessible::State();
+ int32 s = BrowserAccessibility::state();
+ if (s & (1 << WebAXStateBusy))
+ state.busy = true;
+ if (s & (1 << WebAXStateChecked))
+ state.checked = true;
+ if (s & (1 << WebAXStateCollapsed))
+ state.collapsed = true;
+ if (!(s & (1 << WebAXStateEnabled)))
+ state.disabled = true;
+ if (s & (1 << WebAXStateExpanded))
+ state.expanded = true;
+ if (s & (1 << WebAXStateFocusable))
+ state.focusable = true;
+ if (s & (1 << WebAXStateFocused))
+ state.focused = true;
+ if (s & (1 << WebAXStateHaspopup))
+ state.hasPopup = true;
+ if (s & (1 << WebAXStateHovered))
+ state.hotTracked = true;
+ if (s & (1 << WebAXStateIndeterminate))
+ {} // FIXME
+ if (s & (1 << WebAXStateInvisible))
+ state.invisible = true;
+ if (s & (1 << WebAXStateLinked))
+ state.linked = true;
+ if (s & (1 << WebAXStateMultiselectable))
+ state.multiSelectable = true;
+ if (s & (1 << WebAXStateOffscreen))
+ state.offscreen = true;
+ if (s & (1 << WebAXStatePressed))
+ state.pressed = true;
+ if (s & (1 << WebAXStateProtected))
+ {} // FIXME
+ if (s & (1 << WebAXStateReadonly))
+ state.readOnly = true;
+ if (s & (1 << WebAXStateRequired))
+ {} // FIXME
+ if (s & (1 << WebAXStateSelectable))
+ state.selectable = true;
+ if (s & (1 << WebAXStateSelected))
+ state.selected = true;
+ if (s & (1 << WebAXStateVertical))
+ {} // FIXME
+ if (s & (1 << WebAXStateVisited))
+ {} // FIXME
+ return state;
+}
+
+// Qt does not reference count accessibles
+void BrowserAccessibilityQt::NativeAddReference()
+{
+}
+
+// there is no reference counting, but BrowserAccessibility::Destroy
+// calls this (and that is the only place in the chromium sources,
+// so we can safely use it to dispose of ourselves here
+// (the default implementation of this function just contains a "delete this")
+void BrowserAccessibilityQt::NativeReleaseReference()
+{
+ // delete this
+ QAccessible::Id interfaceId = QAccessible::uniqueId(this);
+ QAccessible::deleteAccessibleInterface(interfaceId);
+}
+
+} // namespace content
diff --git a/src/core/browser_accessibility_qt.h b/src/core/browser_accessibility_qt.h
new file mode 100644
index 000000000..839fedeb8
--- /dev/null
+++ b/src/core/browser_accessibility_qt.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef BROWSER_ACCESSIBILITY_QT_H
+#define BROWSER_ACCESSIBILITY_QT_H
+
+#include <QtGui/qaccessible.h>
+#include "content/browser/accessibility/browser_accessibility.h"
+
+namespace content {
+
+class BrowserAccessibilityQt
+ : public BrowserAccessibility
+ , public QAccessibleInterface
+{
+public:
+ BrowserAccessibilityQt();
+
+ // QAccessibleInterface
+ virtual bool isValid() const Q_DECL_OVERRIDE;
+ virtual QObject *object() const Q_DECL_OVERRIDE;
+ virtual QAccessibleInterface *childAt(int x, int y) const Q_DECL_OVERRIDE;
+
+ // navigation, hierarchy
+ virtual QAccessibleInterface *parent() const Q_DECL_OVERRIDE;
+ virtual QAccessibleInterface *child(int index) const Q_DECL_OVERRIDE;
+ virtual int childCount() const Q_DECL_OVERRIDE;
+ virtual int indexOfChild(const QAccessibleInterface *) const Q_DECL_OVERRIDE;
+
+ // properties and state
+ virtual QString text(QAccessible::Text t) const Q_DECL_OVERRIDE;
+ virtual void setText(QAccessible::Text t, const QString &text) Q_DECL_OVERRIDE;
+ virtual QRect rect() const Q_DECL_OVERRIDE;
+ virtual QAccessible::Role role() const Q_DECL_OVERRIDE;
+ virtual QAccessible::State state() const Q_DECL_OVERRIDE;
+
+ // BrowserAccessible
+ void NativeAddReference() Q_DECL_OVERRIDE;
+ void NativeReleaseReference() Q_DECL_OVERRIDE;
+ bool IsNative() const Q_DECL_OVERRIDE { return true; }
+};
+
+}
+
+#endif
diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro
index cab838849..d86811ce3 100644
--- a/src/core/core_gyp_generator.pro
+++ b/src/core/core_gyp_generator.pro
@@ -36,6 +36,9 @@ RESOURCES += devtools.qrc
INCLUDEPATH += $$[QT_INSTALL_HEADERS] $$PWD
SOURCES = \
+ browser_accessibility_delegate_qt.cpp \
+ browser_accessibility_manager_qt.cpp \
+ browser_accessibility_qt.cpp \
browser_context_qt.cpp \
chromium_gpu_helper.cpp \
chromium_overrides.cpp \
@@ -77,6 +80,8 @@ SOURCES = \
HEADERS = \
+ browser_accessibility_manager_qt.h \
+ browser_accessibility_qt.h \
browser_context_qt.h \
chromium_overrides.h \
clipboard_qt.h \
diff --git a/src/core/qtwebengine_extras.gypi b/src/core/qtwebengine_extras.gypi
index fe035a0b1..c0f4ce231 100644
--- a/src/core/qtwebengine_extras.gypi
+++ b/src/core/qtwebengine_extras.gypi
@@ -33,6 +33,15 @@
['exclude', 'browser/renderer_host/render_widget_host_view_mac\\.(mm|h)$'],
['exclude', 'browser/renderer_host/render_widget_host_view_win\\.(cc|h)$'],
['exclude', 'common/font_list_pango\\.cc$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_android\\.(cc|h)$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_cocoa\\.(cc|h)$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_gtk\\.(cc|h)$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_mac\\.(cc|h)$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_win\\.(cc|h)$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_manager_android\\.(cc|h)$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_manager_gtk\\.(cc|h)$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_manager_mac\\.(cc|h)$'],
+ ['exclude', 'browser/accessibility/browser_accessibility_manager_win\\.(cc|h)$'],
],
'defines': [
'TOOLKIT_QT',
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 386783f88..21de24d45 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -41,20 +41,25 @@
#include "render_widget_host_view_qt.h"
+#include "browser_accessibility_manager_qt.h"
+#include "browser_accessibility_qt.h"
#include "chromium_overrides.h"
#include "delegated_frame_node.h"
#include "render_widget_host_view_qt_delegate.h"
#include "type_conversion.h"
+#include "web_contents_adapter.h"
#include "web_contents_adapter_client.h"
#include "web_event_factory.h"
#include "base/command_line.h"
#include "cc/output/compositor_frame_ack.h"
+#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/ui_events_helper.h"
-#include "content/public/common/content_switches.h"
#include "content/common/gpu/gpu_messages.h"
#include "content/common/view_messages.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/browser/browser_accessibility_state.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/WebKit/public/platform/WebColor.h"
#include "third_party/WebKit/public/platform/WebCursorInfo.h"
@@ -76,6 +81,7 @@
#include <QVariant>
#include <QWheelEvent>
#include <QWindow>
+#include <QtGui/qaccessible.h>
static inline ui::EventType toUIEventType(Qt::TouchPointState state)
{
@@ -258,9 +264,20 @@ gfx::NativeViewId RenderWidgetHostViewQt::GetNativeViewId() const
gfx::NativeViewAccessible RenderWidgetHostViewQt::GetNativeViewAccessible()
{
- // We are not using accessibility features at this point.
- QT_NOT_USED
- return NULL;
+ CreateBrowserAccessibilityManagerIfNeeded();
+ return GetBrowserAccessibilityManager()->GetRoot();
+}
+
+void RenderWidgetHostViewQt::CreateBrowserAccessibilityManagerIfNeeded()
+{
+ if (GetBrowserAccessibilityManager())
+ return;
+
+ m_accessibilityDelegate = scoped_ptr<BrowserAccessibilityDelegateQt>(new BrowserAccessibilityDelegateQt(this));
+ SetBrowserAccessibilityManager(new content::BrowserAccessibilityManagerQt(
+ m_adapterClient->accessibilityParentObject(),
+ content::BrowserAccessibilityManagerQt::GetEmptyDocument(),
+ m_accessibilityDelegate.get()));
}
// Set focus to the associated View component.
@@ -624,10 +641,10 @@ void RenderWidgetHostViewQt::SetHasHorizontalScrollbar(bool) { }
void RenderWidgetHostViewQt::SetScrollOffsetPinning(bool, bool) { }
-void RenderWidgetHostViewQt::OnAccessibilityEvents(const std::vector<AccessibilityHostMsg_EventParams>&)
+void RenderWidgetHostViewQt::OnAccessibilityEvents(const std::vector<AccessibilityHostMsg_EventParams> &notifications)
{
- // We are not using accessibility features at this point.
- QT_NOT_USED
+ CreateBrowserAccessibilityManagerIfNeeded();
+ GetBrowserAccessibilityManager()->OnAccessibilityEvents(notifications);
}
void RenderWidgetHostViewQt::SelectionChanged(const base::string16 &text, size_t offset, const gfx::Range &range)
@@ -1022,3 +1039,16 @@ void RenderWidgetHostViewQt::handleFocusEvent(QFocusEvent *ev)
ev->accept();
}
}
+
+QAccessibleInterface *RenderWidgetHostViewQt::GetQtAccessible()
+{
+ // Assume we have a screen reader doing stuff
+ CreateBrowserAccessibilityManagerIfNeeded();
+ content::BrowserAccessibilityState::GetInstance()->OnScreenReaderDetected();
+ content::BrowserAccessibilityStateImpl::GetInstance()->SetAccessibilityMode(
+ AccessibilityModeComplete);
+
+ content::BrowserAccessibility *acc = GetBrowserAccessibilityManager()->GetRoot();
+ content::BrowserAccessibilityQt *accQt = static_cast<content::BrowserAccessibilityQt*>(acc);
+ return accQt;
+}
diff --git a/src/core/render_widget_host_view_qt.h b/src/core/render_widget_host_view_qt.h
index ff73b5734..66cbef501 100644
--- a/src/core/render_widget_host_view_qt.h
+++ b/src/core/render_widget_host_view_qt.h
@@ -44,9 +44,11 @@
#include "render_widget_host_view_qt_delegate.h"
+#include "browser_accessibility_delegate_qt.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "cc/resources/transferable_resource.h"
+#include "content/browser/accessibility/browser_accessibility_manager.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
#include "delegated_frame_node.h"
#include "ui/events/gestures/gesture_recognizer.h"
@@ -65,6 +67,7 @@ class QMouseEvent;
class QTouchEvent;
class QVariant;
class QWheelEvent;
+class QAccessibleInterface;
QT_END_NAMESPACE
class WebContentsAdapterClient;
@@ -207,6 +210,8 @@ public:
#endif // defined(USE_AURA)
#endif // defined(OS_WIN)
+ QAccessibleInterface *GetQtAccessible();
+
private:
void sendDelegatedFrameAck();
void Paint(const gfx::Rect& damage_rect);
@@ -217,6 +222,7 @@ private:
float dpiScale() const;
bool IsPopup() const;
+ void CreateBrowserAccessibilityManagerIfNeeded();
content::RenderWidgetHostImpl *m_host;
scoped_ptr<ui::GestureRecognizer> m_gestureRecognizer;
@@ -224,6 +230,7 @@ private:
QMap<int, int> m_touchIdMapping;
blink::WebTouchEvent m_accumTouchEvent;
scoped_ptr<RenderWidgetHostViewQtDelegate> m_delegate;
+ scoped_ptr<BrowserAccessibilityDelegateQt> m_accessibilityDelegate;
QExplicitlySharedDataPointer<DelegatedFrameNodeData> m_frameNodeData;
cc::ReturnedResourceArray m_resourcesToRelease;
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 8b0aafe21..235534f18 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -74,6 +74,7 @@
#include <QStringList>
#include <QStyleHints>
#include <QVariant>
+#include <QtGui/qaccessible.h>
static const int kTestWindowWidth = 800;
static const int kTestWindowHeight = 600;
@@ -609,6 +610,13 @@ void WebContentsAdapter::enableInspector(bool enable)
ContentBrowserClientQt::Get()->enableInspector(enable);
}
+QAccessibleInterface *WebContentsAdapter::browserAccessible()
+{
+ Q_D(const WebContentsAdapter);
+ RenderWidgetHostViewQt *rwhv = static_cast<RenderWidgetHostViewQt*>(d->webContents->GetRenderWidgetHostView());
+ return rwhv ? rwhv->GetQtAccessible() : Q_NULLPTR;
+}
+
void WebContentsAdapter::runJavaScript(const QString &javaScript)
{
Q_D(WebContentsAdapter);
diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h
index d327de048..8e665ee2c 100644
--- a/src/core/web_contents_adapter.h
+++ b/src/core/web_contents_adapter.h
@@ -54,6 +54,8 @@ class WebContents;
}
class WebContentsAdapterPrivate;
+QT_FORWARD_DECLARE_CLASS(QAccessibleInterface);
+
class QWEBENGINE_EXPORT WebContentsAdapter : public QSharedData {
public:
static QExplicitlySharedDataPointer<WebContentsAdapter> createFromSerializedNavigationHistory(QDataStream &input, WebContentsAdapterClient *adapterClient);
@@ -109,6 +111,7 @@ public:
void grantMediaAccessPermission(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags flags);
void dpiScaleChanged();
+ QAccessibleInterface *browserAccessible();
private:
Q_DISABLE_COPY(WebContentsAdapter);
diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h
index 686b82379..b7836e4ca 100644
--- a/src/core/web_contents_adapter_client.h
+++ b/src/core/web_contents_adapter_client.h
@@ -152,6 +152,9 @@ public:
virtual void didFetchDocumentInnerText(quint64 requestId, const QString& result) = 0;
virtual void didFindText(quint64 requestId, int matchCount) = 0;
virtual void passOnFocus(bool reverse) = 0;
+ // returns the last QObject (QWidget/QQuickItem) based object in the accessibility
+ // hierarchy before going into the BrowserAccessibility tree
+ virtual QObject *accessibilityParentObject() = 0;
virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) = 0;
virtual void authenticationRequired(const QUrl &requestUrl, const QString &realm, bool isProxy, const QString &challengingHost, QString *outUser, QString *outPassword) = 0;
virtual void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) = 0;
diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index ce41db7c1..897a592eb 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -363,6 +363,12 @@ void QQuickWebEngineViewPrivate::runMediaAccessPermissionRequest(const QUrl &sec
Q_EMIT e->featurePermissionRequested(securityOrigin, feature);
}
+QObject *QQuickWebEngineViewPrivate::accessibilityParentObject()
+{
+ Q_Q(QQuickWebEngineView);
+ return q;
+}
+
void QQuickWebEngineViewPrivate::setDevicePixelRatio(qreal devicePixelRatio)
{
this->devicePixelRatio = devicePixelRatio;
diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h
index 6813b8a0e..3bae23cea 100644
--- a/src/webengine/api/qquickwebengineview_p_p.h
+++ b/src/webengine/api/qquickwebengineview_p_p.h
@@ -167,6 +167,7 @@ public:
virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) Q_DECL_OVERRIDE;
virtual void authenticationRequired(const QUrl&, const QString&, bool, const QString&, QString*, QString*) Q_DECL_OVERRIDE { }
virtual void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) Q_DECL_OVERRIDE;
+ virtual QObject *accessibilityParentObject() Q_DECL_OVERRIDE;
void setDevicePixelRatio(qreal);
void adoptWebContents(WebContentsAdapter *webContents);
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index bbdcb25df..8e87c1cf7 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -333,6 +333,11 @@ void QWebEnginePagePrivate::runMediaAccessPermissionRequest(const QUrl &security
Q_EMIT q->featurePermissionRequested(securityOrigin, requestedFeature);
}
+QObject *QWebEnginePagePrivate::accessibilityParentObject()
+{
+ return view;
+}
+
void QWebEnginePagePrivate::updateAction(QWebEnginePage::WebAction action) const
{
#ifdef QT_NO_ACTION
diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h
index 894159366..a717b6ba8 100644
--- a/src/webenginewidgets/api/qwebenginepage_p.h
+++ b/src/webenginewidgets/api/qwebenginepage_p.h
@@ -138,6 +138,7 @@ public:
virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) Q_DECL_OVERRIDE;
virtual void authenticationRequired(const QUrl &requestUrl, const QString &realm, bool isProxy, const QString &challengingHost, QString *outUser, QString *outPassword) Q_DECL_OVERRIDE;
virtual void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) Q_DECL_OVERRIDE;
+ virtual QObject *accessibilityParentObject() Q_DECL_OVERRIDE;
void updateAction(QWebEnginePage::WebAction) const;
void updateNavigationActions();