diff --git a/mozilla/accessible/src/base/nsARIAMap.cpp b/mozilla/accessible/src/base/nsARIAMap.cpp index 87ee0a0794e..7447af435ff 100644 --- a/mozilla/accessible/src/base/nsARIAMap.cpp +++ b/mozilla/accessible/src/base/nsARIAMap.cpp @@ -81,11 +81,10 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] = {"selected", kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE}, {"selected", "false", nsIAccessibleStates::STATE_SELECTABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, kEndEntry}, - {"combobox", nsIAccessibleRole::ROLE_COMBOBOX, eNameLabelOrTitle, eNoValue, kNoReqStates, + {"combobox", nsIAccessibleRole::ROLE_COMBOBOX, eNameLabelOrTitle, eHasValueMinMax, nsIAccessibleStates::STATE_COLLAPSED, {"disabled", kBoolState, nsIAccessibleStates::STATE_UNAVAILABLE}, {"readonly", kBoolState, nsIAccessibleStates::STATE_READONLY}, - {"expanded", kBoolState, nsIAccessibleStates::STATE_EXPANDED}, - {"multiselectable", kBoolState, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE}, kEndEntry}, + {"expanded", kBoolState, nsIAccessibleStates::STATE_EXPANDED}, kEndEntry}, {"description", nsIAccessibleRole::ROLE_TEXT_CONTAINER, eNameOkFromChildren, eNoValue, kNoReqStates, kEndEntry}, {"dialog", nsIAccessibleRole::ROLE_DIALOG, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, {"document", nsIAccessibleRole::ROLE_DOCUMENT, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry}, diff --git a/mozilla/accessible/src/base/nsAccessible.cpp b/mozilla/accessible/src/base/nsAccessible.cpp index f974d407b78..475490cc301 100644 --- a/mozilla/accessible/src/base/nsAccessible.cpp +++ b/mozilla/accessible/src/base/nsAccessible.cpp @@ -2290,9 +2290,18 @@ nsAccessible::GetFinalState(PRUint32 *aState, PRUint32 *aExtraState) nsIAccessibleStates::EXT_STATE_SENSITIVE; } - if (*aState & (nsIAccessibleStates::STATE_COLLAPSED | - nsIAccessibleStates::STATE_EXPANDED)) { + const PRUint32 kExpandCollapseStates = + nsIAccessibleStates::STATE_COLLAPSED | nsIAccessibleStates::STATE_EXPANDED; + if (*aState & kExpandCollapseStates) { *aExtraState |= nsIAccessibleStates::EXT_STATE_EXPANDABLE; + if ((*aState & kExpandCollapseStates) == kExpandCollapseStates) { + // Cannot be both expanded and collapsed -- this happens + // in ARIA expanded combobox because of limitation of nsARIAMap + // XXX Perhaps we will be able to make this less hacky if + // we support extended states in nsARIAMap, e.g. derive + // COLLAPSED from EXPANDABLE && !EXPANDED + *aExtraState &= ~nsIAccessibleStates::STATE_COLLAPSED; + } } }