зеркало из https://github.com/mozilla/pjs.git
Bug 560239 - no children of application accessible for open windows before accessibility was started, r=marcoz, davidb, sr=neil, a=dholbert
This commit is contained in:
Родитель
c5c2fd3be2
Коммит
6cd89897a1
|
@ -45,6 +45,9 @@
|
|||
#include "nsAccessibilityService.h"
|
||||
|
||||
#include "nsIComponentManager.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsIDOMWindow.h"
|
||||
#include "nsIWindowMediator.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
|
||||
nsApplicationAccessible::nsApplicationAccessible() :
|
||||
|
@ -258,8 +261,42 @@ nsApplicationAccessible::InvalidateChildren()
|
|||
void
|
||||
nsApplicationAccessible::CacheChildren()
|
||||
{
|
||||
// Nothing to do. Children are keeped up to dated by Add/RemoveRootAccessible
|
||||
// method calls.
|
||||
// CacheChildren is called only once for application accessible when its
|
||||
// children are requested because empty InvalidateChldren() prevents its
|
||||
// repeated calls.
|
||||
|
||||
// Basicly children are kept updated by Add/RemoveRootAccessible method
|
||||
// calls. However if there are open windows before accessibility was started
|
||||
// then we need to make sure root accessibles for open windows are created so
|
||||
// that all root accessible are stored in application accessible children
|
||||
// array.
|
||||
|
||||
nsCOMPtr<nsIWindowMediator> windowMediator =
|
||||
do_GetService(NS_WINDOWMEDIATOR_CONTRACTID);
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> windowEnumerator;
|
||||
nsresult rv = windowMediator->GetEnumerator(nsnull,
|
||||
getter_AddRefs(windowEnumerator));
|
||||
if (NS_FAILED(rv))
|
||||
return;
|
||||
|
||||
PRBool hasMore = PR_FALSE;
|
||||
windowEnumerator->HasMoreElements(&hasMore);
|
||||
while (hasMore) {
|
||||
nsCOMPtr<nsISupports> window;
|
||||
windowEnumerator->GetNext(getter_AddRefs(window));
|
||||
nsCOMPtr<nsIDOMWindow> DOMWindow = do_QueryInterface(window);
|
||||
if (DOMWindow) {
|
||||
nsCOMPtr<nsIDOMDocument> DOMDocument;
|
||||
DOMWindow->GetDocument(getter_AddRefs(DOMDocument));
|
||||
if (DOMDocument) {
|
||||
nsCOMPtr<nsIAccessible> accessible;
|
||||
GetAccService()->GetAccessibleFor(DOMDocument,
|
||||
getter_AddRefs(accessible));
|
||||
}
|
||||
}
|
||||
windowEnumerator->HasMoreElements(&hasMore);
|
||||
}
|
||||
}
|
||||
|
||||
nsAccessible*
|
||||
|
|
|
@ -46,6 +46,7 @@ include $(DEPTH)/config/autoconf.mk
|
|||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
_TEST_FILES =\
|
||||
$(warning test_applicationacc.xul temporarily disabled) \
|
||||
test_aria_globals.html \
|
||||
test_aria_imgmap.html \
|
||||
test_button.xul \
|
||||
|
@ -70,6 +71,7 @@ _TEST_FILES =\
|
|||
test_txtcntr.html \
|
||||
test_txtctrl.html \
|
||||
test_txtctrl.xul \
|
||||
wnd.xul \
|
||||
$(NULL)
|
||||
|
||||
libs:: $(_TEST_FILES)
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
<?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="Accessible Application Accessible hierarchy tests">
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/MochiKit/packed.js" />
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
|
||||
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/a11y/accessible/common.js" />
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/a11y/accessible/role.js" />
|
||||
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Test
|
||||
|
||||
// Note: but 560239 can be tested if this test runs in standalone mode only.
|
||||
|
||||
var gURL = "chrome://mochikit/content/a11y/accessible/tree/wnd.xul"
|
||||
var gWnd = window.openDialog(gURL, "wnd", "chrome,width=600,height=600");
|
||||
|
||||
function doTest()
|
||||
{
|
||||
// Application accessible should contain two root document accessibles,
|
||||
// one is for browser window, another one is for open dialog window.
|
||||
var accTree = {
|
||||
role: ROLE_APP_ROOT,
|
||||
children: [
|
||||
{
|
||||
role: ROLE_CHROME_WINDOW,
|
||||
name: "Accessibility Chrome Test Harness - Minefield"
|
||||
},
|
||||
{
|
||||
role: ROLE_CHROME_WINDOW,
|
||||
name: "Empty Window"
|
||||
}
|
||||
]
|
||||
};
|
||||
testAccessibleTree(getApplicationAccessible(), accTree);
|
||||
|
||||
gWnd.close();
|
||||
|
||||
SimpleTest.finish()
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// We need to open dialog window before accessibility is started.
|
||||
addLoadEvent(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=560239"
|
||||
title="no children of application accessible for windows open before accessibility was started">
|
||||
Mozilla Bug 560239
|
||||
</a><br/>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
</div>
|
||||
<pre id="test">
|
||||
</pre>
|
||||
</body>
|
||||
</hbox>
|
||||
|
||||
</window>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
|
||||
|
||||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
title="Empty Window">
|
||||
|
||||
</window>
|
||||
|
Загрузка…
Ссылка в новой задаче