Merge from mozilla-central.

--HG--
rename : accessible/src/atk/nsApplicationAccessibleWrap.cpp => accessible/src/atk/ApplicationAccessibleWrap.cpp
rename : accessible/src/atk/nsApplicationAccessibleWrap.h => accessible/src/atk/ApplicationAccessibleWrap.h
rename : accessible/src/base/nsApplicationAccessible.cpp => accessible/src/generic/ApplicationAccessible.cpp
rename : accessible/src/base/nsApplicationAccessible.h => accessible/src/generic/ApplicationAccessible.h
rename : browser/devtools/webconsole/test/browser_gcli_integrate.js => browser/devtools/shared/test/browser_gcli_integrate.js
rename : browser/devtools/webconsole/test/browser_gcli_web.js => browser/devtools/shared/test/browser_gcli_web.js
rename : security/manager/ssl/src/nsNSSIOLayer.cpp => security/manager/ssl/src/TransportSecurityInfo.cpp
rename : security/manager/ssl/src/nsNSSIOLayer.h => security/manager/ssl/src/TransportSecurityInfo.h
This commit is contained in:
David Anderson 2012-04-30 12:53:32 -07:00
commit 4ba6ace977
2933 changed files with 112379 additions and 115161 deletions

View File

@ -79,3 +79,4 @@ bbc7014db2de49e2301680d2a86be8a53108a88a AURORA_BASE_20120131
0000000000000000000000000000000000000000 AURORA_BASE_20120131
bbc7014db2de49e2301680d2a86be8a53108a88a AURORA_BASE_20120131
b6627f28b7ec17e1b46a594df0f780d3a40847e4 FIREFOX_AURORA_13_BASE
357da346ceb705d196a46574804c7c4ec44ac186 FIREFOX_AURORA_14_BASE

View File

@ -40,11 +40,8 @@
/**
* 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
{
/**
@ -798,9 +795,18 @@ interface nsIAccessibleRole : nsISupports
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_LAST_ENTRY = 126;
const unsigned long ROLE_DEFINITION_LIST = 126;
/**
* An HTML definition term <dt>
*/
const unsigned long ROLE_TERM = 127;
/**
* An HTML definition <dd>
*/
const unsigned long ROLE_DEFINITION = 128;
};

View File

@ -38,7 +38,7 @@
*
* ***** END LICENSE BLOCK ***** */
#include "nsApplicationAccessibleWrap.h"
#include "ApplicationAccessibleWrap.h"
#include "nsCOMPtr.h"
#include "nsMai.h"
@ -466,25 +466,19 @@ mai_util_remove_key_event_listener (guint remove_listener)
}
}
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 *
@ -550,15 +544,15 @@ add_listener (GSignalEmissionHook listener,
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();
@ -613,7 +607,7 @@ toplevel_event_watcher(GSignalInvocationHint* ihint,
}
bool
nsApplicationAccessibleWrap::Init()
ApplicationAccessibleWrap::Init()
{
if (ShouldA11yBeEnabled()) {
// load and initialize gail library
@ -655,11 +649,11 @@ nsApplicationAccessibleWrap::Init()
}
}
return nsApplicationAccessible::Init();
return ApplicationAccessible::Init();
}
void
nsApplicationAccessibleWrap::Unload()
ApplicationAccessibleWrap::Unload()
{
if (sToplevel_event_hook_added) {
sToplevel_event_hook_added = false;
@ -697,7 +691,7 @@ nsApplicationAccessibleWrap::Unload()
}
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
@ -707,7 +701,7 @@ nsApplicationAccessibleWrap::GetName(nsAString& aName)
}
NS_IMETHODIMP
nsApplicationAccessibleWrap::GetNativeInterface(void **aOutAccessible)
ApplicationAccessibleWrap::GetNativeInterface(void** aOutAccessible)
{
*aOutAccessible = nsnull;
@ -745,9 +739,9 @@ gboolean fireRootAccessibleAddedCB(gpointer data)
}
bool
nsApplicationAccessibleWrap::AppendChild(nsAccessible *aChild)
ApplicationAccessibleWrap::AppendChild(nsAccessible* aChild)
{
if (!nsApplicationAccessible::AppendChild(aChild))
if (!ApplicationAccessible::AppendChild(aChild))
return false;
AtkObject *atkAccessible = nsAccessibleWrap::GetAtkObject(aChild);
@ -772,7 +766,7 @@ nsApplicationAccessibleWrap::AppendChild(nsAccessible *aChild)
}
bool
nsApplicationAccessibleWrap::RemoveChild(nsAccessible* aChild)
ApplicationAccessibleWrap::RemoveChild(nsAccessible* aChild)
{
PRInt32 index = aChild->IndexInParent();
@ -781,11 +775,11 @@ nsApplicationAccessibleWrap::RemoveChild(nsAccessible* aChild)
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);

View File

@ -38,20 +38,20 @@
*
* ***** 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();

View File

@ -53,7 +53,7 @@ CPPSRCS = \
nsAccessibleWrap.cpp \
nsDocAccessibleWrap.cpp \
nsRootAccessibleWrap.cpp \
nsApplicationAccessibleWrap.cpp \
ApplicationAccessibleWrap.cpp \
nsMaiInterfaceComponent.cpp \
nsMaiInterfaceAction.cpp \
nsMaiInterfaceText.cpp \

View File

@ -38,7 +38,6 @@
* ***** 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

View File

@ -38,14 +38,12 @@
*
* ***** 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"
@ -55,11 +53,11 @@
#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"
@ -69,7 +67,7 @@ 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 */
@ -723,24 +721,20 @@ getDescriptionCB(AtkObject *aAtkObj)
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*
@ -977,25 +971,20 @@ refRelationSetCB(AtkObject *aAtkObj)
// 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;
}
// Check if the accessible was deconstructed.
if (!accWrap)
return nsnull;
NS_ENSURE_TRUE(tmpAccWrap->GetAtkObject() == aAtkObj, nsnull);
NS_ENSURE_TRUE(accWrap->GetAtkObject() == aAtkObj, nsnull);
nsApplicationAccessible *applicationAcc =
nsAccessNode::GetApplicationAccessible();
nsAccessibleWrap* tmpAppAccWrap =
static_cast<nsAccessibleWrap*>(applicationAcc);
nsAccessibleWrap* appAccWrap = nsAccessNode::GetApplicationAccessible();
if (appAccWrap != accWrap && !accWrap->IsValidObject())
return nsnull;
if (tmpAppAccWrap != tmpAccWrap && !tmpAccWrap->IsValidObject())
return nsnull;
return tmpAccWrap;
return accWrap;
}
nsresult
@ -1406,3 +1395,19 @@ nsAccessibleWrap::FireAtkShowHideEvent(AccEvent* aEvent,
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
}

View File

@ -116,6 +116,11 @@ public:
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);

View File

@ -39,6 +39,7 @@
#include "InterfaceInitFuncs.h"
#include "Accessible-inl.h"
#include "nsMai.h"
#include "Role.h"

View File

@ -42,7 +42,6 @@
#include "nsHyperTextAccessible.h"
#include "nsMai.h"
#include "nsRoleMap.h"
#include "nsIPersistentProperties2.h"
@ -52,7 +51,7 @@ 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("*"));
@ -161,7 +160,7 @@ getCharacterAtOffsetCB(AtkText *aText, gint aOffset)
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 = '*';

View File

@ -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
};

View File

@ -39,9 +39,9 @@
#include "AccEvent.h"
#include "ApplicationAccessibleWrap.h"
#include "nsAccessibilityService.h"
#include "nsAccUtils.h"
#include "nsApplicationAccessibleWrap.h"
#include "nsDocAccessible.h"
#include "nsIAccessibleText.h"
#include "nsAccEvent.h"
@ -155,7 +155,7 @@ AccEvent::CaptureIsFromUserInput(EIsFromUserInput aIsFromUserInput)
// 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))

View File

@ -69,7 +69,6 @@ CPPSRCS = \
nsBaseWidgetAccessible.cpp \
nsEventShell.cpp \
nsRootAccessible.cpp \
nsApplicationAccessible.cpp \
nsCaretAccessible.cpp \
nsTextAccessible.cpp \
nsTextEquivUtils.cpp \

View File

@ -41,13 +41,16 @@
#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.
*/
@ -799,13 +802,25 @@ namespace roles {
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).
*/
LAST_ENTRY = 126
};
DEFINITION_LIST = 126,
/**
* Represent a term in a definition list (dt in HTML).
*/
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

View File

@ -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)

View File

@ -38,9 +38,9 @@
#include "nsAccDocManager.h"
#include "ApplicationAccessible.h"
#include "nsAccessibilityService.h"
#include "nsAccUtils.h"
#include "nsApplicationAccessible.h"
#include "nsARIAMap.h"
#include "nsRootAccessibleWrap.h"
#include "States.h"

View File

@ -44,6 +44,7 @@
#include "nsIWebProgress.h"
#include "nsIWebProgressListener.h"
#include "nsWeakReference.h"
#include "nsIPresShell.h"
class nsAccessible;
class nsDocAccessible;
@ -69,6 +70,14 @@ public:
*/
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.

View File

