Thursday, March 29, 2012

New contributors, welcome on board!

I remember that couple years ago I answered some Mozilla questionnaire and one of questions was "how many new contributors were involved into your project this year". That time I answered "none". Now I can say times were changed. Mozilla started the active engagement work and of course it brought a positive effect to Mozilla accessibility story.

I was the first one from accessibility team who volunteered to find good first bugs for new contributors and do mentoring. Now everyone from accessibility team joined. And I can say you why.
  • It's really fun because you talk to new people who is passionate about open web, accessibility and Mozilla.
  • You acquire new experience working closely with contributors having different styles and another way of thinking.
  • New contributors do amazing work! Over the past three months about 150 bugs were fixed in accessibility module, over 30 bugs were fixed by new contributors.
As you can see results are very exiting.

Ok. What if you think Mozilla is cool or if you are passionate about accessibility. Then it's time to join!

If you are a hacker then you can start hacking on Firefox accessibility easily. Here are simple steps:
Well, if you want to try something else outside the accessibility then there's a nice tool to find mentored bugs. Or if you are unsure about code hacking this time then check out how else you can get involved.

Interested? Do you want to change the web? Then welcome on board! It's really fun!

Thursday, March 22, 2012

Firefox 13 for AT developers

Several days ago Firefox 13 entered into aurora channel. No active development on it anymore so it's time to give it a try.

Firefox 13 looks much more interesting from AT perspective than Firefox 12. Let's run through the changes.

HTML

We implemented the canvas fallback content accessibility.

Table data vs layout algorithm was enriched by extending the list of legitimate data table structures. So if @headers, @scope and @abbr attributes are specified on HTML table cell or the table cell contains HTML abbr element as a single child element then the table is treated as data table. Thanks to our new contributor Mark Capella who implemented this.

ARIA

As you probably know that ARIA doesn't provide a way to expose accessible actions on ARIA widgets and therefore Firefox makes a guess about actions depending on ARIA role. This release got a fix for role="button" which is exposed with press action now.

We dropped ARIA role="label" support which was removed from the spec.

ARIA role="listitem" doesn't longer support aria-selected and aria-checked. ARIA role="combobox" doesn't allow aria-valuemin/aria-valuemax attributes that were maintained by mistake I believe over certain period. 

Text attributes

In Firefox 13 the font-family text attribute represents the actual used font. Previously the value was exactly the same what the user specified by CSS font-family property. Note, the range still might be not correct on case by case basis, for example, when font-family is changed within a single text node.

New text-underline-color and text-line-through-color text attributes were implemented. Check out IAccessible2 spec for details.

The text-position text attribute is restricted to spec allowed values: baseline, super and sub. Other enum values of CSS vertical-align used to expose this text attribute are ignored.

Object attributes

Now we expose D2D object attribute on Windows. If hardware acceleration is turned on then you can see D2D:true object attribute on application accessible.

We expose margin-left/right/top/bottom object attributes. Thanks to Mark Capella who volunteered to fix this issue.

Work in progress and randoms

Got more progress on OS X accessibility. Probably not a giant step but no doubts we moving forward. Not a part of default build still.

We addressed few issues with text interface like wrong behavior of caretOffset. We fixed some regressions in hit testing and accessible coordinates for zoomed pages. Fixed a major issue when we missed parts of accessible tree under certain circumstances. The patch was back ported to Firefox 12.

On ATK the application accessible object name is a real application name. Prior this fix it was application brand name. To make things clear we expose now 'Firefox' not 'Nightly', for example, in case of nightly Firefox build. That was done because ATK doesn't have an option to expose application name the way as IAccessible2 does and AT had hard times to figure out that the running nightly Firefox is Firefox actually.

Virtual cursor

Last but not least. At XPCOM level we introduced traversal API and virtual cursor support. That's a major step on the way to make screen readers running in the browser. Now you can manage the virtual cursor from JS. This is pure API thing, i.e. the virtual cursor doesn't have any visual presentation so as Firefox add-on developer you should take care about this. This work was influenced by Firefox accessibility on Android. Anyway this item deserves own post so no many details here.

