aria-hidden:false doesn't have any meaning since it can't be used to show a hidden content, neither not rendered content nor aria-hidden=true content.
1) not visible content:
5.1.1. Excluding Elements from the Accessibility Tree (http://www.w3.org/WAI/PF/aria-implementation/#exclude_elements2):
"Elements, including their descendents, that have host language semantics specifying that the element is not displayed, such as CSS display:none or visibility:hidden or HTML 5 hidden attribute."
That means aria-hidden=false can't be used to show the element having display:none
2) aria-hidden=true content (thanks to Joseph for clarification, citing him):
The UAIG also gives rules for when to exclude elements from the a11y tree in section 5.1.1 (http://www.w3.org/WAI/PF/aria-implementation/#exclude_elements2). Specifically:
• Elements, including their descendents, that have a WAI-ARIA global attribute of |aria-hidden| <http://www.w3.org/WAI/PF/aria/states_and_properties#aria-hidden>|="true".| In other words, |aria-hidden="true"| on a parent overrides |aria-hidden="false"| on descendants.
There was a relatively lengthy discussion about this a while back. The conclusion, in the end, was that aria-hidden mirrors CSS display:none. If you have:
<div style="display:none"> ... stuff ... <div style="display:block">Is this displayed?</div> ... other stuff ... </div>
The "Is this displayed" is *not* displayed. The ancestral display:none style overrules the local display:block style. That is documented in the CSS spec as well:
Created attachment 711737 [details] [diff] [review]
(In reply to Ryan VanderMeulen [:RyanVM] from comment #2)
this was empty checking, the correct one is http://hg.mozilla.org/integration/mozilla-inbound/rev/80fa2c61df14