Closed
Bug 386235
Opened 17 years ago
Closed 17 years ago
the <link> tag for stylesheets can cause text in document frame to be inaccessible.
Categories
(Core :: Disability Access APIs, defect)
Tracking
()
RESOLVED
FIXED
People
(Reporter: jdiggs, Assigned: ginnchen+exoracle)
References
(Blocks 2 open bugs)
Details
(Keywords: access)
Attachments
(3 files, 4 obsolete files)
(deleted),
text/html
|
Details | |
(deleted),
patch
|
aaronlev
:
review+
|
Details | Diff | Splinter Review |
(deleted),
patch
|
damons
:
approval1.9+
|
Details | Diff | Splinter Review |
Steps to reproduce:
1. View the attached test case in Firefox
2. Use Accerciser's Interface Viewer to examine the text for the document_frame
Expected results: The body text would be displayed
Actual results: There is no text associated with the document_frame
3. Edit the attached test case making any change to the <link> tag for the style sheet (e.g. insert a character within the href="", add a title, delete the entire thing, whatever)
4. Repeat steps 1-2
Expected results: The body text would be displayed
Actual results: The body text is displayed
Other comments: For an actual case, use Accerciser to examine items for sale on craigslist. The document frame has no text associated with it.
Comment 1•17 years ago
|
||
I wonder, should the sevarity or priority on this one be bumped up as it is loss of functionality? It could almost be called data loss as well because the screen reader user can't at all get to this information.
similar problem of the EditableText interface, QI to Text interface fails when we create atkobject for DocAccessible.
But when the page is finally loaded, QI to Text interface is OK.
We need to recreate atkobject when interfaces changed.
We can ShutdownATKObject when nsDocAccessibleWrap::InvalidateChildren is called.
It seems it's too often, we should only recreate atkobject on interface changes.
Or maybe we can make atkobject of nsDocAccessibleWrap always have AtkHypertext and AtkText interface.
[19:40] <aaronlev> a hypertext with only text children does not support accessiblehypertext
[19:41] <aaronlev> but it could get other children inserted
So not only nsDocAccessible has this problem, right?
Comment 5•17 years ago
|
||
Right, any nsHyperTextAccessible can have this problem.
In fact, we should look at all of the "Smart QI" implementation where we implement our own custom QueryInterface() method.
Always give text and hypertext interface to atkobject of nsHyperTextAccessible.
I'll leave editable interface issue to another bug.
It's more complicated
Assignee: aaronleventhal → ginn.chen
Status: NEW → ASSIGNED
Attachment #273943 -
Flags: review?(surkov.alexander)
Comment 7•17 years ago
|
||
I think it's not right to expose all possible interfaces. Our feature is list of supported interfaces may be changed. I think we should watch if interface is changed then recreate atk object. Otherwise will AT be confused if we say object supports interfaces that it doens't support actually? Also the problem is wider than nsHyperTextAccessible issue because, for example, we won't expose nsIAccessibleValue methods if corresponded ARIA attributes setted dynamically.
Well, nsIAccessibleValue is another interface we should take care.
From the discussion with Aaron and Willie, I think it's good to not recreate atkobject for text and hypertext interfaces.
See Bug 371394 #c47 #c48 #c52
Comment 9•17 years ago
|
||
Comment on attachment 273943 [details] [diff] [review]
patch
(In reply to comment #8)
> From the discussion with Aaron and Willie, I think it's good to not recreate
> atkobject for text and hypertext interfaces.
>
> See Bug 371394 #c47 #c48 #c52
>
Ok. Though as I said ARIA brings dynamic into accessible objects and if we don't want to expose almost all sham interfaces on accessible objects then we should recreate objects (possibly atk only). In that case I can't see a good reason why we should do an exclusion for hypertext accessible.
I'm not sure in approach. but patch code looks correct, so r=me.
Attachment #273943 -
Flags: review?(surkov.alexander) → review+
Comment 10•17 years ago
|
||
If we're going to do this, I'd rather just change nsHypertextAccessible::QueryInterface() so that it always exposes text/hypertext/editabletext interfaces.
* GetText can be used to see if the item actually has text
* The EDITABLE state can be used to determine if it is editable or not
* getLinks() can be used to see if there are embedded objects
Or, do what Surkov suggests and recreate objects when interface changes. We'd want to do that for IA2 as well, because of rules of COM (the interfaces supported during the lifetime of an object must not change). They might have that rule for marshalling optimizations, but I'm not sure. There's probably an MSDN article about it.
What was Willie's reason for not wanting to recreate the object? Is that a general issue or specific to text and hypertext interface support?
Assignee | ||
Comment 11•17 years ago
|
||
Will, can you answer Aaron's question?
And is Aaron's proposal good for editable text interface?
Assignee | ||
Comment 12•17 years ago
|
||
Aaron, is this what you proposed?
Attachment #274149 -
Flags: review?(aaronleventhal)
Comment 13•17 years ago
|
||
Ginn, if we go this way, we should remove the nsHypertextAccessible::QueryInterface() and replace it with macros NS_IMPL_ISUPPORTS etc.
What do the changes to accessible/src/atk do?
Assignee | ||
Comment 14•17 years ago
|
||
(In reply to comment #13)
> What do the changes to accessible/src/atk do?
>
don't want to check link num in nsAccessibleWrap::CreateMaiInterfaces
no need to recreate atkobject in nsDocAccessibleWrap::SetEditor
remove NS_ASSERTION, because it is supposed to fail
change bad variable naming in nsMaiInterfaceHypertext.cpp
add a missing null check in nsMaiInterfaceText.cpp
Comment 15•17 years ago
|
||
So, this approach could be ok.. But I wonder why Will doesn't want to destroy and recreate the object when the interfaces change?
Does it save perf if something doesn't QI to HyperText? that way you don't need to check an extra cross process call for the number of links.
Similar for text. The QI to the Text interface fails, so wouldn't Orca save an extra cross-process call to getText to find out there isn't any?
Assignee | ||
Comment 16•17 years ago
|
||
change to marco NS_IMPL_QUERY_
Attachment #274149 -
Attachment is obsolete: true
Attachment #274157 -
Flags: review?(aaronleventhal)
Attachment #274149 -
Flags: review?(aaronleventhal)
Comment 17•17 years ago
|
||
Orca cares about the world in more than just the snapshot sense -- we like to know where the user came from and where they went to over time. This means keeping some consistency in the objects. Trashing and recreating the accessible peer for the same object over and over can make this difficult.
Comment 18•17 years ago
|
||
> If we're going to do this, I'd rather just change
> nsHypertextAccessible::QueryInterface() so that it always exposes
> text/hypertext/editabletext interfaces.
This seems reasonable to me. Thanks!
Comment 19•17 years ago
|
||
Ginn, can you make sure of the following?
1. Check any place we QI to nsIAccessibleText/HyperText/EditableText and make sure we're not using that as a test to see what the thing is?
2. Check all nsIAccessibleText method calls and make sure they do something sane when there are no children to support it?
3. Check all nsIAccessibleHyperText calls and make sure they do the right thing, e.g. return 0 links etc.
4. Check all nsIAccessibleEditableText calls and make sure they don't allow editing when the object is not truly editable. For example, don't allow paste/cut/delete operations.
Comment 20•17 years ago
|
||
5. Make sure we fire state change for EDITABLE when contenteditable changes.
Comment 21•17 years ago
|
||
6. Make sure nsIAccessibleHyperText is *not* supported for plain text widgets like nsHTMLTextfieldAccessible (also watch for XUL and XForms inputs). You might have to explicitly impl QueryInterface for it and return NS_ERROR_NO_INTERFACE for nsIAccessibleHyperText.
Updated•17 years ago
|
Attachment #274157 -
Flags: review?(aaronleventhal) → review-
Assignee | ||
Comment 23•17 years ago
|
||
Changes:
Get xulDoc check back in nsHyperTextAccessible QI.
Also check ROLE for nsIAccessibleHyperText.
atk/AccessibleWrap.cpp
In getChildCountCB and refChildCB
QI to RefPtr<nsHyperTextAccessible> and call IsHyperText() to check if we're real hypertext
state change event for EDITABLE,
we did fire this event in nsDocAccessible::CheckForEditor()
of course it's not enough, but I'd like to leave this issue for separate bug.
There's a lot to do to support contenteditable.
Attachment #273943 -
Attachment is obsolete: true
Attachment #274157 -
Attachment is obsolete: true
Attachment #274744 -
Flags: review?(aaronleventhal)
Comment 24•17 years ago
|
||
For making sure that text fields don't QI to hypertext, another way would be to override QueryInterface on nsHTMLTextfieldAccessible, nsXULTextfieldAccessible and whatever the XForms one is. But, I'm okay with this approach.
One thing is, though, because of bug 372131 it looks like some text leaf nodes will implement these interfaces and they shouldn't. We can fix that the right way in bug 372131, but for Firefox 3 you might just want to check to see if it's ROLE_TEXT_LEAF in the QI, and not support any of these interfaces in that case. I'm not sure, because I haven't looked closely.
Comment 25•17 years ago
|
||
Why does getChildCountCB() need to change? If it's an nsIAccessibleHyperText with 0 links (embedded objects) it should report 0 children anyway.
Similarly, I'm not sure refChildCB() needs to change either. If it's an nsIAccessibleHyperText with 0 links then that does look like it will return nsnull.
My comments about what to check 1-6 were more things to look at -- I wasn't sure.
Can't we actually remove the method IsHyperText() now?
Comment 26•17 years ago
|
||
Comment on attachment 274744 [details] [diff] [review]
patch v3
Clearing request until questions about IsHyperText() answered.
Attachment #274744 -
Flags: review?(aaronleventhal)
Assignee | ||
Comment 27•17 years ago
|
||
I found "the problem" of getChildCountCB() and refChildCB() while doing check 1).
I didn't realize actually they also work well with the new QI.
I changed it back in this version.
I added the check of ROLE_TEXT_LEAF to QI.
For Fx3, I don't think we should override QI for nsHTMLTextfieldAccessible, nsXULTextfieldAccessible and Xforms text field.
Maybe we will solve it in another way in Fx4.
Yes, IsHyperText() can be removed. It is removed in patch v4.
Attachment #274744 -
Attachment is obsolete: true
Attachment #275086 -
Flags: review?(aaronleventhal)
Comment 28•17 years ago
|
||
Comment on attachment 275086 [details] [diff] [review]
patch v4
Is there no way to let the ATK caller know that the editable text calls like cutText have failed (when the object is not editable)?
It looks like there is an indentation error in getRunAttributesCB
I also think that QI to nsIAccessibleEditableText or nsIAccessibleText should not happen for ROLE_TEXT_LEAF.
Attachment #275086 -
Flags: review?(aaronleventhal) → review+
Assignee | ||
Comment 29•17 years ago
|
||
Attachment #275408 -
Flags: approval1.9?
Assignee | ||
Comment 30•17 years ago
|
||
(In reply to comment #28)
> (From update of attachment 275086 [details] [diff] [review])
> Is there no way to let the ATK caller know that the editable text calls like
> cutText have failed (when the object is not editable)?
Correct, no way.
Updated•17 years ago
|
Attachment #275408 -
Flags: approval1.9? → approval1.9+
Status: ASSIGNED → RESOLVED
Closed: 17 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•