summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/browser_accessibility_qt.cpp54
-rw-r--r--src/core/browser_accessibility_qt.h8
-rw-r--r--tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp39
3 files changed, 99 insertions, 2 deletions
diff --git a/src/core/browser_accessibility_qt.cpp b/src/core/browser_accessibility_qt.cpp
index 7a7895a94..1e478c212 100644
--- a/src/core/browser_accessibility_qt.cpp
+++ b/src/core/browser_accessibility_qt.cpp
@@ -78,6 +78,15 @@ void *BrowserAccessibilityQt::interface_cast(QAccessible::InterfaceType type)
if (IsEditableText())
return static_cast<QAccessibleTextInterface*>(this);
break;
+ case QAccessible::ValueInterface: {
+ QAccessible::Role r = role();
+ if (r == QAccessible::ProgressBar ||
+ r == QAccessible::Slider ||
+ r == QAccessible::ScrollBar ||
+ r == QAccessible::SpinBox)
+ return static_cast<QAccessibleValueInterface*>(this);
+ break;
+ }
default:
break;
}
@@ -271,7 +280,7 @@ QAccessible::Role BrowserAccessibilityQt::role() const
case WebAXRolePresentational:
return QAccessible::NoRole; // FIXME
case WebAXRoleProgressIndicator:
- return QAccessible::NoRole; // FIXME
+ return QAccessible::ProgressBar;
case WebAXRoleRadioButton:
return QAccessible::RadioButton;
case WebAXRoleRadioGroup:
@@ -297,7 +306,7 @@ QAccessible::Role BrowserAccessibilityQt::role() const
case WebAXRoleSliderThumb:
return QAccessible::NoRole; // FIXME
case WebAXRoleSpinButton:
- return QAccessible::NoRole; // FIXME
+ return QAccessible::SpinBox;
case WebAXRoleSpinButtonPart:
return QAccessible::NoRole; // FIXME
case WebAXRoleSplitter:
@@ -506,4 +515,45 @@ void BrowserAccessibilityQt::scrollToSubstring(int startIndex, int endIndex)
manager()->ScrollToMakeVisible(*this, GetLocalBoundsForRange(startIndex, endIndex - startIndex));
}
+QVariant BrowserAccessibilityQt::currentValue() const
+{
+ QVariant result;
+ float value;
+ if (GetFloatAttribute(AccessibilityNodeData::ATTR_VALUE_FOR_RANGE, &value)) {
+ result = (double) value;
+ }
+ return result;
+}
+
+void BrowserAccessibilityQt::setCurrentValue(const QVariant &value)
+{
+ // not yet implemented anywhere in blink
+ QT_NOT_YET_IMPLEMENTED
+}
+
+QVariant BrowserAccessibilityQt::maximumValue() const
+{
+ QVariant result;
+ float value;
+ if (GetFloatAttribute(AccessibilityNodeData::ATTR_MAX_VALUE_FOR_RANGE, &value)) {
+ result = (double) value;
+ }
+ return result;
+}
+
+QVariant BrowserAccessibilityQt::minimumValue() const
+{
+ QVariant result;
+ float value;
+ if (GetFloatAttribute(AccessibilityNodeData::ATTR_MIN_VALUE_FOR_RANGE, &value)) {
+ result = (double) value;
+ }
+ return result;
+}
+
+QVariant BrowserAccessibilityQt::minimumStepSize() const
+{
+ return QVariant();
+}
+
} // namespace content
diff --git a/src/core/browser_accessibility_qt.h b/src/core/browser_accessibility_qt.h
index cda205bf2..2c85b3349 100644
--- a/src/core/browser_accessibility_qt.h
+++ b/src/core/browser_accessibility_qt.h
@@ -51,6 +51,7 @@ class BrowserAccessibilityQt
: public BrowserAccessibility
, public QAccessibleInterface
, public QAccessibleTextInterface
+ , public QAccessibleValueInterface
{
public:
BrowserAccessibilityQt();
@@ -93,6 +94,13 @@ public:
void setSelection(int selectionIndex, int startOffset, int endOffset) Q_DECL_OVERRIDE;
int characterCount() const Q_DECL_OVERRIDE;
void scrollToSubstring(int startIndex, int endIndex) Q_DECL_OVERRIDE;
+
+ // QAccessibleValueInterface
+ QVariant currentValue() const Q_DECL_OVERRIDE;
+ void setCurrentValue(const QVariant &value) Q_DECL_OVERRIDE;
+ QVariant maximumValue() const Q_DECL_OVERRIDE;
+ QVariant minimumValue() const Q_DECL_OVERRIDE;
+ QVariant minimumStepSize() const Q_DECL_OVERRIDE;
};
}
diff --git a/tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp b/tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp
index 9bf4c69e2..8d98b06e0 100644
--- a/tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp
+++ b/tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp
@@ -39,6 +39,7 @@ private Q_SLOTS:
void noPage();
void hierarchy();
void text();
+ void value();
};
// This will be called before the first test function is executed.
@@ -161,5 +162,43 @@ void tst_QWebEngineView::text()
QTRY_COMPARE(textInterface->cursorPosition(), 3);
}
+void tst_QWebEngineView::value()
+{
+ QWebEngineView webView;
+ webView.setHtml("<html><body>" \
+ "<div role='slider' aria-valuenow='4' aria-valuemin='1' aria-valuemax='10'></div>" \
+ "<div class='progress' role='progressbar' aria-valuenow='77' aria-valuemin='22' aria-valuemax='99'></div>" \
+ "</body></html>");
+ webView.show();
+ ::waitForSignal(&webView, SIGNAL(loadFinished(bool)));
+
+ QAccessibleInterface *view = QAccessible::queryAccessibleInterface(&webView);
+ QTRY_COMPARE(view->child(0)->childCount(), 2);
+ QAccessibleInterface *document = view->child(0);
+ QCOMPARE(document->childCount(), 2);
+
+ QAccessibleInterface *slider = document->child(0);
+ QCOMPARE(slider->role(), QAccessible::Slider);
+ QCOMPARE(slider->text(QAccessible::Name), QString());
+ QCOMPARE(slider->text(QAccessible::Description), QString());
+ QCOMPARE(slider->text(QAccessible::Value), QString());
+ QAccessibleValueInterface *valueInterface = slider->valueInterface();
+ QVERIFY(valueInterface);
+ QCOMPARE(valueInterface->currentValue().toInt(), 4);
+ QCOMPARE(valueInterface->minimumValue().toInt(), 1);
+ QCOMPARE(valueInterface->maximumValue().toInt(), 10);
+
+ QAccessibleInterface *progressBar = document->child(1);
+ QCOMPARE(progressBar->role(), QAccessible::ProgressBar);
+ QCOMPARE(progressBar->text(QAccessible::Name), QString());
+ QCOMPARE(progressBar->text(QAccessible::Description), QString());
+ QCOMPARE(progressBar->text(QAccessible::Value), QString());
+ QAccessibleValueInterface *progressBarValueInterface = progressBar->valueInterface();
+ QVERIFY(progressBarValueInterface);
+ QCOMPARE(progressBarValueInterface->currentValue().toInt(), 77);
+ QCOMPARE(progressBarValueInterface->minimumValue().toInt(), 22);
+ QCOMPARE(progressBarValueInterface->maximumValue().toInt(), 99);
+}
+
QTEST_MAIN(tst_QWebEngineView)
#include "tst_qwebengineaccessibility.moc"