Bug 1129955 - added support for accessible name changes in AccessFu. r=eeejay

---
 accessible/jsat/EventManager.jsm                   |  8 ++++++++
 accessible/jsat/Presentation.jsm                   | 21 ++++++++++++++++++++
 .../mochitest/jsat/doc_content_integration.html    |  5 +++++
 accessible/tests/mochitest/jsat/jsatcommon.js      |  9 +++++++++
 .../mochitest/jsat/test_content_integration.html   | 23 +++++++++++++++++++---
 5 files changed, 63 insertions(+), 3 deletions(-)
This commit is contained in:
Yura Zenevich 2015-02-05 14:06:53 -05:00
parent 1f68deb5e7
commit c9eb8bea8b
5 changed files with 63 additions and 3 deletions

View File

@ -186,6 +186,14 @@ this.EventManager.prototype = {
}
break;
}
case Events.NAME_CHANGE:
{
let acc = aEvent.accessible;
if (acc === this.contentControl.vc.position) {
this.present(Presentation.nameChanged(acc));
}
break;
}
case Events.SCROLLING_START:
{
this.contentControl.autoMove(aEvent.accessible);

View File

@ -74,6 +74,12 @@ Presenter.prototype = {
*/
selectionChanged: function selectionChanged(aObject) {}, // jshint ignore:line
/**
* Name has changed.
* @param {nsIAccessible} aAccessible the object whose value has changed.
*/
nameChanged: function nameChanged(aAccessible) {}, // jshint ignore: line
/**
* Value has changed.
* @param {nsIAccessible} aAccessible the object whose value has changed.
@ -514,6 +520,17 @@ B2GPresenter.prototype.pivotChanged =
};
};
B2GPresenter.prototype.nameChanged =
function B2GPresenter_nameChanged(aAccessible) {
return {
type: this.type,
details: {
eventType: 'name-change',
data: aAccessible.name
}
};
};
B2GPresenter.prototype.valueChanged =
function B2GPresenter_valueChanged(aAccessible) {
@ -689,6 +706,10 @@ this.Presentation = { // jshint ignore:line
aIsFromUserInput) for each (p in this.presenters)]; // jshint ignore:line
},
nameChanged: function nameChanged(aAccessible) {
return [ p.nameChanged(aAccessible) for (p of this.presenters) ]; // jshint ignore:line
},
valueChanged: function valueChanged(aAccessible) {
return [ p.valueChanged(aAccessible) for (p of this.presenters) ]; // jshint ignore:line
},

View File

@ -40,6 +40,10 @@
document.getElementById('iframe').setAttribute('aria-hidden', true);
}
function renameFruit() {
document.getElementById('fruit').setAttribute('aria-label', 'banana');
}
</script>
<style>
#windows {
@ -84,5 +88,6 @@
<div id="appframe"></div>
</div>
<button id="home">Home</button>
<button id="fruit" aria-label="apple"></button>
</body>
</html>

View File

@ -617,6 +617,15 @@ function ExpectedCheckAction(aChecked, aOptions) {
ExpectedCheckAction.prototype = Object.create(ExpectedPresent.prototype);
function ExpectedNameChange(aName, aOptions) {
ExpectedPresent.call(this, {
eventType: 'name-change',
data: aName
}, null, aOptions);
}
ExpectedNameChange.prototype = Object.create(ExpectedPresent.prototype);
function ExpectedValueChange(aValue, aOptions) {
ExpectedPresent.call(this, {
eventType: 'value-change',

View File

@ -56,8 +56,12 @@
[ContentMessages.moveOrAdjustUp(), new ExpectedValueChange('6')],
[ContentMessages.simpleMoveNext,
new ExpectedCursorChange(['Home', {'string': 'pushbutton'}])],
[ContentMessages.simpleMoveNext,
new ExpectedCursorChange(['apple', {'string': 'pushbutton'}])],
// Simple traversal backward
[ContentMessages.simpleMovePrevious,
new ExpectedCursorChange(['Home', {'string': 'pushbutton'}])],
[ContentMessages.simpleMovePrevious,
new ExpectedCursorChange(['much range', '6', {'string': 'slider'}, 'such app'])],
[ContentMessages.moveOrAdjustDown(), new ExpectedValueChange('5')],
@ -88,7 +92,7 @@
// Move from an inner frame to the last element in the parent doc
[ContentMessages.simpleMoveLast,
new ExpectedCursorChange(
['Home', {'string': 'pushbutton'}], { b2g_todo: true })],
['apple', {'string': 'pushbutton'}], { b2g_todo: true })],
[ContentMessages.clearCursor, 'AccessFu:CursorCleared'],
@ -136,6 +140,17 @@
// Reset cursors
[ContentMessages.clearCursor, 'AccessFu:CursorCleared'],
// Current virtual cursor's position's name changes
[ContentMessages.simpleMoveNext,
new ExpectedCursorChange(['Phone status bar', 'Traversal Rule test document'])],
[ContentMessages.focusSelector('button#fruit', false),
new ExpectedCursorChange(['apple', {'string': 'pushbutton'}])],
[doc.defaultView.renameFruit, new ExpectedNameChange('banana')],
// Blur button and reset cursor
[ContentMessages.focusSelector('button#fruit', true), null],
[ContentMessages.clearCursor, 'AccessFu:CursorCleared'],
// Move cursor with focus in outside document
[ContentMessages.simpleMoveNext,
new ExpectedCursorChange(['Phone status bar', 'Traversal Rule test document'])],
@ -207,14 +222,14 @@
// Open dialog in outer doc, while cursor is also in outer doc
[ContentMessages.simpleMoveLast,
new ExpectedCursorChange(['Home', {'string': 'pushbutton'}])],
new ExpectedCursorChange(['banana', {'string': 'pushbutton'}])],
[doc.defaultView.showAlert,
new ExpectedCursorChange(['This is an alert!',
{'string': 'headingLevel', 'args': [1]},
{'string': 'dialog'}])],
[doc.defaultView.hideAlert,
new ExpectedCursorChange(['Home', {'string': 'pushbutton'}])],
new ExpectedCursorChange(['banana', {'string': 'pushbutton'}])],
[ContentMessages.clearCursor, 'AccessFu:CursorCleared'],
@ -253,6 +268,8 @@
doc.querySelector('button#home').focus();
}, new ExpectedCursorChange(['Home', {'string': 'pushbutton'},
'Traversal Rule test document'])],
[ContentMessages.simpleMoveNext,
new ExpectedCursorChange(['banana', {'string': 'pushbutton'}])]
[ContentMessages.simpleMoveNext, new ExpectedNoMove()]
]);