Hey, [Ed.: This was also sent to accessibility-atspi, but it seems to be stuck in the moderators queue, so I'm sending it here to get some traction. I figure most of you are on both lists anyway] Many applications (browsers mostly at this time) are beginning to consider implementing portions of their GUI in separate processes, but the accessibility of their out-of-process (OOP) controls hasn't really been discussed thus far. One proposed solution would be for every application to develop a custom remoting layer which proxies OOP accessibles to a wrapper in the main process, but it would be silly for every application that wanted to do this to have to roll their own solution. Additionally, such a remoting layer duplicates much of the work that atk-bridge and at-spi-registry.d do. Instead, I propose the addition of two new interfaces -- AtkSocket and AtkPlug -- to Atk, and corresponding Plug and Socket interfaces to org.freedesktop.atspi. Similar to GtkPlug[1] and GtkSocket[2], AtkPlug would become the top-level item of the out-of-process tree, and AtkSocket would reside in the main process, indicating where the accessibles should be attached. In my head, I'm imagining that AtkSocket would be a Filler role, and its children would become the children of the remote AtkPlug-implementing accessible. Of course, all the magic would need to happen in at-spi2 and in atk-adaptor. In particular, atk-adaptor would need a method to provide the bus name of an accessible. This would be used by AtkPlug to "plug it in" to AtkSocket. at-spi2 would then need a way to indicate that the accessibles returned from getChildAtIndex (and the like) come from a different bus than the host application. I've attached a diagram for those who may find it useful, but the diagram doesn't add any new information to the discussion. Before we go off and implement this, I'd like to get any feedback, positive or negative, about the approach. The use case of this would be to allow Firefox to have their plugins provide accessibility information, but also have them out of process. If anyone has any other interesting use cases, I'd love to hear about them. Thanks, -Brad -- [1] http://library.gnome.org/devel/gtk/unstable/GtkPlug.html [2] http://library.gnome.org/devel/gtk/unstable/GtkSocket.html
Attachment:
diagram.jpg
Description: JPEG image