Bug 835666 - ARIA combobox selected value is not a part of name computation, r=tbsaunde

This commit is contained in:
Alexander Surkov 2013-02-15 18:54:06 +09:00
parent e025a1d342
commit c42b93211f
4 changed files with 42 additions and 1 deletions

View File

@ -48,6 +48,19 @@ nsTextEquivUtils::GetNameFromSubtree(Accessible* aAccessible,
return NS_OK;
}
void
nsTextEquivUtils::GetTextEquivFromSubtree(Accessible* aAccessible,
nsString& aTextEquiv)
{
aTextEquiv.Truncate();
uint32_t nameRule = GetRoleRule(aAccessible->Role());
if (nameRule & eNameFromSubtreeIfReqRule) {
AppendFromAccessibleChildren(aAccessible, &aTextEquiv);
aTextEquiv.CompressWhitespace();
}
}
nsresult
nsTextEquivUtils::GetTextEquivFromIDRefs(Accessible* aAccessible,
nsIAtom *aIDRefsAttr,

View File

@ -53,6 +53,14 @@ public:
static nsresult GetNameFromSubtree(Accessible* aAccessible,
nsAString& aName);
/**
* Calculates text equivalent from the subtree. Similar to GetNameFromSubtree.
* The difference it returns not empty result for things like HTML p, i.e.
* if the role has eNameFromSubtreeIfReq rule.
*/
static void GetTextEquivFromSubtree(Accessible* aAccessible,
nsString& aTextEquiv);
/**
* Calculates text equivalent for the given accessible from its IDRefs
* attribute (like aria-labelledby or aria-describedby).

View File

@ -1670,7 +1670,7 @@ Accessible::Value(nsString& aValue)
}
if (option)
nsTextEquivUtils::GetNameFromSubtree(option, aValue);
nsTextEquivUtils::GetTextEquivFromSubtree(option, aValue);
}
}

View File

@ -171,6 +171,7 @@
testName("ctrlvalue_scrollbar:input", "foo 5 baz");
testName("ctrlvalue_slider:input", "foo 5 baz");
testName("ctrlvalue_spinbutton:input", "foo 5 baz");
testName("ctrlvalue_combobox:input", "foo 5 baz");
/////////////////////////////////////////////////////////////////////////
@ -270,6 +271,11 @@
title="Text is jammed with control's text in name computation">
Bug 823927
</a>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=835666"
title="ARIA combobox selected value is not a part of name computation">
Bug 835666
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
@ -505,6 +511,20 @@
baz
</label>
<input type="checkbox" id="ctrlvalue_combobox:input">
<label for="ctrlvalue_combobox:input">
foo
<div role="combobox">
<div role="textbox"></div>
<ul role="listbox" style="list-style-type: none;">
<li role="option">1</li>
<li role="option" aria-selected="true">5</li>
<li role="option">3</li>
</ul>
</div>
baz
</label>
<!-- a label with a nested control in the start, middle and end -->
<form>
<!-- at the start (without and with whitespaces) -->