зеркало из 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();
|
nsCOMPtr<nsIContent> bindingContent = mContent->GetBindingParent();
|
||||||
if (bindingContent &&
|
if (bindingContent &&
|
||||||
bindingContent->NodeInfo()->Equals(nsAccessibilityAtoms::textbox,
|
bindingContent->NodeInfo()->Equals(nsAccessibilityAtoms::textbox,
|
||||||
kNameSpaceID_XUL) &&
|
kNameSpaceID_XUL)) {
|
||||||
bindingContent->AttrValueIs(kNameSpaceID_None, nsAccessibilityAtoms::type,
|
if (bindingContent->AttrValueIs(kNameSpaceID_None, nsAccessibilityAtoms::type,
|
||||||
nsAccessibilityAtoms::autocomplete,
|
nsAccessibilityAtoms::autocomplete,
|
||||||
eIgnoreCase)) {
|
eIgnoreCase)) {
|
||||||
// If parent is XUL textbox and value of @type attribute is "autocomplete",
|
// If parent is XUL textbox and value of @type attribute is "autocomplete",
|
||||||
// then this accessible supports autocompletion.
|
// then this accessible supports autocompletion.
|
||||||
*aExtraState |= nsIAccessibleStates::EXT_STATE_SUPPORTS_AUTOCOMPLETION;
|
*aExtraState |= nsIAccessibleStates::EXT_STATE_SUPPORTS_AUTOCOMPLETION;
|
||||||
|
}
|
||||||
} else if (gIsFormFillEnabled && htmlInput &&
|
} else if (gIsFormFillEnabled && htmlInput &&
|
||||||
!(*aState & nsIAccessibleStates::STATE_PROTECTED)) {
|
!(*aState & nsIAccessibleStates::STATE_PROTECTED)) {
|
||||||
// Check to see if autocompletion is allowed on this input. We don't expose
|
// 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
|
// Create a temporary accessible from the HTML text field
|
||||||
// to get the accessible state from. Doesn't add to cache
|
// to get the accessible state from. Doesn't add to cache
|
||||||
// because Init() is not called.
|
// because Init() is not called.
|
||||||
nsHTMLTextFieldAccessible* tempAccessible =
|
nsRefPtr<nsHTMLTextFieldAccessible> tempAccessible =
|
||||||
new nsHTMLTextFieldAccessible(inputField, mWeakShell);
|
new nsHTMLTextFieldAccessible(inputField, mWeakShell);
|
||||||
if (!tempAccessible)
|
if (!tempAccessible)
|
||||||
return NS_ERROR_OUT_OF_MEMORY;
|
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);
|
NS_ENSURE_SUCCESS(rv, rv);
|
||||||
|
|
||||||
if (gLastFocusedNode == mContent)
|
if (gLastFocusedNode == mContent)
|
||||||
|
@ -939,30 +939,6 @@ nsXULTextFieldAccessible::GetStateInternal(PRUint32 *aState,
|
||||||
*aState |= nsIAccessibleStates::STATE_READONLY;
|
*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;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ const STATE_MIXED = nsIAccessibleStates.STATE_MIXED;
|
||||||
const STATE_MULTISELECTABLE = nsIAccessibleStates.STATE_MULTISELECTABLE;
|
const STATE_MULTISELECTABLE = nsIAccessibleStates.STATE_MULTISELECTABLE;
|
||||||
const STATE_OFFSCREEN = nsIAccessibleStates.STATE_OFFSCREEN;
|
const STATE_OFFSCREEN = nsIAccessibleStates.STATE_OFFSCREEN;
|
||||||
const STATE_PRESSED = nsIAccessibleStates.STATE_PRESSED;
|
const STATE_PRESSED = nsIAccessibleStates.STATE_PRESSED;
|
||||||
|
const STATE_PROTECTED = nsIAccessibleStates.STATE_PROTECTED;
|
||||||
const STATE_READONLY = nsIAccessibleStates.STATE_READONLY;
|
const STATE_READONLY = nsIAccessibleStates.STATE_READONLY;
|
||||||
const STATE_REQUIRED = nsIAccessibleStates.STATE_REQUIRED;
|
const STATE_REQUIRED = nsIAccessibleStates.STATE_REQUIRED;
|
||||||
const STATE_SELECTABLE = nsIAccessibleStates.STATE_SELECTABLE;
|
const STATE_SELECTABLE = nsIAccessibleStates.STATE_SELECTABLE;
|
||||||
|
|
|
@ -56,6 +56,7 @@ _TEST_FILES =\
|
||||||
test_inputs.xul \
|
test_inputs.xul \
|
||||||
test_link.html \
|
test_link.html \
|
||||||
test_popup.xul \
|
test_popup.xul \
|
||||||
|
test_textbox.xul \
|
||||||
test_tree.xul \
|
test_tree.xul \
|
||||||
z_frames.html \
|
z_frames.html \
|
||||||
z_frames_article.html \
|
z_frames_article.html \
|
||||||
|
|
|
@ -131,7 +131,7 @@
|
||||||
<input id="reset" type="reset" required>
|
<input id="reset" type="reset" required>
|
||||||
<input id="image" type="image" required>
|
<input id="image" type="image" required>
|
||||||
|
|
||||||
<!-- disabled -->
|
<!-- inherited disabled -->
|
||||||
<fieldset id="f" disabled>
|
<fieldset id="f" disabled>
|
||||||
<input id="f_input">
|
<input id="f_input">
|
||||||
<input id="f_input_disabled" disabled>
|
<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>
|
Загрузка…
Ссылка в новой задаче