@ -137,23 +137,13 @@ public:
*/
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);
}
/**
@ -164,8 +154,7 @@ public:
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);
}
/**

View File

@ -38,9 +38,9 @@
#include "nsAccessNode.h"
#include "ApplicationAccessibleWrap.h"
#include "nsAccessibilityService.h"
#include "nsAccUtils.h"
#include "nsApplicationAccessibleWrap.h"
#include "nsCoreUtils.h"
#include "nsRootAccessible.h"
@ -67,7 +67,7 @@ nsIStringBundle *nsAccessNode::gStringBundle = 0;
bool nsAccessNode::gIsFormFillEnabled = false;
nsApplicationAccessible *nsAccessNode::gApplicationAccessible = nsnull;
ApplicationAccessible* nsAccessNode::gApplicationAccessible = nsnull;
/*
* Class nsAccessNode
@ -130,18 +130,16 @@ nsAccessNode::Shutdown()
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);
@ -200,7 +198,7 @@ void nsAccessNode::ShutdownXPAccessibility()
// 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);

View File

@ -53,8 +53,8 @@
#include "nsIStringBundle.h"
#include "nsWeakReference.h"
class ApplicationAccessible;
class nsAccessNode;
class nsApplicationAccessible;
class nsDocAccessible;
class nsIAccessibleDocument;
class nsRootAccessible;
@ -83,7 +83,7 @@ public:
/**
* Return an application accessible.
*/
static nsApplicationAccessible* GetApplicationAccessible();
static ApplicationAccessible* GetApplicationAccessible();
/**
* Return the document accessible for this access node.
@ -174,7 +174,7 @@ private:
nsAccessNode(const nsAccessNode&) MOZ_DELETE;
nsAccessNode& operator =(const nsAccessNode&) MOZ_DELETE;
static nsApplicationAccessible *gApplicationAccessible;
static ApplicationAccessible* gApplicationAccessible;
};
#endif

View File

@ -40,6 +40,7 @@
// NOTE: alphabetically ordered
#include "Accessible-inl.h"
#include "ApplicationAccessibleWrap.h"
#include "ARIAGridAccessibleWrap.h"
#ifdef MOZ_ACCESSIBILITY_ATK
#include "AtkSocketAccessible.h"
@ -48,7 +49,6 @@
#include "nsAccessiblePivot.h"
#include "nsAccUtils.h"
#include "nsARIAMap.h"
#include "nsApplicationAccessibleWrap.h"
#include "nsIAccessibleProvider.h"
#include "nsHTMLCanvasAccessible.h"
#include "nsHTMLImageMapAccessible.h"
@ -202,8 +202,7 @@ nsAccessibilityService::CreateOuterDocAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new OuterDocAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new OuterDocAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -213,8 +212,7 @@ nsAccessibilityService::CreateHTMLButtonAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new HTMLButtonAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new HTMLButtonAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -224,8 +222,7 @@ nsAccessibilityService::CreateHTMLLIAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLLIAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLLIAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -235,8 +232,7 @@ nsAccessibilityService::CreateHyperTextAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHyperTextAccessibleWrap(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHyperTextAccessibleWrap(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -246,8 +242,7 @@ nsAccessibilityService::CreateHTMLCheckboxAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new HTMLCheckboxAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new HTMLCheckboxAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -257,8 +252,7 @@ nsAccessibilityService::CreateHTMLComboboxAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLComboboxAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLComboboxAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -268,8 +262,7 @@ nsAccessibilityService::CreateHTMLCanvasAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLCanvasAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLCanvasAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -279,8 +272,7 @@ nsAccessibilityService::CreateHTMLFileInputAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new HTMLFileInputAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new HTMLFileInputAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -290,8 +282,7 @@ nsAccessibilityService::CreateHTMLImageAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLImageAccessibleWrap(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLImageAccessibleWrap(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -301,8 +292,7 @@ nsAccessibilityService::CreateHTMLImageMapAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLImageMapAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLImageMapAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -312,8 +302,7 @@ nsAccessibilityService::CreateHTMLGroupboxAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new HTMLGroupboxAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new HTMLGroupboxAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -323,8 +312,7 @@ nsAccessibilityService::CreateHTMLListboxAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLSelectListAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLSelectListAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -334,8 +322,7 @@ 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;
@ -379,7 +366,7 @@ nsAccessibilityService::CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame,
nsAccessible* accessible =
new nsHTMLWin32ObjectOwnerAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell),
GetDocAccessible(aPresShell),
pluginPort);
NS_ADDREF(accessible);
return accessible;
@ -393,8 +380,7 @@ nsAccessibilityService::CreateHTMLObjectFrameAccessible(nsObjectFrame* aFrame,
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);
@ -415,8 +401,7 @@ nsAccessibilityService::CreateHTMLRadioButtonAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new HTMLRadioButtonAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new HTMLRadioButtonAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -426,8 +411,7 @@ nsAccessibilityService::CreateHTMLTableAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLTableAccessibleWrap(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLTableAccessibleWrap(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -437,8 +421,17 @@ 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;
}
@ -448,8 +441,7 @@ nsAccessibilityService::CreateHTMLTextAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLTextAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLTextAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -459,8 +451,7 @@ nsAccessibilityService::CreateHTMLTextFieldAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new HTMLTextFieldAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new HTMLTextFieldAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -470,8 +461,7 @@ nsAccessibilityService::CreateHTMLLabelAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLLabelAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLLabelAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -481,8 +471,7 @@ nsAccessibilityService::CreateHTMLHRAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLHRAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLHRAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -492,8 +481,7 @@ nsAccessibilityService::CreateHTMLBRAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLBRAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLBRAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -503,8 +491,7 @@ nsAccessibilityService::CreateHTMLCaptionAccessible(nsIContent* aContent,
nsIPresShell* aPresShell)
{
nsAccessible* accessible =
new nsHTMLCaptionAccessible(aContent,
nsAccUtils::GetDocAccessibleFor(aPresShell));
new nsHTMLCaptionAccessible(aContent, GetDocAccessible(aPresShell));
NS_ADDREF(accessible);
return accessible;
}
@ -539,7 +526,7 @@ nsAccessibilityService::ContentRangeInserted(nsIPresShell* aPresShell,
NS_ConvertUTF16toUTF8(ctag).get(), cid.get(), aEndChild);
#endif
nsDocAccessible* docAccessible = GetDocAccessible(aPresShell->GetDocument());
nsDocAccessible* docAccessible = GetDocAccessible(aPresShell);
if (docAccessible)
docAccessible->ContentInserted(aContainer, aStartChild, aEndChild);
}
@ -573,7 +560,7 @@ nsAccessibilityService::ContentRemoved(nsIPresShell* aPresShell,
NS_ConvertUTF16toUTF8(ctag).get(), cid.get());
#endif
nsDocAccessible* docAccessible = GetDocAccessible(aPresShell->GetDocument());
nsDocAccessible* docAccessible = GetDocAccessible(aPresShell);
if (docAccessible)
docAccessible->ContentRemoved(aContainer, aChild);
}
@ -582,7 +569,7 @@ void
nsAccessibilityService::UpdateText(nsIPresShell* aPresShell,
nsIContent* aContent)
{
nsDocAccessible* document = GetDocAccessible(aPresShell->GetDocument());
nsDocAccessible* document = GetDocAccessible(aPresShell);
if (document)
document->UpdateText(aContent);
}
@ -592,7 +579,7 @@ 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) {
@ -608,7 +595,7 @@ 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) {
@ -623,7 +610,7 @@ 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());
@ -682,7 +669,7 @@ void
nsAccessibilityService::RecreateAccessible(nsIPresShell* aPresShell,
nsIContent* aContent)
{
nsDocAccessible* document = GetDocAccessible(aPresShell->GetDocument());
nsDocAccessible* document = GetDocAccessible(aPresShell);
if (document)
document->RecreateAccessible(aContent);
}
@ -691,7 +678,7 @@ nsAccessibilityService::RecreateAccessible(nsIPresShell* aPresShell,
// nsIAccessibleRetrieval
NS_IMETHODIMP
nsAccessibilityService::GetApplicationAccessible(nsIAccessible **aAccessibleApplication)
nsAccessibilityService::GetApplicationAccessible(nsIAccessible** aAccessibleApplication)
{
NS_ENSURE_ARG_POINTER(aAccessibleApplication);
@ -719,13 +706,19 @@ nsAccessibilityService::GetAccessibleFor(nsIDOMNode *aNode,
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
@ -1707,13 +1700,6 @@ nsAccessibilityService::CreateHTMLAccessibleByMarkup(nsIFrame* aFrame,
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);
@ -1744,7 +1730,7 @@ nsAccessible*
nsAccessibilityService::AddNativeRootAccessible(void* aAtkAccessible)
{
#ifdef MOZ_ACCESSIBILITY_ATK
nsApplicationAccessible* applicationAcc =
ApplicationAccessible* applicationAcc =
nsAccessNode::GetApplicationAccessible();
if (!applicationAcc)
return nsnull;
@ -1765,7 +1751,7 @@ void
nsAccessibilityService::RemoveNativeRootAccessible(nsAccessible* aAccessible)
{
#ifdef MOZ_ACCESSIBILITY_ATK
nsApplicationAccessible* applicationAcc =
ApplicationAccessible* applicationAcc =
nsAccessNode::GetApplicationAccessible();
if (applicationAcc)

View File

@ -63,7 +63,7 @@ FocusManager* FocusMgr();
/**
* Perform initialization that should be done as soon as possible, in order
* to minimize startup time.
* XXX: this function and the next defined in nsApplicationAccessibleWrap.cpp
* XXX: this function and the next defined in ApplicationAccessibleWrap.cpp
*/
void PreInit();
@ -131,6 +131,8 @@ public:
CreateHTMLTableAccessible(nsIContent* aContent, nsIPresShell* aPresShell);
already_AddRefed<nsAccessible>
CreateHTMLTableCellAccessible(nsIContent* aContent, nsIPresShell* aPresShell);
already_AddRefed<nsAccessible>
CreateHTMLTableRowAccessible(nsIContent* aContent, nsIPresShell* aPresShell);
already_AddRefed<nsAccessible>
CreateHTMLTextAccessible(nsIContent* aContent, nsIPresShell* aPresShell);
already_AddRefed<nsAccessible>
@ -293,139 +295,6 @@ GetAccService()
return nsAccessibilityService::gAccessibilityService;
}
/**
* Map nsIAccessibleRole constants to strings. Used by
* nsIAccessibleRetrieval::getStringRole() method.
*/
static const char kRoleNames[][20] = {
"nothing", //ROLE_NOTHING
"titlebar", //ROLE_TITLEBAR
"menubar", //ROLE_MENUBAR
"scrollbar", //ROLE_SCROLLBAR
"grip", //ROLE_GRIP
"sound", //ROLE_SOUND
"cursor", //ROLE_CURSOR
"caret", //ROLE_CARET
"alert", //ROLE_ALERT
"window", //ROLE_WINDOW
"internal frame", //ROLE_INTERNAL_FRAME
"menupopup", //ROLE_MENUPOPUP
"menuitem", //ROLE_MENUITEM
"tooltip", //ROLE_TOOLTIP
"application", //ROLE_APPLICATION
"document", //ROLE_DOCUMENT
"pane", //ROLE_PANE
"chart", //ROLE_CHART
"dialog", //ROLE_DIALOG
"border", //ROLE_BORDER
"grouping", //ROLE_GROUPING
"separator", //ROLE_SEPARATOR
"toolbar", //ROLE_TOOLBAR
"statusbar", //ROLE_STATUSBAR
"table", //ROLE_TABLE
"columnheader", //ROLE_COLUMNHEADER
"rowheader", //ROLE_ROWHEADER
"column", //ROLE_COLUMN
"row", //ROLE_ROW
"cell", //ROLE_CELL
"link", //ROLE_LINK
"helpballoon", //ROLE_HELPBALLOON
"character", //ROLE_CHARACTER
"list", //ROLE_LIST
"listitem", //ROLE_LISTITEM
"outline", //ROLE_OUTLINE
"outlineitem", //ROLE_OUTLINEITEM
"pagetab", //ROLE_PAGETAB
"propertypage", //ROLE_PROPERTYPAGE
"indicator", //ROLE_INDICATOR
"graphic", //ROLE_GRAPHIC
"statictext", //ROLE_STATICTEXT
"text leaf", //ROLE_TEXT_LEAF
"pushbutton", //ROLE_PUSHBUTTON
"checkbutton", //ROLE_CHECKBUTTON
"radiobutton", //ROLE_RADIOBUTTON
"combobox", //ROLE_COMBOBOX
"droplist", //ROLE_DROPLIST
"progressbar", //ROLE_PROGRESSBAR
"dial", //ROLE_DIAL
"hotkeyfield", //ROLE_HOTKEYFIELD
"slider", //ROLE_SLIDER
"spinbutton", //ROLE_SPINBUTTON
"diagram", //ROLE_DIAGRAM
"animation", //ROLE_ANIMATION
"equation", //ROLE_EQUATION
"buttondropdown", //ROLE_BUTTONDROPDOWN
"buttonmenu", //ROLE_BUTTONMENU
"buttondropdowngrid", //ROLE_BUTTONDROPDOWNGRID
"whitespace", //ROLE_WHITESPACE
"pagetablist", //ROLE_PAGETABLIST
"clock", //ROLE_CLOCK
"splitbutton", //ROLE_SPLITBUTTON
"ipaddress", //ROLE_IPADDRESS
"accel label", //ROLE_ACCEL_LABEL
"arrow", //ROLE_ARROW
"canvas", //ROLE_CANVAS
"check menu item", //ROLE_CHECK_MENU_ITEM
"color chooser", //ROLE_COLOR_CHOOSER
"date editor", //ROLE_DATE_EDITOR
"desktop icon", //ROLE_DESKTOP_ICON
"desktop frame", //ROLE_DESKTOP_FRAME
"directory pane", //ROLE_DIRECTORY_PANE
"file chooser", //ROLE_FILE_CHOOSER
"font chooser", //ROLE_FONT_CHOOSER
"chrome window", //ROLE_CHROME_WINDOW
"glass pane", //ROLE_GLASS_PANE
"html container", //ROLE_HTML_CONTAINER
"icon", //ROLE_ICON
"label", //ROLE_LABEL
"layered pane", //ROLE_LAYERED_PANE
"option pane", //ROLE_OPTION_PANE
"password text", //ROLE_PASSWORD_TEXT
"popup menu", //ROLE_POPUP_MENU
"radio menu item", //ROLE_RADIO_MENU_ITEM
"root pane", //ROLE_ROOT_PANE
"scroll pane", //ROLE_SCROLL_PANE
"split pane", //ROLE_SPLIT_PANE
"table column header", //ROLE_TABLE_COLUMN_HEADER
"table row header", //ROLE_TABLE_ROW_HEADER
"tear off menu item", //ROLE_TEAR_OFF_MENU_ITEM
"terminal", //ROLE_TERMINAL
"text container", //ROLE_TEXT_CONTAINER
"toggle button", //ROLE_TOGGLE_BUTTON
"tree table", //ROLE_TREE_TABLE
"viewport", //ROLE_VIEWPORT
"header", //ROLE_HEADER
"footer", //ROLE_FOOTER
"paragraph", //ROLE_PARAGRAPH
"ruler", //ROLE_RULER
"autocomplete", //ROLE_AUTOCOMPLETE
"editbar", //ROLE_EDITBAR
"entry", //ROLE_ENTRY
"caption", //ROLE_CAPTION
"document frame", //ROLE_DOCUMENT_FRAME
"heading", //ROLE_HEADING
"page", //ROLE_PAGE
"section", //ROLE_SECTION
"redundant object", //ROLE_REDUNDANT_OBJECT
"form", //ROLE_FORM
"ime", //ROLE_IME
"app root", //ROLE_APP_ROOT
"parent menuitem", //ROLE_PARENT_MENUITEM
"calendar", //ROLE_CALENDAR
"combobox list", //ROLE_COMBOBOX_LIST
"combobox option", //ROLE_COMBOBOX_OPTION
"image map", //ROLE_IMAGE_MAP
"listbox option", //ROLE_OPTION
"listbox rich option", //ROLE_RICH_OPTION
"listbox", //ROLE_LISTBOX
"flat equation", //ROLE_FLAT_EQUATION
"gridcell", //ROLE_GRID_CELL
"embedded object", //ROLE_EMBEDDED_OBJECT
"note", //ROLE_NOTE
"figure", //ROLE_FIGURE
"check rich option" //ROLE_CHECK_RICH_OPTION
};
/**
* Map nsIAccessibleEvents constants to strings. Used by
* nsIAccessibleRetrieval::getStringEventType() method.

View File

@ -1137,16 +1137,6 @@ nsDocAccessible::ARIAAttributeChanged(nsIContent* aContent, nsIAtom* aAttribute)
return;
}
// For aria drag and drop changes we fire a generic attribute change event;
// at least until native API comes up with a more meaningful event.
if (aAttribute == nsGkAtoms::aria_grabbed ||
aAttribute == nsGkAtoms::aria_dropeffect ||
aAttribute == nsGkAtoms::aria_hidden ||
aAttribute == nsGkAtoms::aria_sort) {
FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_OBJECT_ATTRIBUTE_CHANGED,
aContent);
}
// We treat aria-expanded as a global ARIA state for historical reasons
if (aAttribute == nsGkAtoms::aria_expanded) {
nsRefPtr<AccEvent> event =
@ -1155,6 +1145,13 @@ nsDocAccessible::ARIAAttributeChanged(nsIContent* aContent, nsIAtom* aAttribute)
return;
}
// For aria attributes like drag and drop changes we fire a generic attribute
// change event; at least until native API comes up with a more meaningful event.
PRUint8 attrFlags = nsAccUtils::GetAttributeCharacteristics(aAttribute);
if (!(attrFlags & ATTR_BYPASSOBJ))
FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_OBJECT_ATTRIBUTE_CHANGED,
aContent);
if (!aContent->HasAttr(kNameSpaceID_None, nsGkAtoms::role)) {
// We don't care about these other ARIA attribute changes unless there is
// an ARIA role set for the element

View File

@ -42,7 +42,6 @@
#include "Accessible-inl.h"
#include "nsAccessibilityService.h"
#include "nsApplicationAccessibleWrap.h"
#include "nsAccUtils.h"
#include "nsCoreUtils.h"
#include "Relation.h"

View File

@ -84,43 +84,33 @@ ARIAGridAccessible::Shutdown()
////////////////////////////////////////////////////////////////////////////////
// nsIAccessibleTable
NS_IMETHODIMP
ARIAGridAccessible::GetColumnCount(PRInt32* aColumnCount)
PRUint32
ARIAGridAccessible::ColCount()
{
NS_ENSURE_ARG_POINTER(aColumnCount);
*aColumnCount = 0;
if (IsDefunct())
return NS_ERROR_FAILURE;
AccIterator rowIter(this, filters::GetRow);
nsAccessible* row = rowIter.Next();
if (!row)
return NS_OK;
return 0;
AccIterator cellIter(row, filters::GetCell);
nsAccessible *cell = nsnull;
nsAccessible* cell = nsnull;
PRUint32 colCount = 0;
while ((cell = cellIter.Next()))
(*aColumnCount)++;
colCount++;
return NS_OK;
return colCount;
}
NS_IMETHODIMP
ARIAGridAccessible::GetRowCount(PRInt32* aRowCount)
PRUint32
ARIAGridAccessible::RowCount()
{
NS_ENSURE_ARG_POINTER(aRowCount);
*aRowCount = 0;
if (IsDefunct())
return NS_ERROR_FAILURE;
PRUint32 rowCount = 0;
AccIterator rowIter(this, filters::GetRow);
while (rowIter.Next())
(*aRowCount)++;
rowCount++;
return NS_OK;
return rowCount;
}
NS_IMETHODIMP
@ -663,38 +653,26 @@ ARIAGridAccessible::SelectColumn(PRInt32 aColumn)
return NS_OK;
}
NS_IMETHODIMP
ARIAGridAccessible::UnselectRow(PRInt32 aRow)
void
ARIAGridAccessible::UnselectRow(PRUint32 aRowIdx)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
nsAccessible* row = GetRowAt(aRowIdx);
nsAccessible *row = GetRowAt(aRow);
NS_ENSURE_ARG(row);
return SetARIASelected(row, false);
if (row)
SetARIASelected(row, false);
}
NS_IMETHODIMP
ARIAGridAccessible::UnselectColumn(PRInt32 aColumn)
void
ARIAGridAccessible::UnselectCol(PRUint32 aColIdx)
{
NS_ENSURE_ARG(IsValidColumn(aColumn));
if (IsDefunct())
return NS_ERROR_FAILURE;
AccIterator rowIter(this, filters::GetRow);
nsAccessible *row = nsnull;
nsAccessible* row = nsnull;
while ((row = rowIter.Next())) {
nsAccessible *cell = GetCellInRowAt(row, aColumn);
if (cell) {
nsresult rv = SetARIASelected(cell, false);
NS_ENSURE_SUCCESS(rv, rv);
}
nsAccessible* cell = GetCellInRowAt(row, aColIdx);
if (cell)
SetARIASelected(cell, false);
}
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -71,6 +71,12 @@ public:
// nsAccessNode
virtual void Shutdown();
// TableAccessible
virtual PRUint32 ColCount();
virtual PRUint32 RowCount();
virtual void UnselectCol(PRUint32 aColIdx);
virtual void UnselectRow(PRUint32 aRowIdx);
protected:
/**
* Return true if the given row index is valid.

View File

@ -40,7 +40,7 @@
*
* ***** END LICENSE BLOCK ***** */
#include "nsApplicationAccessible.h"
#include "ApplicationAccessible.h"
#include "nsAccessibilityService.h"
#include "nsAccUtils.h"
@ -57,7 +57,7 @@
using namespace mozilla::a11y;
nsApplicationAccessible::nsApplicationAccessible() :
ApplicationAccessible::ApplicationAccessible() :
nsAccessibleWrap(nsnull, nsnull)
{
mFlags |= eApplicationAccessible;
@ -66,14 +66,14 @@ nsApplicationAccessible::nsApplicationAccessible() :
////////////////////////////////////////////////////////////////////////////////
// nsISupports
NS_IMPL_ISUPPORTS_INHERITED1(nsApplicationAccessible, nsAccessible,
NS_IMPL_ISUPPORTS_INHERITED1(ApplicationAccessible, nsAccessible,
nsIAccessibleApplication)
////////////////////////////////////////////////////////////////////////////////
// nsIAccessible
NS_IMETHODIMP
nsApplicationAccessible::GetParent(nsIAccessible **aAccessible)
ApplicationAccessible::GetParent(nsIAccessible** aAccessible)
{
NS_ENSURE_ARG_POINTER(aAccessible);
*aAccessible = nsnull;
@ -81,7 +81,7 @@ nsApplicationAccessible::GetParent(nsIAccessible **aAccessible)
}
NS_IMETHODIMP
nsApplicationAccessible::GetNextSibling(nsIAccessible **aNextSibling)
ApplicationAccessible::GetNextSibling(nsIAccessible** aNextSibling)
{
NS_ENSURE_ARG_POINTER(aNextSibling);
*aNextSibling = nsnull;
@ -89,7 +89,7 @@ nsApplicationAccessible::GetNextSibling(nsIAccessible **aNextSibling)
}
NS_IMETHODIMP
nsApplicationAccessible::GetPreviousSibling(nsIAccessible **aPreviousSibling)
ApplicationAccessible::GetPreviousSibling(nsIAccessible** aPreviousSibling)
{
NS_ENSURE_ARG_POINTER(aPreviousSibling);
*aPreviousSibling = nsnull;
@ -97,7 +97,7 @@ nsApplicationAccessible::GetPreviousSibling(nsIAccessible **aPreviousSibling)
}
NS_IMETHODIMP
nsApplicationAccessible::GetName(nsAString& aName)
ApplicationAccessible::GetName(nsAString& aName)
{
aName.Truncate();
@ -125,25 +125,25 @@ nsApplicationAccessible::GetName(nsAString& aName)
}
void
nsApplicationAccessible::Description(nsString &aDescription)
ApplicationAccessible::Description(nsString& aDescription)
{
aDescription.Truncate();
}
void
nsApplicationAccessible::Value(nsString& aValue)
ApplicationAccessible::Value(nsString& aValue)
{
aValue.Truncate();
}
PRUint64
nsApplicationAccessible::State()
ApplicationAccessible::State()
{
return IsDefunct() ? states::DEFUNCT : 0;
}
NS_IMETHODIMP
nsApplicationAccessible::GetAttributes(nsIPersistentProperties **aAttributes)
ApplicationAccessible::GetAttributes(nsIPersistentProperties** aAttributes)
{
NS_ENSURE_ARG_POINTER(aAttributes);
*aAttributes = nsnull;
@ -151,9 +151,9 @@ nsApplicationAccessible::GetAttributes(nsIPersistentProperties **aAttributes)
}
NS_IMETHODIMP
nsApplicationAccessible::GroupPosition(PRInt32 *aGroupLevel,
PRInt32 *aSimilarItemsInGroup,
PRInt32 *aPositionInGroup)
ApplicationAccessible::GroupPosition(PRInt32* aGroupLevel,
PRInt32* aSimilarItemsInGroup,
PRInt32* aPositionInGroup)
{
NS_ENSURE_ARG_POINTER(aGroupLevel);
*aGroupLevel = 0;
@ -165,14 +165,14 @@ nsApplicationAccessible::GroupPosition(PRInt32 *aGroupLevel,
}
nsAccessible*
nsApplicationAccessible::ChildAtPoint(PRInt32 aX, PRInt32 aY,
EWhichChildAtPoint aWhichChild)
ApplicationAccessible::ChildAtPoint(PRInt32 aX, PRInt32 aY,
EWhichChildAtPoint aWhichChild)
{
return nsnull;
}
nsAccessible*
nsApplicationAccessible::FocusedChild()
ApplicationAccessible::FocusedChild()
{
nsAccessible* focus = FocusMgr()->FocusedAccessible();
if (focus && focus->Parent() == this)
@ -182,14 +182,14 @@ nsApplicationAccessible::FocusedChild()
}
Relation
nsApplicationAccessible::RelationByType(PRUint32 aRelationType)
ApplicationAccessible::RelationByType(PRUint32 aRelationType)
{
return Relation();
}
NS_IMETHODIMP
nsApplicationAccessible::GetBounds(PRInt32 *aX, PRInt32 *aY,
PRInt32 *aWidth, PRInt32 *aHeight)
ApplicationAccessible::GetBounds(PRInt32* aX, PRInt32* aY,
PRInt32* aWidth, PRInt32* aHeight)
{
NS_ENSURE_ARG_POINTER(aX);
*aX = 0;
@ -203,46 +203,46 @@ nsApplicationAccessible::GetBounds(PRInt32 *aX, PRInt32 *aY,
}
NS_IMETHODIMP
nsApplicationAccessible::SetSelected(bool aIsSelected)
ApplicationAccessible::SetSelected(bool aIsSelected)
{
return NS_OK;
}
NS_IMETHODIMP
nsApplicationAccessible::TakeSelection()
ApplicationAccessible::TakeSelection()
{
return NS_OK;
}
NS_IMETHODIMP
nsApplicationAccessible::TakeFocus()
ApplicationAccessible::TakeFocus()
{
return NS_OK;
}
PRUint8
nsApplicationAccessible::ActionCount()
ApplicationAccessible::ActionCount()
{
return 0;
}
NS_IMETHODIMP
nsApplicationAccessible::GetActionName(PRUint8 aIndex, nsAString &aName)
ApplicationAccessible::GetActionName(PRUint8 aIndex, nsAString& aName)
{
aName.Truncate();
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
nsApplicationAccessible::GetActionDescription(PRUint8 aIndex,
nsAString &aDescription)
ApplicationAccessible::GetActionDescription(PRUint8 aIndex,
nsAString& aDescription)
{
aDescription.Truncate();
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
nsApplicationAccessible::DoAction(PRUint8 aIndex)
ApplicationAccessible::DoAction(PRUint8 aIndex)
{
return NS_OK;
}
@ -251,7 +251,7 @@ nsApplicationAccessible::DoAction(PRUint8 aIndex)
// nsIAccessibleApplication
NS_IMETHODIMP
nsApplicationAccessible::GetAppName(nsAString& aName)
ApplicationAccessible::GetAppName(nsAString& aName)
{
aName.Truncate();
@ -267,7 +267,7 @@ nsApplicationAccessible::GetAppName(nsAString& aName)
}
NS_IMETHODIMP
nsApplicationAccessible::GetAppVersion(nsAString& aVersion)
ApplicationAccessible::GetAppVersion(nsAString& aVersion)
{
aVersion.Truncate();
@ -283,14 +283,14 @@ nsApplicationAccessible::GetAppVersion(nsAString& aVersion)
}
NS_IMETHODIMP
nsApplicationAccessible::GetPlatformName(nsAString& aName)
ApplicationAccessible::GetPlatformName(nsAString& aName)
{
aName.AssignLiteral("Gecko");
return NS_OK;
}
NS_IMETHODIMP
nsApplicationAccessible::GetPlatformVersion(nsAString& aVersion)
ApplicationAccessible::GetPlatformVersion(nsAString& aVersion)
{
aVersion.Truncate();
@ -309,20 +309,20 @@ nsApplicationAccessible::GetPlatformVersion(nsAString& aVersion)
// nsAccessNode public methods
bool
nsApplicationAccessible::Init()
ApplicationAccessible::Init()
{
mAppInfo = do_GetService("@mozilla.org/xre/app-info;1");
return true;
}
void
nsApplicationAccessible::Shutdown()
ApplicationAccessible::Shutdown()
{
mAppInfo = nsnull;
}
bool
nsApplicationAccessible::IsPrimaryForNode() const
ApplicationAccessible::IsPrimaryForNode() const
{
return false;
}
@ -331,31 +331,31 @@ nsApplicationAccessible::IsPrimaryForNode() const
// nsAccessible public methods
void
nsApplicationAccessible::ApplyARIAState(PRUint64* aState)
ApplicationAccessible::ApplyARIAState(PRUint64* aState)
{
}
role
nsApplicationAccessible::NativeRole()
ApplicationAccessible::NativeRole()
{
return roles::APP_ROOT;
}
PRUint64
nsApplicationAccessible::NativeState()
ApplicationAccessible::NativeState()
{
return 0;
}
void
nsApplicationAccessible::InvalidateChildren()
ApplicationAccessible::InvalidateChildren()
{
// Do nothing because application children are kept updated by AppendChild()
// and RemoveChild() method calls.
}
KeyBinding
nsApplicationAccessible::AccessKey() const
ApplicationAccessible::AccessKey() const
{
return KeyBinding();
}
@ -364,7 +364,7 @@ nsApplicationAccessible::AccessKey() const
// nsAccessible protected methods
void
nsApplicationAccessible::CacheChildren()
ApplicationAccessible::CacheChildren()
{
// CacheChildren is called only once for application accessible when its
// children are requested because empty InvalidateChldren() prevents its
@ -404,8 +404,8 @@ nsApplicationAccessible::CacheChildren()
}
nsAccessible*
nsApplicationAccessible::GetSiblingAtOffset(PRInt32 aOffset,
nsresult* aError) const
ApplicationAccessible::GetSiblingAtOffset(PRInt32 aOffset,
nsresult* aError) const
{
if (aError)
*aError = NS_OK; // fail peacefully
@ -417,7 +417,7 @@ nsApplicationAccessible::GetSiblingAtOffset(PRInt32 aOffset,
// nsIAccessible
NS_IMETHODIMP
nsApplicationAccessible::GetDOMNode(nsIDOMNode **aDOMNode)
ApplicationAccessible::GetDOMNode(nsIDOMNode** aDOMNode)
{
NS_ENSURE_ARG_POINTER(aDOMNode);
*aDOMNode = nsnull;
@ -425,7 +425,7 @@ nsApplicationAccessible::GetDOMNode(nsIDOMNode **aDOMNode)
}
NS_IMETHODIMP
nsApplicationAccessible::GetDocument(nsIAccessibleDocument **aDocument)
ApplicationAccessible::GetDocument(nsIAccessibleDocument** aDocument)
{
NS_ENSURE_ARG_POINTER(aDocument);
*aDocument = nsnull;
@ -433,7 +433,7 @@ nsApplicationAccessible::GetDocument(nsIAccessibleDocument **aDocument)
}
NS_IMETHODIMP
nsApplicationAccessible::GetRootDocument(nsIAccessibleDocument **aRootDocument)
ApplicationAccessible::GetRootDocument(nsIAccessibleDocument** aRootDocument)
{
NS_ENSURE_ARG_POINTER(aRootDocument);
*aRootDocument = nsnull;
@ -441,20 +441,20 @@ nsApplicationAccessible::GetRootDocument(nsIAccessibleDocument **aRootDocument)
}
NS_IMETHODIMP
nsApplicationAccessible::ScrollTo(PRUint32 aScrollType)
ApplicationAccessible::ScrollTo(PRUint32 aScrollType)
{
return NS_OK;
}
NS_IMETHODIMP
nsApplicationAccessible::ScrollToPoint(PRUint32 aCoordinateType,
PRInt32 aX, PRInt32 aY)
ApplicationAccessible::ScrollToPoint(PRUint32 aCoordinateType,
PRInt32 aX, PRInt32 aY)
{
return NS_OK;
}
NS_IMETHODIMP
nsApplicationAccessible::GetLanguage(nsAString &aLanguage)
ApplicationAccessible::GetLanguage(nsAString& aLanguage)
{
aLanguage.Truncate();
return NS_OK;

View File

@ -40,8 +40,8 @@
*
* ***** END LICENSE BLOCK ***** */
#ifndef __NS_APPLICATION_ACCESSIBLE_H__
#define __NS_APPLICATION_ACCESSIBLE_H__
#ifndef MOZILLA_A11Y_APPLICATION_ACCESSIBLE_H__
#define MOZILLA_A11Y_APPLICATION_ACCESSIBLE_H__
#include "nsAccessibleWrap.h"
#include "nsIAccessibleApplication.h"
@ -50,21 +50,21 @@
#include "nsIXULAppInfo.h"
/**
* nsApplicationAccessible is for the whole application of Mozilla.
* Only one instance of nsApplicationAccessible exists for one Mozilla instance.
* ApplicationAccessible is for the whole application of Mozilla.
* Only one instance of ApplicationAccessible exists for one Mozilla instance.
* And this one should be created when Mozilla Startup (if accessibility
* feature has been enabled) and destroyed when Mozilla Shutdown.
*
* All the accessibility objects for toplevel windows are direct children of
* the nsApplicationAccessible instance.
* the ApplicationAccessible instance.
*/
class nsApplicationAccessible: public nsAccessibleWrap,
public nsIAccessibleApplication
class ApplicationAccessible: public nsAccessibleWrap,
public nsIAccessibleApplication
{
public:
nsApplicationAccessible();
ApplicationAccessible();
// nsISupports
NS_DECL_ISUPPORTS_INHERITED

View File

@ -15,6 +15,7 @@ LIBXUL_LIBRARY = 1
CPPSRCS = \
ApplicationAccessible.cpp \
ARIAGridAccessible.cpp \
FormControlAccessible.cpp \
OuterDocAccessible.cpp \

View File

@ -65,6 +65,7 @@ nsHTMLImageAccessible::
nsHTMLImageAccessible(nsIContent* aContent, nsDocAccessible* aDoc) :
nsLinkableAccessible(aContent, aDoc)
{
mFlags |= eImageAccessible;
}
NS_IMPL_ISUPPORTS_INHERITED1(nsHTMLImageAccessible, nsAccessible,

View File

@ -563,36 +563,24 @@ nsHTMLTableAccessible::Summary(nsString& aSummary)
table->GetSummary(aSummary);
}
NS_IMETHODIMP
nsHTMLTableAccessible::GetColumnCount(PRInt32 *acolumnCount)
PRUint32
nsHTMLTableAccessible::ColCount()
{
NS_ENSURE_ARG_POINTER(acolumnCount);
*acolumnCount = nsnull;
nsITableLayout* tableLayout = GetTableLayout();
if (IsDefunct())
return NS_ERROR_FAILURE;
nsITableLayout *tableLayout = GetTableLayout();
NS_ENSURE_STATE(tableLayout);
PRInt32 rows;
return tableLayout->GetTableSize(rows, *acolumnCount);
PRInt32 rowCount = 0, colCount = 0;
tableLayout->GetTableSize(rowCount, colCount);
return colCount;
}
NS_IMETHODIMP
nsHTMLTableAccessible::GetRowCount(PRInt32 *arowCount)
PRUint32
nsHTMLTableAccessible::RowCount()
{
NS_ENSURE_ARG_POINTER(arowCount);
*arowCount = 0;
nsITableLayout* tableLayout = GetTableLayout();
if (IsDefunct())
return NS_ERROR_FAILURE;
nsITableLayout *tableLayout = GetTableLayout();
NS_ENSURE_STATE(tableLayout);
PRInt32 columns;
return tableLayout->GetTableSize(*arowCount, columns);
PRInt32 rowCount = 0, colCount = 0;
tableLayout->GetTableSize(rowCount, colCount);
return rowCount;
}
NS_IMETHODIMP
@ -1151,28 +1139,20 @@ nsHTMLTableAccessible::SelectColumn(PRInt32 aColumn)
nsISelectionPrivate::TABLESELECTION_COLUMN);
}
NS_IMETHODIMP
nsHTMLTableAccessible::UnselectRow(PRInt32 aRow)
void
nsHTMLTableAccessible::UnselectRow(PRUint32 aRowIdx)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
return
RemoveRowsOrColumnsFromSelection(aRow,
nsISelectionPrivate::TABLESELECTION_ROW,
false);
RemoveRowsOrColumnsFromSelection(aRowIdx,
nsISelectionPrivate::TABLESELECTION_ROW,
false);
}
NS_IMETHODIMP
nsHTMLTableAccessible::UnselectColumn(PRInt32 aColumn)
void
nsHTMLTableAccessible::UnselectCol(PRUint32 aColIdx)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
return
RemoveRowsOrColumnsFromSelection(aColumn,
nsISelectionPrivate::TABLESELECTION_COLUMN,
false);
RemoveRowsOrColumnsFromSelection(aColIdx,
nsISelectionPrivate::TABLESELECTION_COLUMN,
false);
}
nsresult

View File

@ -130,6 +130,10 @@ public:
// TableAccessible
virtual nsAccessible* Caption();
virtual void Summary(nsString& aSummary);
virtual PRUint32 ColCount();
virtual PRUint32 RowCount();
virtual void UnselectCol(PRUint32 aColIdx);
virtual void UnselectRow(PRUint32 aRowIdx);
virtual bool IsProbablyLayoutTable();
// nsAccessNode

View File

@ -259,6 +259,9 @@ nsHTMLLIAccessible::Shutdown()
role
nsHTMLLIAccessible::NativeRole()
{
if (mContent->Tag() == nsGkAtoms::dt)
return roles::TERM;
return roles::LISTITEM;
}
@ -410,6 +413,9 @@ NS_IMPL_ISUPPORTS_INHERITED0(nsHTMLListAccessible, nsHyperTextAccessible)
role
nsHTMLListAccessible::NativeRole()
{
if (mContent->Tag() == nsGkAtoms::dl)
return roles::DEFINITION_LIST;
return roles::LIST;
}

View File

@ -123,6 +123,9 @@ nsHyperTextAccessible::NativeRole()
{
nsIAtom *tag = mContent->Tag();
if (tag == nsGkAtoms::dd)
return roles::DEFINITION;
if (tag == nsGkAtoms::form)
return roles::FORM;

View File

@ -23,11 +23,6 @@ var EXPORTED_SYMBOLS = ['VisualPresenter',
function Presenter() {}
Presenter.prototype = {
/**
* The padding in pixels between the object and the highlight border.
*/
BORDER_PADDING: 2,
/**
* Attach function for presenter.
* @param {ChromeWindow} aWindow Chrome window the presenter could use.
@ -96,6 +91,11 @@ function VisualPresenter() {}
VisualPresenter.prototype = new Presenter();
/**
* The padding in pixels between the object and the highlight border.
*/
VisualPresenter.prototype.BORDER_PADDING = 2;
VisualPresenter.prototype.attach = function(aWindow) {
this.chromeWin = aWindow;
@ -237,7 +237,7 @@ AndroidPresenter.prototype.actionInvoked = function(aObject, aActionName) {
gecko: {
type: 'Accessibility:Event',
eventType: ANDROID_TYPE_VIEW_CLICKED,
text: [UtteranceGenerator.genForAction(aObject, aActionName)]
text: UtteranceGenerator.genForAction(aObject, aActionName)
}
});
};
@ -251,7 +251,7 @@ AndroidPresenter.prototype.tabSelected = function(aObject) {
context.push(parent);
context.reverse();
this.pivotChanged(vcDoc.virtualCursor.position, context);
this.pivotChanged(vcDoc.virtualCursor.position || aObject, context);
};
AndroidPresenter.prototype.sendMessageToJava = function(aMessage) {

View File

@ -54,7 +54,7 @@ var UtteranceGenerator = {
},
genForAction: function(aObject, aActionName) {
return gStringBundle.GetStringFromName(this.gActionMap[aActionName]);
return [gStringBundle.GetStringFromName(this.gActionMap[aActionName])];
},
verbosityRoleMap: {

View File

@ -38,12 +38,12 @@
*
* ***** END LICENSE BLOCK ***** */
#ifndef __NS_APPLICATION_ACCESSIBLE_WRAP_H__
#define __NS_APPLICATION_ACCESSIBLE_WRAP_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 PreCreate() {}

View File

@ -62,6 +62,7 @@ CMMSRCS = nsAccessNodeWrap.mm \
EXPORTS = \
ApplicationAccessibleWrap.h \
ARIAGridAccessibleWrap.h \
nsAccessNodeWrap.h \
nsTextAccessibleWrap.h \
@ -74,13 +75,11 @@ EXPORTS = \
nsHyperTextAccessibleWrap.h \
nsHTMLImageAccessibleWrap.h \
nsHTMLTableAccessibleWrap.h \
nsApplicationAccessibleWrap.h \
mozDocAccessible.h \
mozAccessible.h \
mozAccessibleProtocol.h \
mozActionElements.h \
mozTextAccessible.h \
nsRoleMap.h \
$(NULL)
# we don't want the shared lib, but we want to force the creation of a static lib.

View File

@ -109,6 +109,9 @@ GetObjectOrRepresentedView(id <mozAccessible> aObject)
// the role might be "textfield", while the subrole is "password textfield".
- (NSString*)subrole;
// Return the role description, as there are a few exceptions.
- (NSString*)roleDescription;
// returns the native window we're inside.
- (NSWindow*)window;

View File

@ -40,7 +40,6 @@
#import "MacUtils.h"
#import "mozView.h"
#import "nsRoleMap.h"
#include "Accessible-inl.h"
#include "nsIAccessibleRelation.h"
@ -121,10 +120,6 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
mGeckoAccessible = geckoAccessible;
mIsExpired = NO;
mRole = geckoAccessible->Role();
// Check for OS X "role skew"; the role constants in nsIAccessible.idl need to match the ones
// in nsRoleMap.h.
NS_ASSERTION([AXRoles[roles::LAST_ENTRY] isEqualToString:@"ROLE_LAST_ENTRY"], "Role skew in the role map!");
}
return self;
@ -225,13 +220,8 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
return [NSNumber numberWithBool:[self isEnabled]];
if ([attribute isEqualToString:NSAccessibilityValueAttribute])
return [self value];
if ([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute]) {
if (mRole == roles::DOCUMENT)
return utils::LocalizedString(NS_LITERAL_STRING("htmlContent"));
return NSAccessibilityRoleDescription([self role], [self subrole]);
}
if ([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute])
return [self roleDescription];
if ([attribute isEqualToString:NSAccessibilityDescriptionAttribute])
return [self customDescription];
if ([attribute isEqualToString:NSAccessibilityFocusedAttribute])
@ -467,41 +457,35 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
NS_ASSERTION(nsAccUtils::IsTextInterfaceSupportCorrect(mGeckoAccessible),
"Does not support nsIAccessibleText when it should");
#endif
return (NSString*) AXRoles[mRole];
#define ROLE(geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) \
case roles::geckoRole: \
return macRole;
switch (mRole) {
#include "RoleMap.h"
default:
NS_NOTREACHED("Unknown role.");
return NSAccessibilityUnknownRole;
}
#undef ROLE
}
- (NSString*)subrole
{
if (!mGeckoAccessible)
return nil;
nsIContent* content = mGeckoAccessible->GetContent();
if (!content || !content->IsHTML())
return nil;
nsIAtom* tag = content->Tag();
switch (mRole) {
case roles::LIST:
if ((tag == nsGkAtoms::ul) || (tag == nsGkAtoms::ol))
return NSAccessibilityContentListSubrole;
return NSAccessibilityContentListSubrole;
if (tag == nsGkAtoms::dl)
return NSAccessibilityDefinitionListSubrole;
case roles::DEFINITION_LIST:
return NSAccessibilityDefinitionListSubrole;
break;
case roles::TERM:
return @"AXTerm";
case roles::LISTITEM:
if (tag == nsGkAtoms::dt)
return @"AXTerm";
break;
case roles::PARAGRAPH:
if (tag == nsGkAtoms::dd)
return @"AXDefinition";
break;
case roles::DEFINITION:
return @"AXDefinition";
default:
break;
@ -510,6 +494,21 @@ GetNativeFromGeckoAccessible(nsIAccessible *anAccessible)
return nil;
}
- (NSString*)roleDescription
{
if (mRole == roles::DOCUMENT)
return utils::LocalizedString(NS_LITERAL_STRING("htmlContent"));
NSString* subrole = [self subrole];
if ((mRole == roles::LISTITEM) && [subrole isEqualToString:@"AXTerm"])
return utils::LocalizedString(NS_LITERAL_STRING("term"));
if ((mRole == roles::PARAGRAPH) && [subrole isEqualToString:@"AXDefinition"])
return utils::LocalizedString(NS_LITERAL_STRING("definition"));
return NSAccessibilityRoleDescription([self role], subrole);
}
- (NSString*)title
{
NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL;

View File

@ -79,6 +79,8 @@ ToNSString(id aValue)
NSAccessibilityNumberOfCharactersAttribute, // required
NSAccessibilityVisibleCharacterRangeAttribute, // required
NSAccessibilityInsertionPointLineNumberAttribute,
@"AXRequired",
@"AXInvalid",
nil
];
[supportedAttributes addObjectsFromArray:[super accessibilityAttributeNames]];
@ -115,6 +117,12 @@ ToNSString(id aValue)
return [self text];
}
if ([attribute isEqualToString:@"AXRequired"])
return [NSNumber numberWithBool:!!(mGeckoAccessible->State() & states::REQUIRED)];
if ([attribute isEqualToString:@"AXInvalid"])
return [NSNumber numberWithBool:!!(mGeckoAccessible->State() & states::INVALID)];
if ([attribute isEqualToString:NSAccessibilityVisibleCharacterRangeAttribute])
return [self visibleCharacterRange];

View File

@ -101,7 +101,7 @@ public: // construction, destruction
*/
void GetUnignoredChildren(nsTArray<nsAccessible*>* aChildrenArray);
nsAccessible* GetUnignoredParent() const;
protected:
virtual nsresult FirePlatformEvent(AccEvent* aEvent);

View File

@ -39,8 +39,6 @@
#include "nsDocAccessible.h"
#include "nsObjCExceptions.h"
#import "nsRoleMap.h"
#include "Accessible-inl.h"
#include "Role.h"

View File

@ -1,172 +0,0 @@
/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:expandtab:shiftwidth=2:tabstop=2:
*/
/* ***** 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 Mozilla Foundation
* Portions created by the Initial Developer are Copyright (C) 2006
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Håkan Waara <hwaara@gmail.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 ***** */
#import <Cocoa/Cocoa.h>
#include "nsIAccessible.h"
static const NSString* AXRoles [] = {
NSAccessibilityUnknownRole, // roles::NOTHING 0
NSAccessibilityUnknownRole, // roles::TITLEBAR 1 Irrelevant on OS X; windows are always native.
NSAccessibilityScrollBarRole, // roles::SCROLLBAR 3 We might need to make this its own mozAccessible, to support the children objects (valueindicator, down/up buttons).
NSAccessibilityMenuBarRole, // roles::MENUBAR 2 Irrelevant on OS X; the menubar will always be native and on the top of the screen.
NSAccessibilitySplitterRole, // roles::GRIP 4
NSAccessibilityUnknownRole, // roles::SOUND 5 Unused on OS X.
NSAccessibilityUnknownRole, // roles::CURSOR 6 Unused on OS X.
NSAccessibilityUnknownRole, // roles::CARET 7 Unused on OS X.
NSAccessibilityWindowRole, // roles::ALERT 8
NSAccessibilityWindowRole, // roles::WINDOW 9 Irrelevant on OS X; all window a11y is handled by the system.
NSAccessibilityScrollAreaRole, // roles::INTERNAL_FRAME 10
NSAccessibilityMenuRole, // roles::MENUPOPUP 11 The parent of menuitems.
NSAccessibilityMenuItemRole, // roles::MENUITEM 12
@"AXHelpTag", // roles::TOOLTIP 13 10.4+ only, so we re-define the constant.
NSAccessibilityGroupRole, // roles::APPLICATION 14 Unused on OS X. the system will take care of this.
@"AXWebArea", // roles::DOCUMENT 15
NSAccessibilityGroupRole, // roles::PANE 16
NSAccessibilityUnknownRole, // roles::CHART 17
NSAccessibilityWindowRole, // roles::DIALOG 18 There's a dialog subrole.
NSAccessibilityUnknownRole, // roles::BORDER 19 Unused on OS X.
NSAccessibilityGroupRole, // roles::GROUPING 20
NSAccessibilityUnknownRole, // roles::SEPARATOR 21
NSAccessibilityToolbarRole, // roles::TOOLBAR 22
NSAccessibilityUnknownRole, // roles::STATUSBAR 23 Doesn't exist on OS X (a status bar is its parts; a progressbar, a label, etc.)
NSAccessibilityGroupRole, // roles::TABLE 24
NSAccessibilityGroupRole, // roles::COLUMNHEADER 25
NSAccessibilityGroupRole, // roles::ROWHEADER 26
NSAccessibilityColumnRole, // roles::COLUMN 27
NSAccessibilityRowRole, // roles::ROW 28
NSAccessibilityGroupRole, // roles::CELL 29
@"AXLink", // roles::LINK 30 10.4+ the attr first define in SDK 10.4, so we define it here too. ROLE_LINK
@"AXHelpTag", // roles::HELPBALLOON 31
NSAccessibilityUnknownRole, // roles::CHARACTER 32 Unused on OS X.
NSAccessibilityListRole, // roles::LIST 33
NSAccessibilityGroupRole, // roles::LISTITEM 34
NSAccessibilityOutlineRole, // roles::OUTLINE 35
NSAccessibilityRowRole, // roles::OUTLINEITEM 36 XXX: use OutlineRow as subrole.
NSAccessibilityRadioButtonRole, // roles::PAGETAB 37
NSAccessibilityGroupRole, // roles::PROPERTYPAGE 38
NSAccessibilityUnknownRole, // roles::INDICATOR 39
NSAccessibilityImageRole, // roles::GRAPHIC 40
NSAccessibilityStaticTextRole, // roles::STATICTEXT 41
NSAccessibilityStaticTextRole, // roles::TEXT_LEAF 42
NSAccessibilityButtonRole, // roles::PUSHBUTTON 43
NSAccessibilityCheckBoxRole, // roles::CHECKBUTTON 44
NSAccessibilityRadioButtonRole, // roles::RADIOBUTTON 45
NSAccessibilityPopUpButtonRole, // roles::COMBOBOX 46
NSAccessibilityPopUpButtonRole, // roles::DROPLIST 47
NSAccessibilityProgressIndicatorRole, // roles::PROGRESSBAR 48
NSAccessibilityUnknownRole, // roles::DIAL 49
NSAccessibilityUnknownRole, // roles::HOTKEYFIELD 50
NSAccessibilitySliderRole, // roles::SLIDER 51
NSAccessibilityIncrementorRole, // roles::SPINBUTTON 52 Subroles: Increment/Decrement.
NSAccessibilityUnknownRole, // roles::DIAGRAM 53
NSAccessibilityUnknownRole, // roles::ANIMATION 54
NSAccessibilityUnknownRole, // roles::EQUATION 55
NSAccessibilityPopUpButtonRole, // roles::BUTTONDROPDOWN 56
NSAccessibilityMenuButtonRole, // roles::BUTTONMENU 57
NSAccessibilityGroupRole, // roles::BUTTONDROPDOWNGRID 58
NSAccessibilityUnknownRole, // roles::WHITESPACE 59
NSAccessibilityTabGroupRole, // roles::PAGETABLIST 60
NSAccessibilityUnknownRole, // roles::CLOCK 61 Unused on OS X
NSAccessibilityButtonRole, // roles::SPLITBUTTON 62
NSAccessibilityUnknownRole, // roles::IPADDRESS 63
NSAccessibilityStaticTextRole, // roles::ACCEL_LABEL 64
NSAccessibilityUnknownRole, // roles::ARROW 65
NSAccessibilityImageRole, // roles::CANVAS 66
NSAccessibilityMenuItemRole, // roles::CHECK_MENU_ITEM 67
NSAccessibilityColorWellRole, // roles::COLOR_CHOOSER 68
NSAccessibilityUnknownRole, // roles::DATE_EDITOR 69
NSAccessibilityImageRole, // roles::DESKTOP_ICON 70
NSAccessibilityUnknownRole, // roles::DESKTOP_FRAME 71
NSAccessibilityBrowserRole, // roles::DIRECTORY_PANE 72
NSAccessibilityUnknownRole, // roles::FILE_CHOOSER 73 Unused on OS X
NSAccessibilityUnknownRole, // roles::FONT_CHOOSER 74
NSAccessibilityUnknownRole, // roles::CHROME_WINDOW 75 Unused on OS X
NSAccessibilityGroupRole, // roles::GLASS_PANE 76
NSAccessibilityUnknownRole, // roles::HTML_CONTAINER 77
NSAccessibilityImageRole, // roles::ICON 78
NSAccessibilityGroupRole, // roles::LABEL 79
NSAccessibilityGroupRole, // roles::LAYERED_PANE 80
NSAccessibilityGroupRole, // roles::OPTION_PANE 81
NSAccessibilityTextFieldRole, // roles::PASSWORD_TEXT 82
NSAccessibilityUnknownRole, // roles::POPUP_MENU 83 Unused
NSAccessibilityMenuItemRole, // roles::RADIO_MENU_ITEM 84
NSAccessibilityGroupRole, // roles::ROOT_PANE 85
NSAccessibilityScrollAreaRole, // roles::SCROLL_PANE 86
NSAccessibilitySplitGroupRole, // roles::SPLIT_PANE 87
NSAccessibilityUnknownRole, // roles::TABLE_COLUMN_HEADER 88
NSAccessibilityUnknownRole, // roles::TABLE_ROW_HEADER 89
NSAccessibilityMenuItemRole, // roles::TEAR_OFF_MENU_ITEM 90
NSAccessibilityUnknownRole, // roles::TERMINAL 91
NSAccessibilityGroupRole, // roles::TEXT_CONTAINER 92
NSAccessibilityButtonRole, // roles::TOGGLE_BUTTON 93
NSAccessibilityTableRole, // roles::TREE_TABLE 94
NSAccessibilityUnknownRole, // roles::VIEWPORT 95
NSAccessibilityGroupRole, // roles::HEADER 96
NSAccessibilityGroupRole, // roles::FOOTER 97
NSAccessibilityGroupRole, // roles::PARAGRAPH 98
@"AXRuler", // roles::RULER 99 10.4+ only, so we re-define the constant.
NSAccessibilityUnknownRole, // roles::AUTOCOMPLETE 100
NSAccessibilityTextFieldRole, // roles::EDITBAR 101
NSAccessibilityTextFieldRole, // roles::ENTRY 102
NSAccessibilityStaticTextRole, // roles::CAPTION 103
NSAccessibilityScrollAreaRole, // roles::DOCUMENT_FRAME 104
@"AXHeading", // roles::HEADING 105
NSAccessibilityGroupRole, // roles::PAGE 106
NSAccessibilityGroupRole, // roles::SECTION 107
NSAccessibilityUnknownRole, // roles::REDUNDANT_OBJECT 108
NSAccessibilityGroupRole, // roles::FORM 109
NSAccessibilityUnknownRole, // roles::IME 110
NSAccessibilityUnknownRole, // roles::APP_ROOT 111 Unused on OS X
NSAccessibilityMenuItemRole, // roles::PARENT_MENUITEM 112
NSAccessibilityGroupRole, // roles::CALENDAR 113
NSAccessibilityMenuRole, // roles::COMBOBOX_LIST 114
NSAccessibilityMenuItemRole, // roles::COMBOBOX_OPTION 115
NSAccessibilityImageRole, // roles::IMAGE_MAP 116
NSAccessibilityRowRole, // roles::OPTION 117
NSAccessibilityRowRole, // roles::RICH_OPTION 118
NSAccessibilityListRole, // roles::LISTBOX 119
NSAccessibilityUnknownRole, // roles::FLAT_EQUATION 120
NSAccessibilityGroupRole, // roles::GRID_CELL 121
NSAccessibilityGroupRole, // roles::EMBEDDED_OBJECT 122
NSAccessibilityGroupRole, // roles::NOTE 123
NSAccessibilityGroupRole, // roles::FIGURE 124
NSAccessibilityCheckBoxRole, // roles::CHECK_RICH_OPTION 125
@"ROLE_LAST_ENTRY" // roles::LAST_ENTRY Bogus role that will never be shown (just marks the end of this array)!
};

View File

@ -38,7 +38,7 @@
*
* ***** END LICENSE BLOCK ***** */
#include "nsApplicationAccessibleWrap.h"
#include "ApplicationAccessibleWrap.h"
#include "AccessibleApplication_i.c"
@ -48,11 +48,11 @@
////////////////////////////////////////////////////////////////////////////////
// nsISupports
NS_IMPL_ISUPPORTS_INHERITED0(nsApplicationAccessibleWrap,
nsApplicationAccessible)
NS_IMPL_ISUPPORTS_INHERITED0(ApplicationAccessibleWrap,
ApplicationAccessible)
NS_IMETHODIMP
nsApplicationAccessibleWrap::GetAttributes(nsIPersistentProperties** aAttributes)
ApplicationAccessibleWrap::GetAttributes(nsIPersistentProperties** aAttributes)
{
NS_ENSURE_ARG_POINTER(aAttributes);
*aAttributes = nsnull;
@ -80,7 +80,7 @@ nsApplicationAccessibleWrap::GetAttributes(nsIPersistentProperties** aAttributes
// IUnknown
STDMETHODIMP
nsApplicationAccessibleWrap::QueryInterface(REFIID iid, void** ppv)
ApplicationAccessibleWrap::QueryInterface(REFIID iid, void** ppv)
{
*ppv = NULL;
@ -97,7 +97,7 @@ nsApplicationAccessibleWrap::QueryInterface(REFIID iid, void** ppv)
// IAccessibleApplication
STDMETHODIMP
nsApplicationAccessibleWrap::get_appName(BSTR *aName)
ApplicationAccessibleWrap::get_appName(BSTR* aName)
{
__try {
*aName = NULL;
@ -121,7 +121,7 @@ __try {
}
STDMETHODIMP
nsApplicationAccessibleWrap::get_appVersion(BSTR *aVersion)
ApplicationAccessibleWrap::get_appVersion(BSTR* aVersion)
{
__try {
*aVersion = NULL;
@ -145,7 +145,7 @@ __try {
}
STDMETHODIMP
nsApplicationAccessibleWrap::get_toolkitName(BSTR *aName)
ApplicationAccessibleWrap::get_toolkitName(BSTR* aName)
{
__try {
if (IsDefunct())
@ -167,7 +167,7 @@ __try {
}
STDMETHODIMP
nsApplicationAccessibleWrap::get_toolkitVersion(BSTR *aVersion)
ApplicationAccessibleWrap::get_toolkitVersion(BSTR* aVersion)
{
__try {
*aVersion = NULL;
@ -191,15 +191,15 @@ __try {
}
////////////////////////////////////////////////////////////////////////////////
// nsApplicationAccessibleWrap public static
// ApplicationAccessibleWrap public static
void
nsApplicationAccessibleWrap::PreCreate()
ApplicationAccessibleWrap::PreCreate()
{
}
void
nsApplicationAccessibleWrap::Unload()
ApplicationAccessibleWrap::Unload()
{
}

View File

@ -38,15 +38,15 @@
*
* ***** END LICENSE BLOCK ***** */
#ifndef __NS_APPLICATION_ACCESSIBLE_WRAP_H__
#define __NS_APPLICATION_ACCESSIBLE_WRAP_H__
#ifndef MOZILLA_A11Y_APPLICATION_ACCESSIBLE_WRAP_H__
#define MOZILLA_A11Y_APPLICATION_ACCESSIBLE_WRAP_H__
#include "nsApplicationAccessible.h"
#include "ApplicationAccessible.h"
#include "AccessibleApplication.h"
class nsApplicationAccessibleWrap: public nsApplicationAccessible,
public IAccessibleApplication
class ApplicationAccessibleWrap: public ApplicationAccessible,
public IAccessibleApplication
{
public:
// nsISupporst

View File

@ -80,7 +80,7 @@ IsModuleVersionLessThan(HMODULE aModuleHandle, DWORD aMajor, DWORD aMinor)
// Compatibility
////////////////////////////////////////////////////////////////////////////////
PRUint32 Compatibility::sMode = Compatibility::NoCompatibilityMode;
PRUint32 Compatibility::sConsumers = Compatibility::UNKNOWN;
void
Compatibility::Init()
@ -88,47 +88,53 @@ Compatibility::Init()
// Note we collect some AT statistics/telemetry here for convenience.
HMODULE jawsHandle = ::GetModuleHandleW(L"jhook");
if (jawsHandle) {
sMode |= JAWSMode;
// IA2 off mode for JAWS versions below 8.0.2173.
if (IsModuleVersionLessThan(jawsHandle, 8, 2173)) {
sMode |= IA2OffMode;
statistics::A11yConsumers(OLDJAWS);
} else {
statistics::A11yConsumers(JAWS);
}
}
if (jawsHandle)
sConsumers |= (IsModuleVersionLessThan(jawsHandle, 8, 2173)) ?
OLDJAWS : JAWS;
if (::GetModuleHandleW(L"gwm32inc")) {
sMode |= WEMode;
statistics::A11yConsumers(WE);
}
if (::GetModuleHandleW(L"dolwinhk")) {
sMode |= DolphinMode;
statistics::A11yConsumers(DOLPHIN);
}
if (::GetModuleHandleW(L"gwm32inc"))
sConsumers |= WE;
if (::GetModuleHandleW(L"dolwinhk"))
sConsumers |= DOLPHIN;
if (::GetModuleHandleW(L"STSA32"))
statistics::A11yConsumers(SEROTEK);
sConsumers |= SEROTEK;
if (::GetModuleHandleW(L"nvdaHelperRemote"))
statistics::A11yConsumers(NVDA);
sConsumers |= NVDA;
if (::GetModuleHandleW(L"OsmHooks"))
statistics::A11yConsumers(COBRA);
sConsumers |= COBRA;
if (::GetModuleHandleW(L"WebFinderRemote"))
statistics::A11yConsumers(ZOOMTEXT);
sConsumers |= ZOOMTEXT;
if (::GetModuleHandleW(L"Kazahook"))
statistics::A11yConsumers(KAZAGURU);
sConsumers |= KAZAGURU;
if (::GetModuleHandleW(L"TextExtractorImpl32") ||
::GetModuleHandleW(L"TextExtractorImpl64"))
statistics::A11yConsumers(YOUDAO);
sConsumers |= YOUDAO;
if (::GetModuleHandleW(L"uiautomation"))
sConsumers |= UIAUTOMATION;
// If we have a known consumer remove the unknown bit.
if (sConsumers != Compatibility::UNKNOWN)
sConsumers ^= Compatibility::UNKNOWN;
// Gather telemetry
PRUint32 temp = sConsumers;
for (int i = 0; temp; i++) {
if (temp & 0x1)
statistics::A11yConsumers(i);
temp >>= 1;
}
// Turn off new tab switching for Jaws and WE.
if (sMode & JAWSMode || sMode & WEMode) {
if (sConsumers & (JAWS | OLDJAWS | WE)) {
// Check to see if the pref for disallowing CtrlTab is already set. If so,
// bail out (respect the user settings). If not, set it.
if (!Preferences::HasUserValue("browser.ctrlTab.disallowForScreenReaders"))

View File

@ -57,22 +57,22 @@ public:
/**
* Return true if IAccessible2 disabled.
*/
static bool IsIA2Off() { return sMode & IA2OffMode; }
static bool IsIA2Off() { return !!(sConsumers & OLDJAWS); }
/**
* Return true if JAWS mode is enabled.
*/
static bool IsJAWS() { return sMode & JAWSMode; }
static bool IsJAWS() { return !!(sConsumers & (JAWS | OLDJAWS)); }
/**
* Return true if WE mode is enabled.
*/
static bool IsWE() { return sMode & WEMode; }
static bool IsWE() { return !!(sConsumers & WE); }
/**
* Return true if Dolphin mode is enabled.
*/
static bool IsDolphin() { return sMode & DolphinMode; }
static bool IsDolphin() { return !!(sConsumers & DOLPHIN); }
private:
Compatibility();
@ -87,34 +87,25 @@ private:
friend class nsAccessNodeWrap;
/**
* List of compatibility modes.
* List of detected consumers of a11y (used for statistics/telemetry and compat)
*/
enum {
NoCompatibilityMode = 0,
JAWSMode = 1 << 0,
WEMode = 1 << 1,
DolphinMode = 1 << 2,
IA2OffMode = 1 << 3
};
/**
* List of detected consumers of a11y (used for statistics/telemetry)
*/
enum {
NVDA = 0,
JAWS = 1,
OLDJAWS = 2,
WE = 3,
DOLPHIN = 4,
SEROTEK = 5,
COBRA = 6,
ZOOMTEXT = 7,
KAZAGURU = 8,
YOUDAO = 9
NVDA = 1 << 0,
JAWS = 1 << 1,
OLDJAWS = 1 << 2,
WE = 1 << 3,
DOLPHIN = 1 << 4,
SEROTEK = 1 << 5,
COBRA = 1 << 6,
ZOOMTEXT = 1 << 7,
KAZAGURU = 1 << 8,
YOUDAO = 1 << 9,
UNKNOWN = 1 << 10,
UIAUTOMATION = 1 << 11
};
private:
static PRUint32 sMode;
static PRUint32 sConsumers;
};
} // a11y namespace

View File

@ -48,12 +48,13 @@ LIBXUL_LIBRARY = 1
CPPSRCS = \
ApplicationAccessibleWrap.cpp \
ARIAGridAccessibleWrap.cpp \
nsAccessNodeWrap.cpp \
nsAccessibleWrap.cpp \
nsTextAccessibleWrap.cpp \
nsDocAccessibleWrap.cpp \
nsHTMLWin32ObjectAccessible.cpp \
ARIAGridAccessibleWrap.cpp \
nsRootAccessibleWrap.cpp \
nsXULMenuAccessibleWrap.cpp \
nsXULListboxAccessibleWrap.cpp \
@ -61,7 +62,6 @@ CPPSRCS = \
nsHyperTextAccessibleWrap.cpp \
nsHTMLImageAccessibleWrap.cpp \
nsHTMLTableAccessibleWrap.cpp \
nsApplicationAccessibleWrap.cpp \
nsWinUtils.cpp \
ia2AccessibleAction.cpp \
ia2AccessibleComponent.cpp \
@ -78,6 +78,7 @@ CPPSRCS = \
$(NULL)
EXPORTS = \
ApplicationAccessibleWrap.h \
ARIAGridAccessibleWrap.h \
nsAccessNodeWrap.h \
nsAccessibleWrap.h \
@ -91,7 +92,6 @@ EXPORTS = \
nsHyperTextAccessibleWrap.h \
nsHTMLImageAccessibleWrap.h \
nsHTMLTableAccessibleWrap.h \
nsApplicationAccessibleWrap.h \
ia2AccessibleAction.h \
ia2AccessibleComponent.h \
CAccessibleImage.h \

View File

@ -39,11 +39,11 @@
#include "nsAccessNodeWrap.h"
#include "AccessibleApplication.h"
#include "ApplicationAccessibleWrap.h"
#include "ISimpleDOMNode_i.c"
#include "Compatibility.h"
#include "nsAccessibilityService.h"
#include "nsApplicationAccessibleWrap.h"
#include "nsCoreUtils.h"
#include "nsRootAccessible.h"
#include "nsWinUtils.h"
@ -174,7 +174,7 @@ nsAccessNodeWrap::QueryService(REFGUID guidService, REFIID iid, void** ppv)
// Can get to IAccessibleApplication from any node via QS
if (iid == IID_IAccessibleApplication) {
nsApplicationAccessible *applicationAcc = GetApplicationAccessible();
ApplicationAccessible* applicationAcc = GetApplicationAccessible();
if (!applicationAcc)
return E_NOINTERFACE;

View File

@ -52,6 +52,7 @@
#include "nsIAccessibleRelation.h"
#include "Accessible2_i.c"
#include "AccessibleRole.h"
#include "AccessibleStates.h"
#include "nsIMutableArray.h"
@ -65,12 +66,29 @@
#include "nsTextFormatter.h"
#include "nsIView.h"
#include "nsIViewManager.h"
#include "nsRoleMap.h"
#include "nsEventMap.h"
#include "nsArrayUtils.h"
#include "OLEACC.H"
using namespace mozilla;
using namespace mozilla::a11y;
const PRUint32 USE_ROLE_STRING = 0;
#ifndef ROLE_SYSTEM_SPLITBUTTON
const PRUint32 ROLE_SYSTEM_SPLITBUTTON = 0x3e; // Not defined in all oleacc.h versions
#endif
#ifndef ROLE_SYSTEM_IPADDRESS
const PRUint32 ROLE_SYSTEM_IPADDRESS = 0x3f; // Not defined in all oleacc.h versions
#endif
#ifndef ROLE_SYSTEM_OUTLINEBUTTON
const PRUint32 ROLE_SYSTEM_OUTLINEBUTTON = 0x40; // Not defined in all oleacc.h versions
#endif
/* For documentation of the accessibility architecture,
* see http://lxr.mozilla.org/seamonkey/source/accessible/accessible-docs.html
*/
@ -374,15 +392,26 @@ __try {
"Does not support nsIAccessibleText when it should");
#endif
roles::Role role = xpAccessible->Role();
PRUint32 msaaRole = gWindowsRoleMap[role].msaaRole;
NS_ASSERTION(gWindowsRoleMap[roles::LAST_ENTRY].msaaRole == ROLE_WINDOWS_LAST_ENTRY,
"MSAA role map skewed");
a11y::role geckoRole = xpAccessible->Role();
PRUint32 msaaRole = 0;
#define ROLE(_geckoRole, stringRole, atkRole, macRole, _msaaRole, ia2Role) \
case roles::_geckoRole: \
msaaRole = _msaaRole; \
break;
switch (geckoRole) {
#include "RoleMap.h"
default:
MOZ_NOT_REACHED("Unknown role.");
};
#undef ROLE
// Special case, if there is a ROLE_ROW inside of a ROLE_TREE_TABLE, then call the MSAA role
// a ROLE_OUTLINEITEM for consistency and compatibility.
// We need this because ARIA has a role of "row" for both grid and treegrid
if (role == roles::ROW) {
if (geckoRole == roles::ROW) {
nsAccessible* xpParent = Parent();
if (xpParent && xpParent->Role() == roles::TREE_TABLE)
msaaRole = ROLE_SYSTEM_OUTLINEITEM;
@ -1202,15 +1231,23 @@ __try {
if (IsDefunct())
return CO_E_OBJNOTCONNECTED;
NS_ASSERTION(gWindowsRoleMap[roles::LAST_ENTRY].ia2Role == ROLE_WINDOWS_LAST_ENTRY,
"MSAA role map skewed");
#define ROLE(_geckoRole, stringRole, atkRole, macRole, msaaRole, ia2Role) \
case roles::_geckoRole: \
*aRole = ia2Role; \
break;
roles::Role role = Role();
*aRole = gWindowsRoleMap[role].ia2Role;
a11y::role geckoRole = Role();
switch (geckoRole) {
#include "RoleMap.h"
default:
MOZ_NOT_REACHED("Unknown role.");
};
#undef ROLE
// Special case, if there is a ROLE_ROW inside of a ROLE_TREE_TABLE, then call
// the IA2 role a ROLE_OUTLINEITEM.
if (role == roles::ROW) {
if (geckoRole == roles::ROW) {
nsAccessible* xpParent = Parent();
if (xpParent && xpParent->Role() == roles::TREE_TABLE)
*aRole = ROLE_SYSTEM_OUTLINEITEM;

View File

@ -1,458 +0,0 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:expandtab:shiftwidth=2:tabstop=2:
*/
/* ***** 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>
* Alexander Surkov <surkov.alexander@gmail.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 "OLEACC.H"
#include "AccessibleRole.h"
const PRUint32 USE_ROLE_STRING = 0;
const PRUint32 ROLE_WINDOWS_LAST_ENTRY = 0xffffffff;
#ifndef ROLE_SYSTEM_SPLITBUTTON
const PRUint32 ROLE_SYSTEM_SPLITBUTTON = 0x3e; // Not defined in all oleacc.h versions
#endif
#ifndef ROLE_SYSTEM_IPADDRESS
const PRUint32 ROLE_SYSTEM_IPADDRESS = 0x3f; // Not defined in all oleacc.h versions
#endif
#ifndef ROLE_SYSTEM_OUTLINEBUTTON
const PRUint32 ROLE_SYSTEM_OUTLINEBUTTON = 0x40; // Not defined in all oleacc.h versions
#endif
struct WindowsRoleMapItem
{
PRUint32 msaaRole;
long ia2Role;
};
// Map array from cross platform roles to MSAA/IA2 roles
static const WindowsRoleMapItem gWindowsRoleMap[] = {
// roles::NOTHING
{ USE_ROLE_STRING, IA2_ROLE_UNKNOWN },
// roles::TITLEBAR
{ ROLE_SYSTEM_TITLEBAR, ROLE_SYSTEM_TITLEBAR },
// roles::MENUBAR
{ ROLE_SYSTEM_MENUBAR, ROLE_SYSTEM_MENUBAR },
// roles::SCROLLBAR
{ ROLE_SYSTEM_SCROLLBAR, ROLE_SYSTEM_SCROLLBAR },
// roles::GRIP
{ ROLE_SYSTEM_GRIP, ROLE_SYSTEM_GRIP },
// roles::SOUND
{ ROLE_SYSTEM_SOUND, ROLE_SYSTEM_SOUND },
// roles::CURSOR
{ ROLE_SYSTEM_CURSOR, ROLE_SYSTEM_CURSOR },
// roles::CARET
{ ROLE_SYSTEM_CARET, ROLE_SYSTEM_CARET },
// roles::ALERT
{ ROLE_SYSTEM_ALERT, ROLE_SYSTEM_ALERT },
// roles::WINDOW
{ ROLE_SYSTEM_WINDOW, ROLE_SYSTEM_WINDOW },
// roles::INTERNAL_FRAME
{ USE_ROLE_STRING, IA2_ROLE_INTERNAL_FRAME},
// roles::MENUPOPUP
{ ROLE_SYSTEM_MENUPOPUP, ROLE_SYSTEM_MENUPOPUP },
// roles::MENUITEM
{ ROLE_SYSTEM_MENUITEM, ROLE_SYSTEM_MENUITEM },
// roles::TOOLTIP
{ ROLE_SYSTEM_TOOLTIP, ROLE_SYSTEM_TOOLTIP },
// roles::APPLICATION
{ ROLE_SYSTEM_APPLICATION, ROLE_SYSTEM_APPLICATION },
// roles::DOCUMENT
{ ROLE_SYSTEM_DOCUMENT, ROLE_SYSTEM_DOCUMENT },
// roles::PANE
// 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_SYSTEM_GROUPING , ROLE_SYSTEM_GROUPING },
// roles::CHART
{ ROLE_SYSTEM_CHART, ROLE_SYSTEM_CHART },
// roles::DIALOG
{ ROLE_SYSTEM_DIALOG, ROLE_SYSTEM_DIALOG },
// roles::BORDER
{ ROLE_SYSTEM_BORDER, ROLE_SYSTEM_BORDER },
// roles::GROUPING
{ ROLE_SYSTEM_GROUPING, ROLE_SYSTEM_GROUPING },
// roles::SEPARATOR
{ ROLE_SYSTEM_SEPARATOR, ROLE_SYSTEM_SEPARATOR },
// roles::TOOLBAR
{ ROLE_SYSTEM_TOOLBAR, ROLE_SYSTEM_TOOLBAR },
// roles::STATUSBAR
{ ROLE_SYSTEM_STATUSBAR, ROLE_SYSTEM_STATUSBAR },
// roles::TABLE
{ ROLE_SYSTEM_TABLE, ROLE_SYSTEM_TABLE },
// roles::COLUMNHEADER,
{ ROLE_SYSTEM_COLUMNHEADER, ROLE_SYSTEM_COLUMNHEADER },
// roles::ROWHEADER
{ ROLE_SYSTEM_ROWHEADER, ROLE_SYSTEM_ROWHEADER },
// roles::COLUMN
{ ROLE_SYSTEM_COLUMN, ROLE_SYSTEM_COLUMN },
// roles::ROW
{ ROLE_SYSTEM_ROW, ROLE_SYSTEM_ROW },
// roles::CELL
{ ROLE_SYSTEM_CELL, ROLE_SYSTEM_CELL },
// roles::LINK
{ ROLE_SYSTEM_LINK, ROLE_SYSTEM_LINK },
// roles::HELPBALLOON
{ ROLE_SYSTEM_HELPBALLOON, ROLE_SYSTEM_HELPBALLOON },
// roles::CHARACTER
{ ROLE_SYSTEM_CHARACTER, ROLE_SYSTEM_CHARACTER },
// roles::LIST
{ ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
// roles::LISTITEM
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::OUTLINE
{ ROLE_SYSTEM_OUTLINE, ROLE_SYSTEM_OUTLINE },
// roles::OUTLINEITEM
{ ROLE_SYSTEM_OUTLINEITEM, ROLE_SYSTEM_OUTLINEITEM },
// roles::PAGETAB
{ ROLE_SYSTEM_PAGETAB, ROLE_SYSTEM_PAGETAB },
// roles::PROPERTYPAGE
{ ROLE_SYSTEM_PROPERTYPAGE, ROLE_SYSTEM_PROPERTYPAGE },
// roles::INDICATOR
{ ROLE_SYSTEM_INDICATOR, ROLE_SYSTEM_INDICATOR },
// roles::GRAPHIC
{ ROLE_SYSTEM_GRAPHIC, ROLE_SYSTEM_GRAPHIC },
// roles::STATICTEXT
{ ROLE_SYSTEM_STATICTEXT, ROLE_SYSTEM_STATICTEXT },
// roles::TEXT_LEAF
{ ROLE_SYSTEM_TEXT, ROLE_SYSTEM_TEXT },
// roles::PUSHBUTTON
{ ROLE_SYSTEM_PUSHBUTTON, ROLE_SYSTEM_PUSHBUTTON },
// roles::CHECKBUTTON
{ ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_CHECKBUTTON },
// roles::RADIOBUTTON
{ ROLE_SYSTEM_RADIOBUTTON, ROLE_SYSTEM_RADIOBUTTON },
// roles::COMBOBOX
{ ROLE_SYSTEM_COMBOBOX, ROLE_SYSTEM_COMBOBOX },
// roles::DROPLIST
{ ROLE_SYSTEM_DROPLIST, ROLE_SYSTEM_DROPLIST },
// roles::PROGRESSBAR
{ ROLE_SYSTEM_PROGRESSBAR, ROLE_SYSTEM_PROGRESSBAR },
// roles::DIAL
{ ROLE_SYSTEM_DIAL, ROLE_SYSTEM_DIAL },
// roles::HOTKEYFIELD
{ ROLE_SYSTEM_HOTKEYFIELD, ROLE_SYSTEM_HOTKEYFIELD },
// roles::SLIDER
{ ROLE_SYSTEM_SLIDER, ROLE_SYSTEM_SLIDER },
// roles::SPINBUTTON
{ ROLE_SYSTEM_SPINBUTTON, ROLE_SYSTEM_SPINBUTTON },
// roles::DIAGRAM
{ ROLE_SYSTEM_DIAGRAM, ROLE_SYSTEM_DIAGRAM },
// roles::ANIMATION
{ ROLE_SYSTEM_ANIMATION, ROLE_SYSTEM_ANIMATION },
// roles::EQUATION
{ ROLE_SYSTEM_EQUATION, ROLE_SYSTEM_EQUATION },
// roles::BUTTONDROPDOWN
{ ROLE_SYSTEM_BUTTONDROPDOWN, ROLE_SYSTEM_BUTTONDROPDOWN },
// roles::BUTTONMENU
{ ROLE_SYSTEM_BUTTONMENU, ROLE_SYSTEM_BUTTONMENU },
// roles::BUTTONDROPDOWNGRID
{ ROLE_SYSTEM_BUTTONDROPDOWNGRID, ROLE_SYSTEM_BUTTONDROPDOWNGRID },
// roles::WHITESPACE
{ ROLE_SYSTEM_WHITESPACE, ROLE_SYSTEM_WHITESPACE },
// roles::PAGETABLIST
{ ROLE_SYSTEM_PAGETABLIST, ROLE_SYSTEM_PAGETABLIST },
// roles::CLOCK
{ ROLE_SYSTEM_CLOCK, ROLE_SYSTEM_CLOCK },
// roles::SPLITBUTTON
{ ROLE_SYSTEM_SPLITBUTTON, ROLE_SYSTEM_SPLITBUTTON },
// roles::IPADDRESS
{ ROLE_SYSTEM_IPADDRESS, ROLE_SYSTEM_IPADDRESS },
// Make up for Gecko roles that we don't have in MSAA or IA2. When in doubt
// map them to USE_ROLE_STRING (IA2_ROLE_UNKNOWN).
// roles::ACCEL_LABEL
{ ROLE_SYSTEM_STATICTEXT, ROLE_SYSTEM_STATICTEXT },
// roles::ARROW
{ ROLE_SYSTEM_INDICATOR, ROLE_SYSTEM_INDICATOR },
// roles::CANVAS
{ USE_ROLE_STRING, IA2_ROLE_CANVAS },
// roles::CHECK_MENU_ITEM
{ ROLE_SYSTEM_MENUITEM, IA2_ROLE_CHECK_MENU_ITEM },
// roles::COLOR_CHOOSER
{ ROLE_SYSTEM_DIALOG, IA2_ROLE_COLOR_CHOOSER },
// roles::DATE_EDITOR
{ USE_ROLE_STRING, IA2_ROLE_DATE_EDITOR },
// roles::DESKTOP_ICON
{ USE_ROLE_STRING, IA2_ROLE_DESKTOP_ICON },
// roles::DESKTOP_FRAME
{ USE_ROLE_STRING, IA2_ROLE_DESKTOP_PANE },
// roles::DIRECTORY_PANE
{ USE_ROLE_STRING, IA2_ROLE_DIRECTORY_PANE },
// roles::FILE_CHOOSER
{ USE_ROLE_STRING, IA2_ROLE_FILE_CHOOSER },
// roles::FONT_CHOOSER
{ USE_ROLE_STRING, IA2_ROLE_FONT_CHOOSER },
// roles::CHROME_WINDOW
{ ROLE_SYSTEM_APPLICATION, IA2_ROLE_FRAME },
// roles::GLASS_PANE
{ USE_ROLE_STRING, IA2_ROLE_GLASS_PANE },
// roles::HTML_CONTAINER
{ USE_ROLE_STRING, IA2_ROLE_UNKNOWN },
// roles::ICON
{ ROLE_SYSTEM_PUSHBUTTON, IA2_ROLE_ICON },
// roles::LABEL
{ ROLE_SYSTEM_STATICTEXT, IA2_ROLE_LABEL },
// roles::LAYERED_PANE
{ USE_ROLE_STRING, IA2_ROLE_LAYERED_PANE },
// roles::OPTION_PANE
{ USE_ROLE_STRING, IA2_ROLE_OPTION_PANE },
// roles::PASSWORD_TEXT
{ ROLE_SYSTEM_TEXT, ROLE_SYSTEM_TEXT },
// roles::POPUP_MENU
{ ROLE_SYSTEM_MENUPOPUP, ROLE_SYSTEM_MENUPOPUP },
// roles::RADIO_MENU_ITEM
{ ROLE_SYSTEM_MENUITEM, IA2_ROLE_RADIO_MENU_ITEM },
// roles::ROOT_PANE
{ USE_ROLE_STRING, IA2_ROLE_ROOT_PANE },
// roles::SCROLL_PANE
{ USE_ROLE_STRING, IA2_ROLE_SCROLL_PANE },
// roles::SPLIT_PANE
{ USE_ROLE_STRING, IA2_ROLE_SPLIT_PANE },
// roles::TABLE_COLUMN_HEADER
{ ROLE_SYSTEM_COLUMNHEADER, ROLE_SYSTEM_COLUMNHEADER },
// roles::TABLE_ROW_HEADER
{ ROLE_SYSTEM_ROWHEADER, ROLE_SYSTEM_ROWHEADER },
// roles::TEAR_OFF_MENU_ITEM
{ ROLE_SYSTEM_MENUITEM, IA2_ROLE_TEAR_OFF_MENU },
// roles::TERMINAL
{ USE_ROLE_STRING, IA2_ROLE_TERMINAL },
// roles::TEXT_CONTAINER
{ USE_ROLE_STRING, IA2_ROLE_TEXT_FRAME },
// roles::TOGGLE_BUTTON
{ ROLE_SYSTEM_PUSHBUTTON, IA2_ROLE_TOGGLE_BUTTON },
// roles::TREE_TABLE
{ ROLE_SYSTEM_OUTLINE, ROLE_SYSTEM_OUTLINE },
// roles::VIEWPORT
{ ROLE_SYSTEM_PANE, IA2_ROLE_VIEW_PORT },
// roles::HEADER
{ USE_ROLE_STRING, IA2_ROLE_HEADER },
// roles::FOOTER
{ USE_ROLE_STRING, IA2_ROLE_FOOTER },
// roles::PARAGRAPH
{ USE_ROLE_STRING, IA2_ROLE_PARAGRAPH },
// roles::RULER
{ USE_ROLE_STRING, IA2_ROLE_RULER },
// roles::AUTOCOMPLETE
{ ROLE_SYSTEM_COMBOBOX, ROLE_SYSTEM_COMBOBOX },
// roles::EDITBAR
{ ROLE_SYSTEM_TEXT, IA2_ROLE_EDITBAR },
// roles::ENTRY
{ ROLE_SYSTEM_TEXT, ROLE_SYSTEM_TEXT },
// roles::CAPTION
{ USE_ROLE_STRING, IA2_ROLE_CAPTION },
// roles::DOCUMENT_FRAME
{ USE_ROLE_STRING, IA2_ROLE_UNKNOWN },
// roles::HEADING
{ USE_ROLE_STRING, IA2_ROLE_HEADING },
// roles::PAGE
{ USE_ROLE_STRING, IA2_ROLE_PAGE },
// roles::SECTION
{ USE_ROLE_STRING, IA2_ROLE_SECTION },
// roles::REDUNDANT_OBJECT
{ USE_ROLE_STRING, IA2_ROLE_REDUNDANT_OBJECT },
// roles::FORM
{ USE_ROLE_STRING, IA2_ROLE_FORM },
// roles::IME
{ USE_ROLE_STRING, IA2_ROLE_INPUT_METHOD_WINDOW },
// roles::APP_ROOT
{ ROLE_SYSTEM_APPLICATION, ROLE_SYSTEM_APPLICATION },
// roles::PARENT_MENUITEM
{ ROLE_SYSTEM_MENUITEM, ROLE_SYSTEM_MENUITEM },
// roles::CALENDAR
{ ROLE_SYSTEM_CLIENT, ROLE_SYSTEM_CLIENT },
// roles::COMBOBOX_LIST
{ ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
// roles::COMBOBOX_OPTION
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::IMAGE_MAP
{ ROLE_SYSTEM_GRAPHIC, ROLE_SYSTEM_GRAPHIC },
// roles::OPTION
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::RICH_OPTION
{ ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
// roles::LISTBOX
{ ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
// roles::FLAT_EQUATION
{ ROLE_SYSTEM_EQUATION, ROLE_SYSTEM_EQUATION },
// roles::GRID_CELL
{ ROLE_SYSTEM_CELL, ROLE_SYSTEM_CELL },
// roles::EMBEDDED_OBJECT
{ USE_ROLE_STRING, IA2_ROLE_EMBEDDED_OBJECT },
// roles::NOTE
{ USE_ROLE_STRING, IA2_ROLE_NOTE },
// roles::FIGURE
{ ROLE_SYSTEM_GROUPING, ROLE_SYSTEM_GROUPING },
// roles::CHECK_RICH_OPTION
{ ROLE_SYSTEM_CHECKBUTTON, ROLE_SYSTEM_CHECKBUTTON },
// roles::LAST_ENTRY
{ ROLE_WINDOWS_LAST_ENTRY, ROLE_WINDOWS_LAST_ENTRY }
};

View File

@ -20,7 +20,7 @@
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Alexander Surkov <surkov.alexander@gmail.com> (origianl author)
* Alexander Surkov <surkov.alexander@gmail.com> (original author)
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),

View File

@ -38,12 +38,12 @@
*
* ***** END LICENSE BLOCK ***** */
#ifndef __NS_APPLICATION_ACCESSIBLE_WRAP_H__
#define __NS_APPLICATION_ACCESSIBLE_WRAP_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 PreCreate() {}

View File

@ -54,6 +54,7 @@ CPPSRCS = \
$(NULL)
EXPORTS = \
ApplicationAccessibleWrap.h \
ARIAGridAccessibleWrap.h \
nsAccessNodeWrap.h \
nsTextAccessibleWrap.h \
@ -66,7 +67,6 @@ EXPORTS = \
nsHyperTextAccessibleWrap.h \
nsHTMLImageAccessibleWrap.h \
nsHTMLTableAccessibleWrap.h \
nsApplicationAccessibleWrap.h \
$(NULL)
# we don't want the shared lib, but we want to force the creation of a static lib.

View File

@ -21,6 +21,32 @@ xpcAccessibleTable::GetCaption(nsIAccessible** aCaption)
return NS_OK;
}
nsresult
xpcAccessibleTable::GetColumnCount(PRInt32* aColumnCount)
{
NS_ENSURE_ARG_POINTER(aColumnCount);
*aColumnCount = 0;
if (!mTable)
return NS_ERROR_FAILURE;
*aColumnCount = mTable->ColCount();
return NS_OK;
}
nsresult
xpcAccessibleTable::GetRowCount(PRInt32* aRowCount)
{
NS_ENSURE_ARG_POINTER(aRowCount);
*aRowCount = 0;
if (!mTable)
return NS_ERROR_FAILURE;
*aRowCount = mTable->RowCount();
return NS_OK;
}
nsresult
xpcAccessibleTable::GetSummary(nsAString& aSummary)
{
@ -45,3 +71,31 @@ xpcAccessibleTable::IsProbablyForLayout(bool* aResult)
*aResult = mTable->IsProbablyLayoutTable();
return NS_OK;
}
nsresult
xpcAccessibleTable::UnselectColumn(PRInt32 aColIdx)
{
if (!mTable)
return NS_ERROR_FAILURE;
if (aColIdx < 0 || aColIdx >= mTable->ColCount())
return NS_ERROR_INVALID_ARG;
mTable->UnselectCol(aColIdx);
return NS_OK;
}
nsresult
xpcAccessibleTable::UnselectRow(PRInt32 aRowIdx)
{
if (!mTable)
return NS_ERROR_FAILURE;
if (aRowIdx < 0 || aRowIdx >= mTable->RowCount())
return NS_ERROR_INVALID_ARG;
mTable->UnselectRow(aRowIdx);
return NS_OK;
}

View File

@ -24,6 +24,10 @@ public:
nsresult GetCaption(nsIAccessible** aCaption);
nsresult GetSummary(nsAString& aSummary);
nsresult GetColumnCount(PRInt32* aColumnCount);
nsresult GetRowCount(PRInt32* aRowCount);
nsresult UnselectColumn(PRInt32 aColIdx);
nsresult UnselectRow(PRInt32 aRowIdx);
nsresult IsProbablyForLayout(bool* aIsForLayout);
protected:
@ -35,8 +39,10 @@ protected:
{ return xpcAccessibleTable::GetCaption(aCaption); } \
NS_SCRIPTABLE NS_IMETHOD GetSummary(nsAString & aSummary) \
{ return xpcAccessibleTable::GetSummary(aSummary); } \
NS_SCRIPTABLE NS_IMETHOD GetColumnCount(PRInt32 *aColumnCount); \
NS_SCRIPTABLE NS_IMETHOD GetRowCount(PRInt32 *aRowCount); \
NS_SCRIPTABLE NS_IMETHOD GetColumnCount(PRInt32* aColumnCount) \
{ return xpcAccessibleTable::GetColumnCount(aColumnCount); } \
NS_SCRIPTABLE NS_IMETHOD GetRowCount(PRInt32* aRowCount) \
{ return xpcAccessibleTable::GetRowCount(aRowCount); } \
NS_SCRIPTABLE NS_IMETHOD GetCellAt(PRInt32 rowIndex, PRInt32 columnIndex, nsIAccessible * *_retval NS_OUTPARAM); \
NS_SCRIPTABLE NS_IMETHOD GetCellIndexAt(PRInt32 rowIndex, PRInt32 columnIndex, PRInt32 *_retval NS_OUTPARAM); \
NS_SCRIPTABLE NS_IMETHOD GetColumnIndexAt(PRInt32 cellIndex, PRInt32 *_retval NS_OUTPARAM); \
@ -58,8 +64,10 @@ protected:
NS_SCRIPTABLE NS_IMETHOD GetSelectedRowIndices(PRUint32 *rowsArraySize NS_OUTPARAM, PRInt32 **rowsArray NS_OUTPARAM); \
NS_SCRIPTABLE NS_IMETHOD SelectRow(PRInt32 rowIndex); \
NS_SCRIPTABLE NS_IMETHOD SelectColumn(PRInt32 columnIndex); \
NS_SCRIPTABLE NS_IMETHOD UnselectColumn(PRInt32 columnIndex); \
NS_IMETHOD UnselectRow(PRInt32 aRowIdx); \
NS_SCRIPTABLE NS_IMETHOD UnselectColumn(PRInt32 aColIdx) \
{ return xpcAccessibleTable::UnselectColumn(aColIdx); } \
NS_IMETHOD UnselectRow(PRInt32 aRowIdx) \
{ return xpcAccessibleTable::UnselectRow(aRowIdx); } \
NS_IMETHOD IsProbablyForLayout(bool* aResult) \
{ return xpcAccessibleTable::IsProbablyForLayout(aResult); } \

View File

@ -241,15 +241,9 @@ nsXULListboxAccessible::NativeRole()
////////////////////////////////////////////////////////////////////////////////
// nsXULListboxAccessible. nsIAccessibleTable
NS_IMETHODIMP
nsXULListboxAccessible::GetColumnCount(PRInt32 *aColumnsCout)
PRUint32
nsXULListboxAccessible::ColCount()
{
NS_ENSURE_ARG_POINTER(aColumnsCout);
*aColumnsCout = 0;
if (IsDefunct())
return NS_ERROR_FAILURE;
nsIContent* headContent = nsnull;
for (nsIContent* childContent = mContent->GetFirstChild(); childContent;
childContent = childContent->GetNextSibling()) {
@ -259,7 +253,7 @@ nsXULListboxAccessible::GetColumnCount(PRInt32 *aColumnsCout)
}
}
if (!headContent)
return NS_OK;
return 0;
PRUint32 columnCount = 0;
for (nsIContent* childContent = headContent->GetFirstChild(); childContent;
@ -270,28 +264,19 @@ nsXULListboxAccessible::GetColumnCount(PRInt32 *aColumnsCout)
}
}
*aColumnsCout = columnCount;
return NS_OK;
return columnCount;
}
NS_IMETHODIMP
nsXULListboxAccessible::GetRowCount(PRInt32 *aRowCount)
PRUint32
nsXULListboxAccessible::RowCount()
{
NS_ENSURE_ARG_POINTER(aRowCount);
*aRowCount = 0;
if (IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMXULSelectControlElement> element(do_QueryInterface(mContent));
NS_ENSURE_STATE(element);
PRUint32 itemCount = 0;
nsresult rv = element->GetItemCount(&itemCount);
NS_ENSURE_SUCCESS(rv, rv);
if(element)
element->GetItemCount(&itemCount);
*aRowCount = itemCount;
return NS_OK;
return itemCount;
}
NS_IMETHODIMP
@ -790,29 +775,19 @@ nsXULListboxAccessible::SelectColumn(PRInt32 aColumn)
return NS_OK;
}
NS_IMETHODIMP
nsXULListboxAccessible::UnselectRow(PRInt32 aRow)
void
nsXULListboxAccessible::UnselectRow(PRUint32 aRowIdx)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsIDOMXULMultiSelectControlElement> control =
do_QueryInterface(mContent);
NS_ASSERTION(control,
"Doesn't implement nsIDOMXULMultiSelectControlElement.");
nsCOMPtr<nsIDOMXULSelectControlItemElement> item;
control->GetItemAtIndex(aRow, getter_AddRefs(item));
NS_ENSURE_TRUE(item, NS_ERROR_INVALID_ARG);
return control->RemoveItemFromSelection(item);
}
NS_IMETHODIMP
nsXULListboxAccessible::UnselectColumn(PRInt32 aColumn)
{
// xul:listbox and xul:richlistbox support row selection only.
return NS_OK;
if (control) {
nsCOMPtr<nsIDOMXULSelectControlItemElement> item;
control->GetItemAtIndex(aRowIdx, getter_AddRefs(item));
control->RemoveItemFromSelection(item);
}
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -104,6 +104,11 @@ public:
// nsIAccessibleTable
NS_DECL_OR_FORWARD_NSIACCESSIBLETABLE_WITH_XPCACCESSIBLETABLE
// TableAccessible
virtual PRUint32 ColCount();
virtual PRUint32 RowCount();
virtual void UnselectRow(PRUint32 aRowIdx);
// nsAccessNode
virtual void Shutdown();

View File

@ -71,10 +71,13 @@ nsXULTreeAccessible::
mFlags |= eXULTreeAccessible;
mTree = nsCoreUtils::GetTreeBoxObject(aContent);
if (mTree)
mTree->GetView(getter_AddRefs(mTreeView));
NS_ASSERTION(mTree, "Can't get mTree!\n");
NS_ASSERTION(mTree && mTreeView, "Can't get mTree or mTreeView!\n");
if (mTree) {
nsCOMPtr<nsITreeView> treeView;
mTree->GetView(getter_AddRefs(treeView));
mTreeView = treeView;
}
nsIContent* parentContent = mContent->GetParent();
if (parentContent) {
@ -95,14 +98,12 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTreeAccessible)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsXULTreeAccessible,
nsAccessible)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mTree)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mTreeView)
CycleCollectorTraverseCache(tmp->mAccessibleCache, &cb);
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsXULTreeAccessible,
nsAccessible)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mTree)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mTreeView)
ClearCache(tmp->mAccessibleCache);
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
@ -145,10 +146,11 @@ nsXULTreeAccessible::NativeState()
void
nsXULTreeAccessible::Value(nsString& aValue)
{
// Return the value is the first selected child.
aValue.Truncate();
if (!mTreeView)
return;
// Return the value is the first selected child.
nsCOMPtr<nsITreeSelection> selection;
mTreeView->GetSelection(getter_AddRefs(selection));
if (!selection)
@ -739,13 +741,11 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTreeItemAccessibleBase)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsXULTreeItemAccessibleBase,
nsAccessible)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mTree)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mTreeView)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsXULTreeItemAccessibleBase,
nsAccessible)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mTree)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mTreeView)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsXULTreeItemAccessibleBase)

View File

@ -143,7 +143,7 @@ protected:
virtual already_AddRefed<nsAccessible> CreateTreeItemAccessible(PRInt32 aRow);
nsCOMPtr<nsITreeBoxObject> mTree;
nsCOMPtr<nsITreeView> mTreeView;
nsITreeView* mTreeView;
nsAccessibleHashtable mAccessibleCache;
};
@ -244,7 +244,7 @@ protected:
void GetCellName(nsITreeColumn* aColumn, nsAString& aName);
nsCOMPtr<nsITreeBoxObject> mTree;
nsCOMPtr<nsITreeView> mTreeView;
nsITreeView* mTreeView;
PRInt32 mRow;
};

View File

@ -72,32 +72,21 @@ NS_IMPL_ISUPPORTS_INHERITED1(nsXULTreeGridAccessible,
////////////////////////////////////////////////////////////////////////////////
// nsXULTreeGridAccessible: nsIAccessibleTable implementation
NS_IMETHODIMP
nsXULTreeGridAccessible::GetColumnCount(PRInt32 *aColumnCount)
PRUint32
nsXULTreeGridAccessible::ColCount()
{
NS_ENSURE_ARG_POINTER(aColumnCount);
*aColumnCount = 0;
if (IsDefunct())
return NS_ERROR_FAILURE;
*aColumnCount = nsCoreUtils::GetSensibleColumnCount(mTree);
return NS_OK;
return nsCoreUtils::GetSensibleColumnCount(mTree);
}
NS_IMETHODIMP
nsXULTreeGridAccessible::GetRowCount(PRInt32* aRowCount)
PRUint32
nsXULTreeGridAccessible::RowCount()
{
NS_ENSURE_ARG_POINTER(aRowCount);
*aRowCount = 0;
if (IsDefunct())
return NS_ERROR_FAILURE;
if (!mTreeView)
return NS_OK;
return 0;
return mTreeView->GetRowCount(aRowCount);
PRInt32 rowCount = 0;
mTreeView->GetRowCount(&rowCount);
return rowCount >= 0 ? rowCount : 0;
}
NS_IMETHODIMP
@ -556,23 +545,17 @@ nsXULTreeGridAccessible::SelectColumn(PRInt32 aColumnIndex)
return NS_OK;
}
NS_IMETHODIMP
nsXULTreeGridAccessible::UnselectRow(PRInt32 aRowIndex)
void
nsXULTreeGridAccessible::UnselectRow(PRUint32 aRowIdx)
{
if (!mTreeView)
return NS_ERROR_INVALID_ARG;
return;
nsCOMPtr<nsITreeSelection> selection;
mTreeView->GetSelection(getter_AddRefs(selection));
NS_ENSURE_STATE(selection);
return selection->ClearRange(aRowIndex, aRowIndex);
}
NS_IMETHODIMP
nsXULTreeGridAccessible::UnselectColumn(PRInt32 aColumnIndex)
{
return NS_OK;
if (selection)
selection->ClearRange(aRowIdx, aRowIdx);
}
////////////////////////////////////////////////////////////////////////////////
@ -835,14 +818,12 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTreeGridCellAccessible)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsXULTreeGridCellAccessible,
nsLeafAccessible)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mTree)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mTreeView)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mColumn)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsXULTreeGridCellAccessible,
nsLeafAccessible)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mTree)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mTreeView)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mColumn)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END

