diff options
-rw-r--r-- | src/core/browser_accessibility_qt.cpp | 54 | ||||
-rw-r--r-- | src/core/browser_accessibility_qt.h | 8 | ||||
-rw-r--r-- | tests/auto/widgets/qwebengineaccessibility/tst_qwebengineaccessibility.cpp | 39 |
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" |