Thursday, March 1, 2012

Windows 8 Narrator on the web

I should notice I'm not a screen reader user and therefore my front-end observations might be not complete or not accurate. Please correct me if I say something wrong.

Windows 8 beta is out. I saw a bunch of posts saying that Microsoft improved accessibility support, in particular that Narrator was greatly refined over previous versions including outstanding performance in IE. So I wanted to play with Narrator and see how it works in Firefox.

The background of the interest is sort of pragmatic. I'm curious whether the market share of screen readers can be shifted after Windows 8 release. The rationally is simple. If some OS provides a set of built-in applications then the user gets all-in-one solution. And if those applications are good enough then many users don't need anything else. So I wasn't going to do any truth worth research but I wanted to see myself how the things look.

On Windows Mozilla bets on IAccessible2, an open standard developed by number of companies including both AT client vendors (screen readers, screen magnifiers etc) and AT server vendors. I don't think this is going to change but if Firefox wasn't nice on Narrator and if Narrator takes a certain percent of the market share then we at Mozilla can't leave this unaddressed.

This time I didn't pay an attention to touch-based accessibility features despite this is definitely a crucial part for mobile web. But this is certainly big area deserving own topic. I focused on how Narrator is doing on the web in classical desktop case.

Narrator

The first noticeable thing is Narrator highlights traversed objects similar to what Voice Over does. This should be a neat feature for teaching and training. I liked the help dialog to see command shortcuts which is good for newbies. Another interesting feature the Narrator allows to bring a dialog containing the list of available actions on the current object and the user can pick up the one to invoke.

Narrator is fast, at least I didn't noticed any lags when I navigated the web. Moreover I've got an impression that sometimes it's faster than NVDA (both on IE and Firefox).

It provides hierarchical virtual cursor: arrow keys allows you to move into container, navigate through siblings within a container and move outside a container. It seems that the implementation is quite plain, it just moves the virtual cursor through accessible tree. You may consider this as a benefit since often this allows you to skip easily a large portions of the page. However taking into account that containers aren't provided by any good description then this is rather useless feature, at least until the user learns the hierarchy for each web site he visits. To Narrator credit I must say it announces the amount of items within certain containers.

On the other hand the web pages and especially web applications have quite complicated trees and that makes navigation not trivial. I'm not experienced user but I feel like NVDA approach is nicer. Narrator approach sounded for me like it's more suitable for tree inspection for debugging proposes rather than for document navigation in the wild.

I looked how Narrator goes with some applications like GMail. I was able to navigate the whole GMail, however sometimes the virtual cursor reached a certain point and didn't move further. I was forced to use tab to skip this place. Also I wasn't able to locate some menus of menu buttons. I think this is because these menus weren't in hierarchy of the button. So you might want to blame Gmail.

Narrator allows to navigate the text, provides commands to traverse the page by paragraphs and supports table navigation but I didn't make it to do more complicated structural navigation like navigation by headings, links etc. It doesn't sound like Narrator has it.

MSAA / UIA / IAccessible2

Windows 8 makes some work to map MSAA to UIA and that allows Narrator to work with MSAA applications. That makes Firefox accessible in principle. For example, you can navigate the web pages and do basic interaction with control elements like open a link, click a button etc. But MSAA accessibility is quite restricted.

Narrator allows the user to navigate by paragraphs, lines, words and characters. It provides some support of text attributes. None of these features work in Firefox. When the document is loaded then Narrator starts reading it. Again not in Firefox.

In summary Firefox doesn't look cool in Narrator. It's sort of expected because Firefox doesn't implement UIA.

I didn't really believe that Microsoft will bridge IAccessible2 to UIA but I hoped. That would allow a number of applications like Eclipse, Open Office or Firefox to work great for Narrator users. Sometimes dreams may not come true.