View File

@ -60,6 +60,11 @@ public:
// nsIAccessibleTable
NS_DECL_OR_FORWARD_NSIACCESSIBLETABLE_WITH_XPCACCESSIBLETABLE
// TableAccessible
virtual PRUint32 ColCount();
virtual PRUint32 RowCount();
virtual void UnselectRow(PRUint32 aRowIdx);
// nsAccessNode
virtual void Shutdown();
@ -205,7 +210,7 @@ protected:
enum { eAction_Click = 0 };
nsCOMPtr<nsITreeBoxObject> mTree;
nsCOMPtr<nsITreeView> mTreeView;
nsITreeView* mTreeView;
PRInt32 mRow;
nsCOMPtr<nsITreeColumn> mColumn;

View File

@ -26,8 +26,8 @@
function doTest()
{
testKeyboardShortcut("input1", "");
testKeyboardShortcut("input2", MAC ? "⌃b" : "Alt+Shift+b");
testKeyboardShortcut("link", MAC ? "⌃l" : "Alt+Shift+l");
testKeyboardShortcut("input2", MAC ? "⌃b" : "Alt+Shift+b");
testKeyboardShortcut("link", MAC ? "⌃l" : "Alt+Shift+l");
SimpleTest.finish();
}

View File

@ -237,8 +237,7 @@ const kSansSerifFontFamily =
const kSerifFontFamily =
function(aFontFamily) { return aFontFamily != "serif"; }
const kCursiveFontFamily = WIN ? "Comic Sans MS" :
(LINUX ? "DejaVu Serif" : "MacFont");
const kCursiveFontFamily = LINUX ? "DejaVu Serif" : "Comic Sans MS";
/**
* Return used font from the given computed style.

View File

@ -109,6 +109,9 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=558036
// no object attributes
testAbsentAttrs(getAccessible("listitem").firstChild, { "tag": "" });
// experimental aria
testAttrs("experimental", {"blah" : "true"}, true);
SimpleTest.finish();
}
@ -142,6 +145,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=558036
title="Add test coverage for tablist as implicit live region">
Mozilla Bug 663136
</a>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=563862"
title="Expand support for nsIAccessibleEvent::OBJECT_ATTRIBUTE_CHANGE">
Mozilla Bug 563862
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
@ -201,5 +209,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=558036
<ul>
<li id="listitem">item
</ul>
<!-- experimental aria -->
<div id="experimental" aria-blah="true">Fake beer</div>
</body>
</html>

View File

@ -22,6 +22,14 @@
<script type="application/javascript">
function doTest()
{
// Bug 746176: Failure of this whole test file on OS X.
if (MAC) {
todo(false, "Fix bug 746176 on Mac");
closeBrowserWindow();
SimpleTest.finish();
return;
}
var tabDocument = currentTabDocument();
var p1 = tabDocument.getElementById("p1");
var p2 = tabDocument.getElementById("p2");

View File

@ -21,7 +21,7 @@
*/
var gQueue = null;
function hideNode(aID, bHide)
function updateAttribute(aID, aAttr, aValue)
{
this.node = getNode(aID);
this.accessible = getAccessible(this.node);
@ -30,34 +30,14 @@
new invokerChecker(EVENT_OBJECT_ATTRIBUTE_CHANGED, this.accessible),
];
this.invoke = function hideNode_invoke()
this.invoke = function updateAttribute_invoke()
{
this.node.setAttribute("aria-hidden", bHide);
this.node.setAttribute(aAttr, aValue);
}
this.getID = function hideNode_getID()
this.getID = function updateAttribute_getID()
{
return "aria-hidden for " + aID + " " + bHide;
}
}
function updateSort(aID, aSort)
{
this.node = getNode(aID);
this.accessible = getAccessible(this.node);
this.eventSeq = [
new invokerChecker(EVENT_OBJECT_ATTRIBUTE_CHANGED, this.accessible),
];
this.invoke = function updateSort_invoke()
{
this.node.setAttribute("aria-sort", aSort);
}
this.getID = function updateSort_getID()
{
return "aria-sort for " + aID + " " + aSort;
return aAttr + " for " + aID + " " + aValue;
}
}
@ -69,9 +49,12 @@
{
gQueue = new eventQueue();
gQueue.push(new hideNode("hideable", "true"));
gQueue.push(new updateAttribute("hideable", "aria-hidden", "true"));
gQueue.push(new updateSort("sortable", "ascending"));
gQueue.push(new updateAttribute("sortable", "aria-sort", "ascending"));
// For experimental ARIA extensions
gQueue.push(new updateAttribute("custom", "aria-blah", "true"));
gQueue.invoke(); // Will call SimpleTest.finish();
}
@ -95,6 +78,12 @@
Mozilla Bug 640707
</a>
<a target="_blank"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=640707"
title="Expand support for aria attribute change events">
Mozilla Bug 563862
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
@ -103,6 +92,8 @@
<div id="hideable"><div>Hi</div><div>there</div></div>
<div id="sortable" role="columnheader" aria-sort"none">aria-sort</div>
<div id="sortable" role="columnheader" aria-sort="none">aria-sort</div>
<div id="custom" role="custom" aria-blah="false">Fat free cheese</div>
</body>
</html>

