зеркало из https://github.com/mozilla/pjs.git
Bug 648235 - Use more underlying HTML input states for XUL textboxes, r=davidb
--HG-- rename : accessible/tests/mochitest/test_textboxes.xul => accessible/tests/mochitest/states/test_textbox.xul
This commit is contained in:
Родитель
caa0495193
Коммит
ab4286eaca
|
@ -495,13 +495,14 @@ nsHTMLTextFieldAccessible::GetStateInternal(PRUint32 *aState,
|
|||
nsCOMPtr<nsIContent> bindingContent = mContent->GetBindingParent();
|
||||
if (bindingContent &&
|
||||
bindingContent->NodeInfo()->Equals(nsAccessibilityAtoms::textbox,
|
||||
kNameSpaceID_XUL) &&
|
||||
bindingContent->AttrValueIs(kNameSpaceID_None, nsAccessibilityAtoms::type,
|
||||
nsAccessibilityAtoms::autocomplete,
|
||||
eIgnoreCase)) {
|
||||
// If parent is XUL textbox and value of @type attribute is "autocomplete",
|
||||
// then this accessible supports autocompletion.
|
||||
*aExtraState |= nsIAccessibleStates::EXT_STATE_SUPPORTS_AUTOCOMPLETION;
|
||||
kNameSpaceID_XUL)) {
|
||||
if (bindingContent->AttrValueIs(kNameSpaceID_None, nsAccessibilityAtoms::type,
|
||||
nsAccessibilityAtoms::autocomplete,
|
||||
eIgnoreCase)) {
|
||||
// If parent is XUL textbox and value of @type attribute is "autocomplete",
|
||||
// then this accessible supports autocompletion.
|
||||
*aExtraState |= nsIAccessibleStates::EXT_STATE_SUPPORTS_AUTOCOMPLETION;
|
||||
}
|
||||
} else if (gIsFormFillEnabled && htmlInput &&
|
||||
!(*aState & nsIAccessibleStates::STATE_PROTECTED)) {
|
||||
// Check to see if autocompletion is allowed on this input. We don't expose
|
||||
|
|
|
@ -919,12 +919,12 @@ nsXULTextFieldAccessible::GetStateInternal(PRUint32 *aState,
|
|||
// Create a temporary accessible from the HTML text field
|
||||
// to get the accessible state from. Doesn't add to cache
|
||||
// because Init() is not called.
|
||||
nsHTMLTextFieldAccessible* tempAccessible =
|
||||
nsRefPtr<nsHTMLTextFieldAccessible> tempAccessible =
|
||||
new nsHTMLTextFieldAccessible(inputField, mWeakShell);
|
||||
if (!tempAccessible)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
nsCOMPtr<nsIAccessible> kungFuDeathGrip = tempAccessible;
|
||||
rv = tempAccessible->GetStateInternal(aState, nsnull);
|
||||
|
||||
rv = tempAccessible->GetStateInternal(aState, aExtraState);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (gLastFocusedNode == mContent)
|
||||
|
@ -939,30 +939,6 @@ nsXULTextFieldAccessible::GetStateInternal(PRUint32 *aState,
|
|||
*aState |= nsIAccessibleStates::STATE_READONLY;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// <xul:textbox>
|
||||
if (mContent->AttrValueIs(kNameSpaceID_None, nsAccessibilityAtoms::type,
|
||||
nsAccessibilityAtoms::password, eIgnoreCase)) {
|
||||
*aState |= nsIAccessibleStates::STATE_PROTECTED;
|
||||
}
|
||||
if (mContent->AttrValueIs(kNameSpaceID_None, nsAccessibilityAtoms::readonly,
|
||||
nsAccessibilityAtoms::_true, eIgnoreCase)) {
|
||||
*aState |= nsIAccessibleStates::STATE_READONLY;
|
||||
}
|
||||
}
|
||||
|
||||
if (!aExtraState)
|
||||
return NS_OK;
|
||||
|
||||
PRBool isMultiLine = mContent->HasAttr(kNameSpaceID_None,
|
||||
nsAccessibilityAtoms::multiline);
|
||||
|
||||
if (isMultiLine) {
|
||||
*aExtraState |= nsIAccessibleStates::EXT_STATE_MULTI_LINE;
|
||||
}
|
||||
else {
|
||||
*aExtraState |= nsIAccessibleStates::EXT_STATE_SINGLE_LINE;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ const STATE_MIXED = nsIAccessibleStates.STATE_MIXED;
|
|||
const STATE_MULTISELECTABLE = nsIAccessibleStates.STATE_MULTISELECTABLE;
|
||||
const STATE_OFFSCREEN = nsIAccessibleStates.STATE_OFFSCREEN;
|
||||
const STATE_PRESSED = nsIAccessibleStates.STATE_PRESSED;
|
||||
const STATE_PROTECTED = nsIAccessibleStates.STATE_PROTECTED;
|
||||
const STATE_READONLY = nsIAccessibleStates.STATE_READONLY;
|
||||
const STATE_REQUIRED = nsIAccessibleStates.STATE_REQUIRED;
|
||||
const STATE_SELECTABLE = nsIAccessibleStates.STATE_SELECTABLE;
|
||||
|
|
|
@ -56,6 +56,7 @@ _TEST_FILES =\
|
|||
test_inputs.xul \
|
||||
test_link.html \
|
||||
test_popup.xul \
|
||||
test_textbox.xul \
|
||||
test_tree.xul \
|
||||
z_frames.html \
|
||||
z_frames_article.html \
|
||||
|
|
|
@ -131,7 +131,7 @@
|
|||
<input id="reset" type="reset" required>
|
||||
<input id="image" type="image" required>
|
||||
|
||||
<!-- disabled -->
|
||||
<!-- inherited disabled -->
|
||||
<fieldset id="f" disabled>
|
||||
<input id="f_input">
|
||||
<input id="f_input_disabled" disabled>
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
|
||||
type="text/css"?>
|
||||
|
||||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
title="nsIAccessible XUL textboxes states tests">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/MochiKit/packed.js"></script>
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
|
||||
|
||||
<script type="application/javascript"
|
||||
src="../common.js" />
|
||||
<script type="application/javascript"
|
||||
src="../role.js" />
|
||||
<script type="application/javascript"
|
||||
src="../states.js" />
|
||||
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
function doTest()
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Ordinary textbox
|
||||
testStates("textbox",
|
||||
STATE_FOCUSABLE, EXT_STATE_EDITABLE,
|
||||
STATE_PROTECTED | STATE_UNAVAILABLE, EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
"ordinary textbox");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Password textbox
|
||||
testStates("password",
|
||||
STATE_FOCUSABLE | STATE_PROTECTED, EXT_STATE_EDITABLE,
|
||||
STATE_UNAVAILABLE, EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
"password textbox");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Textarea
|
||||
testStates("textarea",
|
||||
STATE_FOCUSABLE, EXT_STATE_EDITABLE | EXT_STATE_MULTI_LINE,
|
||||
STATE_PROTECTED | STATE_UNAVAILABLE, EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
"multiline textbox");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Readonly textbox
|
||||
testStates("readonly_textbox",
|
||||
STATE_FOCUSABLE | STATE_READONLY, 0,
|
||||
STATE_PROTECTED | STATE_UNAVAILABLE, EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
"readonly textbox");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Disabled textbox
|
||||
testStates("disabled_textbox",
|
||||
STATE_UNAVAILABLE, 0,
|
||||
STATE_FOCUSABLE | STATE_PROTECTED, EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
"readonly textbox");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Readonly textarea
|
||||
testStates("readonly_textarea",
|
||||
STATE_FOCUSABLE | STATE_READONLY, EXT_STATE_MULTI_LINE,
|
||||
STATE_PROTECTED | STATE_UNAVAILABLE, EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
"readonly multiline textbox");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Disabled textarea
|
||||
testStates("disabled_textarea",
|
||||
STATE_UNAVAILABLE, EXT_STATE_MULTI_LINE,
|
||||
STATE_PROTECTED | STATE_FOCUSABLE, EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
"readonly multiline textbox");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Search textbox without search button, searches as you type and filters
|
||||
// a separate control.
|
||||
testStates("searchbox",
|
||||
STATE_FOCUSABLE, EXT_STATE_EDITABLE | EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
STATE_PROTECTED | STATE_UNAVAILABLE, 0,
|
||||
"searchbox");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Search textbox with search button, does not support autoCompletion.
|
||||
testStates("searchfield",
|
||||
STATE_FOCUSABLE, EXT_STATE_EDITABLE,
|
||||
STATE_PROTECTED | STATE_UNAVAILABLE, EXT_STATE_SUPPORTS_AUTOCOMPLETION,
|
||||
"searchfield");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
addA11yLoadEvent(doTest);
|
||||
]]>
|
||||
</script>
|
||||
|
||||
<hbox flex="1" style="overflow: auto;">
|
||||
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=442648">
|
||||
Mozilla Bug 442648
|
||||
</a>
|
||||
<a target="_blank"
|
||||
href="https://bugzilla.mozilla.org/show_bug.cgi?id=648235"
|
||||
title="XUL textbox can inherit more states from underlying HTML input">
|
||||
Mozilla Bug 648235
|
||||
</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
<vbox flex="1">
|
||||
<textbox id="textbox"/>
|
||||
<textbox id="password" type="password"/>
|
||||
<textbox id="textarea" multiline="true" cols="80" rows="5"/>
|
||||
|
||||
<textbox id="readonly_textbox" readonly="true"/>
|
||||
<textbox id="disabled_textbox" disabled="true"/>
|
||||
<textbox id="readonly_textarea" multiline="true" readonly="true"
|
||||
cols="80" rows="5"/>
|
||||
<textbox id="disabled_textarea" multiline="true" disabled="true"
|
||||
cols="80" rows="5"/>
|
||||
|
||||
<textbox id="searchbox" flex="1" type="search" results="historyTree"/>
|
||||
<textbox id="searchfield" placeholder="Search all add-ons"
|
||||
type="search" searchbutton="true"/>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</window>
|
Загрузка…
Ссылка в новой задаче