bug 762876 - fix default orientation of role=scrollbar, and ensure only one of states horizontal or vertical is set r=davidb

This commit is contained in:
Trevor Saunders 2012-07-17 10:41:59 -04:00
parent 24a7ebc815
commit 100d28e792
5 changed files with 57 additions and 57 deletions

View File

@ -6,6 +6,7 @@
#include "ARIAStateMap.h"
#include "nsARIAMap.h"
#include "States.h"
#include "mozilla/dom/Element.h"
@ -221,11 +222,23 @@ aria::MapToState(EStateRule aRule, dom::Element* aElement, PRUint64* aState)
case eARIAOrientation:
{
static const EnumTypeData data(
nsGkAtoms::aria_orientation, states::HORIZONTAL,
&nsGkAtoms::vertical, states::VERTICAL);
if (aElement->AttrValueIs(kNameSpaceID_None, nsGkAtoms::aria_orientation,
NS_LITERAL_STRING("horizontal"), eCaseMatters)) {
*aState &= ~states::VERTICAL;
*aState |= states::HORIZONTAL;
} else if (aElement->AttrValueIs(kNameSpaceID_None,
nsGkAtoms::aria_orientation,
NS_LITERAL_STRING("vertical"),
eCaseMatters)) {
*aState &= ~states::HORIZONTAL;
*aState |= states::VERTICAL;
} else {
NS_ASSERTION(!(*aState & (states::HORIZONTAL | states::VERTICAL)),
"orientation state on role with default aria-orientation!");
*aState |= GetRoleMap(aElement)->Is(nsGkAtoms::scrollbar) ?
states::VERTICAL : states::HORIZONTAL;
}
MapEnumType(aElement, aState, data);
return true;
}

View File

@ -680,10 +680,20 @@ Accessible::NativeState()
state |= states::FLOATING;
// Check if a XUL element has the popup attribute (an attached popup menu).
if (mContent->IsXUL())
if (mContent->IsXUL()) {
if (mContent->HasAttr(kNameSpaceID_None, nsGkAtoms::popup))
state |= states::HASPOPUP;
const nsStyleXUL *xulStyle = frame->GetStyleXUL();
if (xulStyle && frame->IsBoxFrame()) {
// In XUL all boxes are either vertical or horizontal
if (xulStyle->mBoxOrient == NS_STYLE_BOX_ORIENT_VERTICAL)
state |= states::VERTICAL;
else
state |= states::HORIZONTAL;
}
}
// Bypass the link states specialization for non links.
if (!mRoleMapEntry || mRoleMapEntry->roleRule == kUseNativeRole ||
mRoleMapEntry->role == roles::LINK)
@ -1510,17 +1520,6 @@ Accessible::State()
state |= states::OPAQUE1;
}
const nsStyleXUL *xulStyle = frame->GetStyleXUL();
if (xulStyle) {
// In XUL all boxes are either vertical or horizontal
if (xulStyle->mBoxOrient == NS_STYLE_BOX_ORIENT_VERTICAL) {
state |= states::VERTICAL;
}
else {
state |= states::HORIZONTAL;
}
}
return state;
}

View File