View File

@ -384,8 +384,8 @@
var gInitQueue = null;
function initTests()
{
if (SEAMONKEY) {
todo(false, "Skipping this test on SeaMonkey ftb. (Bug 718237)");
if (SEAMONKEY || MAC) {
todo(false, "Skipping this test on SeaMonkey ftb. (Bug 718237), and on Mac (bug 746177)");
shutdownAutoComplete();
SimpleTest.finish();
return;

View File

@ -96,6 +96,7 @@
// back one page in history, moves moves on input of tab document
gQueue.push(new goBack());
if (!MAC) {
// open new tab, focus moves to urlbar
gQueue.push(new synthKey(tabDocument, "t", { ctrlKey: true, window: browserWindow() },
new focusChecker(urlbarInput)));
@ -103,6 +104,9 @@
// close open tab, focus goes on input of tab document
gQueue.push(new synthKey(tabDocument, "w", { ctrlKey: true, window: browserWindow() },
new focusChecker(inputInDocument)));
} else {
todo(false, "Reenable on Mac after fixing bug 746178!");
}
gQueue.onFinish = function()
{

View File

@ -27,6 +27,13 @@
var gQueue = null;
function doTests()
{
// bug 746183 - Whole file times out on OS X
if (MAC) {
todo(false, "Reenable on mac after fixing bug 746183!");
SimpleTest.finish();
return;
}
// Test focus events.
gQueue = new eventQueue();

View File

@ -109,8 +109,8 @@
if (SEAMONKEY) {
todo(false, "shift tab from editable document fails on (Windows) SeaMonkey! (Bug 718235)");
} else {
if (LINUX)
todo(false, "shift tab from editable document fails on linux!");
if (LINUX || MAC)
todo(false, "shift tab from editable document fails on linux and Mac, bug 746519!");
else
gQueue.push(new synthShiftTab("link", new focusChecker("link")));
} // ! SEAMONKEY

View File

@ -73,6 +73,7 @@
// show popup again for the next test
gQueue.push(new synthClick("popupbutton", new nofocusChecker()));
if (MAC) {
// click menubutton of the 'menubutton' button while popup of button open.
gQueue.push(new synthClick("mbb", new focusChecker("mbb"), { where: "right" }));
// close popup, focus stays on menubutton, fire focus event
@ -89,6 +90,9 @@
gQueue.push(new synthUpKey("menubutton", new focusChecker("mbb_item2")));
// click on menu item of menubutton menu, focus menubutton
gQueue.push(new synthClick("mbb_item2", new focusChecker("mbb")));
} else {
todo(false, "mbb tests time out on OS X, fix bug 746970 and reenable!");
}
// focus colorpicker button
gQueue.push(new synthFocus("colorpicker"));

View File

@ -50,9 +50,13 @@
gQueue.push(new synthClick("menulist", new focusChecker("ml_tangerine")));
gQueue.push(new synthDownKey("ml_tangerine", new focusChecker("ml_marmalade")));
gQueue.push(new synthEscapeKey("ml_marmalade", new focusChecker("menulist")));
if (!MAC) {
gQueue.push(new synthDownKey("menulist", new nofocusChecker("ml_marmalade")));
gQueue.push(new synthOpenComboboxKey("menulist", new focusChecker("ml_marmalade")));
gQueue.push(new synthEnterKey("ml_marmalade", new focusChecker("menulist")));
} else {
todo(false, "Bug 746531 - timeouts of last three menulist tests on OS X");
}
var textentry = getAccessible("emenulist").firstChild;
gQueue.push(new synthFocus("emenulist", new focusChecker(textentry)));
@ -68,7 +72,9 @@
gQueue.push(new changeCurrentItem("listbox", "lb_item1"));
gQueue.push(new changeCurrentItem("richlistbox", "rlb_item1"));
if (!MAC) {
gQueue.push(new changeCurrentItem("menulist", "ml_tangerine"));
}
gQueue.push(new changeCurrentItem("emenulist", "eml_tangerine"));
gQueue.invoke(); // Will call SimpleTest.finish();

View File

@ -28,6 +28,13 @@
function doTests()
{
// Bug 746534 - File causes crash or hang on OS X
if (MAC) {
todo(false, "Bug 746534 - test file causes crash or hang on OS X");
SimpleTest.finish();
return;
}
gQueue = new eventQueue();
// first item is focused until there's selection

View File

@ -27,6 +27,12 @@
var gQueue = null;
function doTests()
{
if (MAC) {
todo(false, "Tests disabled because of imminent failure.");
SimpleTest.finish();
return;
}
// Test focus events.
gQueue = new eventQueue();

View File

@ -19,7 +19,11 @@
var list = getAccessible("list");
var listitem = getAccessible("listitem");
var image = getAccessible("image");
if (!MAC) {
testChildAtPoint(list, 1, 1, listitem, image.firstChild);
} else {
todo(false, "Bug 746974 - children must match on all platforms, disable failing test on Mac");
}
// ::MustPrune case (in this case childAtPoint doesn't look inside a
// textbox), point is inside of textbox.

View File

@ -20,6 +20,7 @@
<script type="application/javascript">
function doTest()
{
if (!MAC) {
var tabDocument = currentTabDocument();
var p1 = tabDocument.body.firstElementChild;
var p2 = tabDocument.body.lastElementChild;
@ -33,6 +34,9 @@
hitTest(tabDocument, p2, p2.firstChild);
closeBrowserWindow();
} else {
todo(false, "Bug 746974 - deepest child must be correct on all platforms, disabling on Mac!");
}
SimpleTest.finish();
}

View File

@ -210,7 +210,7 @@
aria-labelledby="l1 l2"
alt="Mozilla logo"
title="This is a logo"
src="moz.png"/>
src="../moz.png"/>
</markup>
<markup ref="html:img" ruleset="htmlimageemptyalt">
@ -221,7 +221,7 @@
aria-labelledby="l1 l2"
title="This is a logo"
alt=""
src="moz.png"/>
src="../moz.png"/>
</markup>
<markup ref="html:table/html:tr/html:td" ruleset="htmlelm"

View File

@ -62,6 +62,7 @@
////////////////////////////////////////////////////////////////////////////
// Test
var gQueue = null;
gA11yEventDumpToConsole = true;
function doTest()
{
// Load documents into tabs and wait for DocLoadComplete events caused by

View File

@ -16,6 +16,8 @@ const ROLE_COMBOBOX = nsIAccessibleRole.ROLE_COMBOBOX;
const ROLE_COMBOBOX_LIST = nsIAccessibleRole.ROLE_COMBOBOX_LIST;
const ROLE_COMBOBOX_OPTION = nsIAccessibleRole.ROLE_COMBOBOX_OPTION;
const ROLE_COLUMNHEADER = nsIAccessibleRole.ROLE_COLUMNHEADER;
const ROLE_DEFINITION = nsIAccessibleRole.ROLE_DEFINITION;
const ROLE_DEFINITION_LIST = nsIAccessibleRole.ROLE_DEFINITION_LIST;
const ROLE_DIALOG = nsIAccessibleRole.ROLE_DIALOG;
const ROLE_DOCUMENT = nsIAccessibleRole.ROLE_DOCUMENT;
const ROLE_EMBEDDED_OBJECT = nsIAccessibleRole.ROLE_EMBEDDED_OBJECT;
@ -62,6 +64,7 @@ const ROLE_SEPARATOR = nsIAccessibleRole.ROLE_SEPARATOR;
const ROLE_SLIDER = nsIAccessibleRole.ROLE_SLIDER;
const ROLE_STATICTEXT = nsIAccessibleRole.ROLE_STATICTEXT;
const ROLE_TABLE = nsIAccessibleRole.ROLE_TABLE;
const ROLE_TERM = nsIAccessibleRole.ROLE_TERM;
const ROLE_TEXT_CONTAINER = nsIAccessibleRole.ROLE_TEXT_CONTAINER;
const ROLE_TEXT_LEAF = nsIAccessibleRole.ROLE_TEXT_LEAF;
const ROLE_TOGGLE_BUTTON = nsIAccessibleRole.ROLE_TOGGLE_BUTTON;

View File

@ -53,9 +53,9 @@
testRole("p", ROLE_PARAGRAPH);
// Test dl, dt, dd
testRole("definitionlist", ROLE_LIST);
testRole("definitionterm", ROLE_LISTITEM);
testRole("definitiondescription", ROLE_PARAGRAPH);
testRole("definitionlist", ROLE_DEFINITION_LIST);
testRole("definitionterm", ROLE_TERM);
testRole("definitiondescription", ROLE_DEFINITION);
// Has click, mousedown or mouseup listeners.
testRole("span1", ROLE_TEXT_CONTAINER);

View File

@ -110,6 +110,8 @@
testStates("autocomplete-list", 0, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
testStates("autocomplete-list2", 0, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
testStates("autocomplete-tel", 0, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
testStates("autocomplete-email", 0, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
testStates("autocomplete-search", 0, EXT_STATE_SUPPORTS_AUTOCOMPLETION);
SimpleTest.finish();
}
@ -159,6 +161,7 @@
title="Editable state bit should be present on readonly inputs">
Mozilla Bug 733382
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
@ -235,5 +238,19 @@
<input id="autocomplete-list2" list="cities" autocomplete="off">
<input id="autocomplete-tel" type="tel">
Email Address:
<input id="autocomplete-email" type="email" list="contacts" value="xyzzy">
<datalist id="contacts">
<option>xyzzy@plughs.com</option>
<option>nobody@mozilla.org</option>
</datalist>
</br>Search for:
<input id="autocomplete-search" type="search" list="searchhisty" value="Gamma">
<datalist id="searchhisty">
<option>Gamma Rays</option>
<option>Gamma Ray Bursts</option>
</datalist>
</body>
</html>

View File

@ -87,6 +87,13 @@
function doTests()
{
// Shift+Tab not working, and a test timeout, bug 746977
if (MAC) {
todo(false, "Shift+tab isn't working on OS X, needs to be disabled until bug 746977 is fixed!");
SimpleTest.finish();
return;
}
gQueue = new eventQueue();
// CSS 'overflow: scroll' property setting and unsetting causes accessible

View File

@ -31,7 +31,7 @@
is(root.parentDocument, null,
"Wrong parent document of root accessible");
is(root.childDocumentCount, 1,
is(root.childDocumentCount, SEAMONKEY ? 1 : 3,
"Wrong child document count of root accessible");
is(root.getChildDocumentAt(0), tabDoc,
"Wrong child document at index 0 of root accessible");

View File

@ -88,17 +88,17 @@
// dl list
var tree =
{ LIST: [ // dl
{ LISTITEM: [ // dt
{ DEFINITION_LIST: [ // dl
{ TERM: [ // dt
{ TEXT_LEAF: [] },
] },
{ PARAGRAPH: [ // dd
{ DEFINITION: [ // dd
{ TEXT_LEAF: [] }
] },
{ LISTITEM: [ // dt
{ TERM: [ // dt
{ TEXT_LEAF: [] }
] },
{ PARAGRAPH: [ // dd
{ DEFINITION: [ // dd
{ TEXT_LEAF: [] }
] }
] };
@ -110,11 +110,11 @@
{ LIST: [ // ol
{ LISTITEM: [ // li
{ STATICTEXT: [ ] },
{ LIST: [ // dl
{ LISTITEM: [ // dt
{ DEFINITION_LIST: [ // dl
{ TERM: [ // dt
{ TEXT_LEAF: [] }
] },
{ PARAGRAPH: [ // dd
{ DEFINITION: [ // dd
{ TEXT_LEAF: [] }
] }
] }

View File

@ -128,6 +128,17 @@
testAccessibleTree("table3", accTree);
/////////////////////////////////////////////////////////////////////////
// table4 (display: table-row)
accTree =
{ TABLE: [
{ ROW: [
{ CELL: [
{ TEXT_LEAF: [ ] }
] }
] } ]
};
testAccessibleTree("table4", accTree);
SimpleTest.finish();
}
@ -142,6 +153,11 @@
href="https://bugzilla.mozilla.org/show_bug.cgi?id=529621">
Mozilla Bug 529621
</a>
<a target="_blank"
title="when div has display style table-row"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=727722">
Mozilla Bug 727722
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
@ -189,5 +205,11 @@
<td>cell</td>
</tr>
</table>
<table id="table4">
<div style="display: table-row">
<td>cell1</td>
</div>
</table>
</body>
</html>

View File

@ -90,6 +90,32 @@
testAccessibleTree("txc6", accTree);
// input@type="email", value
accTree = {
role: ROLE_ENTRY,
children: [
{ // text child
role: ROLE_TEXT_LEAF,
children: []
}
]
};
testAccessibleTree("txc7", accTree);
// input@type="search", value
accTree = {
role: ROLE_ENTRY,
children: [
{ // text child
role: ROLE_TEXT_LEAF,
children: []
}
]
};
testAccessibleTree("txc8", accTree);
SimpleTest.finish();
}
@ -132,5 +158,19 @@
<input id="txc5" type="password" value="hello">
<input id="txc6" type="tel" value="4167771234">
Email Address:
<input id="txc7" type="email" list="contacts" value="xyzzy">
<datalist id="contacts">
<option>xyzzy@plughs.com</option>
<option>nobody@mozilla.org</option>
</datalist>
</br>Search for:
<input id="txc8" type="search" list="searchhisty" value="Gamma">
<datalist id="searchhisty">
<option>Gamma Rays</option>
<option>Gamma Ray Bursts</option>
</datalist>
</body>
</html>

View File

@ -64,8 +64,7 @@
this.preinvoke = function rootContentRemoved_preinvoke()
{
// Set up target for hide event before we invoke.
var text =
getAccessible(getAccessible(getDocNode(aID)).firstChild).DOMNode;
var text = getAccessible(getAccessible(getDocNode(aID)).firstChild);
this.eventSeq[0].target = text;
}
@ -304,16 +303,21 @@
function insertElmUnderDocElmWhileBodyMissed(aID)
{
this.docNode = getDocNode(aID);
this.inputNode = getDocNode(aID).createElement("input");
this.docNode = null;
this.inputNode = null;
function getInputNode()
{ return this.inputNode; }
this.eventSeq = [
new invokerChecker(EVENT_SHOW, this.inputNode),
new invokerChecker(EVENT_REORDER, this.docNode)
new invokerChecker(EVENT_SHOW, getInputNode.bind(this)),
new invokerChecker(EVENT_REORDER, getDocNode, aID)
];
this.invoke = function invoke()
{
this.docNode = getDocNode(aID);
this.inputNode = this.docNode.createElement("input");
this.docNode.documentElement.appendChild(this.inputNode);
}
@ -389,6 +393,7 @@
// Test
//gA11yEventDumpID = "eventdump"; // debug stuff
//gA11yEventDumpToConsole = true;
var gQueue = null;

View File

@ -380,7 +380,7 @@
}
}
//gA11yEventDumpToConsole = true;
gA11yEventDumpToConsole = true;
var gQueue = null;
function doTest()

1
aclocal.m4 vendored
View File

@ -3,7 +3,6 @@ dnl Local autoconf macros used with mozilla
dnl The contents of this file are under the Public Domain.
dnl
builtin(include, build/autoconf/glib.m4)dnl
builtin(include, build/autoconf/nspr.m4)dnl
builtin(include, build/autoconf/nss.m4)dnl
builtin(include, build/autoconf/pkg.m4)dnl

View File

@ -40,6 +40,12 @@ probes/Makefile
extensions/Makefile
"
if [ "$MOZ_WEBAPP_RUNTIME" ]; then
add_makefiles "
webapprt/Makefile
"
fi
if [ ! "$LIBXUL_SDK" ]; then
if [ "$STLPORT_SOURCES" ]; then
add_makefiles "
@ -83,6 +89,11 @@ if [ "$OS_ARCH" != "WINNT" -a "$OS_ARCH" != "OS2" ]; then
add_makefiles "
build/unix/Makefile
"
if [ "$STDCXX_COMPAT" ]; then
add_makefiles "
build/unix/stdc++compat/Makefile
"
fi
if [ "$USE_ELF_HACK" ]; then
add_makefiles "
build/unix/elfhack/Makefile

View File

@ -380,6 +380,9 @@ pref("urlclassifier.gethashtables", "goog-phish-shavar,goog-malware-shavar");
// the database.
pref("urlclassifier.confirm-age", 2700);
// Maximum size of the sqlite3 cache during an update, in bytes
pref("urlclassifier.updatecachemax", 4194304);
// URL for checking the reason for a malware warning.
pref("browser.safebrowsing.malware.reportURL", "http://safebrowsing.clients.google.com/safebrowsing/diagnostic?client=%NAME%&hl=%LOCALE%&site=");
#endif
@ -422,14 +425,18 @@ pref("browser.link.open_newwindow", 3);
// 2: don't divert window.open with features
pref("browser.link.open_newwindow.restriction", 0);
// Enable browser frame
// Enable browser frames, but not OOP.
pref("dom.mozBrowserFramesEnabled", true);
pref("dom.mozBrowserFramesWhitelist", "http://homescreen.gaiamobile.org,http://browser.gaiamobile.org");
pref("dom.ipc.tabs.disabled", true);
// Temporary permission hack for WebSMS
pref("dom.sms.enabled", true);
pref("dom.sms.whitelist", "file://,http://homescreen.gaiamobile.org,http://sms.gaiamobile.org");
// Temporary permission hack for WebMobileConnection
pref("dom.mobileconnection.whitelist", "http://homescreen.gaiamobile.org");
// Temporary permission hack for WebContacts
pref("dom.mozContacts.enabled", true);
pref("dom.mozContacts.whitelist", "http://dialer.gaiamobile.org,http://sms.gaiamobile.org");
@ -469,15 +476,6 @@ pref("full-screen-api.enabled", true);
pref("media.volume.steps", 10);
// Data connection settings. These will eventually live in the
// navigator.settings API, or even in a database where we can look
// it up automatically (bug 729440), but for this will have to do.
pref("ril.data.enabled", false);
pref("ril.data.roaming.enabled", false);
pref("ril.data.apn", "");
pref("ril.data.user", "");
pref("ril.data.passwd", "");
//Enable/disable marionette server, set listening port
pref("marionette.defaultPrefs.enabled", true);
pref("marionette.defaultPrefs.port", 2828);

View File

@ -112,7 +112,12 @@ var shell = {
// a specific value when the device starts. This way the front-end
// can display a notification when the volume change and show a volume
// level modified from this point.
Services.audioManager.masterVolume = 0.5;
// try catch block must be used since the emulator fails here. bug 746429
try {
Services.audioManager.masterVolume = 0.5;
} catch(e) {
dump('Error setting master volume: ' + e + '\n');
}
let domains = "";
try {
@ -323,6 +328,10 @@ var shell = {
navigator.mozPower.screenEnabled = true;
}
}
if (topic == "cpu") {
navigator.mozPower.cpuSleepAllowed = (state != "locked-foreground" &&
state != "locked-background");
}
}
let idleTimeout = Services.prefs.getIntPref("power.screen.timeout");
@ -356,6 +365,54 @@ var shell = {
};
})();
const DATA_CALL_SETTING_BOLKEYS = ["ril.data.enabled",
"ril.data.roaming.enabled"];
const DATA_CALL_SETTING_CHARKEYS = ["ril.data.apn",
"ril.data.user",
"ril.data.passwd"];
(function DataCallSettings() {
let sm = navigator.mozSettings;
let lock = sm.getLock();
DATA_CALL_SETTING_BOLKEYS.forEach(function(key) {
let request = lock.get(key);
request.onsuccess = function onSuccess() {
let value = request.result[key] || false;
Services.prefs.setBoolPref(key, value);
dump("DataCallSettings - " + key + ":" + value);
};
request.onerror = function onError() {
Services.prefs.setBoolPref(key, false);
};
});
DATA_CALL_SETTING_CHARKEYS.forEach(function(key) {
let request = lock.get(key);
request.onsuccess = function onSuccess() {
let value = request.result[key] || "";
Services.prefs.setCharPref(key, value);
dump("DataCallSettings - " + key + ":" + value);
};
request.onerror = function onError() {
Services.prefs.setCharPref(key, "");
};
});
navigator.mozSettings.onsettingchange = function onSettingChange(e) {
dump("DataCallSettings - onsettingchange: " + e.settingName +
": " + e.settingValue);
if (e.settingValue) {
if (DATA_CALL_SETTING_BOLKEYS.indexOf(e.settingName) > -1 ) {
Services.prefs.setBoolPref(e.settingName, e.settingValue);
return;
}
if (DATA_CALL_SETTING_CHARKEYS.indexOf(e.settingName) > -1) {
Services.prefs.setCharPref(e.settingName, e.settingValue);
}
}
};
})();
function nsBrowserAccess() {
}

View File

@ -10,23 +10,24 @@ const Cr = Components.results;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
const OFFLINE_PROFILE_DIR = "/data/local"
const LOCAL_DIR = "/data/local";
function DirectoryProvider() {
}
DirectoryProvider.prototype = {
classID: Components.ID("{9181eb7c-6f87-11e1-90b1-4f59d80dd2e5}"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider]),
getFile: function dp_getFile(prop, persistent) {
#ifdef MOZ_WIDGET_GONK
if (prop == "cachePDir" || prop == "webappsDir") {
let localProps = ["cachePDir", "webappsDir", "PrefD"];
if (localProps.indexOf(prop) != -1) {
prop.persistent = true;
let file = Cc["@mozilla.org/file/local;1"]
.createInstance(Ci.nsILocalFile)
file.initWithPath(OFFLINE_PROFILE_DIR);
file.initWithPath(LOCAL_DIR);
return file;
}
#endif

View File

@ -1,14 +1,14 @@
[
{
"size": 195,
"digest": "85369693c2362131515014cd4547cd0824225b03e1e52a352a84012e6e8586fa46ad619181167d220c463761865719a1747a83aeee76a5fcc5ab7859c14ef24a",
"algorithm": "sha512",
"filename": "setup.sh"
"size": 195,
"digest": "ff960e3cb9e07865bde6fdb0d4127a11205d4cb70ee527e30ccc38f6370a9d750eb5da8993cb3c5de28b45836a3a20b8c25c4adcc68b1945a59dbe1c8b28cc23",
"algorithm": "sha512",
"filename": "setup.sh"
},
{
"size": 121344236,
"digest": "0bf5cceced8add6142c1c7522890c39554b94848e3f5eb9b92de2a8c6f6af3c0e8ab69ddf7bae39eaab2bcb637233ff02de07b47a1850767d2810a46fb31bf65",
"algorithm": "sha512",
"filename": "gonk-toolchain-0.tar.bz2"
"size": 121135598,
"digest": "e182eb95105f186ec81546c373752c3af5b8fbc520fd14d37fcb1bb40efac76b96befe868b5a5a17f967bd04390122b7911d167dda1516225709cbd3a00e2c78",
"algorithm": "sha512",
"filename": "gonk-toolchain-1.tar.bz2"
}
]

2
b2g/confvars.sh Normal file → Executable file
View File

@ -38,7 +38,7 @@
MOZ_APP_BASENAME=B2G
MOZ_APP_VENDOR=Mozilla
MOZ_APP_VERSION=14.0a1
MOZ_APP_VERSION=15.0a1
MOZ_APP_UA_NAME=Firefox
MOZ_BRANDING_DIRECTORY=b2g/branding/unofficial

View File

@ -138,6 +138,7 @@
@BINPATH@/components/content_canvas.xpt
@BINPATH@/components/content_htmldoc.xpt
@BINPATH@/components/content_html.xpt
@BINPATH@/components/content_media.xpt
@BINPATH@/components/content_xslt.xpt
@BINPATH@/components/content_xtf.xpt
@BINPATH@/components/cookie.xpt
@ -408,11 +409,16 @@
@BINPATH@/components/messageWakeupService.manifest
@BINPATH@/components/SettingsManager.js
@BINPATH@/components/SettingsManager.manifest
@BINPATH@/components/SettingsService.js
@BINPATH@/components/SettingsService.manifest
@BINPATH@/components/nsFilePicker.js
@BINPATH@/components/nsFilePicker.manifest
#ifdef MOZ_B2G_RIL
@BINPATH@/components/NetworkManager.manifest
@BINPATH@/components/NetworkManager.js
@BINPATH@/components/RadioInterfaceLayer.manifest
@BINPATH@/components/RadioInterfaceLayer.js
@BINPATH@/components/RILContentHelper.js
@BINPATH@/components/SmsDatabaseService.manifest
@BINPATH@/components/SmsDatabaseService.js
@BINPATH@/components/WifiWorker.js

View File

@ -55,7 +55,7 @@
<Description>
<em:id>{3c2e2abc-06d4-11e1-ac3b-374f68613e61}</em:id>
<em:minVersion>@MOZ_APP_VERSION@</em:minVersion>
<em:maxVersion>@MOZ_APP_VERSION@</em:maxVersion>
<em:maxVersion>@MOZ_APP_MAXVERSION@</em:maxVersion>
</Description>
</em:targetApplication>
</Description>

View File

@ -62,6 +62,10 @@ DEFINES += \
-DAPP_VERSION="$(MOZ_APP_VERSION)" \
-DFIREFOX_ICO=\"$(DIST)/branding/firefox.ico\" \
-DDOCUMENT_ICO=\"$(DIST)/branding/document.ico\" \
-DNEWWINDOW_ICO=\"$(DIST)/branding/newwindow.ico\" \
-DNEWTAB_ICO=\"$(DIST)/branding/newtab.ico\" \
-DPBMODE_ICO=\"$(DIST)/branding/pbmode.ico\" \
$(NULL)
ifdef LIBXUL_SDK #{

Some files were not shown because too many files have changed in this diff Show More