Bug 27085 - [Gtk] Incorrect rendering of list
Summary: [Gtk] Incorrect rendering of list
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Accessibility (show other bugs)
Version: 528+ (Nightly build)
Hardware: PC All
: P2 Normal
Assignee: Nobody
URL:
Keywords: Gtk
Depends on:
Blocks: 25531
  Show dependency treegraph
 
Reported: 2009-07-08 11:51 PDT by Joanmarie Diggs
Modified: 2009-10-26 04:35 PDT (History)
6 users (show)

See Also:


Attachments
test case (426 bytes, text/html)
2009-07-08 11:51 PDT, Joanmarie Diggs
no flags Details
add way for platforms to indicate an object should not be ignored (7.39 KB, patch)
2009-10-24 21:20 PDT, Joanmarie Diggs
xan.lopez: review-
Details | Formatted Diff | Diff
Revised so that !AX case returns false (7.38 KB, patch)
2009-10-26 01:27 PDT, Joanmarie Diggs
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Joanmarie Diggs 2009-07-08 11:51:16 PDT
Created attachment 32464 [details]
test case

If you examine the attached test case in Accerciser, you will see that the list is represented as having seven children; it should only have five. The extra children are the paragraphs which should be children of the second list item, but which are each exposed as individual list items/children of the list.
Comment 1 Joanmarie Diggs 2009-10-22 18:29:23 PDT
Xan, I could use a consult. :-)

What is causing the paragraphs to be exposed as ROLE_LIST_ITEM turns out to the fix for bug 25414. Making the change below solves part of the problem, namely it causes the paragraphs to be exposed as role paragraph (good) but they are still children of the list rather than of the list item (bad).

I'll poke around to see what it would take to solve the node/hierarchy issue. BUT, I assume there was a reason you specifically called parentObjectUnignored() instead of parentObject(). What was the reason? Thanks!

--- a/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
+++ b/WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp
@@ -343,7 +343,7 @@ static AtkRole webkit_accessible_get_role(AtkObject* object)
 
     // WebCore does not seem to have a role for list items
     if (AXObject->isGroup()) {
-        AccessibilityObject* parent = AXObject->parentObjectUnignored();
+        AccessibilityObject* parent = AXObject->parentObject();
         if (parent && parent->isList())
             return ATK_ROLE_LIST_ITEM;
     }
Comment 2 Joanmarie Diggs 2009-10-24 21:20:59 PDT
Created attachment 41812 [details]
add way for platforms to indicate an object should not be ignored

Okay, after some more digging, what's going on appears to be this: Given a list item whose content consists entirely of other HTML elements (e.g. paragraphs), the children of the list item with the content are not ignored; the list item itself, however, is ignored. As a result, we lose the hierarchy we expect, namely:

-> list
   -> list item
   -> list item
      -> paragraph
      -> paragraph
      -> paragraph
   -> list item
   -> list item
   -> list item

The way to solve this problem is to not ignore the list item. :-)

Operating under the assumption that the other platforms somehow don't have this issue, this patch gives platforms the opportunity to indicate that an object should not be ignored before accessibilityIsIgnored() does its thang.

As a related aside, what might be really cool is an accessibility-specific utility along the lines of DumpRenderTree. It would dump out the accessible tree for the platform specified. That way, before going with a platform-specific solution to a problem, one could do a quick sanity check: If it turns out all platforms have the problem, it would be good to solve it across the board.

Anyhoo, review appreciated. Thanks!
Comment 3 Jan Alonzo 2009-10-24 22:57:06 PDT
> The way to solve this problem is to not ignore the list item. :-)

I filed https://bugs.webkit.org/show_bug.cgi?id=25888 a while ago that we don't have a ListItem role in WebCore.
> 
> Operating under the assumption that the other platforms somehow don't have this
> issue, this patch gives platforms the opportunity to indicate that an object
> should not be ignored before accessibilityIsIgnored() does its thang.
> 
> As a related aside, what might be really cool is an accessibility-specific
> utility along the lines of DumpRenderTree. It would dump out the accessible
> tree for the platform specified. That way, before going with a
> platform-specific solution to a problem, one could do a quick sanity check: If
> it turns out all platforms have the problem, it would be good to solve it
> across the board.

There are accessibility tests in LayoutTests/accessibility which we can add tests into (if it's not yet covered).
Comment 4 Jan Alonzo 2009-10-24 23:02:46 PDT
Hi Chris! Can we please ask your thoughts on this? Thanks.
Comment 5 chris fleizach 2009-10-24 23:56:28 PDT
(In reply to comment #4)
> Hi Chris! Can we please ask your thoughts on this? Thanks.

It seems like the !HAVE(AX) should return false instead of true

bool accessibilityPlatformIncludesObject() const { return true; }

although, it probably doesn't matter since it won't get executed

-------

I think this is a good idea, and I'd like the same logic to be applied to the Mac side (then our users won't get wrong counts for the number of list items)

I'm on the fence whether this fix should be applied to all branches or not... however I see the future need to make platform specific decisions, so it should probably stay
Comment 6 Xan Lopez 2009-10-26 00:11:21 PDT
Comment on attachment 41812 [details]
add way for platforms to indicate an object should not be ignored

Ah, this patch is very nice, good idea! Can we get a new version with the !AX case returning false as suggested?
Comment 7 Joanmarie Diggs 2009-10-26 01:27:48 PDT
Created attachment 41854 [details]
Revised so that !AX case returns false

(In reply to comment #6)
> (From update of attachment 41812 [details])
> Ah, this patch is very nice, good idea! Can we get a new version with the !AX
> case returning false as suggested?

Attached. Thanks.
Comment 8 Xan Lopez 2009-10-26 04:26:18 PDT
Comment on attachment 41854 [details]
Revised so that !AX case returns false

r=me
Comment 9 WebKit Commit Bot 2009-10-26 04:35:34 PDT
Comment on attachment 41854 [details]
Revised so that !AX case returns false

Clearing flags on attachment: 41854

Committed r50053: <http://trac.webkit.org/changeset/50053>
Comment 10 WebKit Commit Bot 2009-10-26 04:35:40 PDT
All reviewed patches have been landed.  Closing bug.