@ -75,7 +75,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
"Mozilla Foundation", true, 17, 18);
is(normalHyperlinkAcc.getURI(0).spec, "http://www.mozilla.org/",
"URI wrong for normalHyperlinkElement!");
testStates(normalHyperlinkAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
testStates(normalHyperlinkAcc, STATE_LINKED, 0);
//////////////////////////////////////////////////////////////////////////
// ARIA hyperlink
@ -83,7 +83,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
[nsIAccessibleHyperLink]);
testThis("AriaHyperlink", ariaHyperlinkAcc, ROLE_LINK, 1,
"Mozilla Foundation Home", true, 30, 31);
testStates(ariaHyperlinkAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
testStates(ariaHyperlinkAcc, STATE_LINKED, 0);
testAction("AriaHyperlink", ariaHyperlinkAcc, "click");
//////////////////////////////////////////////////////////////////////////
@ -91,7 +91,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
var invalidAriaHyperlinkAcc = getAccessible("InvalidAriaHyperlink",
[nsIAccessibleHyperLink]);
is(invalidAriaHyperlinkAcc.valid, false, "Should not be valid!");
testStates(invalidAriaHyperlinkAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
testStates(invalidAriaHyperlinkAcc, STATE_LINKED, 0);
//////////////////////////////////////////////////////////////////////////
// image map and its link children
@ -104,9 +104,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
"http://www.bbc.co.uk/radio4/atoz/index.shtml#b", "URI wrong!");
is(imageMapHyperlinkAcc.getURI(1).spec,
"http://www.bbc.co.uk/radio4/atoz/index.shtml#a", "URI wrong!");
testStates(imageMapHyperlinkAcc,
(0),
(EXT_STATE_HORIZONTAL));
testStates(imageMapHyperlinkAcc, 0, 0);
var area1 = getAccessible(imageMapHyperlinkAcc.firstChild,
[nsIAccessibleHyperLink]);
@ -127,9 +125,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
var EmptyHLAcc = getAccessible("emptyLink",
[nsIAccessibleHyperLink]);
testThis("emptyLink", EmptyHLAcc, ROLE_LINK, 1, null, true, 93, 94);
testStates(EmptyHLAcc,
(STATE_FOCUSABLE | STATE_LINKED),
(EXT_STATE_HORIZONTAL));
testStates(EmptyHLAcc, (STATE_FOCUSABLE | STATE_LINKED), 0);
testAction("emptyLink", EmptyHLAcc, "jump");
//////////////////////////////////////////////////////////////////////////
@ -140,7 +136,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
"Heise Online", true, 119, 120);
is(hyperlinkWithSpanAcc.getURI(0).spec, "http://www.heise.de/",
"URI wrong for hyperlinkElementWithSpan!");
testStates(hyperlinkWithSpanAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
testStates(hyperlinkWithSpanAcc, STATE_LINKED, 0);
testAction("LinkWithSpan", hyperlinkWithSpanAcc, "jump");
//////////////////////////////////////////////////////////////////////////
@ -149,9 +145,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
[nsIAccessibleHyperLink]);
testThis("namedAnchor", namedAnchorAcc, ROLE_LINK, 1,
"This should never be of state_linked", true, 196, 197);
testStates(namedAnchorAcc,
(STATE_SELECTABLE),
(EXT_STATE_HORIZONTAL), (STATE_FOCUSABLE | STATE_LINKED));
testStates(namedAnchorAcc, STATE_SELECTABLE,
0, (STATE_FOCUSABLE | STATE_LINKED));
testAction("namedAnchor", namedAnchorAcc, "");
//////////////////////////////////////////////////////////////////////////
@ -160,9 +155,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
[nsIAccessibleHyperLink]);
testThis("noLink", noLinkAcc, ROLE_LINK, 1,
"This should never be of state_linked", true, 254, 255);
testStates(noLinkAcc,
0,
(EXT_STATE_HORIZONTAL), (STATE_FOCUSABLE | STATE_LINKED));
testStates(noLinkAcc, 0, 0, (STATE_FOCUSABLE | STATE_LINKED));
testAction("noLink", noLinkAcc, "");
//////////////////////////////////////////////////////////////////////////
@ -171,9 +164,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
[nsIAccessibleHyperLink]);
testThis("linkWithClick", linkWithClickAcc, ROLE_LINK, 1,
"This should have state_linked", true, 292, 293);
testStates(linkWithClickAcc,
(STATE_LINKED),
(EXT_STATE_HORIZONTAL));
testStates(linkWithClickAcc, STATE_LINKED, 0);
testAction("linkWithClick", linkWithClickAcc, "click");
//////////////////////////////////////////////////////////////////////////
@ -185,9 +176,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
var id = "linkWithTitleNoNameFromSubtree";
var linkAcc = getAccessible(id, [nsIAccessibleHyperLink]);
testThis(id, linkAcc, ROLE_LINK, 1, "Link with title", true, 344, 345);
testStates(linkAcc,
(STATE_LINKED),
(EXT_STATE_HORIZONTAL));
testStates(linkAcc, STATE_LINKED, 0);
testAction(id, linkAcc, "jump");
//////////////////////////////////////////////////////////////////////////
@ -197,9 +186,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
linkAcc = getAccessible(id, [nsIAccessibleHyperLink]);
testThis(id, linkAcc, ROLE_LINK, 1, "the name from subtree", true, 393,
394);
testStates(linkAcc,
(STATE_LINKED),
(EXT_STATE_HORIZONTAL));
testStates(linkAcc, STATE_LINKED, 0);
testAction(id, linkAcc, "jump");
//////////////////////////////////////////////////////////////////////////
@ -208,9 +195,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
linkAcc = getAccessible(id, [nsIAccessibleHyperLink]);
testThis(id, linkAcc, ROLE_LINK, 1, "The title for link", true, 447,
448);
testStates(linkAcc,
(STATE_LINKED),
(EXT_STATE_HORIZONTAL));
testStates(linkAcc, STATE_LINKED, 0);
testAction(id, linkAcc, "jump");
//////////////////////////////////////////////////////////////////////////
@ -219,9 +204,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=418368
linkAcc = getAccessible(id, [nsIAccessibleHyperLink]);
testThis(id, linkAcc, ROLE_LINK, 1, "Link with label and nested image:",
true, 450, 451);
testStates(linkAcc,
(STATE_LINKED),
(EXT_STATE_HORIZONTAL));
testStates(linkAcc, STATE_LINKED, 0);
testAction(id, linkAcc, "jump");
//////////////////////////////////////////////////////////////////////////

