From b3c3197851c1c6b775df1689fb3500b032bf9160 Mon Sep 17 00:00:00 2001 From: Alexander Surkov Date: Mon, 13 Dec 2010 14:06:34 -0800 Subject: [PATCH] Bug 422744 - process a11y events caused by DOM events by target document, r=fer, a=blocking2.0Final+ --- accessible/src/base/nsRootAccessible.cpp | 22 +++++++++++++------ .../tests/mochitest/events/test_focus.html | 5 ++--- .../tests/mochitest/test_text_caret.html | 3 +-- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/accessible/src/base/nsRootAccessible.cpp b/accessible/src/base/nsRootAccessible.cpp index f7b5b3483d3..69d4a61b9f0 100644 --- a/accessible/src/base/nsRootAccessible.cpp +++ b/accessible/src/base/nsRootAccessible.cpp @@ -355,6 +355,9 @@ nsRootAccessible::FireAccessibleFocusEvent(nsAccessible* aFocusAccessible, if (gLastFocusedNode == focusNode && !aForceEvent) return; + nsDocAccessible* focusDocument = focusAccessible->GetDocAccessible(); + NS_ASSERTION(focusDocument, "No document while accessible is in document?!"); + gLastFocusedAccessiblesState = nsAccUtils::State(focusAccessible); // Fire menu start/end events for ARIA menus. @@ -373,7 +376,7 @@ nsRootAccessible::FireAccessibleFocusEvent(nsAccessible* aFocusAccessible, menuBarAccessible, aIsFromUserInput, AccEvent::eAllowDupes); if (menuStartEvent) - FireDelayedAccessibleEvent(menuStartEvent); + focusDocument->FireDelayedAccessibleEvent(menuStartEvent); } } } @@ -384,7 +387,7 @@ nsRootAccessible::FireAccessibleFocusEvent(nsAccessible* aFocusAccessible, new AccEvent(nsIAccessibleEvent::EVENT_MENU_END, mCurrentARIAMenubar, aIsFromUserInput, AccEvent::eAllowDupes); if (menuEndEvent) { - FireDelayedAccessibleEvent(menuEndEvent); + focusDocument->FireDelayedAccessibleEvent(menuEndEvent); } mCurrentARIAMenubar = nsnull; } @@ -395,9 +398,10 @@ nsRootAccessible::FireAccessibleFocusEvent(nsAccessible* aFocusAccessible, // Coalesce focus events from the same document, because DOM focus event might // be fired for the document node and then for the focused DOM element. - FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_FOCUS, - focusNode, AccEvent::eCoalesceFromSameDocument, - aIsFromUserInput); + focusDocument->FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_FOCUS, + focusNode, + AccEvent::eCoalesceFromSameDocument, + aIsFromUserInput); } void @@ -459,6 +463,9 @@ nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) if (!accessible) return NS_OK; + nsDocAccessible* targetDocument = accessible->GetDocAccessible(); + NS_ASSERTION(targetDocument, "No document while accessible is in document?!"); + nsINode* targetNode = accessible->GetNode(); nsIContent* targetContent = targetNode->IsElement() ? targetNode->AsElement() : nsnull; @@ -692,8 +699,9 @@ nsRootAccessible::HandleEvent(nsIDOMEvent* aEvent) FireCurrentFocusEvent(); } else if (eventType.EqualsLiteral("ValueChange")) { - FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_VALUE_CHANGE, - targetNode, AccEvent::eRemoveDupes); + targetDocument-> + FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_VALUE_CHANGE, + targetNode, AccEvent::eRemoveDupes); } #ifdef DEBUG_DRAGDROPSTART else if (eventType.EqualsLiteral("mouseover")) { diff --git a/accessible/tests/mochitest/events/test_focus.html b/accessible/tests/mochitest/events/test_focus.html index f7b2d6860e6..aa1221e8d1f 100644 --- a/accessible/tests/mochitest/events/test_focus.html +++ b/accessible/tests/mochitest/events/test_focus.html @@ -67,12 +67,11 @@ { document.getElementById(this.ID).style.display = 'block'; document.getElementById(this.ID).focus(); - todo(false, "Enable show event handling when bug 422744 is fixed."); } this.eventSeq = [ - new invokerChecker(EVENT_FOCUS, this.DOMNode), - // new invokerChecker(EVENT_SHOW, this.DOMNode) + new invokerChecker(EVENT_SHOW, this.DOMNode), + new invokerChecker(EVENT_FOCUS, this.DOMNode) ]; this.getID = function showNFocusAlertDialog_getID() diff --git a/accessible/tests/mochitest/test_text_caret.html b/accessible/tests/mochitest/test_text_caret.html index 43bcfd45d1b..fb5b49ae194 100644 --- a/accessible/tests/mochitest/test_text_caret.html +++ b/accessible/tests/mochitest/test_text_caret.html @@ -43,7 +43,6 @@ this.invoke = function setCaretOffsetInvoker_invoke() { this.target.caretOffset = aOffset; - todo(false, "Enable focus event handling when bug 422744 is fixed."); } this.getID = function setCaretOffsetInvoker_getID() @@ -52,7 +51,7 @@ } this.eventSeq = [ - // new invokerChecker(EVENT_FOCUS, this.target), + new invokerChecker(EVENT_FOCUS, this.target), new caretMovedChecker(this.target, aOffset) ]; }