author | David Anderson <danderson@mozilla.com> |
Mon, 30 Apr 2012 12:53:32 -0700 | |
changeset 106131 | 44911569fb04d891073656cac1f794495723f573 |
parent 106130 | fb7572ed4bc6832b84b14670c490b61c9db2d278 (current diff) |
parent 92722 | 3812e7c1b642701e10465b554a51b5c581c1d257 (diff) |
child 106132 | 2427c5815cfa1686f367b795fce5917d20f975d0 |
push id | 23447 |
push user | danderson@mozilla.com |
push date | Tue, 11 Sep 2012 17:34:27 +0000 |
treeherder | mozilla-central@fdfaef738a00 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
milestone | 15.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/.hgtags +++ b/.hgtags @@ -74,8 +74,9 @@ 54bfd8bf682e295ffd7f22fa921ca343957b6c1c a8506ab2c65480cf2f85f54e203ea746522c62bb AURORA_BASE_20111220 462c726144bc1fb45b61e774f64ac5d61b4e047c UPDATE_PACKAGING_R16 bbc7014db2de49e2301680d2a86be8a53108a88a AURORA_BASE_20120131 bbc7014db2de49e2301680d2a86be8a53108a88a AURORA_BASE_20120131 0000000000000000000000000000000000000000 AURORA_BASE_20120131 0000000000000000000000000000000000000000 AURORA_BASE_20120131 bbc7014db2de49e2301680d2a86be8a53108a88a AURORA_BASE_20120131 b6627f28b7ec17e1b46a594df0f780d3a40847e4 FIREFOX_AURORA_13_BASE +357da346ceb705d196a46574804c7c4ec44ac186 FIREFOX_AURORA_14_BASE
--- a/accessible/public/nsIAccessibleRole.idl +++ b/accessible/public/nsIAccessibleRole.idl @@ -35,21 +35,18 @@ * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsISupports.idl" /** * Defines cross platform (Gecko) roles. - * - * @note - When adding a new role, be sure to also add it to nsRoleMap.h for - * each platform. */ -[scriptable, uuid(f134da65-39a8-4330-843c-5bd42780b34c)] +[scriptable, uuid(50db5e86-9a45-4637-a5c3-4ff148c33270)] interface nsIAccessibleRole : nsISupports { /** * Used when accessible hans't strong defined role. */ const unsigned long ROLE_NOTHING = 0; /** @@ -793,14 +790,23 @@ interface nsIAccessibleRole : nsISupport const unsigned long ROLE_FIGURE = 124; /** * Represents a rich item with a check box. */ const unsigned long ROLE_CHECK_RICH_OPTION = 125; /** - * It's not role actually. This constant is important to help ensure - * nsRoleMap's are synchronized. + * An HTML definition list <dl> + */ + const unsigned long ROLE_DEFINITION_LIST = 126; + + /** + * An HTML definition term <dt> */ - const unsigned long ROLE_LAST_ENTRY = 126; + const unsigned long ROLE_TERM = 127; + + /** + * An HTML definition <dd> + */ + const unsigned long ROLE_DEFINITION = 128; };
rename from accessible/src/atk/nsApplicationAccessibleWrap.cpp rename to accessible/src/atk/ApplicationAccessibleWrap.cpp --- a/accessible/src/atk/nsApplicationAccessibleWrap.cpp +++ b/accessible/src/atk/ApplicationAccessibleWrap.cpp @@ -33,17 +33,17 @@ * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -#include "nsApplicationAccessibleWrap.h" +#include "ApplicationAccessibleWrap.h" #include "nsCOMPtr.h" #include "nsMai.h" #include "prlink.h" #include "prenv.h" #include "nsIGConfService.h" #include "nsIServiceManager.h" #include "nsAutoPtr.h" @@ -461,35 +461,29 @@ mai_util_remove_key_event_listener (guin } g_hash_table_remove(sKey_listener_list, GUINT_TO_POINTER (remove_listener)); if (g_hash_table_size(sKey_listener_list) == 0) { gtk_key_snooper_remove(sKey_snooper_id); } } -AtkObject * +AtkObject* mai_util_get_root(void) { - if (nsAccessibilityService::IsShutdown()) { - // We've shutdown, try to use gail instead - // (to avoid assert in spi_atk_tidy_windows()) - if (gail_get_root) - return gail_get_root(); - - return nsnull; - } - - nsApplicationAccessible *applicationAcc = - nsAccessNode::GetApplicationAccessible(); - - if (applicationAcc) - return applicationAcc->GetAtkObject(); + if (nsAccessibilityService::IsShutdown()) { + // We've shutdown, try to use gail instead + // (to avoid assert in spi_atk_tidy_windows()) + if (gail_get_root) + return gail_get_root(); return nsnull; + } + + return nsAccessNode::GetApplicationAccessible()->GetAtkObject(); } G_CONST_RETURN gchar * mai_util_get_toolkit_name(void) { return MAI_NAME; } @@ -545,25 +539,25 @@ add_listener (GSignalEmissionHook listen else { g_warning("Invalid object type %s\n", object_type); } return rc; } static nsresult LoadGtkModule(GnomeAccessibilityModule& aModule); -// nsApplicationAccessibleWrap +// ApplicationAccessibleWrap -nsApplicationAccessibleWrap::nsApplicationAccessibleWrap(): - nsApplicationAccessible() +ApplicationAccessibleWrap::ApplicationAccessibleWrap(): + ApplicationAccessible() { - MAI_LOG_DEBUG(("======Create AppRootAcc=%p\n", (void*)this)); + MAI_LOG_DEBUG(("======Create AppRootAcc=%p\n", (void*)this)); } -nsApplicationAccessibleWrap::~nsApplicationAccessibleWrap() +ApplicationAccessibleWrap::~ApplicationAccessibleWrap() { MAI_LOG_DEBUG(("======Destory AppRootAcc=%p\n", (void*)this)); nsAccessibleWrap::ShutdownAtkObject(); } static gboolean toplevel_event_watcher(GSignalInvocationHint* ihint, guint n_param_values, @@ -608,17 +602,17 @@ toplevel_event_watcher(GSignalInvocation } } return TRUE; } bool -nsApplicationAccessibleWrap::Init() +ApplicationAccessibleWrap::Init() { if (ShouldA11yBeEnabled()) { // load and initialize gail library nsresult rv = LoadGtkModule(sGail); if (NS_SUCCEEDED(rv)) { (*sGail.init)(); } else { @@ -650,21 +644,21 @@ nsApplicationAccessibleWrap::Init() reinterpret_cast<gpointer>(nsIAccessibleEvent::EVENT_SHOW), NULL); sToplevel_hide_hook = g_signal_add_emission_hook(g_signal_lookup("hide", GTK_TYPE_WINDOW), 0, toplevel_event_watcher, reinterpret_cast<gpointer>(nsIAccessibleEvent::EVENT_HIDE), NULL); } } - return nsApplicationAccessible::Init(); + return ApplicationAccessible::Init(); } void -nsApplicationAccessibleWrap::Unload() +ApplicationAccessibleWrap::Unload() { if (sToplevel_event_hook_added) { sToplevel_event_hook_added = false; g_signal_remove_emission_hook(g_signal_lookup("show", GTK_TYPE_WINDOW), sToplevel_show_hook); g_signal_remove_emission_hook(g_signal_lookup("hide", GTK_TYPE_WINDOW), sToplevel_hide_hook); } @@ -692,27 +686,27 @@ nsApplicationAccessibleWrap::Unload() } // if (sATKLib) { // PR_UnloadLibrary(sATKLib); // sATKLib = nsnull; // } } NS_IMETHODIMP -nsApplicationAccessibleWrap::GetName(nsAString& aName) +ApplicationAccessibleWrap::GetName(nsAString& aName) { // ATK doesn't provide a way to obtain an application name (for example, // Firefox or Thunderbird) like IA2 does. Thus let's return an application // name as accessible name that was used to get a branding name (for example, // Minefield aka nightly Firefox or Daily aka nightly Thunderbird). return GetAppName(aName); } NS_IMETHODIMP -nsApplicationAccessibleWrap::GetNativeInterface(void **aOutAccessible) +ApplicationAccessibleWrap::GetNativeInterface(void** aOutAccessible) { *aOutAccessible = nsnull; if (!mAtkObject) { mAtkObject = reinterpret_cast<AtkObject *> (g_object_new(MAI_TYPE_ATK_OBJECT, NULL)); NS_ENSURE_TRUE(mAtkObject, NS_ERROR_OUT_OF_MEMORY); @@ -740,19 +734,19 @@ gboolean fireRootAccessibleAddedCB(gpoin g_object_unref(eventData->app_accessible); g_object_unref(eventData->root_accessible); free(data); return FALSE; } bool -nsApplicationAccessibleWrap::AppendChild(nsAccessible *aChild) +ApplicationAccessibleWrap::AppendChild(nsAccessible* aChild) { - if (!nsApplicationAccessible::AppendChild(aChild)) + if (!ApplicationAccessible::AppendChild(aChild)) return false; AtkObject *atkAccessible = nsAccessibleWrap::GetAtkObject(aChild); atk_object_set_parent(atkAccessible, mAtkObject); PRUint32 count = mChildren.Length(); // Emit children_changed::add in a timeout @@ -767,30 +761,30 @@ nsApplicationAccessibleWrap::AppendChild g_object_ref(atkAccessible); g_timeout_add(0, fireRootAccessibleAddedCB, eventData); } return true; } bool -nsApplicationAccessibleWrap::RemoveChild(nsAccessible* aChild) +ApplicationAccessibleWrap::RemoveChild(nsAccessible* aChild) { PRInt32 index = aChild->IndexInParent(); AtkObject *atkAccessible = nsAccessibleWrap::GetAtkObject(aChild); atk_object_set_parent(atkAccessible, NULL); g_signal_emit_by_name(mAtkObject, "children_changed::remove", index, atkAccessible, NULL); - return nsApplicationAccessible::RemoveChild(aChild); + return ApplicationAccessible::RemoveChild(aChild); } void -nsApplicationAccessibleWrap::PreCreate() +ApplicationAccessibleWrap::PreCreate() { if (!sATKChecked) { sATKLib = PR_LoadLibrary(sATKLibName); if (sATKLib) { AtkGetTypeType pfn_atk_hyperlink_impl_get_type = (AtkGetTypeType) PR_FindFunctionSymbol(sATKLib, sATKHyperlinkImplGetTypeSymbol); if (pfn_atk_hyperlink_impl_get_type) g_atk_hyperlink_impl_type = pfn_atk_hyperlink_impl_get_type();
rename from accessible/src/atk/nsApplicationAccessibleWrap.h rename to accessible/src/atk/ApplicationAccessibleWrap.h --- a/accessible/src/atk/nsApplicationAccessibleWrap.h +++ b/accessible/src/atk/ApplicationAccessibleWrap.h @@ -33,30 +33,30 @@ * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -#ifndef __NS_APP_ROOT_ACCESSIBLE_H__ -#define __NS_APP_ROOT_ACCESSIBLE_H__ +#ifndef MOZILLA_A11Y_APPLICATION_ACCESSIBLE_WRAP_H__ +#define MOZILLA_A11Y_APPLICATION_ACCESSIBLE_WRAP_H__ -#include "nsApplicationAccessible.h" +#include "ApplicationAccessible.h" -class nsApplicationAccessibleWrap: public nsApplicationAccessible +class ApplicationAccessibleWrap: public ApplicationAccessible { public: static void Unload(); static void PreCreate(); public: - nsApplicationAccessibleWrap(); - virtual ~nsApplicationAccessibleWrap(); + ApplicationAccessibleWrap(); + virtual ~ApplicationAccessibleWrap(); // nsAccessNode virtual bool Init(); // nsAccessible NS_IMETHOD GetName(nsAString &aName); virtual bool AppendChild(nsAccessible* aChild);
--- a/accessible/src/atk/Makefile.in +++ b/accessible/src/atk/Makefile.in @@ -48,17 +48,17 @@ LIBXUL_LIBRARY = 1 CPPSRCS = \ AtkSocketAccessible.cpp \ nsAccessNodeWrap.cpp \ nsAccessibleWrap.cpp \ nsDocAccessibleWrap.cpp \ nsRootAccessibleWrap.cpp \ - nsApplicationAccessibleWrap.cpp \ + ApplicationAccessibleWrap.cpp \ nsMaiInterfaceComponent.cpp \ nsMaiInterfaceAction.cpp \ nsMaiInterfaceText.cpp \ nsMaiInterfaceEditableText.cpp \ nsMaiInterfaceSelection.cpp \ nsMaiInterfaceValue.cpp \ nsMaiHyperlink.cpp \ nsMaiInterfaceHypertext.cpp \
--- a/accessible/src/atk/nsAccessNodeWrap.cpp +++ b/accessible/src/atk/nsAccessNodeWrap.cpp @@ -33,17 +33,16 @@ * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsAccessNodeWrap.h" -#include "nsApplicationAccessibleWrap.h" /* For documentation of the accessibility architecture, * see http://lxr.mozilla.org/seamonkey/source/accessible/accessible-docs.html */ //////////////////////////////////////////////////////////////////////////////// // nsAccessNodeWrap
--- a/accessible/src/atk/nsAccessibleWrap.cpp +++ b/accessible/src/atk/nsAccessibleWrap.cpp @@ -33,48 +33,46 @@ * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ -#include "mozilla/Util.h" - -#include "nsAccessible.h" #include "nsAccessibleWrap.h" +#include "Accessible-inl.h" +#include "ApplicationAccessibleWrap.h" #include "InterfaceInitFuncs.h" #include "nsAccUtils.h" -#include "nsApplicationAccessibleWrap.h" #include "nsIAccessibleRelation.h" #include "nsRootAccessible.h" #include "nsDocAccessibleWrap.h" #include "nsIAccessibleValue.h" #include "nsMai.h" #include "nsMaiHyperlink.h" #include "nsString.h" #include "nsAutoPtr.h" #include "prprf.h" -#include "nsRoleMap.h" #include "nsStateMap.h" #include "Relation.h" #include "States.h" +#include "mozilla/Util.h" #include "nsXPCOMStrings.h" #include "nsComponentManagerUtils.h" using namespace mozilla; using namespace mozilla::a11y; nsAccessibleWrap::EAvailableAtkSignals nsAccessibleWrap::gAvailableAtkSignals = eUnknown; -//defined in nsApplicationAccessibleWrap.cpp +//defined in ApplicationAccessibleWrap.cpp extern "C" GType g_atk_hyperlink_impl_type; /* MaiAtkObject */ enum { ACTIVATE, CREATE, DEACTIVATE, @@ -718,34 +716,30 @@ getDescriptionCB(AtkObject *aAtkObj) NS_ConvertUTF16toUTF8(uniDesc).get()); return aAtkObj->description; } AtkRole getRoleCB(AtkObject *aAtkObj) { - nsAccessibleWrap *accWrap = GetAccessibleWrap(aAtkObj); - if (!accWrap) { - return ATK_ROLE_INVALID; - } + nsAccessibleWrap* accWrap = GetAccessibleWrap(aAtkObj); + if (!accWrap) + return ATK_ROLE_INVALID; #ifdef DEBUG_A11Y - NS_ASSERTION(nsAccUtils::IsTextInterfaceSupportCorrect(accWrap), - "Does not support nsIAccessibleText when it should"); + NS_ASSERTION(nsAccUtils::IsTextInterfaceSupportCorrect(accWrap), + "Does not support nsIAccessibleText when it should"); #endif - if (aAtkObj->role == ATK_ROLE_INVALID) { - // map to the actual value - PRUint32 atkRole = atkRoleMap[accWrap->Role()]; - NS_ASSERTION(atkRoleMap[nsIAccessibleRole::ROLE_LAST_ENTRY] == - kROLE_ATK_LAST_ENTRY, "ATK role map skewed"); - aAtkObj->role = static_cast<AtkRole>(atkRole); - } + if (aAtkObj->role != ATK_ROLE_INVALID) return aAtkObj->role; + + return aAtkObj->role = + static_cast<AtkRole>(nsAccessibleWrap::AtkRoleFor(accWrap->Role())); } AtkAttributeSet* ConvertToAtkAttributeSet(nsIPersistentProperties* aAttributes) { if (!aAttributes) return nsnull; @@ -972,35 +966,30 @@ refRelationSetCB(AtkObject *aAtkObj) return relation_set; } // Check if aAtkObj is a valid MaiAtkObject, and return the nsAccessibleWrap // for it. nsAccessibleWrap *GetAccessibleWrap(AtkObject *aAtkObj) { - NS_ENSURE_TRUE(IS_MAI_OBJECT(aAtkObj), nsnull); - nsAccessibleWrap *tmpAccWrap = MAI_ATK_OBJECT(aAtkObj)->accWrap; + NS_ENSURE_TRUE(IS_MAI_OBJECT(aAtkObj), nsnull); + nsAccessibleWrap* accWrap = MAI_ATK_OBJECT(aAtkObj)->accWrap; - // Check if AccessibleWrap was deconstructed - if (tmpAccWrap == nsnull) { - return nsnull; - } - - NS_ENSURE_TRUE(tmpAccWrap->GetAtkObject() == aAtkObj, nsnull); + // Check if the accessible was deconstructed. + if (!accWrap) + return nsnull; - nsApplicationAccessible *applicationAcc = - nsAccessNode::GetApplicationAccessible(); - nsAccessibleWrap* tmpAppAccWrap = - static_cast<nsAccessibleWrap*>(applicationAcc); + NS_ENSURE_TRUE(accWrap->GetAtkObject() == aAtkObj, nsnull); - if (tmpAppAccWrap != tmpAccWrap && !tmpAccWrap->IsValidObject()) - return nsnull; + nsAccessibleWrap* appAccWrap = nsAccessNode::GetApplicationAccessible(); + if (appAccWrap != accWrap && !accWrap->IsValidObject()) + return nsnull; - return tmpAccWrap; + return accWrap; } nsresult nsAccessibleWrap::HandleAccEvent(AccEvent* aEvent) { nsresult rv = nsAccessible::HandleAccEvent(aEvent); NS_ENSURE_SUCCESS(rv, rv); @@ -1401,8 +1390,24 @@ nsAccessibleWrap::FireAtkShowHideEvent(A char *signal_name = g_strconcat(aIsAdded ? "children_changed::add" : "children_changed::remove", isFromUserInput ? "" : kNonUserInputEvent, NULL); g_signal_emit_by_name(parentObject, signal_name, indexInParent, aObject, NULL); g_free(signal_name); return NS_OK; } +PRUint32 +nsAccessibleWrap::AtkRoleFor(role aRole) +{ +#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) \ + case roles::geckoRole: \ + return atkRole; + + switch (aRole) { +#include "RoleMap.h" + default: + MOZ_NOT_REACHED("Unknown role."); + return ATK_ROLE_UNKNOWN; + } + +#undef ROLE +}
--- a/accessible/src/atk/nsAccessibleWrap.h +++ b/accessible/src/atk/nsAccessibleWrap.h @@ -111,16 +111,21 @@ public: void SetMaiHyperlink(MaiHyperlink* aMaiHyperlink); static const char * ReturnString(nsAString &aString) { static nsCString returnedString; returnedString = NS_ConvertUTF16toUTF8(aString); return returnedString.get(); } + /** + * Function mapping from cross platform roles to ATK roles. + */ + inline static PRUint32 AtkRoleFor(mozilla::a11y::role aRole); + protected: virtual nsresult FirePlatformEvent(AccEvent* aEvent); nsresult FireAtkStateChangeEvent(AccEvent* aEvent, AtkObject *aObject); nsresult FireAtkTextChangedEvent(AccEvent* aEvent, AtkObject *aObject); nsresult FireAtkShowHideEvent(AccEvent* aEvent, AtkObject *aObject, bool aIsAdded);
--- a/accessible/src/atk/nsMaiInterfaceAction.cpp +++ b/accessible/src/atk/nsMaiInterfaceAction.cpp @@ -34,16 +34,17 @@ * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "InterfaceInitFuncs.h" +#include "Accessible-inl.h" #include "nsMai.h" #include "Role.h" #include "nsString.h" using namespace mozilla::a11y; extern "C" {
--- a/accessible/src/atk/nsMaiInterfaceText.cpp +++ b/accessible/src/atk/nsMaiInterfaceText.cpp @@ -37,27 +37,26 @@ * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "InterfaceInitFuncs.h" #include "nsHyperTextAccessible.h" #include "nsMai.h" -#include "nsRoleMap.h" #include "nsIPersistentProperties2.h" AtkAttributeSet* ConvertToAtkAttributeSet(nsIPersistentProperties* aAttributes); static void ConvertTexttoAsterisks(nsAccessibleWrap* accWrap, nsAString& aString) { // convert each char to "*" when it's "password text" - PRUint32 atkRole = atkRoleMap[accWrap->NativeRole()]; + PRUint32 atkRole = nsAccessibleWrap::AtkRoleFor(accWrap->NativeRole()); if (atkRole == ATK_ROLE_PASSWORD_TEXT) { for (PRUint32 i = 0; i < aString.Length(); i++) aString.Replace(i, 1, NS_LITERAL_STRING("*")); } } extern "C" { @@ -156,17 +155,17 @@ getCharacterAtOffsetCB(AtkText *aText, g /* PRUnichar is unsigned short in Mozilla */ /* gnuichar is guint32 in glib */ PRUnichar uniChar; nsresult rv = accText->GetCharacterAtOffset(aOffset, &uniChar); // convert char to "*" when it's "password text" - PRUint32 atkRole = atkRoleMap[accWrap->NativeRole()]; + PRUint32 atkRole = nsAccessibleWrap::AtkRoleFor(accWrap->NativeRole()); if (atkRole == ATK_ROLE_PASSWORD_TEXT) uniChar = '*'; return (NS_FAILED(rv)) ? 0 : static_cast<gunichar>(uniChar); } static gchar* getTextBeforeOffsetCB(AtkText *aText, gint aOffset,
deleted file mode 100644 --- a/accessible/src/atk/nsRoleMap.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=2 et sw=2 tw=80: */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is IBM Corporation - * Portions created by the Initial Developer are Copyright (C) 2006 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Gao, Ming (gaoming@cn.ibm.com) - * Aaron Leventhal (aleventh@us.ibm.com) - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 2 or later (the "GPL"), or - * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include <atk/atk.h> -#include "nsAccessibleWrap.h" - -const PRUint32 kROLE_ATK_LAST_ENTRY = 0xffffffff; - -// Map array from cross platform roles to ATK roles -static const PRUint32 atkRoleMap[] = { - // Cross Platform Roles # - ATK_ROLE_UNKNOWN, // roles::NOTHING 0 - ATK_ROLE_UNKNOWN, // roles::TITLEBAR 1 - ATK_ROLE_MENU_BAR, // roles::MENUBAR 2 - ATK_ROLE_SCROLL_BAR, // roles::SCROLLBAR 3 - ATK_ROLE_UNKNOWN, // roles::GRIP 4 - ATK_ROLE_UNKNOWN, // roles::SOUND 5 - ATK_ROLE_UNKNOWN, // roles::CURSOR 6 - ATK_ROLE_UNKNOWN, // roles::CARET 7 - ATK_ROLE_ALERT, // roles::ALERT 8 - ATK_ROLE_WINDOW, // roles::WINDOW 9 - ATK_ROLE_INTERNAL_FRAME, // roles::INTERNAL_FRAME 10 - ATK_ROLE_MENU, // roles::MENUPOPUP 11 - ATK_ROLE_MENU_ITEM, // roles::MENUITEM 12 - ATK_ROLE_TOOL_TIP, // roles::TOOLTIP 13 - ATK_ROLE_EMBEDDED, // roles::APPLICATION 14 - ATK_ROLE_DOCUMENT_FRAME, // roles::DOCUMENT 15 - ATK_ROLE_PANEL, // roles::PANE 16 - ATK_ROLE_CHART, // roles::CHART 17 - ATK_ROLE_DIALOG, // roles::DIALOG 18 - ATK_ROLE_UNKNOWN, // roles::BORDER 19 - ATK_ROLE_PANEL, // roles::GROUPING 20 - ATK_ROLE_SEPARATOR, // roles::SEPARATOR 21 - ATK_ROLE_TOOL_BAR, // roles::TOOLBAR 22 - ATK_ROLE_STATUSBAR, // roles::STATUSBAR 23 - ATK_ROLE_TABLE, // roles::TABLE 24 - ATK_ROLE_COLUMN_HEADER, // roles::COLUMNHEADER 25 - ATK_ROLE_ROW_HEADER, // roles::ROWHEADER 26 - ATK_ROLE_UNKNOWN, // roles::COLUMN 27 - ATK_ROLE_LIST_ITEM, // roles::ROW 28 - ATK_ROLE_TABLE_CELL, // roles::CELL 29 - ATK_ROLE_LINK, // roles::LINK 30 - ATK_ROLE_UNKNOWN, // roles::HELPBALLOON 31 - ATK_ROLE_IMAGE, // roles::CHARACTER 32 - ATK_ROLE_LIST, // roles::LIST 33 - ATK_ROLE_LIST_ITEM, // roles::LISTITEM 34 - ATK_ROLE_TREE, // roles::OUTLINE 35 - ATK_ROLE_LIST_ITEM, // roles::OUTLINEITEM 36 - ATK_ROLE_PAGE_TAB, // roles::PAGETAB 37 - ATK_ROLE_SCROLL_PANE, // roles::PROPERTYPAGE 38 - ATK_ROLE_UNKNOWN, // roles::INDICATOR 39 - ATK_ROLE_IMAGE, // roles::GRAPHIC 40 - ATK_ROLE_UNKNOWN, // roles::STATICTEXT 41 - ATK_ROLE_UNKNOWN, // roles::TEXT_LEAF 42 - ATK_ROLE_PUSH_BUTTON, // roles::PUSHBUTTON 43 - ATK_ROLE_CHECK_BOX, // roles::CHECKBUTTON 44 - ATK_ROLE_RADIO_BUTTON, // roles::RADIOBUTTON 45 - ATK_ROLE_COMBO_BOX, // roles::COMBOBOX 46 - ATK_ROLE_COMBO_BOX, // roles::DROPLIST 47 - ATK_ROLE_PROGRESS_BAR, // roles::PROGRESSBAR 48 - ATK_ROLE_DIAL, // roles::DIAL 49 - ATK_ROLE_UNKNOWN, // roles::HOTKEYFIELD 50 - ATK_ROLE_SLIDER, // roles::SLIDER 51 - ATK_ROLE_SPIN_BUTTON, // roles::SPINBUTTON 52 - ATK_ROLE_IMAGE, // roles::DIAGRAM 53 - ATK_ROLE_ANIMATION, // roles::ANIMATION 54 - ATK_ROLE_UNKNOWN, // roles::EQUATION 55 - ATK_ROLE_PUSH_BUTTON, // roles::BUTTONDROPDOWN 56 - ATK_ROLE_PUSH_BUTTON, // roles::BUTTONMENU 57 - ATK_ROLE_UNKNOWN, // roles::BUTTONDROPDOWNGRID 58 - ATK_ROLE_UNKNOWN, // roles::WHITESPACE 59 - ATK_ROLE_PAGE_TAB_LIST, // roles::PAGETABLIST 60 - ATK_ROLE_UNKNOWN, // roles::CLOCK 61 - ATK_ROLE_PUSH_BUTTON, // roles::SPLITBUTTON 62 - ATK_ROLE_UNKNOWN, // roles::IPADDRESS 63 - ATK_ROLE_ACCEL_LABEL, // roles::ACCEL_LABEL 64 - ATK_ROLE_ARROW, // roles::ARROW 65 - ATK_ROLE_CANVAS, // roles::CANVAS 66 - ATK_ROLE_CHECK_MENU_ITEM, // roles::CHECK_MENU_ITEM 67 - ATK_ROLE_COLOR_CHOOSER, // roles::COLOR_CHOOSER 68 - ATK_ROLE_DATE_EDITOR, // roles::DATE_EDITOR 69 - ATK_ROLE_DESKTOP_ICON, // roles::DESKTOP_ICON 70 - ATK_ROLE_DESKTOP_FRAME, // roles::DESKTOP_FRAME 71 - ATK_ROLE_DIRECTORY_PANE, // roles::DIRECTORY_PANE 72 - ATK_ROLE_FILE_CHOOSER, // roles::FILE_CHOOSER 73 - ATK_ROLE_FONT_CHOOSER, // roles::FONT_CHOOSER 74 - ATK_ROLE_FRAME, // roles::CHROME_WINDOW 75 - ATK_ROLE_GLASS_PANE, // roles::GLASS_PANE 76 - ATK_ROLE_HTML_CONTAINER, // roles::HTML_CONTAINER 77 - ATK_ROLE_ICON, // roles::ICON 78 - ATK_ROLE_LABEL, // roles::LABEL 79 - ATK_ROLE_LAYERED_PANE, // roles::LAYERED_PANE 80 - ATK_ROLE_OPTION_PANE, // roles::OPTION_PANE 81 - ATK_ROLE_PASSWORD_TEXT, // roles::PASSWORD_TEXT 82 - ATK_ROLE_POPUP_MENU, // roles::POPUP_MENU 83 - ATK_ROLE_RADIO_MENU_ITEM, // roles::RADIO_MENU_ITEM 84 - ATK_ROLE_ROOT_PANE, // roles::ROOT_PANE 85 - ATK_ROLE_SCROLL_PANE, // roles::SCROLL_PANE 86 - ATK_ROLE_SPLIT_PANE, // roles::SPLIT_PANE 87 - ATK_ROLE_TABLE_COLUMN_HEADER, // roles::TABLE_COLUMN_HEADER 88 - ATK_ROLE_TABLE_ROW_HEADER, // roles::TABLE_ROW_HEADER 89 - ATK_ROLE_TEAR_OFF_MENU_ITEM, // roles::TEAR_OFF_MENU_ITEM 90 - ATK_ROLE_TERMINAL, // roles::TERMINAL 91 - ATK_ROLE_TEXT, // roles::TEXT_CONTAINER 92 - ATK_ROLE_TOGGLE_BUTTON, // roles::TOGGLE_BUTTON 93 - ATK_ROLE_TREE_TABLE, // roles::TREE_TABLE 94 - ATK_ROLE_VIEWPORT, // roles::VIEWPORT 95 - ATK_ROLE_HEADER, // roles::HEADER 96 - ATK_ROLE_FOOTER, // roles::FOOTER 97 - ATK_ROLE_PARAGRAPH, // roles::PARAGRAPH 98 - ATK_ROLE_RULER, // roles::RULER 99 - ATK_ROLE_AUTOCOMPLETE, // roles::AUTOCOMPLETE 100 - ATK_ROLE_EDITBAR, // roles::EDITBAR 101 - ATK_ROLE_ENTRY, // roles::ENTRY 102 - ATK_ROLE_CAPTION, // roles::CAPTION 103 - ATK_ROLE_DOCUMENT_FRAME, // roles::DOCUMENT_FRAME 104 - ATK_ROLE_HEADING, // roles::HEADING 105 - ATK_ROLE_PAGE, // roles::PAGE 106 - ATK_ROLE_SECTION, // roles::SECTION 107 - ATK_ROLE_REDUNDANT_OBJECT, // roles::REDUNDANT_OBJECT 108 - ATK_ROLE_FORM, // roles::FORM 109 - ATK_ROLE_INPUT_METHOD_WINDOW, // roles::IME 110 - ATK_ROLE_APPLICATION, // roles::APP_ROOT 111 - ATK_ROLE_MENU, // roles::PARENT_MENUITEM 112 - ATK_ROLE_CALENDAR, // roles::CALENDAR 113 - ATK_ROLE_MENU, // roles::COMBOBOX_LIST 114 - ATK_ROLE_MENU_ITEM, // roles::COMBOBOX_OPTION 115 - ATK_ROLE_IMAGE, // roles::IMAGE_MAP 116 - ATK_ROLE_LIST_ITEM, // roles::OPTION 117 - ATK_ROLE_LIST_ITEM, // roles::RICH_OPTION 118 - ATK_ROLE_LIST, // roles::LISTBOX 119 - ATK_ROLE_UNKNOWN, // roles::FLAT_EQUATION 120 - ATK_ROLE_TABLE_CELL, // roles::GRID_CELL 121 - ATK_ROLE_PANEL, // roles::EMBEDDED_OBJECT 122 - ATK_ROLE_SECTION, // roles::NOTE 123 - ATK_ROLE_PANEL, // roles::FIGURE 124 - ATK_ROLE_CHECK_BOX, // roles::CHECK_RICH_OPTION 125 - kROLE_ATK_LAST_ENTRY // roles::LAST_ENTRY -}; -
--- a/accessible/src/base/AccEvent.cpp +++ b/accessible/src/base/AccEvent.cpp @@ -34,19 +34,19 @@ * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "AccEvent.h" +#include "ApplicationAccessibleWrap.h" #include "nsAccessibilityService.h" #include "nsAccUtils.h" -#include "nsApplicationAccessibleWrap.h" #include "nsDocAccessible.h" #include "nsIAccessibleText.h" #include "nsAccEvent.h" #include "States.h" #include "nsIDOMDocument.h" #include "nsEventStateManager.h" #include "nsIServiceManager.h" @@ -150,17 +150,17 @@ AccEvent::CaptureIsFromUserInput(EIsFrom { nsINode *targetNode = GetNode(); #ifdef DEBUG if (!targetNode) { // XXX: remove this hack during reorganization of 506907. Meanwhile we // want to get rid an assertion for application accessible events which // don't have DOM node (see bug 506206). - nsApplicationAccessible *applicationAcc = + ApplicationAccessible* applicationAcc = nsAccessNode::GetApplicationAccessible(); if (mAccessible != static_cast<nsIAccessible*>(applicationAcc)) NS_ASSERTION(targetNode, "There should always be a DOM node for an event"); } #endif if (aIsFromUserInput != eAutoDetect) {
--- a/accessible/src/base/Makefile.in +++ b/accessible/src/base/Makefile.in @@ -64,17 +64,16 @@ CPPSRCS = \ nsAccUtils.cpp \ nsAccessibilityService.cpp \ nsAccessible.cpp \ nsAccessiblePivot.cpp \ nsAccTreeWalker.cpp \ nsBaseWidgetAccessible.cpp \ nsEventShell.cpp \ nsRootAccessible.cpp \ - nsApplicationAccessible.cpp \ nsCaretAccessible.cpp \ nsTextAccessible.cpp \ nsTextEquivUtils.cpp \ StyleInfo.cpp \ TextAttrs.cpp \ TextUpdater.cpp \ $(NULL)
--- a/accessible/src/base/Role.h +++ b/accessible/src/base/Role.h @@ -36,23 +36,26 @@ * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef _role_h_ #define _role_h_ /** - * Note: Make sure to update the localized role names when changing the list. + * @note Make sure to update the localized role names when changing the list. + * @note When adding a new role, be sure to also add it to base/RoleMap.h and + * update nsIAccessibleRole. */ namespace mozilla { namespace a11y { namespace roles { - enum Role { + +enum Role { /** * Used when accessible hans't strong defined role. */ NOTHING = 0, /** * Represents a title or caption bar for a window. It is used by MSAA only, * supported automatically by MS Windows. @@ -794,19 +797,31 @@ namespace roles { FIGURE = 124, /** * Represents a rich item with a check box. */ CHECK_RICH_OPTION = 125, /** - * It's not role actually. This constant is important to help ensure - * nsRoleMap's are synchronized. + * Represent a definition list (dl in HTML). + */ + DEFINITION_LIST = 126, + + /** + * Represent a term in a definition list (dt in HTML). */ - LAST_ENTRY = 126 - }; + TERM = 127, + + /** + * Represent a definition in a definition list (dd in HTML) + */ + DEFINITION = 128, +}; + } // namespace role + typedef enum mozilla::a11y::roles::Role role; + } // namespace a11y } // namespace mozilla #endif
new file mode 100644 --- /dev/null +++ b/accessible/src/base/RoleMap.h @@ -0,0 +1,920 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Usage: declare the macro ROLE()with the following arguments: + * ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) + */ + +ROLE(NOTHING, + "nothing", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, + USE_ROLE_STRING, + IA2_ROLE_UNKNOWN) + +ROLE(TITLEBAR, + "titlebar", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, //Irrelevant on OS X; windows are always native. + ROLE_SYSTEM_TITLEBAR, + ROLE_SYSTEM_TITLEBAR) + +ROLE(MENUBAR, + "menubar", + ATK_ROLE_MENU_BAR, + NSAccessibilityMenuBarRole, //Irrelevant on OS X; the menubar will always be native and on the top of the screen. + ROLE_SYSTEM_MENUBAR, + ROLE_SYSTEM_MENUBAR) + +ROLE(SCROLLBAR, + "scrollbar", + ATK_ROLE_SCROLL_BAR, + NSAccessibilityScrollBarRole, //We might need to make this its own mozAccessible, to support the children objects (valueindicator, down/up buttons). + ROLE_SYSTEM_SCROLLBAR, + ROLE_SYSTEM_SCROLLBAR) + +ROLE(GRIP, + "grip", + ATK_ROLE_UNKNOWN, + NSAccessibilitySplitterRole, + ROLE_SYSTEM_GRIP, + ROLE_SYSTEM_GRIP) + +ROLE(SOUND, + "sound", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, //Unused on OS X. + ROLE_SYSTEM_SOUND, + ROLE_SYSTEM_SOUND) + +ROLE(CURSOR, + "cursor", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, //Unused on OS X. + ROLE_SYSTEM_CURSOR, + ROLE_SYSTEM_CURSOR) + +ROLE(CARET, + "caret", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, //Unused on OS X. + ROLE_SYSTEM_CARET, + ROLE_SYSTEM_CARET) + +ROLE(ALERT, + "alert", + ATK_ROLE_ALERT, + NSAccessibilityWindowRole, + ROLE_SYSTEM_ALERT, + ROLE_SYSTEM_ALERT) + +ROLE(WINDOW, + "window", + ATK_ROLE_WINDOW, + NSAccessibilityWindowRole, //Irrelevant on OS X; all window a11y is handled by the system. + ROLE_SYSTEM_WINDOW, + ROLE_SYSTEM_WINDOW) + +ROLE(INTERNAL_FRAME, + "internal frame", + ATK_ROLE_INTERNAL_FRAME, + NSAccessibilityScrollAreaRole, + USE_ROLE_STRING, + IA2_ROLE_INTERNAL_FRAME) + +ROLE(MENUPOPUP, + "menupopup", + ATK_ROLE_MENU, + NSAccessibilityMenuRole, //The parent of menuitems. + ROLE_SYSTEM_MENUPOPUP, + ROLE_SYSTEM_MENUPOPUP) + +ROLE(MENUITEM, + "menuitem", + ATK_ROLE_MENU_ITEM, + NSAccessibilityMenuItemRole, + ROLE_SYSTEM_MENUITEM, + ROLE_SYSTEM_MENUITEM) + +ROLE(TOOLTIP, + "tooltip", + ATK_ROLE_TOOL_TIP, + @"AXHelpTag", //10.4+ only, so we re-define the constant. + ROLE_SYSTEM_TOOLTIP, + ROLE_SYSTEM_TOOLTIP) + +ROLE(APPLICATION, + "application", + ATK_ROLE_EMBEDDED, + NSAccessibilityGroupRole, //Unused on OS X. the system will take care of this. + ROLE_SYSTEM_APPLICATION, + ROLE_SYSTEM_APPLICATION) + +ROLE(DOCUMENT, + "document", + ATK_ROLE_DOCUMENT_FRAME, + @"AXWebArea", + ROLE_SYSTEM_DOCUMENT, + ROLE_SYSTEM_DOCUMENT) + +/** + * msaa comment: + * We used to map to ROLE_SYSTEM_PANE, but JAWS would + * not read the accessible name for the contaning pane. + * However, JAWS will read the accessible name for a groupbox. + * By mapping a PANE to a GROUPING, we get no undesirable effects, + * but fortunately JAWS will then read the group's label, + * when an inner control gets focused. + */ +ROLE(PANE, + "pane", + ATK_ROLE_PANEL, + NSAccessibilityGroupRole, + ROLE_SYSTEM_GROUPING, + ROLE_SYSTEM_GROUPING) + +ROLE(CHART, + "chart", + ATK_ROLE_CHART, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_CHART, + ROLE_SYSTEM_CHART) + +ROLE(DIALOG, + "dialog", + ATK_ROLE_DIALOG, + NSAccessibilityWindowRole, //There's a dialog subrole. + ROLE_SYSTEM_DIALOG, + ROLE_SYSTEM_DIALOG) + +ROLE(BORDER, + "border", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, //Unused on OS X. + ROLE_SYSTEM_BORDER, + ROLE_SYSTEM_BORDER) + +ROLE(GROUPING, + "grouping", + ATK_ROLE_PANEL, + NSAccessibilityGroupRole, + ROLE_SYSTEM_GROUPING, + ROLE_SYSTEM_GROUPING) + +ROLE(SEPARATOR, + "separator", + ATK_ROLE_SEPARATOR, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_SEPARATOR, + ROLE_SYSTEM_SEPARATOR) + +ROLE(TOOLBAR, + "toolbar", + ATK_ROLE_TOOL_BAR, + NSAccessibilityToolbarRole, + ROLE_SYSTEM_TOOLBAR, + ROLE_SYSTEM_TOOLBAR) + +ROLE(STATUSBAR, + "statusbar", + ATK_ROLE_STATUSBAR, + NSAccessibilityUnknownRole, //Doesn't exist on OS X (a status bar is its parts; a progressbar, a label, etc.) + ROLE_SYSTEM_STATUSBAR, + ROLE_SYSTEM_STATUSBAR) + +ROLE(TABLE, + "table", + ATK_ROLE_TABLE, + NSAccessibilityGroupRole, + ROLE_SYSTEM_TABLE, + ROLE_SYSTEM_TABLE) + +ROLE(COLUMNHEADER, + "columnheader", + ATK_ROLE_COLUMN_HEADER, + NSAccessibilityGroupRole, + ROLE_SYSTEM_COLUMNHEADER, + ROLE_SYSTEM_COLUMNHEADER) + +ROLE(ROWHEADER, + "rowheader", + ATK_ROLE_ROW_HEADER, + NSAccessibilityGroupRole, + ROLE_SYSTEM_ROWHEADER, + ROLE_SYSTEM_ROWHEADER) + +ROLE(COLUMN, + "column", + ATK_ROLE_UNKNOWN, + NSAccessibilityColumnRole, + ROLE_SYSTEM_COLUMN, + ROLE_SYSTEM_COLUMN) + +ROLE(ROW, + "row", + ATK_ROLE_LIST_ITEM, + NSAccessibilityRowRole, + ROLE_SYSTEM_ROW, + ROLE_SYSTEM_ROW) + +ROLE(CELL, + "cell", + ATK_ROLE_TABLE_CELL, + NSAccessibilityGroupRole, + ROLE_SYSTEM_CELL, + ROLE_SYSTEM_CELL) + +ROLE(LINK, + "link", + ATK_ROLE_LINK, + @"AXLink", //10.4+ the attr first define in SDK 10.4, so we define it here too. ROLE_LINK + ROLE_SYSTEM_LINK, + ROLE_SYSTEM_LINK) + +ROLE(HELPBALLOON, + "helpballoon", + ATK_ROLE_UNKNOWN, + @"AXHelpTag", + ROLE_SYSTEM_HELPBALLOON, + ROLE_SYSTEM_HELPBALLOON) + +ROLE(CHARACTER, + "character", + ATK_ROLE_IMAGE, + NSAccessibilityUnknownRole, //Unused on OS X. + ROLE_SYSTEM_CHARACTER, + ROLE_SYSTEM_CHARACTER) + +ROLE(LIST, + "list", + ATK_ROLE_LIST, + NSAccessibilityListRole, + ROLE_SYSTEM_LIST, + ROLE_SYSTEM_LIST) + +ROLE(LISTITEM, + "listitem", + ATK_ROLE_LIST_ITEM, + NSAccessibilityGroupRole, + ROLE_SYSTEM_LISTITEM, + ROLE_SYSTEM_LISTITEM) + +ROLE(OUTLINE, + "outline", + ATK_ROLE_TREE, + NSAccessibilityOutlineRole, + ROLE_SYSTEM_OUTLINE, + ROLE_SYSTEM_OUTLINE) + +ROLE(OUTLINEITEM, + "outlineitem", + ATK_ROLE_LIST_ITEM, + NSAccessibilityRowRole, //XXX: use OutlineRow as subrole. + ROLE_SYSTEM_OUTLINEITEM, + ROLE_SYSTEM_OUTLINEITEM) + +ROLE(PAGETAB, + "pagetab", + ATK_ROLE_PAGE_TAB, + NSAccessibilityRadioButtonRole, + ROLE_SYSTEM_PAGETAB, + ROLE_SYSTEM_PAGETAB) + +ROLE(PROPERTYPAGE, + "propertypage", + ATK_ROLE_SCROLL_PANE, + NSAccessibilityGroupRole, + ROLE_SYSTEM_PROPERTYPAGE, + ROLE_SYSTEM_PROPERTYPAGE) + +ROLE(INDICATOR, + "indicator", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_INDICATOR, + ROLE_SYSTEM_INDICATOR) + +ROLE(GRAPHIC, + "graphic", + ATK_ROLE_IMAGE, + NSAccessibilityImageRole, + ROLE_SYSTEM_GRAPHIC, + ROLE_SYSTEM_GRAPHIC) + +ROLE(STATICTEXT, + "statictext", + ATK_ROLE_UNKNOWN, + NSAccessibilityStaticTextRole, + ROLE_SYSTEM_STATICTEXT, + ROLE_SYSTEM_STATICTEXT) + +ROLE(TEXT_LEAF, + "text leaf", + ATK_ROLE_UNKNOWN, + NSAccessibilityStaticTextRole, + ROLE_SYSTEM_TEXT, + ROLE_SYSTEM_TEXT) + +ROLE(PUSHBUTTON, + "pushbutton", + ATK_ROLE_PUSH_BUTTON, + NSAccessibilityButtonRole, + ROLE_SYSTEM_PUSHBUTTON, + ROLE_SYSTEM_PUSHBUTTON) + +ROLE(CHECKBUTTON, + "checkbutton", + ATK_ROLE_CHECK_BOX, + NSAccessibilityCheckBoxRole, + ROLE_SYSTEM_CHECKBUTTON, + ROLE_SYSTEM_CHECKBUTTON) + +ROLE(RADIOBUTTON, + "radiobutton", + ATK_ROLE_RADIO_BUTTON, + NSAccessibilityRadioButtonRole, + ROLE_SYSTEM_RADIOBUTTON, + ROLE_SYSTEM_RADIOBUTTON) + +ROLE(COMBOBOX, + "combobox", + ATK_ROLE_COMBO_BOX, + NSAccessibilityPopUpButtonRole, + ROLE_SYSTEM_COMBOBOX, + ROLE_SYSTEM_COMBOBOX) + +ROLE(DROPLIST, + "droplist", + ATK_ROLE_COMBO_BOX, + NSAccessibilityPopUpButtonRole, + ROLE_SYSTEM_DROPLIST, + ROLE_SYSTEM_DROPLIST) + +ROLE(PROGRESSBAR, + "progressbar", + ATK_ROLE_PROGRESS_BAR, + NSAccessibilityProgressIndicatorRole, + ROLE_SYSTEM_PROGRESSBAR, + ROLE_SYSTEM_PROGRESSBAR) + +ROLE(DIAL, + "dial", + ATK_ROLE_DIAL, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_DIAL, + ROLE_SYSTEM_DIAL) + +ROLE(HOTKEYFIELD, + "hotkeyfield", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_HOTKEYFIELD, + ROLE_SYSTEM_HOTKEYFIELD) + +ROLE(SLIDER, + "slider", + ATK_ROLE_SLIDER, + NSAccessibilitySliderRole, + ROLE_SYSTEM_SLIDER, + ROLE_SYSTEM_SLIDER) + +ROLE(SPINBUTTON, + "spinbutton", + ATK_ROLE_SPIN_BUTTON, + NSAccessibilityIncrementorRole, //Subroles: Increment/Decrement. + ROLE_SYSTEM_SPINBUTTON, + ROLE_SYSTEM_SPINBUTTON) + +ROLE(DIAGRAM, + "diagram", + ATK_ROLE_IMAGE, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_DIAGRAM, + ROLE_SYSTEM_DIAGRAM) + +ROLE(ANIMATION, + "animation", + ATK_ROLE_ANIMATION, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_ANIMATION, + ROLE_SYSTEM_ANIMATION) + +ROLE(EQUATION, + "equation", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_EQUATION, + ROLE_SYSTEM_EQUATION) + +ROLE(BUTTONDROPDOWN, + "buttondropdown", + ATK_ROLE_PUSH_BUTTON, + NSAccessibilityPopUpButtonRole, + ROLE_SYSTEM_BUTTONDROPDOWN, + ROLE_SYSTEM_BUTTONDROPDOWN) + +ROLE(BUTTONMENU, + "buttonmenu", + ATK_ROLE_PUSH_BUTTON, + NSAccessibilityMenuButtonRole, + ROLE_SYSTEM_BUTTONMENU, + ROLE_SYSTEM_BUTTONMENU) + +ROLE(BUTTONDROPDOWNGRID, + "buttondropdowngrid", + ATK_ROLE_UNKNOWN, + NSAccessibilityGroupRole, + ROLE_SYSTEM_BUTTONDROPDOWNGRID, + ROLE_SYSTEM_BUTTONDROPDOWNGRID) + +ROLE(WHITESPACE, + "whitespace", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_WHITESPACE, + ROLE_SYSTEM_WHITESPACE) + +ROLE(PAGETABLIST, + "pagetablist", + ATK_ROLE_PAGE_TAB_LIST, + NSAccessibilityTabGroupRole, + ROLE_SYSTEM_PAGETABLIST, + ROLE_SYSTEM_PAGETABLIST) + +ROLE(CLOCK, + "clock", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, //Unused on OS X + ROLE_SYSTEM_CLOCK, + ROLE_SYSTEM_CLOCK) + +ROLE(SPLITBUTTON, + "splitbutton", + ATK_ROLE_PUSH_BUTTON, + NSAccessibilityButtonRole, + ROLE_SYSTEM_SPLITBUTTON, + ROLE_SYSTEM_SPLITBUTTON) + +ROLE(IPADDRESS, + "ipaddress", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_IPADDRESS, + ROLE_SYSTEM_IPADDRESS) + +ROLE(ACCEL_LABEL, + "accel label", + ATK_ROLE_ACCEL_LABEL, + NSAccessibilityStaticTextRole, + ROLE_SYSTEM_STATICTEXT, + ROLE_SYSTEM_STATICTEXT) + +ROLE(ARROW, + "arrow", + ATK_ROLE_ARROW, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_INDICATOR, + ROLE_SYSTEM_INDICATOR) + +ROLE(CANVAS, + "canvas", + ATK_ROLE_CANVAS, + NSAccessibilityImageRole, + USE_ROLE_STRING, + IA2_ROLE_CANVAS) + +ROLE(CHECK_MENU_ITEM, + "check menu item", + ATK_ROLE_CHECK_MENU_ITEM, + NSAccessibilityMenuItemRole, + ROLE_SYSTEM_MENUITEM, + IA2_ROLE_CHECK_MENU_ITEM) + +ROLE(COLOR_CHOOSER, + "color chooser", + ATK_ROLE_COLOR_CHOOSER, + NSAccessibilityColorWellRole, + ROLE_SYSTEM_DIALOG, + IA2_ROLE_COLOR_CHOOSER) + +ROLE(DATE_EDITOR, + "date editor", + ATK_ROLE_DATE_EDITOR, + NSAccessibilityUnknownRole, + USE_ROLE_STRING, + IA2_ROLE_DATE_EDITOR) + +ROLE(DESKTOP_ICON, + "desktop icon", + ATK_ROLE_DESKTOP_ICON, + NSAccessibilityImageRole, + USE_ROLE_STRING, + IA2_ROLE_DESKTOP_ICON) + +ROLE(DESKTOP_FRAME, + "desktop frame", + ATK_ROLE_DESKTOP_FRAME, + NSAccessibilityUnknownRole, + USE_ROLE_STRING, + IA2_ROLE_DESKTOP_PANE) + +ROLE(DIRECTORY_PANE, + "directory pane", + ATK_ROLE_DIRECTORY_PANE, + NSAccessibilityBrowserRole, + USE_ROLE_STRING, + IA2_ROLE_DIRECTORY_PANE) + +ROLE(FILE_CHOOSER, + "file chooser", + ATK_ROLE_FILE_CHOOSER, + NSAccessibilityUnknownRole, //Unused on OS X + USE_ROLE_STRING, + IA2_ROLE_FILE_CHOOSER) + +ROLE(FONT_CHOOSER, + "font chooser", + ATK_ROLE_FONT_CHOOSER, + NSAccessibilityUnknownRole, + USE_ROLE_STRING, + IA2_ROLE_FONT_CHOOSER) + +ROLE(CHROME_WINDOW, + "chrome window", + ATK_ROLE_FRAME, + NSAccessibilityUnknownRole, //Unused on OS X + ROLE_SYSTEM_APPLICATION, + IA2_ROLE_FRAME) + +ROLE(GLASS_PANE, + "glass pane", + ATK_ROLE_GLASS_PANE, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_GLASS_PANE) + +ROLE(HTML_CONTAINER, + "html container", + ATK_ROLE_HTML_CONTAINER, + NSAccessibilityUnknownRole, + USE_ROLE_STRING, + IA2_ROLE_UNKNOWN) + +ROLE(ICON, + "icon", + ATK_ROLE_ICON, + NSAccessibilityImageRole, + ROLE_SYSTEM_PUSHBUTTON, + IA2_ROLE_ICON) + +ROLE(LABEL, + "label", + ATK_ROLE_LABEL, + NSAccessibilityGroupRole, + ROLE_SYSTEM_STATICTEXT, + IA2_ROLE_LABEL) + +ROLE(LAYERED_PANE, + "layered pane", + ATK_ROLE_LAYERED_PANE, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_LAYERED_PANE) + +ROLE(OPTION_PANE, + "option pane", + ATK_ROLE_OPTION_PANE, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_OPTION_PANE) + +ROLE(PASSWORD_TEXT, + "password text", + ATK_ROLE_PASSWORD_TEXT, + NSAccessibilityTextFieldRole, + ROLE_SYSTEM_TEXT, + ROLE_SYSTEM_TEXT) + +ROLE(POPUP_MENU, + "popup menu", + ATK_ROLE_POPUP_MENU, + NSAccessibilityUnknownRole, //Unused + ROLE_SYSTEM_MENUPOPUP, + ROLE_SYSTEM_MENUPOPUP) + +ROLE(RADIO_MENU_ITEM, + "radio menu item", + ATK_ROLE_RADIO_MENU_ITEM, + NSAccessibilityMenuItemRole, + ROLE_SYSTEM_MENUITEM, + IA2_ROLE_RADIO_MENU_ITEM) + +ROLE(ROOT_PANE, + "root pane", + ATK_ROLE_ROOT_PANE, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_ROOT_PANE) + +ROLE(SCROLL_PANE, + "scroll pane", + ATK_ROLE_SCROLL_PANE, + NSAccessibilityScrollAreaRole, + USE_ROLE_STRING, + IA2_ROLE_SCROLL_PANE) + +ROLE(SPLIT_PANE, + "split pane", + ATK_ROLE_SPLIT_PANE, + NSAccessibilitySplitGroupRole, + USE_ROLE_STRING, + IA2_ROLE_SPLIT_PANE) + +ROLE(TABLE_COLUMN_HEADER, + "table column header", + ATK_ROLE_TABLE_COLUMN_HEADER, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_COLUMNHEADER, + ROLE_SYSTEM_COLUMNHEADER) + +ROLE(TABLE_ROW_HEADER, + "table row header", + ATK_ROLE_TABLE_ROW_HEADER, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_ROWHEADER, + ROLE_SYSTEM_ROWHEADER) + +ROLE(TEAR_OFF_MENU_ITEM, + "tear off menu item", + ATK_ROLE_TEAR_OFF_MENU_ITEM, + NSAccessibilityMenuItemRole, + ROLE_SYSTEM_MENUITEM, + IA2_ROLE_TEAR_OFF_MENU) + +ROLE(TERMINAL, + "terminal", + ATK_ROLE_TERMINAL, + NSAccessibilityUnknownRole, + USE_ROLE_STRING, + IA2_ROLE_TERMINAL) + +ROLE(TEXT_CONTAINER, + "text container", + ATK_ROLE_TEXT, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_TEXT_FRAME) + +ROLE(TOGGLE_BUTTON, + "toggle button", + ATK_ROLE_TOGGLE_BUTTON, + NSAccessibilityButtonRole, + ROLE_SYSTEM_PUSHBUTTON, + IA2_ROLE_TOGGLE_BUTTON) + +ROLE(TREE_TABLE, + "tree table", + ATK_ROLE_TREE_TABLE, + NSAccessibilityTableRole, + ROLE_SYSTEM_OUTLINE, + ROLE_SYSTEM_OUTLINE) + +ROLE(VIEWPORT, + "viewport", + ATK_ROLE_VIEWPORT, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_PANE, + IA2_ROLE_VIEW_PORT) + +ROLE(HEADER, + "header", + ATK_ROLE_HEADER, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_HEADER) + +ROLE(FOOTER, + "footer", + ATK_ROLE_FOOTER, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_FOOTER) + +ROLE(PARAGRAPH, + "paragraph", + ATK_ROLE_PARAGRAPH, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_PARAGRAPH) + +ROLE(RULER, + "ruler", + ATK_ROLE_RULER, + @"AXRuler", //10.4+ only, so we re-define the constant. + USE_ROLE_STRING, + IA2_ROLE_RULER) + +ROLE(AUTOCOMPLETE, + "autocomplete", + ATK_ROLE_AUTOCOMPLETE, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_COMBOBOX, + ROLE_SYSTEM_COMBOBOX) + +ROLE(EDITBAR, + "editbar", + ATK_ROLE_EDITBAR, + NSAccessibilityTextFieldRole, + ROLE_SYSTEM_TEXT, + IA2_ROLE_EDITBAR) + +ROLE(ENTRY, + "entry", + ATK_ROLE_ENTRY, + NSAccessibilityTextFieldRole, + ROLE_SYSTEM_TEXT, + ROLE_SYSTEM_TEXT) + +ROLE(CAPTION, + "caption", + ATK_ROLE_CAPTION, + NSAccessibilityStaticTextRole, + USE_ROLE_STRING, + IA2_ROLE_CAPTION) + +ROLE(DOCUMENT_FRAME, + "document frame", + ATK_ROLE_DOCUMENT_FRAME, + NSAccessibilityScrollAreaRole, + USE_ROLE_STRING, + IA2_ROLE_UNKNOWN) + +ROLE(HEADING, + "heading", + ATK_ROLE_HEADING, + @"AXHeading", + USE_ROLE_STRING, + IA2_ROLE_HEADING) + +ROLE(PAGE, + "page", + ATK_ROLE_PAGE, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_PAGE) + +ROLE(SECTION, + "section", + ATK_ROLE_SECTION, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_SECTION) + +ROLE(REDUNDANT_OBJECT, + "redundant object", + ATK_ROLE_REDUNDANT_OBJECT, + NSAccessibilityUnknownRole, + USE_ROLE_STRING, + IA2_ROLE_REDUNDANT_OBJECT) + +ROLE(FORM, + "form", + ATK_ROLE_FORM, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_FORM) + +ROLE(IME, + "ime", + ATK_ROLE_INPUT_METHOD_WINDOW, + NSAccessibilityUnknownRole, + USE_ROLE_STRING, + IA2_ROLE_INPUT_METHOD_WINDOW) + +ROLE(APP_ROOT, + "app root", + ATK_ROLE_APPLICATION, + NSAccessibilityUnknownRole, //Unused on OS X + ROLE_SYSTEM_APPLICATION, + ROLE_SYSTEM_APPLICATION) + +ROLE(PARENT_MENUITEM, + "parent menuitem", + ATK_ROLE_MENU, + NSAccessibilityMenuItemRole, + ROLE_SYSTEM_MENUITEM, + ROLE_SYSTEM_MENUITEM) + +ROLE(CALENDAR, + "calendar", + ATK_ROLE_CALENDAR, + NSAccessibilityGroupRole, + ROLE_SYSTEM_CLIENT, + ROLE_SYSTEM_CLIENT) + +ROLE(COMBOBOX_LIST, + "combobox list", + ATK_ROLE_MENU, + NSAccessibilityMenuRole, + ROLE_SYSTEM_LIST, + ROLE_SYSTEM_LIST) + +ROLE(COMBOBOX_OPTION, + "combobox option", + ATK_ROLE_MENU_ITEM, + NSAccessibilityMenuItemRole, + ROLE_SYSTEM_LISTITEM, + ROLE_SYSTEM_LISTITEM) + +ROLE(IMAGE_MAP, + "image map", + ATK_ROLE_IMAGE, + NSAccessibilityImageRole, + ROLE_SYSTEM_GRAPHIC, + ROLE_SYSTEM_GRAPHIC) + +ROLE(OPTION, + "listbox option", + ATK_ROLE_LIST_ITEM, + NSAccessibilityRowRole, + ROLE_SYSTEM_LISTITEM, + ROLE_SYSTEM_LISTITEM) + +ROLE(RICH_OPTION, + "listbox rich option", + ATK_ROLE_LIST_ITEM, + NSAccessibilityRowRole, + ROLE_SYSTEM_LISTITEM, + ROLE_SYSTEM_LISTITEM) + +ROLE(LISTBOX, + "listbox", + ATK_ROLE_LIST, + NSAccessibilityListRole, + ROLE_SYSTEM_LIST, + ROLE_SYSTEM_LIST) + +ROLE(FLAT_EQUATION, + "flat equation", + ATK_ROLE_UNKNOWN, + NSAccessibilityUnknownRole, + ROLE_SYSTEM_EQUATION, + ROLE_SYSTEM_EQUATION) + +ROLE(GRID_CELL, + "gridcell", + ATK_ROLE_TABLE_CELL, + NSAccessibilityGroupRole, + ROLE_SYSTEM_CELL, + ROLE_SYSTEM_CELL) + +ROLE(EMBEDDED_OBJECT, + "embedded object", + ATK_ROLE_PANEL, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_EMBEDDED_OBJECT) + +ROLE(NOTE, + "note", + ATK_ROLE_SECTION, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_NOTE) + +ROLE(FIGURE, + "figure", + ATK_ROLE_PANEL, + NSAccessibilityGroupRole, + ROLE_SYSTEM_GROUPING, + ROLE_SYSTEM_GROUPING) + +ROLE(CHECK_RICH_OPTION, + "check rich option", + ATK_ROLE_CHECK_BOX, + NSAccessibilityCheckBoxRole, + ROLE_SYSTEM_CHECKBUTTON, + ROLE_SYSTEM_CHECKBUTTON) + +ROLE(DEFINITION_LIST, + "definitionlist", + ATK_ROLE_LIST, + NSAccessibilityListRole, + ROLE_SYSTEM_LIST, + ROLE_SYSTEM_LIST) + +ROLE(TERM, + "term", + ATK_ROLE_LIST_ITEM, + NSAccessibilityGroupRole, + ROLE_SYSTEM_LISTITEM, + ROLE_SYSTEM_LISTITEM) + +ROLE(DEFINITION, + "definition", + ATK_ROLE_PARAGRAPH, + NSAccessibilityGroupRole, + USE_ROLE_STRING, + IA2_ROLE_PARAGRAPH)
--- a/accessible/src/base/nsAccDocManager.cpp +++ b/accessible/src/base/nsAccDocManager.cpp @@ -33,19 +33,19 @@ * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsAccDocManager.h" +#include "ApplicationAccessible.h" #include "nsAccessibilityService.h" #include "nsAccUtils.h" -#include "nsApplicationAccessible.h" #include "nsARIAMap.h" #include "nsRootAccessibleWrap.h" #include "States.h" #include "nsCURILoader.h" #include "nsDocShellLoadTypes.h" #include "nsIChannel.h" #include "nsIContentViewer.h"
--- a/accessible/src/base/nsAccDocManager.h +++ b/accessible/src/base/nsAccDocManager.h @@ -39,16 +39,17 @@ #define nsAccDocManager_h_ #include "nsIDocument.h" #include "nsIDOMEventListener.h" #include "nsRefPtrHashtable.h" #include "nsIWebProgress.h" #include "nsIWebProgressListener.h" #include "nsWeakReference.h" +#include "nsIPresShell.h" class nsAccessible; class nsDocAccessible; //#define DEBUG_ACCDOCMGR /** * Manage the document accessible life cycle. @@ -65,16 +66,24 @@ public: NS_DECL_NSIDOMEVENTLISTENER /** * Return document accessible for the given DOM node. */ nsDocAccessible *GetDocAccessible(nsIDocument *aDocument); /** + * Return document accessible for the given presshell. + */ + nsDocAccessible* GetDocAccessible(const nsIPresShell* aPresShell) + { + return aPresShell ? GetDocAccessible(aPresShell->GetDocument()) : nsnull; + } + + /** * Search through all document accessibles for an accessible with the given * unique id. */ nsAccessible* FindAccessibleInCache(nsINode* aNode) const; /** * Return document accessible from the cache. Convenient method for testing. */
--- a/accessible/src/base/nsAccUtils.h +++ b/accessible/src/base/nsAccUtils.h @@ -133,44 +133,33 @@ public: static bool HasDefinedARIAToken(nsIContent *aContent, nsIAtom *aAtom); /** * Return atomic value of ARIA attribute of boolean or NMTOKEN type. */ static nsIAtom* GetARIAToken(mozilla::dom::Element* aElement, nsIAtom* aAttr); /** - * Return document accessible for the given presshell. - */ - static nsDocAccessible* GetDocAccessibleFor(const nsIPresShell* aPresShell) - { - return aPresShell ? - GetAccService()->GetDocAccessible(aPresShell->GetDocument()) : nsnull; - } - - /** * Return document accessible for the given DOM node. */ static nsDocAccessible *GetDocAccessibleFor(nsINode *aNode) { nsIPresShell *presShell = nsCoreUtils::GetPresShellFor(aNode); - return presShell ? - GetAccService()->GetDocAccessible(presShell->GetDocument()) : nsnull; + return GetAccService()->GetDocAccessible(presShell); } /** * Return document accessible for the given docshell. */ static nsDocAccessible *GetDocAccessibleFor(nsIDocShellTreeItem *aContainer) { nsCOMPtr<nsIDocShell> docShell(do_QueryInterface(aContainer)); nsCOMPtr<nsIPresShell> presShell; docShell->GetPresShell(getter_AddRefs(presShell)); - return presShell ? - GetAccService()->GetDocAccessible(presShell->GetDocument()) : nsnull; + return GetAccService()->GetDocAccessible(presShell); } /** * Return ancestor in this document with the given role if it exists. * * @param aDescendant [in] descendant to start search with * @param aRole [in] role to find matching ancestor for * @return the ancestor accessible with the given role, or
--- a/accessible/src/base/nsAccessNode.cpp +++ b/accessible/src/base/nsAccessNode.cpp @@ -33,19 +33,19 @@ * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsAccessNode.h" +#include "ApplicationAccessibleWrap.h" #include "nsAccessibilityService.h" #include "nsAccUtils.h" -#include "nsApplicationAccessibleWrap.h" #include "nsCoreUtils.h" #include "nsRootAccessible.h" #include "nsIDocShell.h" #include "nsIDocShellTreeItem.h" #include "nsIDOMWindow.h" #include "nsIFrame.h" #include "nsIInterfaceRequestorUtils.h" @@ -62,17 +62,17 @@ /* For documentation of the accessibility architecture, * see http://lxr.mozilla.org/seamonkey/source/accessible/accessible-docs.html */ nsIStringBundle *nsAccessNode::gStringBundle = 0; bool nsAccessNode::gIsFormFillEnabled = false; -nsApplicationAccessible *nsAccessNode::gApplicationAccessible = nsnull; +ApplicationAccessible* nsAccessNode::gApplicationAccessible = nsnull; /* * Class nsAccessNode */ //////////////////////////////////////////////////////////////////////////////// // nsAccessible. nsISupports @@ -125,28 +125,26 @@ nsAccessNode::Init() void nsAccessNode::Shutdown() { mContent = nsnull; mDoc = nsnull; } -nsApplicationAccessible* +ApplicationAccessible* nsAccessNode::GetApplicationAccessible() { NS_ASSERTION(!nsAccessibilityService::IsShutdown(), "Accessibility wasn't initialized!"); if (!gApplicationAccessible) { - nsApplicationAccessibleWrap::PreCreate(); + ApplicationAccessibleWrap::PreCreate(); - gApplicationAccessible = new nsApplicationAccessibleWrap(); - if (!gApplicationAccessible) - return nsnull; + gApplicationAccessible = new ApplicationAccessibleWrap(); // Addref on create. Will Release in ShutdownXPAccessibility() NS_ADDREF(gApplicationAccessible); nsresult rv = gApplicationAccessible->Init(); if (NS_FAILED(rv)) { gApplicationAccessible->Shutdown(); NS_RELEASE(gApplicationAccessible); @@ -195,17 +193,17 @@ void nsAccessNode::ShutdownXPAccessibili // Called by nsAccessibilityService::Shutdown() // which happens when xpcom is shutting down // at exit of program NS_IF_RELEASE(gStringBundle); // Release gApplicationAccessible after everything else is shutdown // so we don't accidently create it again while tearing down root accessibles - nsApplicationAccessibleWrap::Unload(); + ApplicationAccessibleWrap::Unload(); if (gApplicationAccessible) { gApplicationAccessible->Shutdown(); NS_RELEASE(gApplicationAccessible); } NotifyA11yInitOrShutdown(false); }
--- a/accessible/src/base/nsAccessNode.h +++ b/accessible/src/base/nsAccessNode.h @@ -48,18 +48,18 @@ #include "a11yGeneric.h" #include "nsIContent.h" #include "nsIDOMNode.h" #include "nsINameSpaceManager.h" #include "nsIStringBundle.h" #include "nsWeakReference.h" +class ApplicationAccessible; class nsAccessNode; -class nsApplicationAccessible; class nsDocAccessible; class nsIAccessibleDocument; class nsRootAccessible; class nsIPresShell; class nsPresContext; class nsIFrame; class nsIDocShellTreeItem; @@ -78,17 +78,17 @@ public: NS_DECL_CYCLE_COLLECTION_CLASS(nsAccessNode) static void InitXPAccessibility(); static void ShutdownXPAccessibility(); /** * Return an application accessible. */ - static nsApplicationAccessible* GetApplicationAccessible(); + static ApplicationAccessible* GetApplicationAccessible(); /** * Return the document accessible for this access node. */ nsDocAccessible* Document() const { return mDoc; } /** * Return the root document accessible for this accessnode. @@ -169,13 +169,13 @@ protected: static bool gIsFormFillEnabled; private: nsAccessNode() MOZ_DELETE; nsAccessNode(const nsAccessNode&) MOZ_DELETE; nsAccessNode& operator =(const nsAccessNode&) MOZ_DELETE; - static nsApplicationAccessible *gApplicationAccessible; + static ApplicationAccessible* gApplicationAccessible; }; #endif
--- a/accessible/src/base/nsAccessibilityService.cpp +++ b/accessible/src/base/nsAccessibilityService.cpp @@ -35,25 +35,25 @@ * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #include "nsAccessibilityService.h" // NOTE: alphabetically ordered #include "Accessible-inl.h" +#include "ApplicationAccessibleWrap.h" #include "ARIAGridAccessibleWrap.h" #ifdef MOZ_ACCESSIBILITY_ATK #include "AtkSocketAccessible.h" #endif #include "FocusManager.h" #include "nsAccessiblePivot.h" #include "nsAccUtils.h" #include "nsARIAMap.h" -#include "nsApplicationAccessibleWrap.h" #include "nsIAccessibleProvider.h" #include "nsHTMLCanvasAccessible.h" #include "nsHTMLImageMapAccessible.h" #include "nsHTMLLinkAccessible.h" #include "nsHTMLSelectAccessible.h" #include "nsHTMLTableAccessibleWrap.h" #include "nsHTMLTextAccessible.h" #include "nsHyperTextAccessibleWrap.h" @@ -197,150 +197,137 @@ nsAccessibilityService::GetRootDocumentA return nsnull; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateOuterDocAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new OuterDocAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new OuterDocAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLButtonAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new HTMLButtonAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new HTMLButtonAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLLIAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLLIAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLLIAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHyperTextAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHyperTextAccessibleWrap(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHyperTextAccessibleWrap(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLCheckboxAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new HTMLCheckboxAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new HTMLCheckboxAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLComboboxAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLComboboxAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLComboboxAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLCanvasAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLCanvasAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLCanvasAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLFileInputAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new HTMLFileInputAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new HTMLFileInputAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLImageAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLImageAccessibleWrap(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLImageAccessibleWrap(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLImageMapAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLImageMapAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLImageMapAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLGroupboxAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new HTMLGroupboxAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new HTMLGroupboxAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLListboxAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLSelectListAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLSelectListAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLMediaAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsEnumRoleAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell), + new nsEnumRoleAccessible(aContent, GetDocAccessible(aPresShell), roles::GROUPING); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame, nsIContent* aContent, @@ -374,32 +361,31 @@ nsAccessibilityService::CreateHTMLObject pluginInstance) { #ifdef XP_WIN // Note: pluginPort will be null if windowless. HWND pluginPort = nsnull; aFrame->GetPluginPort(&pluginPort); nsAccessible* accessible = new nsHTMLWin32ObjectOwnerAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell), + GetDocAccessible(aPresShell), pluginPort); NS_ADDREF(accessible); return accessible; #elif MOZ_ACCESSIBILITY_ATK if (!AtkSocketAccessible::gCanEmbed) return nsnull; nsCString plugId; nsresult rv = pluginInstance->GetValueFromPlugin( NPPVpluginNativeAccessibleAtkPlugId, &plugId); if (NS_SUCCEEDED(rv) && !plugId.IsEmpty()) { AtkSocketAccessible* socketAccessible = - new AtkSocketAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell), + new AtkSocketAccessible(aContent, GetDocAccessible(aPresShell), plugId); NS_ADDREF(socketAccessible); return socketAccessible; } #endif } #endif @@ -410,106 +396,107 @@ nsAccessibilityService::CreateHTMLObject return frame ? frame->CreateAccessible() : nsnull; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLRadioButtonAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new HTMLRadioButtonAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new HTMLRadioButtonAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLTableAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLTableAccessibleWrap(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLTableAccessibleWrap(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLTableCellAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLTableCellAccessibleWrap(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLTableCellAccessibleWrap(aContent, GetDocAccessible(aPresShell)); + NS_ADDREF(accessible); + return accessible; +} + +already_AddRefed<nsAccessible> +nsAccessibilityService::CreateHTMLTableRowAccessible(nsIContent* aContent, + nsIPresShell* aPresShell) +{ + nsAccessible* accessible = + new nsEnumRoleAccessible(aContent, GetDocAccessible(aPresShell), roles::ROW); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLTextAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLTextAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLTextAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLTextFieldAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new HTMLTextFieldAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new HTMLTextFieldAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLLabelAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLLabelAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLLabelAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLHRAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLHRAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLHRAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLBRAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLBRAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLBRAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } already_AddRefed<nsAccessible> nsAccessibilityService::CreateHTMLCaptionAccessible(nsIContent* aContent, nsIPresShell* aPresShell) { nsAccessible* accessible = - new nsHTMLCaptionAccessible(aContent, - nsAccUtils::GetDocAccessibleFor(aPresShell)); + new nsHTMLCaptionAccessible(aContent, GetDocAccessible(aPresShell)); NS_ADDREF(accessible); return accessible; } void nsAccessibilityService::ContentRangeInserted(nsIPresShell* aPresShell, nsIContent* aContainer, nsIContent* aStartChild, @@ -534,17 +521,17 @@ nsAccessibilityService::ContentRangeInse catomid->ToUTF8String(cid); } printf("\ncontent inserted: %s@id='%s', container: %s@id='%s', end node: %p\n\n", NS_ConvertUTF16toUTF8(tag).get(), id.get(), NS_ConvertUTF16toUTF8(ctag).get(), cid.get(), aEndChild); #endif - nsDocAccessible* docAccessible = GetDocAccessible(aPresShell->GetDocument()); + nsDocAccessible* docAccessible = GetDocAccessible(aPresShell); if (docAccessible) docAccessible->ContentInserted(aContainer, aStartChild, aEndChild); } void nsAccessibilityService::ContentRemoved(nsIPresShell* aPresShell, nsIContent* aContainer, nsIContent* aChild) @@ -568,67 +555,67 @@ nsAccessibilityService::ContentRemoved(n catomid->ToUTF8String(cid); } printf("\ncontent removed: %s@id='%s', container: %s@id='%s'\n\n", NS_ConvertUTF16toUTF8(tag).get(), id.get(), NS_ConvertUTF16toUTF8(ctag).get(), cid.get()); #endif - nsDocAccessible* docAccessible = GetDocAccessible(aPresShell->GetDocument()); + nsDocAccessible* docAccessible = GetDocAccessible(aPresShell); if (docAccessible) docAccessible->ContentRemoved(aContainer, aChild); } void nsAccessibilityService::UpdateText(nsIPresShell* aPresShell, nsIContent* aContent) { - nsDocAccessible* document = GetDocAccessible(aPresShell->GetDocument()); + nsDocAccessible* document = GetDocAccessible(aPresShell); if (document) document->UpdateText(aContent); } void nsAccessibilityService::TreeViewChanged(nsIPresShell* aPresShell, nsIContent* aContent, nsITreeView* aView) { - nsDocAccessible* document = GetDocAccessible(aPresShell->GetDocument()); + nsDocAccessible* document = GetDocAccessible(aPresShell); if (document) { nsAccessible* accessible = document->GetAccessible(aContent); if (accessible) { nsXULTreeAccessible* treeAcc = accessible->AsXULTree(); if (treeAcc) treeAcc->TreeViewChanged(aView); } } } void nsAccessibilityService::UpdateListBullet(nsIPresShell* aPresShell, nsIContent* aHTMLListItemContent, bool aHasBullet) { - nsDocAccessible* document = GetDocAccessible(aPresShell->GetDocument()); + nsDocAccessible* document = GetDocAccessible(aPresShell); if (document) { nsAccessible* accessible = document->GetAccessible(aHTMLListItemContent); if (accessible) { nsHTMLLIAccessible* listItem = accessible->AsHTMLListItem(); if (listItem) listItem->UpdateBullet(aHasBullet); } } } void nsAccessibilityService::UpdateImageMap(nsImageFrame* aImageFrame) { nsIPresShell* presShell = aImageFrame->PresContext()->PresShell(); - nsDocAccessible* document = GetDocAccessible(presShell->GetDocument()); + nsDocAccessible* document = GetDocAccessible(presShell); if (document) { nsAccessible* accessible = document->GetAccessible(aImageFrame->GetContent()); if (accessible) { nsHTMLImageMapAccessible* imageMap = accessible->AsImageMap(); if (imageMap) { imageMap->UpdateChildAreas(); return; @@ -677,26 +664,26 @@ nsAccessibilityService::PresShellActivat } } } void nsAccessibilityService::RecreateAccessible(nsIPresShell* aPresShell, nsIContent* aContent) { - nsDocAccessible* document = GetDocAccessible(aPresShell->GetDocument()); + nsDocAccessible* document = GetDocAccessible(aPresShell); if (document) document->RecreateAccessible(aContent); } //////////////////////////////////////////////////////////////////////////////// // nsIAccessibleRetrieval NS_IMETHODIMP -nsAccessibilityService::GetApplicationAccessible(nsIAccessible **aAccessibleApplication) +nsAccessibilityService::GetApplicationAccessible(nsIAccessible** aAccessibleApplication) { NS_ENSURE_ARG_POINTER(aAccessibleApplication); NS_IF_ADDREF(*aAccessibleApplication = nsAccessNode::GetApplicationAccessible()); return NS_OK; } NS_IMETHODIMP @@ -714,23 +701,29 @@ nsAccessibilityService::GetAccessibleFor NS_IF_ADDREF(*aAccessible = GetAccessible(node, nsnull)); return NS_OK; } NS_IMETHODIMP nsAccessibilityService::GetStringRole(PRUint32 aRole, nsAString& aString) { - if ( aRole >= ArrayLength(kRoleNames)) { - aString.AssignLiteral("unknown"); +#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) \ + case roles::geckoRole: \ + CopyUTF8toUTF16(stringRole, aString); \ return NS_OK; + + switch (aRole) { +#include "RoleMap.h" + default: + aString.AssignLiteral("unknown"); + return NS_OK; } - CopyUTF8toUTF16(kRoleNames[aRole], aString); - return NS_OK; +#undef ROLE } NS_IMETHODIMP nsAccessibilityService::GetStringStates(PRUint32 aState, PRUint32 aExtraState, nsIDOMDOMStringList **aStringStates) { nsAccessibleDOMStringList *stringStates = new nsAccessibleDOMStringList(); NS_ENSURE_TRUE(stringStates, NS_ERROR_OUT_OF_MEMORY); @@ -1702,23 +1695,16 @@ nsAccessibilityService::CreateHTMLAccess tag == nsGkAtoms::h5 || tag == nsGkAtoms::h6 || tag == nsGkAtoms::q) { nsAccessible* accessible = new nsHyperTextAccessibleWrap(aContent, aDoc); NS_IF_ADDREF(accessible); return accessible; } - if (tag == nsGkAtoms::tr) { - nsAccessible* accessible = new nsEnumRoleAccessible(aContent, aDoc, - roles::ROW); - NS_IF_ADDREF(accessible); - return accessible; - } - if (nsCoreUtils::IsHTMLTableHeader(aContent)) { nsAccessible* accessible = new nsHTMLTableHeaderCellAccessibleWrap(aContent, aDoc); NS_IF_ADDREF(accessible); return accessible; }