View File

@ -45,7 +45,7 @@
testThis("linkedLabel", linkedLabelAcc, ROLE_LINK, 1,
"Mozilla Foundation home", "http://www.mozilla.org/", 1, 2,
true);
testStates(linkedLabelAcc, STATE_LINKED, EXT_STATE_HORIZONTAL);
testStates(linkedLabelAcc, STATE_LINKED, 0);
var labelWithValueAcc = getAccessible("linkLabelWithValue",
[nsIAccessibleHyperLink]);

View File

@ -153,15 +153,15 @@
testStates("aria_navigation_anchor", STATE_SELECTABLE);
// aria-orientation (applied to scrollbar, separator, slider)
testStates("aria_scrollbar", 0, EXT_STATE_HORIZONTAL);
testStates("aria_hscrollbar", 0, EXT_STATE_HORIZONTAL);
testStates("aria_vscrollbar", 0, EXT_STATE_VERTICAL);
testStates("aria_separator", 0, EXT_STATE_HORIZONTAL);
testStates("aria_hseparator", 0, EXT_STATE_HORIZONTAL);
testStates("aria_vseparator", 0, EXT_STATE_VERTICAL);
testStates("aria_slider", 0, EXT_STATE_HORIZONTAL);
testStates("aria_hslider", 0, EXT_STATE_HORIZONTAL);
testStates("aria_vslider", 0, EXT_STATE_VERTICAL);
testStates("aria_scrollbar", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
testStates("aria_hscrollbar", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
testStates("aria_vscrollbar", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
testStates("aria_separator", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
testStates("aria_hseparator", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
testStates("aria_vseparator", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
testStates("aria_slider", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
testStates("aria_hslider", 0, EXT_STATE_HORIZONTAL, 0, EXT_STATE_VERTICAL);
testStates("aria_vslider", 0, EXT_STATE_VERTICAL, 0, EXT_STATE_HORIZONTAL);
// indeterminate ARIA progressbars (no aria-valuenow or aria-valuetext attribute)
// should expose mixed state
@ -225,6 +225,11 @@
title="ARIA undetermined progressmeters should expose mixed state">
Mozilla Bug 740851
</a>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=762876
title="fix default horizontal / vertical state of role=scrollbar and ensure only one of horizontal / vertical states is exposed">
Mozilla Bug 762876
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">