From 236a51e8d5693281f4f4768e72120c2c47d713b9 Mon Sep 17 00:00:00 2001 From: "surkov.alexander@gmail.com" Date: Fri, 6 Apr 2007 08:36:42 -0700 Subject: [PATCH] Fix for bug 374790 - fix MSAA event map, patch=aaronlev, me --- accessible/public/nsIAccessibleEvent.idl | 4 ++++ accessible/src/msaa/nsDocAccessibleWrap.cpp | 6 ++++++ accessible/src/msaa/nsEventMap.h | 4 +++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/accessible/public/nsIAccessibleEvent.idl b/accessible/public/nsIAccessibleEvent.idl index 3f94c386f4f..f2d4897a023 100755 --- a/accessible/public/nsIAccessibleEvent.idl +++ b/accessible/public/nsIAccessibleEvent.idl @@ -474,6 +474,10 @@ interface nsIAccessibleEvent : nsISupports */ const unsigned long EVENT_INTERNAL_LOAD = 0x005C; + /** + * Help make sure event map does not get out-of-line. + */ + const unsigned long EVENT_LAST_ENTRY = 0x005D; /** * The type of event, based on the enumerated event values diff --git a/accessible/src/msaa/nsDocAccessibleWrap.cpp b/accessible/src/msaa/nsDocAccessibleWrap.cpp index 852598270f8..74f65da0265 100644 --- a/accessible/src/msaa/nsDocAccessibleWrap.cpp +++ b/accessible/src/msaa/nsDocAccessibleWrap.cpp @@ -169,6 +169,12 @@ NS_IMETHODIMP nsDocAccessibleWrap::Shutdown() NS_IMETHODIMP nsDocAccessibleWrap::FireToolkitEvent(PRUint32 aEvent, nsIAccessible* aAccessible, void* aData) { + NS_ENSURE_TRUE(aEvent > 0 && aEvent < nsIAccessibleEvent::EVENT_LAST_ENTRY, + NS_ERROR_FAILURE); + + NS_ASSERTION(gWinEventMap[nsIAccessibleEvent::EVENT_LAST_ENTRY] == kEVENT_LAST_ENTRY, + "MSAA event map skewed"); + PRUint32 winEvent = gWinEventMap[aEvent]; if (!winEvent) return NS_OK; diff --git a/accessible/src/msaa/nsEventMap.h b/accessible/src/msaa/nsEventMap.h index 40545f0f4f2..724d7b0c80d 100755 --- a/accessible/src/msaa/nsEventMap.h +++ b/accessible/src/msaa/nsEventMap.h @@ -42,8 +42,10 @@ #include "AccessibleEventId.h" const PRUint32 kEVENT_WIN_UNKNOWN = 0x00000000; +const PRUint32 kEVENT_LAST_ENTRY = 0xffffffff; static const PRUint32 gWinEventMap[] = { + kEVENT_WIN_UNKNOWN, // nsIAccessibleEvent doesn't have 0 constant kEVENT_WIN_UNKNOWN, // nsIAccessibleEvent::EVENT_CREATE kEVENT_WIN_UNKNOWN, // nsIAccessibleEvent::EVENT_DESTROY EVENT_OBJECT_SHOW, // nsIAccessibleEvent::EVENT_SHOW @@ -124,7 +126,6 @@ static const PRUint32 gWinEventMap[] = { kEVENT_WIN_UNKNOWN, // nsIAccessibleEvent::EVENT_WINDOW_MINIMIZE kEVENT_WIN_UNKNOWN, // nsIAccessibleEvent::EVENT_WINDOW_RESIZE kEVENT_WIN_UNKNOWN, // nsIAccessibleEvent::EVENT_WINDOW_RESTORE - kEVENT_WIN_UNKNOWN, // nsIAccessibleEvent::EVENT_INTERNAL_LOAD IA2_EVENT_HYPERLINK_END_INDEX_CHANGED, // nsIAccessibleEvent::EVENT_HYPERLINK_END_INDEX_CHANGED IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED, // nsIAccessibleEvent::EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED, // nsIAccessibleEvent::EVENT_HYPERLINK_SELECTED_LINK_CHANGED @@ -137,5 +138,6 @@ static const PRUint32 gWinEventMap[] = { IA2_EVENT_PAGE_CHANGED, // nsIAccessibleEvent::EVENT_PAGE_CHANGED IA2_EVENT_ROLE_CHANGED, // nsIAccessibleEvent::EVENT_ROLE_CHANGED kEVENT_WIN_UNKNOWN, // nsIAccessibleEvent::EVENT_INTERNAL_LOAD + kEVENT_LAST_ENTRY // nsIAccessibleEvent::EVENT_LAST_ENTRY };