summaryrefslogtreecommitdiffstats
path: root/accessible/interfaces
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--accessible/interfaces/ia2/moz.build78
-rw-r--r--accessible/interfaces/moz.build46
-rw-r--r--accessible/interfaces/msaa/AccessibleMarshal.def11
-rw-r--r--accessible/interfaces/msaa/AccessibleMarshal.rc5
-rw-r--r--accessible/interfaces/msaa/AccessibleMarshalThunk.c17
-rw-r--r--accessible/interfaces/msaa/ISimpleDOM.idl22
-rw-r--r--accessible/interfaces/msaa/ISimpleDOMDocument.idl83
-rw-r--r--accessible/interfaces/msaa/ISimpleDOMNode.idl175
-rw-r--r--accessible/interfaces/msaa/ISimpleDOMText.idl78
-rw-r--r--accessible/interfaces/msaa/moz.build57
-rw-r--r--accessible/interfaces/nsIAccessibilityService.idl119
-rw-r--r--accessible/interfaces/nsIAccessible.idl351
-rw-r--r--accessible/interfaces/nsIAccessibleAnnouncementEvent.idl23
-rw-r--r--accessible/interfaces/nsIAccessibleApplication.idl34
-rw-r--r--accessible/interfaces/nsIAccessibleCaretMoveEvent.idl33
-rw-r--r--accessible/interfaces/nsIAccessibleDocument.idl75
-rw-r--r--accessible/interfaces/nsIAccessibleEditableText.idl57
-rw-r--r--accessible/interfaces/nsIAccessibleEvent.idl482
-rw-r--r--accessible/interfaces/nsIAccessibleHideEvent.idl28
-rw-r--r--accessible/interfaces/nsIAccessibleHyperLink.idl86
-rw-r--r--accessible/interfaces/nsIAccessibleHyperText.idl54
-rw-r--r--accessible/interfaces/nsIAccessibleImage.idl30
-rw-r--r--accessible/interfaces/nsIAccessibleMacInterface.idl87
-rw-r--r--accessible/interfaces/nsIAccessibleObjectAttributeChangedEvent.idl19
-rw-r--r--accessible/interfaces/nsIAccessiblePivot.idl259
-rw-r--r--accessible/interfaces/nsIAccessibleRelation.idl183
-rw-r--r--accessible/interfaces/nsIAccessibleRole.idl1089
-rw-r--r--accessible/interfaces/nsIAccessibleScrollingEvent.idl34
-rw-r--r--accessible/interfaces/nsIAccessibleSelectable.idl59
-rw-r--r--accessible/interfaces/nsIAccessibleStateChangeEvent.idl29
-rw-r--r--accessible/interfaces/nsIAccessibleStates.idl76
-rw-r--r--accessible/interfaces/nsIAccessibleTable.idl234
-rw-r--r--accessible/interfaces/nsIAccessibleTableChangeEvent.idl20
-rw-r--r--accessible/interfaces/nsIAccessibleText.idl242
-rw-r--r--accessible/interfaces/nsIAccessibleTextChangeEvent.idl33
-rw-r--r--accessible/interfaces/nsIAccessibleTextLeafRange.idl43
-rw-r--r--accessible/interfaces/nsIAccessibleTextRange.idl72
-rw-r--r--accessible/interfaces/nsIAccessibleTextSelectionChangeEvent.idl21
-rw-r--r--accessible/interfaces/nsIAccessibleTypes.idl80
-rw-r--r--accessible/interfaces/nsIAccessibleValue.idl35
-rw-r--r--accessible/interfaces/nsIAccessibleVirtualCursorChangeEvent.idl54
41 files changed, 4613 insertions, 0 deletions
diff --git a/accessible/interfaces/ia2/moz.build b/accessible/interfaces/ia2/moz.build
new file mode 100644
index 0000000000..72160c48b3
--- /dev/null
+++ b/accessible/interfaces/ia2/moz.build
@@ -0,0 +1,78 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+midl_enums = [
+ "AccessibleEventId",
+ "AccessibleRole",
+ "AccessibleStates",
+ "IA2CommonTypes",
+]
+
+midl_interfaces = [
+ "Accessible2",
+ "Accessible2_2",
+ "Accessible2_3",
+ "AccessibleAction",
+ "AccessibleApplication",
+ "AccessibleComponent",
+ "AccessibleDocument",
+ "AccessibleEditableText",
+ "AccessibleHyperlink",
+ "AccessibleHypertext",
+ "AccessibleHypertext2",
+ "AccessibleImage",
+ "AccessibleRelation",
+ "AccessibleTable",
+ "AccessibleTable2",
+ "AccessibleTableCell",
+ "AccessibleText",
+ "AccessibleText2",
+ "AccessibleValue",
+]
+
+for enum in midl_enums:
+ GeneratedFile(
+ enum + ".h",
+ inputs=["/other-licenses/ia2/" + enum + ".idl"],
+ script="/build/midl.py",
+ entry_point="midl",
+ flags=["-app_config", "-I", TOPSRCDIR + "/other-licenses/ia2"],
+ )
+
+ EXPORTS += ["!" + enum + ".h"]
+
+for iface in midl_interfaces:
+ GeneratedFile(
+ iface + ".h",
+ iface + "_p.c",
+ iface + "_i.c",
+ iface + "_dlldata.c",
+ inputs=["/other-licenses/ia2/" + iface + ".idl"],
+ script="/build/midl.py",
+ entry_point="midl",
+ flags=[
+ "-app_config",
+ "-I",
+ TOPSRCDIR + "/other-licenses/ia2",
+ "-dlldata",
+ OBJDIR + "/" + iface + "_dlldata.c",
+ ],
+ )
+
+ EXPORTS += ["!" + iface + ".h", "!" + iface + "_i.c"]
+
+ for p in [iface + "_p.c", iface + "_i.c"]:
+ SOURCES += ["!%s" % p]
+
+ # Give some symbols a unique name in each translation unit, to avoid
+ # collisions caused by https://llvm.org/pr41817.
+ if CONFIG["CC_TYPE"] == "clang-cl":
+ SOURCES["!%s" % p].flags += [
+ "-DObject_StubDesc=Object_StubDesc__%s" % p[:-2]
+ ]
+ SOURCES["!%s" % p].flags += [
+ "-DUserMarshalRoutines=UserMarshalRoutines__%s" % p[:-2]
+ ]
diff --git a/accessible/interfaces/moz.build b/accessible/interfaces/moz.build
new file mode 100644
index 0000000000..1d645a55b5
--- /dev/null
+++ b/accessible/interfaces/moz.build
@@ -0,0 +1,46 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows" and CONFIG["COMPILE_ENVIRONMENT"]:
+ DIRS += ["msaa", "ia2"]
+
+if CONFIG["MOZ_WIDGET_TOOLKIT"] == "cocoa":
+ XPIDL_SOURCES += ["nsIAccessibleMacInterface.idl"]
+
+XPIDL_SOURCES += [
+ "nsIAccessibilityService.idl",
+ "nsIAccessible.idl",
+ "nsIAccessibleAnnouncementEvent.idl",
+ "nsIAccessibleApplication.idl",
+ "nsIAccessibleCaretMoveEvent.idl",
+ "nsIAccessibleDocument.idl",
+ "nsIAccessibleEditableText.idl",
+ "nsIAccessibleEvent.idl",
+ "nsIAccessibleHideEvent.idl",
+ "nsIAccessibleHyperLink.idl",
+ "nsIAccessibleHyperText.idl",
+ "nsIAccessibleImage.idl",
+ "nsIAccessibleObjectAttributeChangedEvent.idl",
+ "nsIAccessiblePivot.idl",
+ "nsIAccessibleRelation.idl",
+ "nsIAccessibleRole.idl",
+ "nsIAccessibleScrollingEvent.idl",
+ "nsIAccessibleSelectable.idl",
+ "nsIAccessibleStateChangeEvent.idl",
+ "nsIAccessibleStates.idl",
+ "nsIAccessibleTable.idl",
+ "nsIAccessibleTableChangeEvent.idl",
+ "nsIAccessibleText.idl",
+ "nsIAccessibleTextChangeEvent.idl",
+ "nsIAccessibleTextLeafRange.idl",
+ "nsIAccessibleTextRange.idl",
+ "nsIAccessibleTextSelectionChangeEvent.idl",
+ "nsIAccessibleTypes.idl",
+ "nsIAccessibleValue.idl",
+ "nsIAccessibleVirtualCursorChangeEvent.idl",
+]
+
+XPIDL_MODULE = "accessibility"
diff --git a/accessible/interfaces/msaa/AccessibleMarshal.def b/accessible/interfaces/msaa/AccessibleMarshal.def
new file mode 100644
index 0000000000..a4992db1d8
--- /dev/null
+++ b/accessible/interfaces/msaa/AccessibleMarshal.def
@@ -0,0 +1,11 @@
+;+# 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/.
+
+LIBRARY AccessibleMarshal.dll
+
+EXPORTS DllGetClassObject PRIVATE
+ DllCanUnloadNow PRIVATE
+ DllRegisterServer PRIVATE
+ DllUnregisterServer PRIVATE
+
diff --git a/accessible/interfaces/msaa/AccessibleMarshal.rc b/accessible/interfaces/msaa/AccessibleMarshal.rc
new file mode 100644
index 0000000000..13db3a833f
--- /dev/null
+++ b/accessible/interfaces/msaa/AccessibleMarshal.rc
@@ -0,0 +1,5 @@
+/* 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/. */
+
+1 typelib ISimpleDOM.tlb
diff --git a/accessible/interfaces/msaa/AccessibleMarshalThunk.c b/accessible/interfaces/msaa/AccessibleMarshalThunk.c
new file mode 100644
index 0000000000..481223ed13
--- /dev/null
+++ b/accessible/interfaces/msaa/AccessibleMarshalThunk.c
@@ -0,0 +1,17 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#include "ISimpleDOM.h"
+
+HRESULT STDMETHODCALLTYPE ISimpleDOMNode_get_localInterface_Proxy(
+ ISimpleDOMNode* This, void** localInterface) {
+ return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE ISimpleDOMNode_get_localInterface_Stub(
+ ISimpleDOMNode* This, IUnknown** localInterface) {
+ return E_NOTIMPL;
+}
diff --git a/accessible/interfaces/msaa/ISimpleDOM.idl b/accessible/interfaces/msaa/ISimpleDOM.idl
new file mode 100644
index 0000000000..4bd51b7f50
--- /dev/null
+++ b/accessible/interfaces/msaa/ISimpleDOM.idl
@@ -0,0 +1,22 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+// We use #include instead of import here so that MIDL treats these files as
+// part of the current file, thus forcing MIDL to generate proxy info for them.
+#include "ISimpleDOMNode.idl"
+#include "ISimpleDOMDocument.idl"
+#include "ISimpleDOMText.idl"
+
+[
+ uuid(a6245497-9c0b-4449-85a5-bd6ad07df8ea),
+ helpstring("ISimpleDOM Type Library")
+]
+library ISimpleDOM
+{
+ interface ISimpleDOMNode;
+ interface ISimpleDOMText;
+ interface ISimpleDOMDocument;
+};
diff --git a/accessible/interfaces/msaa/ISimpleDOMDocument.idl b/accessible/interfaces/msaa/ISimpleDOMDocument.idl
new file mode 100644
index 0000000000..3e9e007e73
--- /dev/null
+++ b/accessible/interfaces/msaa/ISimpleDOMDocument.idl
@@ -0,0 +1,83 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+cpp_quote("///////////////////////////////////////////////////////////////////////////////////////////////////////")
+cpp_quote("//")
+cpp_quote("// ISimpleDOMDocument")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("//")
+cpp_quote("// get_URL(out] BSTR *url)")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Get the internet URL associated with this document.")
+cpp_quote("//")
+cpp_quote("// get_title([out BSTR *title")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Get the document's title from the <TITLE> element")
+cpp_quote("//")
+cpp_quote("// get_mimeType([out BSTR *mimeType")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Get the registered mime type, such as text/html")
+cpp_quote("//")
+cpp_quote("// get_docType([out] BSTR *docType")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Get doctype associated with the <!DOCTYPE ..> element")
+cpp_quote("//")
+cpp_quote("// get_nameSpaceURIForID([in] short nameSpaceID, [out] BSTR *nameSpaceURI)")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Some of the methods for ISimpleDOMNode return a nameSpaceID (-1,0,1,2,3,....)")
+cpp_quote("// This method returns the associated namespace URI for each ID.")
+cpp_quote("//")
+cpp_quote("// set_alternateViewMediaTypes([in] BSTR *commaSeparatedMediaType)")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// For style property retrieval on nsISimpleDOMNode elements, ")
+cpp_quote("// set the additional alternate media types that properties are available for.")
+cpp_quote("// [in] BSTR *commaSeparatedMediaTypes is a comma separate list, for example \"aural, braille\".")
+cpp_quote("// The alternate media properties are requested with nsISimpleDOMNode::get_computedStyle.")
+cpp_quote("// Note: setting this value on a document will increase memory overhead, and may create a small delay.")
+cpp_quote("//")
+cpp_quote("// W3C media Types:")
+cpp_quote("// * all: Suitable for all devices. ")
+cpp_quote("// * aural: Intended for speech synthesizers. See the section on aural style sheets for details. ")
+cpp_quote("// * braille: Intended for braille tactile feedback devices. ")
+cpp_quote("// * embossed: Intended for paged braille printers. ")
+cpp_quote("// * handheld: Intended for handheld devices - typically small screen, monochrome, limited bandwidth. ")
+cpp_quote("// * print: Intended for paged, opaque material and for documents viewed on screen in print preview mode. Please consult the section on paged media for information about formatting issues that are specific to paged media. ")
+cpp_quote("// * projection: Intended for projected presentations, for example projectors or print to transparencies. Please consult the section on paged media for information about formatting issues that are specific to paged media. ")
+cpp_quote("// * screen: Intended primarily for color computer screens. ")
+cpp_quote("// * tty: intended for media using a fixed-pitch character grid, such as teletypes, terminals, or portable devices with limited display capabilities. Authors should not use pixel units with the tty media type. ")
+cpp_quote("// * tv: Intended for television-type devices - low resolution, color, limited-scrollability screens, sound")
+cpp_quote("// * See latest W3C CSS specs for complete list of media types")
+cpp_quote("//")
+cpp_quote("//")
+cpp_quote("///////////////////////////////////////////////////////////////////////////////////////////////////////")
+cpp_quote("")
+cpp_quote("")
+
+import "objidl.idl";
+import "oaidl.idl";
+
+[object, uuid(0D68D6D0-D93D-4d08-A30D-F00DD1F45B24)]
+interface ISimpleDOMDocument : IUnknown
+{
+ [propget] HRESULT URL(
+ [out, retval] BSTR * url
+ );
+ [propget] HRESULT title(
+ [out, retval] BSTR * title
+ );
+ [propget] HRESULT mimeType(
+ [out, retval] BSTR * mimeType
+ );
+ [propget] HRESULT docType(
+ [out, retval] BSTR * docType
+ );
+ [propget] HRESULT nameSpaceURIForID(
+ [in] short nameSpaceID,
+ [out, retval] BSTR * nameSpaceURI
+ );
+ [propput] HRESULT alternateViewMediaTypes(
+ [in] BSTR * commaSeparatedMediaTypes
+ );
+}
diff --git a/accessible/interfaces/msaa/ISimpleDOMNode.idl b/accessible/interfaces/msaa/ISimpleDOMNode.idl
new file mode 100644
index 0000000000..860111e1ea
--- /dev/null
+++ b/accessible/interfaces/msaa/ISimpleDOMNode.idl
@@ -0,0 +1,175 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+
+cpp_quote("///////////////////////////////////////////////////////////////////////////////////////////////////////")
+cpp_quote("//")
+cpp_quote("// ISimpleDOMNode")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// An interface that extends MSAA's IAccessible to provide readonly DOM node information via cross-process COM.")
+cpp_quote("//")
+cpp_quote("// get_nodeInfo(")
+cpp_quote("// /* [out] */ BSTR *nodeName, // For elements, this is the tag name")
+cpp_quote("// /* [out] */ short *nameSpaceID,")
+cpp_quote("// /* [out] */ BSTR *nodeValue, ")
+cpp_quote("// /* [out] */ unsigned int *numChildren); ")
+cpp_quote("// /* [out] */ unsigned int *uniqueID; // In Win32 accessible events we generate, the target's childID matches to this")
+cpp_quote("// /* [out] */ unsigned short *nodeType,")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Get the basic information about a node.")
+cpp_quote("// The namespace ID can be mapped to an URI using nsISimpleDOMDocument::get_nameSpaceURIForID()")
+cpp_quote("//")
+cpp_quote("// get_attributes(")
+cpp_quote("// /* [in] */ unsigned short maxAttribs,")
+cpp_quote("// /* [out] */ unsigned short *numAttribs,")
+cpp_quote("// /* [out] */ BSTR *attribNames,")
+cpp_quote("// /* [out] */ short *nameSpaceID,")
+cpp_quote("// /* [out] */ BSTR *attribValues);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Returns 3 arrays - the attribute names and values, and a namespace ID for each")
+cpp_quote("// If the namespace ID is 0, it's the same namespace as the node's namespace")
+cpp_quote("//")
+cpp_quote("// get_attributesForNames(")
+cpp_quote("// /* [in] */ unsigned short numAttribs,")
+cpp_quote("// /* [in] */ BSTR *attribNames,")
+cpp_quote("// /* [in] */ short *nameSpaceID,")
+cpp_quote("// /* [out] */ BSTR *attribValues);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Takes 2 arrays - the attribute names and namespace IDs, and returns an array of corresponding values")
+cpp_quote("// If the namespace ID is 0, it's the same namespace as the node's namespace")
+cpp_quote("//")
+cpp_quote("// computedStyle( ")
+cpp_quote("// /* [in] */ unsigned short maxStyleProperties,")
+cpp_quote("// /* [out] */ unsigned short *numStyleProperties, ")
+cpp_quote("// /* [in] */ boolean useAlternateView, // If TRUE, returns properites for media as set in Document's set_alternateViewMediaTypes")
+cpp_quote("// /* [out] */ BSTR *styleProperties, ")
+cpp_quote("// /* [out] */ BSTR *styleValues);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Returns 2 arrays -- the style properties and their values")
+cpp_quote("// useAlternateView=FALSE: gets properties for the default media type (usually screen)")
+cpp_quote("// useAlternateView=TRUE: properties for media types set w/ nsIDOMSimpleDocument::set_alternateViewMediaTypes()")
+cpp_quote("//")
+cpp_quote("// computedStyleForProperties( ")
+cpp_quote("// /* [in] */ unsigned short numStyleProperties, ")
+cpp_quote("// /* [in] */ boolean useAlternateView, // If TRUE, returns properites for media as set in Document's set_alternateViewMediaTypes")
+cpp_quote("// /* [in] */ BSTR *styleProperties, ")
+cpp_quote("// /* [out] */ BSTR *styleValues);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Scroll the current view so that this dom node is visible.")
+cpp_quote("// placeTopLeft=TRUE: scroll until the top left corner of the dom node is at the top left corner of the view.")
+cpp_quote("// placeTopLeft=FALSE: scroll minimally to make the dom node visible. Don't scroll at all if already visible.")
+cpp_quote("//")
+cpp_quote("// scrollTo( ")
+cpp_quote("// /* [in] */ boolean placeTopLeft); ")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Returns style property values for those properties in the styleProperties [in] array")
+cpp_quote("// Returns 2 arrays -- the style properties and their values")
+cpp_quote("// useAlternateView=FALSE: gets properties for the default media type (usually screen)")
+cpp_quote("// useAlternateView=TRUE: properties for media types set w/ nsIDOMSimpleDocument::set_alternateViewMediaTypes()")
+cpp_quote("//")
+cpp_quote("// get_parentNode (/* [out] */ ISimpleDOMNode **newNodePtr);")
+cpp_quote("// get_firstChild (/* [out] */ ISimpleDOMNode **newNodePtr);")
+cpp_quote("// get_lastChild (/* [out] */ ISimpleDOMNode **newNodePtr);")
+cpp_quote("// get_previousSibling(/* [out] */ ISimpleDOMNode **newNodePtr);")
+cpp_quote("// get_nextSibling (/* [out] */ ISimpleDOMNode **newNodePtr);")
+cpp_quote("// get_childAt (/* [in] */ unsigned childIndex, /* [out] */ ISimpleDOMNode **newNodePtr);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// DOM navigation - get a different node.")
+cpp_quote("//")
+cpp_quote("// get_innerHTML(/* [out] */ BSTR *htmlText);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Returns HTML of this DOM node's subtree. Does not include the start and end tag for this node/element.")
+cpp_quote("//")
+cpp_quote("//")
+cpp_quote("// get_localInterface(/* [out] */ void **localInterface);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Only available in Gecko's process")
+cpp_quote("//")
+cpp_quote("//")
+cpp_quote("// get_language(/* [out] */ BSTR *htmlText);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Returns the computed language for this node, or empty string if unknown.")
+cpp_quote("//")
+cpp_quote("//")
+cpp_quote("///////////////////////////////////////////////////////////////////////////////////////////////////////")
+cpp_quote("")
+cpp_quote("")
+
+import "objidl.idl";
+import "oaidl.idl";
+
+[object, uuid(1814ceeb-49e2-407f-af99-fa755a7d2607)]
+interface ISimpleDOMNode : IUnknown
+{
+ const unsigned short NODETYPE_ELEMENT = 1;
+ const unsigned short NODETYPE_ATTRIBUTE = 2;
+ const unsigned short NODETYPE_TEXT = 3;
+ const unsigned short NODETYPE_CDATA_SECTION = 4;
+ const unsigned short NODETYPE_ENTITY_REFERENCE = 5;
+ const unsigned short NODETYPE_ENTITY = 6;
+ const unsigned short NODETYPE_PROCESSING_INSTRUCTION = 7;
+ const unsigned short NODETYPE_COMMENT = 8;
+ const unsigned short NODETYPE_DOCUMENT = 9;
+ const unsigned short NODETYPE_DOCUMENT_TYPE = 10;
+ const unsigned short NODETYPE_DOCUMENT_FRAGMENT = 11;
+ const unsigned short NODETYPE_NOTATION = 12;
+
+ [propget] HRESULT nodeInfo(
+ [out] BSTR *nodeName, // for performance returns NULL for text nodes (true nodeName would be "#text")
+ [out] short *nameSpaceID,
+ [out] BSTR *nodeValue,
+ [out] unsigned int *numChildren,
+ [out] unsigned int *uniqueID, // In Win32 accessible events we generate, the target's childID matches to this
+ [out, retval] unsigned short *nodeType
+ );
+
+ [propget] HRESULT attributes(
+ [in] unsigned short maxAttribs,
+ [out, size_is(maxAttribs), length_is(*numAttribs)] BSTR *attribNames,
+ [out, size_is(maxAttribs), length_is(*numAttribs)] short *nameSpaceID,
+ [out, size_is(maxAttribs), length_is(*numAttribs)] BSTR *attribValues,
+ [out, retval] unsigned short *numAttribs
+ );
+
+ [propget] HRESULT attributesForNames(
+ [in] unsigned short numAttribs,
+ [in, size_is(numAttribs), length_is(numAttribs)] BSTR *attribNames,
+ [in, size_is(numAttribs), length_is(numAttribs)] short *nameSpaceID,
+ [out, retval, size_is(numAttribs), length_is(numAttribs)] BSTR *attribValues
+ );
+
+ [propget] HRESULT computedStyle(
+ [in] unsigned short maxStyleProperties,
+ [in] boolean useAlternateView, // If TRUE, returns properites for media as set in Document's set_alternateViewMediaTypes
+ [out, size_is(maxStyleProperties), length_is(*numStyleProperties)] BSTR *styleProperties,
+ [out, size_is(maxStyleProperties), length_is(*numStyleProperties)] BSTR *styleValues,
+ [out, retval] unsigned short *numStyleProperties
+ );
+
+ [propget] HRESULT computedStyleForProperties(
+ [in] unsigned short numStyleProperties,
+ [in] boolean useAlternateView, // If TRUE, returns properites for media as set in Document's set_alternateViewMediaTypes
+ [in, size_is(numStyleProperties), length_is(numStyleProperties)] BSTR *styleProperties,
+ [out, retval, size_is(numStyleProperties), length_is(numStyleProperties)] BSTR *styleValues
+ );
+
+ HRESULT scrollTo([in] boolean placeTopLeft);
+
+ [propget] HRESULT parentNode([out, retval] ISimpleDOMNode **node);
+ [propget] HRESULT firstChild([out, retval] ISimpleDOMNode **node);
+ [propget] HRESULT lastChild([out, retval] ISimpleDOMNode **node);
+ [propget] HRESULT previousSibling([out, retval] ISimpleDOMNode **node);
+ [propget] HRESULT nextSibling([out, retval] ISimpleDOMNode **node);
+ [propget] HRESULT childAt([in] unsigned childIndex,
+ [out, retval] ISimpleDOMNode **node);
+
+ [propget] HRESULT innerHTML([out, retval] BSTR *innerHTML);
+
+ [propget, local] HRESULT localInterface([out][retval] void **localInterface);
+
+ [propget, call_as(get_localInterface)]
+ HRESULT remoteLocalInterface([out][retval] IUnknown **localInterface);
+
+ [propget] HRESULT language([out, retval] BSTR *language);
+}
diff --git a/accessible/interfaces/msaa/ISimpleDOMText.idl b/accessible/interfaces/msaa/ISimpleDOMText.idl
new file mode 100644
index 0000000000..c203cf98c1
--- /dev/null
+++ b/accessible/interfaces/msaa/ISimpleDOMText.idl
@@ -0,0 +1,78 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * 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/. */
+
+import "objidl.idl";
+import "oaidl.idl";
+
+cpp_quote("///////////////////////////////////////////////////////////////////////////////////////////////////////")
+cpp_quote("//")
+cpp_quote("// ISimpleDOMText")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// An interface that extends MSAA's IAccessible to provide important additional capabilities on text nodes")
+cpp_quote("//")
+cpp_quote("// [propget] domText(/* out,retval */ BSTR *domText")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Similar to IAccessible::get_accName, but does not strip out whitespace characters.")
+cpp_quote("// Important for retrieving the correct start/end substring indices to use with other")
+cpp_quote("// methods in ISimpleDOMText.")
+cpp_quote("//")
+cpp_quote("//")
+cpp_quote("// get_[un]clippedSubstringBounds(")
+cpp_quote("// /* [in] */ unsigned int startIndex,")
+cpp_quote("// /* [in] */ unsigned int endIndex,")
+cpp_quote("// /* [out] */ int *x,")
+cpp_quote("// /* [out] */ int *y,")
+cpp_quote("// /* [out] */ int *width,")
+cpp_quote("// /* [out] */ int *height);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Both methods get_clippedSubstringBounds and get_unclippedSubstringBounds return the screen pixel")
+cpp_quote("// coordinates of the given text substring. The in parameters for start and end indices refer")
+cpp_quote("// to the string returned by ISimpleDOMText::get_domText().")
+cpp_quote("//")
+cpp_quote("//")
+cpp_quote("// scrollToSubstring(")
+cpp_quote("// /* [in] */ unsigned int startIndex,")
+cpp_quote("// /* [in] */ unsigned int endIndex);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// In scrollable views, scrolls to ensure that the specified substring is visible onscreen.")
+cpp_quote("// The in parameters for start and end indices refer to the string returned")
+cpp_quote("// by ISimpleDOMText::get_domText().")
+cpp_quote("//")
+cpp_quote("//")
+cpp_quote("// [propget] fontFamily(/* out,retval */ BSTR *fontFamily);")
+cpp_quote("// ---------------------------------------------------------------------------------------------------=")
+cpp_quote("// Return a single computed font family name, which is better than the comma delineated list")
+cpp_quote("// that is returned by the ISimpleDOMNode computed style methods for font-family.")
+cpp_quote("// In other words, return something like 'Arial' instead of 'Arial, Helvetica, Sans-serif'.")
+cpp_quote("///////////////////////////////////////////////////////////////////////////////////////////////////////")
+cpp_quote("")
+cpp_quote("")
+
+[object, uuid(4e747be5-2052-4265-8af0-8ecad7aad1c0)]
+interface ISimpleDOMText: IUnknown
+{
+ // Includes whitespace in DOM
+ [propget] HRESULT domText([out, retval] BSTR *domText);
+
+ HRESULT get_clippedSubstringBounds([in] unsigned int startIndex,
+ [in] unsigned int endIndex,
+ [out] int *x,
+ [out] int *y,
+ [out] int *width,
+ [out] int *height);
+
+ HRESULT get_unclippedSubstringBounds([in] unsigned int startIndex,
+ [in] unsigned int endIndex,
+ [out] int *x,
+ [out] int *y,
+ [out] int *width,
+ [out] int *height);
+
+ HRESULT scrollToSubstring([in] unsigned int startIndex,
+ [in] unsigned int endIndex);
+
+ [propget] HRESULT fontFamily([out, retval] BSTR *fontFamily);
+};
diff --git a/accessible/interfaces/msaa/moz.build b/accessible/interfaces/msaa/moz.build
new file mode 100644
index 0000000000..7a1053317a
--- /dev/null
+++ b/accessible/interfaces/msaa/moz.build
@@ -0,0 +1,57 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+GeckoSharedLibrary("AccessibleMarshal", linkage=None)
+
+# Missing here, is the notion that changes to the idl files included by
+# ISimpleDOM.idl (e.g. ISimpleDOMNode.idl) should rebuild the outputs.
+GeneratedFile(
+ "ISimpleDOM.h",
+ "ISimpleDOM_p.c",
+ "ISimpleDOM_i.c",
+ "ISimpleDOM_dlldata.c",
+ "ISimpleDOM.tlb",
+ inputs=["ISimpleDOM.idl"],
+ script="/build/midl.py",
+ entry_point="midl",
+ flags=["-I", SRCDIR, "-robust", "-dlldata", OBJDIR + "/ISimpleDOM_dlldata.c"],
+)
+
+SOURCES += [
+ "!ISimpleDOM_dlldata.c",
+ "!ISimpleDOM_i.c",
+ "!ISimpleDOM_p.c",
+ "AccessibleMarshalThunk.c",
+]
+
+EXPORTS += [
+ "!ISimpleDOM.h",
+ "!ISimpleDOM_i.c",
+]
+
+DEFINES["REGISTER_PROXY_DLL"] = True
+# The following line is required to preserve compatibility with older versions
+# of AccessibleMarshal.dll.
+DEFINES["PROXY_CLSID"] = "IID_ISimpleDOMNode"
+
+DEFFILE = "AccessibleMarshal.def"
+
+OS_LIBS += [
+ "kernel32",
+ "rpcrt4",
+ "oleaut32",
+]
+
+RCINCLUDE = "AccessibleMarshal.rc"
+
+# Suppress warnings from the MIDL generated code.
+if CONFIG["CC_TYPE"] == "clang-cl":
+ CFLAGS += [
+ "-Wno-extern-initializer",
+ "-Wno-incompatible-pointer-types",
+ "-Wno-missing-braces",
+ "-Wno-unused-const-variable",
+ ]
diff --git a/accessible/interfaces/nsIAccessibilityService.idl b/accessible/interfaces/nsIAccessibilityService.idl
new file mode 100644
index 0000000000..ff145c877e
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibilityService.idl
@@ -0,0 +1,119 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+interface nsIAccessible;
+interface nsIWeakReference;
+interface nsIAccessiblePivot;
+interface nsIAccessibleTextLeafPoint;
+
+webidl Node;
+
+/**
+ * An interface for in-process accessibility clients wishing to get an
+ * nsIAccessible for a given DOM node. More documentation at:
+ * http://www.mozilla.org/projects/ui/accessibility
+ */
+[scriptable, builtinclass, uuid(2188e3a0-c88e-11e7-8f1a-0800200c9a66)]
+interface nsIAccessibilityService : nsISupports
+{
+ /**
+ * Return application accessible.
+ */
+ nsIAccessible getApplicationAccessible();
+
+ /**
+ * Return an nsIAccessible for a DOM node in pres shell 0.
+ * Create a new accessible of the appropriate type if necessary,
+ * or use one from the accessibility cache if it already exists.
+ * @param aNode The DOM node to get an accessible for.
+ * @return The nsIAccessible for the given DOM node.
+ */
+ nsIAccessible getAccessibleFor(in Node aNode);
+
+ nsIAccessible getAccessibleDescendantFor(in Node aNode);
+
+ /**
+ * Returns accessible role as a string.
+ *
+ * @param aRole - the accessible role constants.
+ */
+ AString getStringRole(in unsigned long aRole);
+
+ /**
+ * Returns list which contains accessible states as a strings.
+ *
+ * @param aStates - accessible states.
+ * @param aExtraStates - accessible extra states.
+ */
+ nsISupports getStringStates(in unsigned long aStates,
+ in unsigned long aExtraStates);
+
+ /**
+ * Get the type of accessible event as a string.
+ *
+ * @param aEventType - the accessible event type constant
+ * @return - accessible event type presented as human readable string
+ */
+ AString getStringEventType(in unsigned long aEventType);
+
+ /**
+ * Get the type of accessible relation as a string.
+ *
+ * @param aRelationType - the accessible relation type constant
+ * @return - accessible relation type presented as human readable string
+ */
+ AString getStringRelationType(in unsigned long aRelationType);
+
+ /**
+ * Return an accessible for the given DOM node from the cache.
+ * @note the method is intended for testing purposes
+ *
+ * @param aNode [in] the DOM node to get an accessible for
+ *
+ * @return cached accessible for the given DOM node if any
+ */
+ nsIAccessible getAccessibleFromCache(in Node aNode);
+
+ /**
+ * Create a new pivot for tracking a position and traversing a subtree.
+ *
+ * @param aRoot [in] the accessible root for the pivot
+ * @return a new pivot
+ */
+ nsIAccessiblePivot createAccessiblePivot(in nsIAccessible aRoot);
+
+ /**
+ * Create a new nsIAccessibleTextLeafPoint.
+ *
+ * @param aAccessible [in] the accessible for the point
+ * @param aOffset [in] the offset of the point
+ * @return a new point
+ */
+ nsIAccessibleTextLeafPoint createTextLeafPoint(in nsIAccessible aAccessible,
+ in long aOffset);
+
+ /**
+ * Enable logging for the given modules, all other modules aren't logged.
+ *
+ * @param aModules [in] list of modules, format is comma separated list
+ * like 'docload,doccreate'.
+ * @note Works on debug build only.
+ * @see Logging.cpp for list of possible values.
+ */
+ void setLogging(in ACString aModules);
+
+ /**
+ * Return true if the given module is logged.
+ */
+ boolean isLogged(in AString aModule);
+
+ /**
+ * Get the current accessibility service consumers.
+ * @returns a JSON string representing the accessibility service consumers.
+ */
+ AString getConsumers();
+};
diff --git a/accessible/interfaces/nsIAccessible.idl b/accessible/interfaces/nsIAccessible.idl
new file mode 100644
index 0000000000..e7bdb7d434
--- /dev/null
+++ b/accessible/interfaces/nsIAccessible.idl
@@ -0,0 +1,351 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+#include "nsIArray.idl"
+
+interface nsIPersistentProperties;
+interface nsIAccessibleDocument;
+interface nsIAccessibleRelation;
+
+webidl Node;
+
+%{C++
+#define NS_ACCESSIBLE_CACHE_TOPIC "accessible-cache"
+namespace mozilla {
+namespace a11y {
+class Accessible;
+class LocalAccessible;
+}
+}
+%}
+
+[ptr] native InternalAccessible(mozilla::a11y::Accessible);
+[ptr] native InternalLocalAccessible(mozilla::a11y::LocalAccessible);
+
+/**
+ * A cross-platform interface that supports platform-specific
+ * accessibility APIs like MSAA and ATK. Contains the sum of what's needed
+ * to support IAccessible as well as ATK's generic accessibility objects.
+ * Can also be used by in-process accessibility clients to get information
+ * about objects in the accessible tree. The accessible tree is a subset of
+ * nodes in the DOM tree -- such as documents, focusable elements and text.
+ * Mozilla creates the implementations of nsIAccessible on demand.
+ * See http://www.mozilla.org/projects/ui/accessibility for more information.
+ */
+[scriptable, builtinclass, uuid(de2869d9-563c-4943-996b-31a4daa4d097)]
+interface nsIAccessible : nsISupports
+{
+ /**
+ * Parent node in accessible tree.
+ */
+ readonly attribute nsIAccessible parent;
+
+ /**
+ * Next sibling in accessible tree
+ */
+ readonly attribute nsIAccessible nextSibling;
+
+ /**
+ * Previous sibling in accessible tree
+ */
+ readonly attribute nsIAccessible previousSibling;
+
+ /**
+ * First child in accessible tree
+ */
+ readonly attribute nsIAccessible firstChild;
+
+ /**
+ * Last child in accessible tree
+ */
+ readonly attribute nsIAccessible lastChild;
+
+ /**
+ * Array of all this element's children.
+ */
+ readonly attribute nsIArray children;
+
+ /**
+ * Number of accessible children
+ */
+ readonly attribute long childCount;
+
+ /**
+ * The 0-based index of this accessible in its parent's list of children,
+ * or -1 if this accessible does not have a parent.
+ */
+ readonly attribute long indexInParent;
+
+ /**
+ * The unique identifier of the accessible. ID is only guaranteed to be unique
+ * per document (Windows IDs are unique even across documents, but that is
+ * Windows specific and not exposed to core).
+ */
+ readonly attribute long long uniqueID;
+
+ /**
+ * The DOM node this nsIAccessible is associated with.
+ */
+ readonly attribute Node DOMNode;
+
+ /**
+ * For remote accessibles the id of the related DOM node.
+ */
+ readonly attribute AString id;
+
+ /**
+ * The document accessible that this access node resides in.
+ */
+ readonly attribute nsIAccessibleDocument document;
+
+ /**
+ * The root document accessible that this access node resides in.
+ */
+ readonly attribute nsIAccessibleDocument rootDocument;
+
+ /**
+ * The language for the current DOM node, e.g. en, de, etc.
+ */
+ readonly attribute AString language;
+
+ /**
+ * Accessible name -- the main text equivalent for this node. The name is
+ * specified by ARIA or by native markup. Example of ARIA markup is
+ * aria-labelledby attribute placed on element of this accessible. Example
+ * of native markup is HTML label linked with HTML element of this accessible.
+ *
+ * Value can be string or null. A null value indicates that AT may attempt to
+ * compute the name. Any string value, including the empty string, should be
+ * considered author-intentional, and respected.
+ */
+ readonly attribute AString name;
+
+ /**
+ * Accessible value -- a number or a secondary text equivalent for this node
+ * Widgets that use role attribute can force a value using the valuenow attribute
+ */
+ readonly attribute AString value;
+
+ /**
+ * Accessible description -- long text associated with this node
+ */
+ readonly attribute AString description;
+
+ /**
+ * Provides localized string of accesskey name, such as Alt+D.
+ * The modifier may be affected by user and platform preferences.
+ * Usually alt+letter, or just the letter alone for menu items.
+ */
+ readonly attribute AString accessKey;
+
+ /**
+ * Provides localized string of global keyboard accelerator for default
+ * action, such as Ctrl+O for Open file
+ */
+ readonly attribute AString keyboardShortcut;
+
+ /**
+ * Enumerated accessible role (see the constants defined in nsIAccessibleRole).
+ *
+ * @note The values might depend on platform because of variations. Widgets
+ * can use ARIA role attribute to force the final role.
+ */
+ readonly attribute unsigned long role;
+
+ /**
+ * Accessible states -- bit fields which describe boolean properties of node.
+ * Many states are only valid given a certain role attribute that supports
+ * them.
+ *
+ * @param aState - the first bit field (see nsIAccessibleStates::STATE_*
+ * constants)
+ * @param aExtraState - the second bit field
+ * (see nsIAccessibleStates::EXT_STATE_* constants)
+ */
+ void getState(out unsigned long aState, out unsigned long aExtraState);
+
+ /**
+ * Focused accessible child of node
+ */
+ readonly attribute nsIAccessible focusedChild;
+
+ /**
+ * Attributes of accessible
+ */
+ readonly attribute nsIPersistentProperties attributes;
+
+ /**
+ * Cached fields from a remote accessible
+ */
+ readonly attribute nsIPersistentProperties cache;
+
+ /**
+ * Platform specific interface for accessible
+ */
+ readonly attribute nsISupports nativeInterface;
+
+ /**
+ * Returns grouping information. Used for tree items, list items, tab panel
+ * labels, radio buttons, etc. Also used for collectons of non-text objects.
+ *
+ * @param groupLevel - 1-based, similar to ARIA 'level' property
+ * @param similarItemsInGroup - 1-based, similar to ARIA 'setsize' property,
+ * inclusive of the current item
+ * @param positionInGroup - 1-based, similar to ARIA 'posinset' property
+ */
+ void groupPosition(out long aGroupLevel, out long aSimilarItemsInGroup,
+ out long aPositionInGroup);
+
+ /**
+ * Accessible child which contains the coordinate at (x, y) in screen pixels.
+ * If the point is in the current accessible but not in a child, the
+ * current accessible will be returned.
+ * If the point is in neither the current accessible or a child, then
+ * null will be returned.
+ *
+ * @param x screen's x coordinate
+ * @param y screen's y coordinate
+ * @return the direct accessible child containing the given point
+ */
+ nsIAccessible getChildAtPoint(in long x, in long y);
+
+ /**
+ * Deepest accessible child which contains the coordinate at (x, y) in screen
+ * pixels. If the point is in the current accessible but not in a child, the
+ * current accessible will be returned. If the point is in neither the current
+ * accessible or a child, then null will be returned.
+ *
+ * @param x screen's x coordinate
+ * @param y screen's y coordinate
+ * @return the deepest accessible child containing the given point
+ */
+ nsIAccessible getDeepestChildAtPoint(in long x, in long y);
+
+/**
+ * Like GetDeepestChildAtPoint, but restricted to the current process.
+ * If the point is within a remote document, the accessible for the browser
+ * element containing that document will be returned; i.e. this will not
+ * descend into the document. If called on an accessible inside a remote
+ * document, this will fail.
+ *
+ * @param x screen's x coordinate
+ * @param y screen's y coordinate
+ * @return the deepest accessible child in this process containing the given
+ * point
+ */
+ nsIAccessible getDeepestChildAtPointInProcess(in long x, in long y);
+
+ /**
+ * Nth accessible child using zero-based index or last child if index less than zero
+ */
+ nsIAccessible getChildAt(in long aChildIndex);
+
+ /**
+ * Return accessible relation by the given relation type (see.
+ * constants defined in nsIAccessibleRelation).
+ */
+ nsIAccessibleRelation getRelationByType(in unsigned long aRelationType);
+
+ /**
+ * Returns multiple accessible relations for this object.
+ */
+ nsIArray getRelations();
+
+ /**
+ * Return accessible's x and y coordinates relative to the screen and
+ * accessible's width and height in Dev pixels.
+ */
+ void getBounds(out long x, out long y, out long width, out long height);
+
+ /**
+ * Return accessible's x and y coordinates relative to the screen and
+ * accessible's width and height in CSS pixels.
+ */
+ void getBoundsInCSSPixels(out long aX, out long aY, out long aWidth, out long aHeight);
+
+ /**
+ * Add or remove this accessible to the current selection
+ */
+ void setSelected(in boolean isSelected);
+
+ /**
+ * Select this accessible node only
+ */
+ void takeSelection();
+
+ /**
+ * Focus this accessible node,
+ * The state STATE_FOCUSABLE indicates whether this node is normally focusable.
+ * It is the callers responsibility to determine whether this node is focusable.
+ * accTakeFocus on a node that is not normally focusable (such as a table),
+ * will still set focus on that node, although normally that will not be visually
+ * indicated in most style sheets.
+ */
+ void takeFocus();
+
+ /**
+ * The number of accessible actions associated with this accessible
+ */
+ readonly attribute uint8_t actionCount;
+
+ /**
+ * The name of the accessible action at the given zero-based index
+ */
+ AString getActionName(in uint8_t index);
+
+ /**
+ * The description of the accessible action at the given zero-based index
+ */
+ AString getActionDescription(in uint8_t aIndex);
+
+ /**
+ * Perform the accessible action at the given zero-based index
+ * Action number 0 is the default action
+ */
+ void doAction(in uint8_t index);
+
+ /**
+ * Makes an object visible on screen.
+ *
+ * @param scrollType - defines where the object should be placed on
+ * the screen (see nsIAccessibleScrollType for
+ * available constants).
+ */
+ [can_run_script]
+ void scrollTo(in unsigned long aScrollType);
+
+ /**
+ * Moves the top left of an object to a specified location.
+ *
+ * @param coordinateType [in] - specifies whether the coordinates are relative to
+ * the screen or the parent object (for available
+ * constants refer to nsIAccessibleCoordinateType)
+ * @param x [in] - defines the x coordinate
+ * @param y [in] - defines the y coordinate
+ */
+ void scrollToPoint(in unsigned long coordinateType, in long x, in long y);
+
+ /**
+ * Dispatches an ANNOUNCEMENT event with this accessible as target.
+ *
+ * @param announcement [in] - string to use in announcement.
+ * @param priority [in] - priority for announcement, could be
+ * nsIAccessibleAnnouncementEvent.POLITE or
+ * nsIAccessibleAnnouncementEvent.ASSERTIVE.
+ */
+ void announce(in AString announcement, in unsigned short priority);
+
+ /**
+ * Get the role of this Accessible as an ARIA role token. This might have been
+ * set explicitly (e.g. role="button") or it might be implicit in native
+ * markup (e.g. <button> returns "button").
+ */
+ readonly attribute AString computedARIARole;
+
+ [notxpcom, nostdcall] InternalLocalAccessible toInternalAccessible();
+ [notxpcom, nostdcall] InternalAccessible toInternalGeneric();
+
+};
diff --git a/accessible/interfaces/nsIAccessibleAnnouncementEvent.idl b/accessible/interfaces/nsIAccessibleAnnouncementEvent.idl
new file mode 100644
index 0000000000..c64e95d583
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleAnnouncementEvent.idl
@@ -0,0 +1,23 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+/**
+ * Fired when announce() is called on the target accessible.
+ */
+[scriptable, builtinclass, uuid(8818e49c-1286-4fe6-ae82-4d1b795ec88d)]
+interface nsIAccessibleAnnouncementEvent : nsIAccessibleEvent
+{
+ const unsigned short POLITE = 0;
+ const unsigned short ASSERTIVE = 1;
+
+ // String of actual announcement
+ readonly attribute AString announcement;
+
+ // Priority for announcement, could be POLITE or ASSERTIVE, ATs
+ // will decide how to appropriately present it.
+ readonly attribute unsigned short priority;
+};
diff --git a/accessible/interfaces/nsIAccessibleApplication.idl b/accessible/interfaces/nsIAccessibleApplication.idl
new file mode 100644
index 0000000000..6facf13375
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleApplication.idl
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+/**
+ * This interface is implemented by top level accessible object in hierarchy and
+ * provides information about application.
+ */
+[scriptable, builtinclass, uuid(79251626-387c-4531-89f3-680d31d6cf05)]
+interface nsIAccessibleApplication : nsISupports
+{
+ /**
+ * Returns the application name.
+ */
+ readonly attribute AString appName;
+
+ /**
+ * Returns the application version.
+ */
+ readonly attribute AString appVersion;
+
+ /**
+ * Returns the platform name.
+ */
+ readonly attribute AString platformName;
+
+ /**
+ * Returns the platform version.
+ */
+ readonly attribute AString platformVersion;
+};
diff --git a/accessible/interfaces/nsIAccessibleCaretMoveEvent.idl b/accessible/interfaces/nsIAccessibleCaretMoveEvent.idl
new file mode 100644
index 0000000000..4cdece16cc
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleCaretMoveEvent.idl
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+/**
+ * Fired when the caret changes position in text.
+ */
+[scriptable, builtinclass, uuid(ed1982e4-57d7-41a8-8cd8-9023f809383e)]
+interface nsIAccessibleCaretMoveEvent: nsIAccessibleEvent
+{
+ /**
+ * Return caret offset.
+ */
+ readonly attribute long caretOffset;
+
+ /**
+ * Return true if there is no selection.
+ */
+ readonly attribute bool isSelectionCollapsed;
+
+ /**
+ * Return true if the caret is at the end of a line.
+ */
+ readonly attribute bool isAtEndOfLine;
+
+ /**
+ * Return caret move granularity.
+ */
+ readonly attribute long granularity;
+};
diff --git a/accessible/interfaces/nsIAccessibleDocument.idl b/accessible/interfaces/nsIAccessibleDocument.idl
new file mode 100644
index 0000000000..a91df31c96
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleDocument.idl
@@ -0,0 +1,75 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+interface nsIAccessiblePivot;
+interface mozIDOMWindowProxy;
+
+webidl Document;
+
+/**
+ * An interface for in-process accessibility clients
+ * that wish to retrieve information about a document.
+ * When accessibility is turned on in Gecko,
+ * there is an nsIAccessibleDocument for each document
+ * whether it is XUL, HTML or whatever.
+ * You can QueryInterface to nsIAccessibleDocument from the nsIAccessible for
+ * the root node of a document or you can get one from
+ * nsIAccessible::GetDocument().
+ */
+[scriptable, builtinclass, uuid(5cad5f91-fcce-40e7-913e-4671701d19b4)]
+interface nsIAccessibleDocument : nsISupports
+{
+ /**
+ * The URL of the document
+ */
+ readonly attribute AString URL;
+
+ /**
+ * The title of the document, as specified in the document.
+ */
+ readonly attribute AString title;
+
+ /**
+ * The mime type of the document
+ */
+ readonly attribute AString mimeType;
+
+ /**
+ * The doc type of the document, as specified in the document.
+ */
+ readonly attribute AString docType;
+
+ /**
+ * The Document interface associated with this document.
+ */
+ readonly attribute Document DOMDocument;
+
+ /**
+ * The nsIDOMWindow that the document resides in.
+ */
+ readonly attribute mozIDOMWindowProxy window;
+
+ /**
+ * Return the parent document accessible.
+ */
+ readonly attribute nsIAccessibleDocument parentDocument;
+
+ /**
+ * Return the count of child document accessibles.
+ */
+ readonly attribute unsigned long childDocumentCount;
+
+ /**
+ * The virtual cursor pivot this document manages.
+ */
+ readonly attribute nsIAccessiblePivot virtualCursor;
+
+ /**
+ * Return the child document accessible at the given index.
+ */
+ nsIAccessibleDocument getChildDocumentAt(in unsigned long index);
+};
diff --git a/accessible/interfaces/nsIAccessibleEditableText.idl b/accessible/interfaces/nsIAccessibleEditableText.idl
new file mode 100644
index 0000000000..5fce44032c
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleEditableText.idl
@@ -0,0 +1,57 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * 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/. */
+
+#include "nsISupports.idl"
+
+[scriptable, builtinclass, uuid(28915cca-3366-4034-ba1d-b7afb9b37639)]
+interface nsIAccessibleEditableText : nsISupports
+{
+ /**
+ * Replaces the text represented by this object by the given text.
+ */
+ void setTextContents (in AString text);
+
+ /**
+ * Inserts text at the specified position.
+ *
+ * @param text - text that is inserted.
+ * @param position - index at which to insert the text.
+ */
+ void insertText(in AString text, in long position);
+
+ /**
+ * Copies the text range into the clipboard.
+ *
+ * @param startPos - start index of the text to moved into the clipboard.
+ * @param endPos - end index of the text to moved into the clipboard.
+ */
+ void copyText(in long startPos, in long endPos);
+
+ /**
+ * Deletes a range of text and copies it to the clipboard.
+ *
+ * @param startPos - start index of the text to be deleted.
+ * @param endOffset - end index of the text to be deleted.
+ */
+ void cutText(in long startPos, in long endPos);
+
+ /**
+ * Deletes a range of text.
+ *
+ * @param startPos - start index of the text to be deleted.
+ * @param endPos - end index of the text to be deleted.
+ */
+ void deleteText(in long startPos, in long endPos);
+
+ /**
+ * Pastes text from the clipboard.
+ *
+ * @param position - index at which to insert the text from the system
+ * clipboard into the text represented by this object.
+ */
+ [can_run_script]
+ void pasteText(in long position);
+};
diff --git a/accessible/interfaces/nsIAccessibleEvent.idl b/accessible/interfaces/nsIAccessibleEvent.idl
new file mode 100644
index 0000000000..0d64edea72
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleEvent.idl
@@ -0,0 +1,482 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+interface nsIAccessible;
+interface nsIAccessibleDocument;
+
+webidl Node;
+
+%{C++
+#define NS_ACCESSIBLE_EVENT_TOPIC "accessible-event"
+%}
+
+/**
+ * An interface for accessibility events listened to
+ * by in-process accessibility clients, which can be used
+ * to find out how to get accessibility and DOM interfaces for
+ * the event and its target. To listen to in-process accessibility invents,
+ * make your object an nsIObserver, and listen for accessible-event by
+ * using code something like this:
+ * nsCOMPtr<nsIObserverService> observerService =
+ * do_GetService("@mozilla.org/observer-service;1", &rv);
+ * if (NS_SUCCEEDED(rv))
+ * rv = observerService->AddObserver(this, "accessible-event", PR_TRUE);
+ */
+[scriptable, builtinclass, uuid(20c69a40-6c2c-42a3-a578-6f4473aab9dd)]
+interface nsIAccessibleEvent : nsISupports
+{
+ /**
+ * An object has been created.
+ */
+ const unsigned long EVENT_SHOW = 0x0001;
+
+ /**
+ * An object has been destroyed.
+ */
+ const unsigned long EVENT_HIDE = 0x0002;
+
+ /**
+ * An object's children have changed
+ */
+ const unsigned long EVENT_REORDER = 0x0003;
+
+ /**
+ * The active descendant of a component has changed. The active descendant
+ * is used in objects with transient children.
+ */
+ const unsigned long EVENT_ACTIVE_DECENDENT_CHANGED = 0x0004;
+
+ /**
+ * An object has received the keyboard focus.
+ */
+ const unsigned long EVENT_FOCUS = 0x0005;
+
+ /**
+ * An object's state has changed.
+ */
+ const unsigned long EVENT_STATE_CHANGE = 0x0006;
+
+ /**
+ * An object has changed location, shape, or size.
+ */
+ const unsigned long EVENT_LOCATION_CHANGE = 0x0007;
+
+ /**
+ * An object's Name property has changed.
+ */
+ const unsigned long EVENT_NAME_CHANGE = 0x0008;
+
+ /**
+ * An object's Description property has changed.
+ */
+ const unsigned long EVENT_DESCRIPTION_CHANGE = 0x0009;
+
+ /**
+ * An object's numeric Value has changed.
+ */
+ const unsigned long EVENT_VALUE_CHANGE = 0x000A;
+
+ /**
+ * An object's help has changed.
+ */
+ const unsigned long EVENT_HELP_CHANGE = 0x000B;
+
+ /**
+ * An object's default action has changed.
+ */
+ const unsigned long EVENT_DEFACTION_CHANGE = 0x000C;
+
+ /**
+ * An object's action has changed.
+ */
+ const unsigned long EVENT_ACTION_CHANGE = 0x000D;
+
+ /**
+ * An object's keyboard shortcut has changed.
+ */
+ const unsigned long EVENT_ACCELERATOR_CHANGE = 0x000E;
+
+ /**
+ * The selection within a container object has changed.
+ */
+ const unsigned long EVENT_SELECTION = 0x000F;
+
+ /**
+ * An item within a container object has been added to the selection.
+ */
+ const unsigned long EVENT_SELECTION_ADD = 0x0010;
+
+ /**
+ * An item within a container object has been removed from the selection.
+ */
+ const unsigned long EVENT_SELECTION_REMOVE = 0x0011;
+
+ /**
+ * Numerous selection changes have occurred within a container object.
+ */
+ const unsigned long EVENT_SELECTION_WITHIN = 0x0012;
+
+ /**
+ * An alert has been generated. Server applications send this event when a
+ * user needs to know that a user interface element has changed.
+ */
+ const unsigned long EVENT_ALERT = 0x0013;
+
+ /**
+ * The foreground window has changed.
+ */
+ const unsigned long EVENT_FOREGROUND = 0x0014;
+
+ /**
+ * A menu item on the menu bar has been selected.
+ */
+ const unsigned long EVENT_MENU_START = 0x0015;
+
+ /**
+ * A menu from the menu bar has been closed.
+ */
+ const unsigned long EVENT_MENU_END = 0x0016;
+
+ /**
+ * A pop-up menu has been displayed.
+ */
+ const unsigned long EVENT_MENUPOPUP_START = 0x0017;
+
+ /**
+ * A pop-up menu has been closed.
+ */
+ const unsigned long EVENT_MENUPOPUP_END = 0x0018;
+
+ /**
+ * A window has received mouse capture.
+ */
+ const unsigned long EVENT_CAPTURE_START = 0x0019;
+
+ /**
+ * A window has lost mouse capture.
+ */
+ const unsigned long EVENT_CAPTURE_END = 0x001A;
+
+ /**
+ * A window is being moved or resized.
+ */
+ const unsigned long EVENT_MOVESIZE_START = 0x001B;
+
+ /**
+ * The movement or resizing of a window has finished
+ */
+ const unsigned long EVENT_MOVESIZE_END = 0x001C;
+
+ /**
+ * A window has entered context-sensitive Help mode
+ */
+ const unsigned long EVENT_CONTEXTHELP_START = 0x001D;
+
+ /**
+ * A window has exited context-sensitive Help mode
+ */
+ const unsigned long EVENT_CONTEXTHELP_END = 0x001E;
+
+ /**
+ * An application is about to enter drag-and-drop mode
+ */
+ const unsigned long EVENT_DRAGDROP_START = 0x001F;
+
+ /**
+ * An application is about to exit drag-and-drop mode
+ */
+ const unsigned long EVENT_DRAGDROP_END = 0x0020;
+
+ /**
+ * A dialog box has been displayed
+ */
+ const unsigned long EVENT_DIALOG_START = 0x0021;
+
+ /**
+ * A dialog box has been closed
+ */
+ const unsigned long EVENT_DIALOG_END = 0x0022;
+
+ /**
+ * Scrolling has started on a scroll bar
+ */
+ const unsigned long EVENT_SCROLLING_START = 0x0023;
+
+ /**
+ * Scrolling has ended on a scroll bar
+ */
+ const unsigned long EVENT_SCROLLING_END = 0x0024;
+
+ /**
+ * A window object is about to be minimized or maximized
+ */
+ const unsigned long EVENT_MINIMIZE_START = 0x0025;
+
+ /**
+ * A window object has been minimized or maximized
+ */
+ const unsigned long EVENT_MINIMIZE_END = 0x0026;
+
+ /**
+ * The loading of the document has completed.
+ */
+ const unsigned long EVENT_DOCUMENT_LOAD_COMPLETE = 0x0027;
+
+ /**
+ * The document contents are being reloaded.
+ */
+ const unsigned long EVENT_DOCUMENT_RELOAD = 0x0028;
+
+ /**
+ * The loading of the document was interrupted.
+ */
+ const unsigned long EVENT_DOCUMENT_LOAD_STOPPED = 0x0029;
+
+ /**
+ * The document wide attributes of the document object have changed.
+ */
+ const unsigned long EVENT_DOCUMENT_ATTRIBUTES_CHANGED = 0x002A;
+
+ /**
+ * The contents of the document have changed.
+ */
+ const unsigned long EVENT_DOCUMENT_CONTENT_CHANGED = 0x002B;
+
+ const unsigned long EVENT_PROPERTY_CHANGED = 0x002C;
+
+ /**
+ * A slide changed in a presentation document or a page boundary was
+ * crossed in a word processing document.
+ */
+ const unsigned long EVENT_PAGE_CHANGED = 0x002D;
+
+ /**
+ * A text object's attributes changed.
+ * Also see EVENT_OBJECT_ATTRIBUTE_CHANGED.
+ */
+ const unsigned long EVENT_TEXT_ATTRIBUTE_CHANGED = 0x002E;
+
+ /**
+ * The caret has moved to a new position.
+ */
+ const unsigned long EVENT_TEXT_CARET_MOVED = 0x002F;
+
+ /**
+ * This event indicates general text changes, i.e. changes to text that is
+ * exposed through the IAccessibleText and IAccessibleEditableText interfaces.
+ */
+ const unsigned long EVENT_TEXT_CHANGED = 0x0030;
+
+ /**
+ * Text was inserted.
+ */
+ const unsigned long EVENT_TEXT_INSERTED = 0x0031;
+
+ /**
+ * Text was removed.
+ */
+ const unsigned long EVENT_TEXT_REMOVED = 0x0032;
+
+ /**
+ * Text was updated.
+ */
+ const unsigned long EVENT_TEXT_UPDATED = 0x0033;
+
+ /**
+ * The text selection changed.
+ */
+ const unsigned long EVENT_TEXT_SELECTION_CHANGED = 0x0034;
+
+ /**
+ * A visibile data event indicates the change of the visual appearance
+ * of an accessible object. This includes for example most of the
+ * attributes available via the IAccessibleComponent interface.
+ */
+ const unsigned long EVENT_VISIBLE_DATA_CHANGED = 0x0035;
+
+ /**
+ * The caret moved from one column to the next.
+ */
+ const unsigned long EVENT_TEXT_COLUMN_CHANGED = 0x0036;
+
+ /**
+ * The caret moved from one section to the next.
+ */
+ const unsigned long EVENT_SECTION_CHANGED = 0x0037;
+
+ /**
+ * A table caption changed.
+ */
+ const unsigned long EVENT_TABLE_CAPTION_CHANGED = 0x0038;
+
+ /**
+ * A table's data changed.
+ */
+ const unsigned long EVENT_TABLE_MODEL_CHANGED = 0x0039;
+
+ /**
+ * A table's summary changed.
+ */
+ const unsigned long EVENT_TABLE_SUMMARY_CHANGED = 0x003A;
+
+ /**
+ * A table's row description changed.
+ */
+ const unsigned long EVENT_TABLE_ROW_DESCRIPTION_CHANGED = 0x003B;
+
+ /**
+ * A table's row header changed.
+ */
+ const unsigned long EVENT_TABLE_ROW_HEADER_CHANGED = 0x003C;
+
+ const unsigned long EVENT_TABLE_ROW_INSERT = 0x003D;
+ const unsigned long EVENT_TABLE_ROW_DELETE = 0x003E;
+ const unsigned long EVENT_TABLE_ROW_REORDER = 0x003F;
+
+ /**
+ * A table's column description changed.
+ */
+ const unsigned long EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED = 0x0040;
+
+ /**
+ * A table's column header changed.
+ */
+ const unsigned long EVENT_TABLE_COLUMN_HEADER_CHANGED = 0x0041;
+
+ const unsigned long EVENT_TABLE_COLUMN_INSERT = 0x0042;
+ const unsigned long EVENT_TABLE_COLUMN_DELETE = 0x0043;
+ const unsigned long EVENT_TABLE_COLUMN_REORDER = 0x0044;
+
+ const unsigned long EVENT_WINDOW_ACTIVATE = 0x0045;
+ const unsigned long EVENT_WINDOW_CREATE = 0x0046;
+ const unsigned long EVENT_WINDOW_DEACTIVATE = 0x0047;
+ const unsigned long EVENT_WINDOW_DESTROY = 0x0048;
+ const unsigned long EVENT_WINDOW_MAXIMIZE = 0x0049;
+ const unsigned long EVENT_WINDOW_MINIMIZE = 0x004A;
+ const unsigned long EVENT_WINDOW_RESIZE = 0x004B;
+ const unsigned long EVENT_WINDOW_RESTORE = 0x004C;
+
+ /**
+ * The ending index of this link within the containing string has changed.
+ */
+ const unsigned long EVENT_HYPERLINK_END_INDEX_CHANGED = 0x004D;
+
+ /**
+ * The number of anchors assoicated with this hyperlink object has changed.
+ */
+ const unsigned long EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED = 0x004E;
+
+ /**
+ * The hyperlink selected state changed from selected to unselected or
+ * from unselected to selected.
+ */
+ const unsigned long EVENT_HYPERLINK_SELECTED_LINK_CHANGED = 0x004F;
+
+ /**
+ * One of the links associated with the hypertext object has been activated.
+ */
+ const unsigned long EVENT_HYPERTEXT_LINK_ACTIVATED = 0x0050;
+
+ /**
+ * One of the links associated with the hypertext object has been selected.
+ */
+ const unsigned long EVENT_HYPERTEXT_LINK_SELECTED = 0x0051;
+
+ /**
+ * The starting index of this link within the containing string has changed.
+ */
+ const unsigned long EVENT_HYPERLINK_START_INDEX_CHANGED = 0x0052;
+
+ /**
+ * Focus has changed from one hypertext object to another, or focus moved
+ * from a non-hypertext object to a hypertext object, or focus moved from a
+ * hypertext object to a non-hypertext object.
+ */
+ const unsigned long EVENT_HYPERTEXT_CHANGED = 0x0053;
+
+ /**
+ * The number of hyperlinks associated with a hypertext object changed.
+ */
+ const unsigned long EVENT_HYPERTEXT_NLINKS_CHANGED = 0x0054;
+
+ /**
+ * An object's attributes changed. Also see EVENT_TEXT_ATTRIBUTE_CHANGED.
+ */
+ const unsigned long EVENT_OBJECT_ATTRIBUTE_CHANGED = 0x0055;
+
+ /**
+ * A cursorable's virtual cursor has changed.
+ */
+ const unsigned long EVENT_VIRTUALCURSOR_CHANGED = 0x0056;
+
+ /**
+ * An object's text Value has changed.
+ */
+ const unsigned long EVENT_TEXT_VALUE_CHANGE = 0x0057;
+
+ /**
+ * An accessible's viewport is scrolling.
+ */
+ const unsigned long EVENT_SCROLLING = 0x0058;
+
+ /**
+ * An accessible is making an explicit announcement.
+ */
+ const unsigned long EVENT_ANNOUNCEMENT = 0x0059;
+
+ /**
+ * A live region has been introduced. Mac only.
+ */
+ const unsigned long EVENT_LIVE_REGION_ADDED = 0x005A;
+
+ /**
+ * A live region has been removed (aria-live attribute changed). Mac Only.
+ */
+ const unsigned long EVENT_LIVE_REGION_REMOVED = 0x005B;
+
+ /**
+ * A reorder event that has been coalesced into a mutation
+ * of an ancestor's subtree.
+ */
+ const unsigned long EVENT_INNER_REORDER = 0x005C;
+
+ /**
+ * Help make sure event map does not get out-of-line.
+ */
+ const unsigned long EVENT_LAST_ENTRY = 0x005D;
+
+ /**
+ * The type of event, based on the enumerated event values
+ * defined in this interface.
+ */
+ readonly attribute unsigned long eventType;
+
+ /**
+ * The nsIAccessible associated with the event.
+ * May return null if no accessible is available
+ */
+ readonly attribute nsIAccessible accessible;
+
+ /**
+ * The nsIAccessibleDocument that the event target nsIAccessible
+ * resides in. This can be used to get the DOM window,
+ * the DOM document and the window handler, among other things.
+ */
+ readonly attribute nsIAccessibleDocument accessibleDocument;
+
+ /**
+ * The Node associated with the event
+ * May return null if accessible for event has been shut down
+ */
+ readonly attribute Node DOMNode;
+
+ /**
+ * Returns true if the event was caused by explicit user input,
+ * as opposed to purely originating from a timer or mouse movement
+ */
+ readonly attribute boolean isFromUserInput;
+};
diff --git a/accessible/interfaces/nsIAccessibleHideEvent.idl b/accessible/interfaces/nsIAccessibleHideEvent.idl
new file mode 100644
index 0000000000..820b8914c9
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleHideEvent.idl
@@ -0,0 +1,28 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+/**
+ * Fired when a accessible and its subtree are removed from the tree.
+ */
+[scriptable, builtinclass, uuid(2051709a-4e0d-4be5-873d-b49d1dee35fa)]
+interface nsIAccessibleHideEvent: nsIAccessibleEvent
+{
+ /**
+ * Return an accessible that was a parent of the target.
+ */
+ readonly attribute nsIAccessible targetParent;
+
+ /**
+ * Return an accessible that was a next sibling of the target
+ */
+ readonly attribute nsIAccessible targetNextSibling;
+
+ /**
+ * Return an accessible that was a parent of the target
+ */
+ readonly attribute nsIAccessible targetPrevSibling;
+};
diff --git a/accessible/interfaces/nsIAccessibleHyperLink.idl b/accessible/interfaces/nsIAccessibleHyperLink.idl
new file mode 100644
index 0000000000..e2926d4f0f
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleHyperLink.idl
@@ -0,0 +1,86 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * 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/. */
+
+#include "nsISupports.idl"
+
+interface nsIURI;
+interface nsIAccessible;
+
+/**
+ * A cross-platform interface that supports hyperlink-specific properties and
+ * methods. Anchors, image maps, xul:labels with class="text-link" implement this interface.
+ */
+[scriptable, builtinclass, uuid(883643d4-93a5-4f32-922c-6f06e01363c1)]
+interface nsIAccessibleHyperLink : nsISupports
+{
+ /**
+ * Returns the offset of the link within the parent accessible.
+ */
+ readonly attribute long startIndex;
+
+ /**
+ * Returns the end index of the link within the parent accessible.
+ *
+ * @note The link itself is represented by one embedded character within the
+ * parent text, so the endIndex should be startIndex + 1.
+ */
+ readonly attribute long endIndex;
+
+ /**
+ * Determines whether the link is valid (e. g. points to a valid URL).
+ *
+ * @note XXX Currently only used with ARIA links, and the author has to
+ * specify that the link is invalid via the aria-invalid="true" attribute.
+ * In all other cases, TRUE is returned.
+ */
+ readonly attribute boolean valid;
+
+ /**
+ * The numbber of anchors within this Hyperlink. Is normally 1 for anchors.
+ * This anchor is, for example, the visible output of the html:a tag.
+ * With an Image Map, reflects the actual areas within the map.
+ */
+ readonly attribute long anchorCount;
+
+ /**
+ * Returns the URI at the given index.
+ *
+ * @note ARIA hyperlinks do not have an URI to point to, since clicks are
+ * processed via JavaScript. Therefore this property does not work on ARIA
+ * links.
+ *
+ * @param index The 0-based index of the URI to be returned.
+ *
+ * @return the nsIURI object containing the specifications for the URI.
+ */
+ nsIURI getURI (in long index);
+
+ /**
+ * Returns a reference to the object at the given index.
+ *
+ * @param index The 0-based index whose object is to be returned.
+ *
+ * @return the nsIAccessible object at the desired index.
+ */
+ nsIAccessible getAnchor (in long index);
+};
+
+/*
+ Assumptions:
+
+ The object associated with object or anchor index
+ is an nsIAccessible.
+ A URI can be represented by the nsIURI interface
+ (or nsIURL interface).
+
+ Note that an object which supports nsIAccessibleHyperlink
+ does *not* generally implement nsIAccessible, unlike the
+ case of the other nsiAccessible* interfaces in this directory.
+
+ Aaron: would the nsISupports return from
+ getObject be queryable for nsIURI and nsIURL directly?
+
+*/
diff --git a/accessible/interfaces/nsIAccessibleHyperText.idl b/accessible/interfaces/nsIAccessibleHyperText.idl
new file mode 100644
index 0000000000..6e34f2a909
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleHyperText.idl
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * 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/. */
+
+#include "nsISupports.idl"
+#include "nsIAccessibleHyperLink.idl"
+
+/**
+ * A cross-platform interface that deals with text which contains hyperlinks.
+ * Each link is an embedded object representing exactly 1 character within
+ * the hypertext.
+ *
+ * Current implementation assumes every embedded object is a link.
+ */
+
+[scriptable, builtinclass, uuid(b33684e2-090c-4e1d-a3d9-f4b46f4237b9)]
+interface nsIAccessibleHyperText : nsISupports
+{
+ /**
+ * Return the number of links contained within this hypertext object.
+ */
+ readonly attribute long linkCount;
+
+ /**
+ * Return link accessible at the given index.
+ *
+ * @param index [in] 0-based index of the link that is to be retrieved
+ *
+ * @return link accessible or null if there is no link at that index
+ */
+ nsIAccessibleHyperLink getLinkAt(in long index);
+
+ /**
+ * Return index of the given link.
+ *
+ * @param link [in] link accessible the index is requested for
+ *
+ * @return index of the given link or null if there's no link within
+ * hypertext accessible
+ */
+ long getLinkIndex(in nsIAccessibleHyperLink link);
+
+ /*
+ * Return link index at the given offset within hypertext accessible.
+ *
+ * @param offset [in] the 0-based character index
+ *
+ * @return 0-based link's index or -1 if no link is present at that
+ * offset
+ */
+ long getLinkIndexAtOffset(in long offset);
+};
diff --git a/accessible/interfaces/nsIAccessibleImage.idl b/accessible/interfaces/nsIAccessibleImage.idl
new file mode 100644
index 0000000000..296216e70d
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleImage.idl
@@ -0,0 +1,30 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+[scriptable, builtinclass, uuid(09086623-0f09-4310-ac56-c2cda7c29648)]
+interface nsIAccessibleImage : nsISupports
+{
+ /**
+ * Returns the coordinates of the image.
+ *
+ * @param coordType specifies coordinates origin (for available constants
+ * refer to nsIAccessibleCoordinateType)
+ * @param x the x coordinate
+ * @param y the y coordinate
+ */
+ void getImagePosition(in unsigned long coordType,
+ out long x,
+ out long y);
+
+ /**
+ * Returns the size of the image.
+ *
+ * @param width the heigth
+ * @param height the width
+ */
+ void getImageSize(out long width, out long height);
+};
diff --git a/accessible/interfaces/nsIAccessibleMacInterface.idl b/accessible/interfaces/nsIAccessibleMacInterface.idl
new file mode 100644
index 0000000000..384d09d5f0
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleMacInterface.idl
@@ -0,0 +1,87 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+%{C++
+#include <objc/objc.h>
+
+#define NS_ACCESSIBLE_MAC_EVENT_TOPIC "accessible-mac-event"
+%}
+
+native NativeObjectId(id);
+
+/**
+ * A generic NSISupports wrapper for native NSObjects.
+ */
+[scriptable, builtinclass, uuid(4582bb77-de03-4ed1-a9b4-d482d97c0129)]
+interface nsIAccessibleMacNSObjectWrapper : nsISupports
+{
+ [noscript, notxpcom, nostdcall] NativeObjectId GetNativeObject();
+};
+
+[scriptable, builtinclass, uuid(9d27cf21-66fc-47dc-8a07-98edb18707b1)]
+interface nsIAccessibleMacInterface : nsISupports
+{
+ /**
+ * List of available attribute names for the object.
+ * Emulates `AXUIElementCopyAttributeNames`.
+ */
+ readonly attribute Array<AString> attributeNames;
+
+ /**
+ * List of available parameterized attribute names for the object.
+ * Emulates `AXUIElementCopyParameterizedAttributeNames`.
+ */
+ readonly attribute Array<AString> parameterizedAttributeNames;
+
+ /**
+ * List of available action names for tthe object.
+ * Emulates `AXUIElementCopyActionNames`.
+ */
+ readonly attribute Array<AString> actionNames;
+
+ /**
+ * Returns the value of an attribute.
+ * Emulates `AXUIElementCopyAttributeValue`.
+ */
+ [implicit_jscontext]
+ jsval getAttributeValue(in AString attributeName);
+
+ /**
+ * Returns the value of an attribute given a name and a parameter.
+ * Emulates `AXUIElementCopyParameterizedAttributeValue`.
+ **/
+ [implicit_jscontext]
+ jsval getParameterizedAttributeValue(in AString attributeName, in jsval parameter);
+
+ /**
+ * Requests that the accessibility object perform the specified action.
+ * Emulatets `AXUIElementPerformAction`.
+ */
+ void performAction(in AString actionName);
+
+ /**
+ * Returns true if the given attribute is settable on the object.
+ * Emulates `AXUIElementIsAttributeSettable`.
+ **/
+ bool isAttributeSettable(in AString attributeName);
+
+ /**
+ * Sets the given attribute with the given value on the object.
+ * Emulates `AXUIElementSetAttributeValue`.
+ **/
+ [implicit_jscontext]
+ void setAttributeValue(in AString attributeName, in jsval attributeValue);
+};
+
+[scriptable, builtinclass, uuid(6153f07b-2260-495b-9899-9699d9fe323e)]
+interface nsIAccessibleMacEvent : nsISupports
+{
+ readonly attribute nsIAccessibleMacInterface macIface;
+
+ [implicit_jscontext]
+ readonly attribute jsval data;
+};
diff --git a/accessible/interfaces/nsIAccessibleObjectAttributeChangedEvent.idl b/accessible/interfaces/nsIAccessibleObjectAttributeChangedEvent.idl
new file mode 100644
index 0000000000..28597491a1
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleObjectAttributeChangedEvent.idl
@@ -0,0 +1,19 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+/**
+ * Fired when an attribute of an accessible changes.
+ */
+[scriptable, builtinclass, uuid(ce41add2-096e-4606-b1ca-7408c6d5b4c3)]
+interface nsIAccessibleObjectAttributeChangedEvent : nsIAccessibleEvent
+{
+ /**
+ * Return the accessible attribute that changed.
+ */
+ readonly attribute AString changedAttribute;
+};
diff --git a/accessible/interfaces/nsIAccessiblePivot.idl b/accessible/interfaces/nsIAccessiblePivot.idl
new file mode 100644
index 0000000000..02d3b50f41
--- /dev/null
+++ b/accessible/interfaces/nsIAccessiblePivot.idl
@@ -0,0 +1,259 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=2 et sw=2 tw=80: */
+/* 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/. */
+
+#include "nsISupports.idl"
+
+typedef short TextBoundaryType;
+typedef short PivotMoveReason;
+
+interface nsIAccessible;
+interface nsIAccessibleText;
+interface nsIAccessibleTraversalRule;
+interface nsIAccessiblePivotObserver;
+
+/**
+ * The pivot interface encapsulates a reference to a single place in an accessible
+ * subtree. The pivot is a point or a range in the accessible tree. This interface
+ * provides traversal methods to move the pivot to next/prev state that complies
+ * to a given rule.
+ */
+[scriptable, uuid(81fe5144-059b-42db-bd3a-f6ce3158d5e9)]
+interface nsIAccessiblePivot : nsISupports
+{
+ const TextBoundaryType NO_BOUNDARY = -1;
+ const TextBoundaryType CHAR_BOUNDARY = 0;
+ const TextBoundaryType WORD_BOUNDARY = 1;
+ const TextBoundaryType LINE_BOUNDARY = 2;
+ const TextBoundaryType ATTRIBUTE_RANGE_BOUNDARY = 3;
+
+ const PivotMoveReason REASON_NONE = 0;
+ const PivotMoveReason REASON_NEXT = 1;
+ const PivotMoveReason REASON_PREV = 2;
+ const PivotMoveReason REASON_FIRST = 3;
+ const PivotMoveReason REASON_LAST = 4;
+ const PivotMoveReason REASON_POINT = 5;
+
+ /**
+ * The accessible the pivot is currently pointed at.
+ */
+ attribute nsIAccessible position;
+
+ /**
+ * The root of the subtree in which the pivot traverses.
+ */
+ readonly attribute nsIAccessible root;
+
+ /**
+ * The temporary modal root to which traversal is limited to.
+ */
+ attribute nsIAccessible modalRoot;
+
+ /**
+ * The start offset of the text range the pivot points at, otherwise -1.
+ */
+ readonly attribute long startOffset;
+
+ /**
+ * The end offset of the text range the pivot points at, otherwise -1.
+ */
+ readonly attribute long endOffset;
+
+ /**
+ * Set the pivot's text range in a text accessible.
+ *
+ * @param aTextAccessible [in] the text accessible that contains the desired
+ * range.
+ * @param aStartOffset [in] the start offset to set.
+ * @param aEndOffset [in] the end offset to set.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ * @throws NS_ERROR_INVALID_ARG when the offset exceeds the accessible's
+ * character count.
+ */
+ [optional_argc] void setTextRange(in nsIAccessibleText aTextAccessible,
+ in long aStartOffset, in long aEndOffset,
+ [optional] in boolean aIsFromUserInput);
+
+ /**
+ * Move pivot to next object, from current position or given anchor,
+ * complying to given traversal rule.
+ *
+ * @param aRule [in] traversal rule to use.
+ * @param aAnchor [in] accessible to start search from, if not provided,
+ * current position will be used.
+ * @param aIncludeStart [in] include anchor accessible in search.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ * @return true on success, false if there are no new nodes to traverse to.
+ */
+ [optional_argc] boolean moveNext(in nsIAccessibleTraversalRule aRule,
+ [optional] in nsIAccessible aAnchor,
+ [optional] in boolean aIncludeStart,
+ [optional] in boolean aIsFromUserInput);
+
+ /**
+ * Move pivot to previous object, from current position or given anchor,
+ * complying to given traversal rule.
+ *
+ * @param aRule [in] traversal rule to use.
+ * @param aAnchor [in] accessible to start search from, if not provided,
+ * current position will be used.
+ * @param aIncludeStart [in] include anchor accessible in search.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ * @return true on success, false if there are no new nodes to traverse to.
+ */
+ [optional_argc] boolean movePrevious(in nsIAccessibleTraversalRule aRule,
+ [optional] in nsIAccessible aAnchor,
+ [optional] in boolean aIncludeStart,
+ [optional] in boolean aIsFromUserInput);
+
+ /**
+ * Move pivot to first object in subtree complying to given traversal rule.
+ *
+ * @param aRule [in] traversal rule to use.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ * @return true on success, false if there are no new nodes to traverse to.
+ */
+ [optional_argc] boolean moveFirst(in nsIAccessibleTraversalRule aRule,
+ [optional] in boolean aIsFromUserInput);
+
+ /**
+ * Move pivot to last object in subtree complying to given traversal rule.
+ *
+ * @param aRule [in] traversal rule to use.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ */
+ [optional_argc] boolean moveLast(in nsIAccessibleTraversalRule aRule,
+ [optional] in boolean aIsFromUserInput);
+
+ /**
+ * Move pivot to next text range.
+ *
+ * @param aBoundary [in] type of boundary for next text range,
+ * character, word, etc.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ * @return true on success, false if there are is no more text.
+ */
+ [optional_argc] boolean moveNextByText(in TextBoundaryType aBoundary,
+ [optional] in boolean aIsFromUserInput);
+
+ /**
+ * Move pivot to previous text range.
+ *
+ * @param aBoundary [in] type of boundary for next text range,
+ * character, word, etc.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ * @return true on success, false if there are is no more text.
+ */
+ [optional_argc] boolean movePreviousByText(in TextBoundaryType aBoundary,
+ [optional] in boolean aIsFromUserInput);
+
+ /**
+ * Move pivot to given coordinate in screen pixels.
+ *
+ * @param aRule [in] raversal rule to use.
+ * @param aX [in] screen's x coordinate
+ * @param aY [in] screen's y coordinate
+ * @param aIgnoreNoMatch [in] don't unset position if no object was found
+ * at point.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ * @return true on success, false if the pivot has not been moved.
+ */
+ [optional_argc] boolean moveToPoint(in nsIAccessibleTraversalRule aRule,
+ in long aX, in long aY,
+ in boolean aIgnoreNoMatch,
+ [optional] in boolean aIsFromUserInput);
+
+ /**
+ * Add an observer for pivot changes.
+ *
+ * @param aObserver [in] the observer object to be notified of pivot changes.
+ */
+ void addObserver(in nsIAccessiblePivotObserver aObserver);
+
+ /**
+ * Remove an observer for pivot changes.
+ *
+ * @param aObserver [in] the observer object to remove from being notified.
+ */
+ void removeObserver(in nsIAccessiblePivotObserver aObserver);
+};
+
+/**
+ * An observer interface for pivot changes.
+ */
+[scriptable, uuid(6006e502-3861-49bd-aba1-fa6d2e74e237)]
+interface nsIAccessiblePivotObserver : nsISupports
+{
+ /**
+ * Called when the pivot changes.
+ *
+ * @param aPivot [in] the pivot that has changed.
+ * @param aOldAccessible [in] the old pivot position before the change,
+ * or null.
+ * @param aOldStart [in] the old start offset, or -1.
+ * @param aOldEnd [in] the old end offset, or -1.
+ * @param aReason [in] the reason for the pivot change.
+ * @param aIsFromUserInput [in] the pivot changed because of direct user input
+ * (default is true).
+ */
+ void onPivotChanged(in nsIAccessiblePivot aPivot,
+ in nsIAccessible aOldAccessible,
+ in long aOldStart, in long aOldEnd,
+ in nsIAccessible aNewAccessible,
+ in long aNewStart, in long aNewEnd,
+ in PivotMoveReason aReason,
+ in TextBoundaryType aBoundaryType,
+ in boolean aIsFromUserInput);
+};
+
+[scriptable, uuid(e197460d-1eff-4247-b4bb-a43be1840dae)]
+interface nsIAccessibleTraversalRule : nsISupports
+{
+ /* Ignore this accessible object */
+ const unsigned short FILTER_IGNORE = 0x0;
+ /* Accept this accessible object */
+ const unsigned short FILTER_MATCH = 0x1;
+ /* Don't traverse accessibles children */
+ const unsigned short FILTER_IGNORE_SUBTREE = 0x2;
+
+ /* Pre-filters */
+ const unsigned long PREFILTER_INVISIBLE = 0x00000001;
+ const unsigned long PREFILTER_OFFSCREEN = 0x00000002;
+ const unsigned long PREFILTER_NOT_FOCUSABLE = 0x00000004;
+ const unsigned long PREFILTER_TRANSPARENT = 0x00000008;
+ const unsigned long PREFILTER_PLATFORM_PRUNED = 0x00000010;
+ /**
+ * Pre-filter bitfield to filter out obviously ignorable nodes and lighten
+ * the load on match().
+ */
+ readonly attribute unsigned long preFilter;
+
+ /**
+ * Retrieve a list of roles that the traversal rule should test for. Any node
+ * with a role not in this list will automatically be ignored. An empty list
+ * will match all roles. It should be assumed that this method is called once
+ * at the start of a traversal, so changing the method's return result after
+ * that would have no affect.
+ *
+ * @return an array of the roles to match.
+ */
+ Array<unsigned long> getMatchRoles();
+
+ /**
+ * Determines if a given accessible is to be accepted in our traversal rule
+ *
+ * @param aAccessible [in] accessible to examine.
+ * @return a bitfield of FILTER_MATCH and FILTER_IGNORE_SUBTREE.
+ */
+ unsigned short match(in nsIAccessible aAccessible);
+};
diff --git a/accessible/interfaces/nsIAccessibleRelation.idl b/accessible/interfaces/nsIAccessibleRelation.idl
new file mode 100644
index 0000000000..00575804cd
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleRelation.idl
@@ -0,0 +1,183 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+#include "nsIArray.idl"
+
+interface nsIAccessible;
+
+/**
+ * This interface gives access to an accessible's set of relations.
+ */
+[scriptable, builtinclass, uuid(55b308c4-2ae4-46bc-b4cd-4d4370e0a660)]
+interface nsIAccessibleRelation : nsISupports
+{
+ /**
+ * This object is labelled by a target object.
+ */
+ const unsigned long RELATION_LABELLED_BY = 0x00;
+
+ /**
+ * This object is label for a target object.
+ */
+ const unsigned long RELATION_LABEL_FOR = 0x01;
+
+ /**
+ * This object is described by the target object.
+ */
+ const unsigned long RELATION_DESCRIBED_BY = 0x02;
+
+ /**
+ * This object is describes the target object.
+ */
+ const unsigned long RELATION_DESCRIPTION_FOR = 0x3;
+
+ /**
+ * This object is a child of a target object.
+ */
+ const unsigned long RELATION_NODE_CHILD_OF = 0x4;
+
+ /**
+ * This object is a parent of a target object. A dual relation to
+ * RELATION_NODE_CHILD_OF
+ */
+ const unsigned long RELATION_NODE_PARENT_OF = 0x5;
+
+ /**
+ * Some attribute of this object is affected by a target object.
+ */
+ const unsigned long RELATION_CONTROLLED_BY = 0x06;
+
+ /**
+ * This object is interactive and controls some attribute of a target object.
+ */
+ const unsigned long RELATION_CONTROLLER_FOR = 0x07;
+
+ /**
+ * Content flows from this object to a target object, i.e. has content that
+ * flows logically to another object in a sequential way, e.g. text flow.
+ */
+ const unsigned long RELATION_FLOWS_TO = 0x08;
+
+ /**
+ * Content flows to this object from a target object, i.e. has content that
+ * flows logically from another object in a sequential way, e.g. text flow.
+ */
+ const unsigned long RELATION_FLOWS_FROM = 0x09;
+
+ /**
+ * This object is a member of a group of one or more objects. When there is
+ * more than one object in the group each member may have one and the same
+ * target, e.g. a grouping object. It is also possible that each member has
+ * multiple additional targets, e.g. one for every other member in the group.
+ */
+ const unsigned long RELATION_MEMBER_OF = 0x0a;
+
+ /**
+ * This object is a sub window of a target object.
+ */
+ const unsigned long RELATION_SUBWINDOW_OF = 0x0b;
+
+ /**
+ * This object embeds a target object. This relation can be used on the
+ * OBJID_CLIENT accessible for a top level window to show where the content
+ * areas are.
+ */
+ const unsigned long RELATION_EMBEDS = 0x0c;
+
+ /**
+ * This object is embedded by a target object.
+ */
+ const unsigned long RELATION_EMBEDDED_BY = 0x0d;
+
+ /**
+ * This object is a transient component related to the target object. When
+ * this object is activated the target object doesn't lose focus.
+ */
+ const unsigned long RELATION_POPUP_FOR = 0x0e;
+
+ /**
+ * This object is a parent window of the target object.
+ */
+ const unsigned long RELATION_PARENT_WINDOW_OF = 0x0f;
+
+ /**
+ * Part of a form/dialog with a related default button. It is used for
+ * MSAA/XPCOM, it isn't for IA2 or ATK.
+ */
+ const unsigned long RELATION_DEFAULT_BUTTON = 0x10;
+
+ /**
+ * The target object is the containing document object.
+ */
+ const unsigned long RELATION_CONTAINING_DOCUMENT = 0x11;
+
+ /**
+ * The target object is the topmost containing document object in the tab pane.
+ */
+ const unsigned long RELATION_CONTAINING_TAB_PANE = 0x12;
+
+ /**
+ * The target object is the containing window object.
+ */
+ const unsigned long RELATION_CONTAINING_WINDOW = 0x13;
+
+ /**
+ * The target object is the containing application object.
+ */
+ const unsigned long RELATION_CONTAINING_APPLICATION = 0x14;
+
+ /**
+ * The target object provides the detailed, extended description for this
+ * object. It provides more detailed information than would normally be
+ * provided using the DESCRIBED_BY relation. A common use for this relation is
+ * in digital publishing where an extended description needs to be conveyed in
+ * a book that requires structural markup or the embedding of other technology
+ * to provide illustrative content.
+ */
+ const unsigned long RELATION_DETAILS = 0x15;
+
+ /**
+ * This object provides the detailed, extended description for the target
+ * object. See DETAILS relation.
+ */
+ const unsigned long RELATION_DETAILS_FOR = 0x16;
+
+ /**
+ * The target object is the error message for this object.
+ */
+ const unsigned long RELATION_ERRORMSG = 0x17;
+
+ /**
+ * This object is the error message for the target object.
+ */
+ const unsigned long RELATION_ERRORMSG_FOR = 0x18;
+
+ /**
+ * The target object is the anchor referenced by this link.
+ */
+ const unsigned long RELATION_LINKS_TO = 0x19;
+
+ /**
+ * Returns the type of the relation.
+ */
+ readonly attribute unsigned long relationType;
+
+ /**
+ * Returns the number of targets for this relation.
+ */
+ readonly attribute unsigned long targetsCount;
+
+ /**
+ * Returns one accessible relation target.
+ * @param index - 0 based index of relation target.
+ */
+ nsIAccessible getTarget(in unsigned long index);
+
+ /**
+ * Returns multiple accessible relation targets.
+ */
+ nsIArray getTargets();
+};
diff --git a/accessible/interfaces/nsIAccessibleRole.idl b/accessible/interfaces/nsIAccessibleRole.idl
new file mode 100644
index 0000000000..5022f3ddc4
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleRole.idl
@@ -0,0 +1,1089 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+/**
+ * Defines cross platform (Gecko) roles.
+ */
+[scriptable, builtinclass, uuid(ad7f32a5-6d5f-4154-a5b8-0fa7aed48936)]
+interface nsIAccessibleRole : nsISupports
+{
+ /**
+ * Used when the accessible has no strongly-defined role.
+ */
+ const unsigned long ROLE_NOTHING = 0;
+
+ /**
+ * Represents a title or caption bar for a window. It is used by MSAA only,
+ * supported automatically by MS Windows.
+ */
+ const unsigned long ROLE_TITLEBAR = 1;
+
+ /**
+ * Represents the menu bar (positioned beneath the title bar of a window)
+ * from which menus are selected by the user. The role is used by
+ * xul:menubar or role="menubar".
+ */
+ const unsigned long ROLE_MENUBAR = 2;
+
+ /**
+ * Represents a vertical or horizontal scroll bar, which is part of the client
+ * area or used in a control.
+ */
+ const unsigned long ROLE_SCROLLBAR = 3;
+
+ /**
+ * Represents a special mouse pointer, which allows a user to manipulate user
+ * interface elements such as windows. For example, a user clicks and drags
+ * a sizing grip in the lower-right corner of a window to resize it.
+ */
+ const unsigned long ROLE_GRIP = 4;
+
+ /**
+ * Represents a system sound, which is associated with various system events.
+ */
+ const unsigned long ROLE_SOUND = 5;
+
+ /**
+ * Represents the system mouse pointer.
+ */
+ const unsigned long ROLE_CURSOR = 6;
+
+ /**
+ * Represents the system caret. The role is supported for caret.
+ */
+ const unsigned long ROLE_CARET = 7;
+
+ /**
+ * Represents an alert or a condition that a user should be notified about.
+ * Assistive Technologies typically respond to the role by reading the entire
+ * onscreen contents of containers advertising this role. Should be used for
+ * warning dialogs, etc. The role is used by xul:browsermessage,
+ * role="alert".
+ */
+ const unsigned long ROLE_ALERT = 8;
+
+ /**
+ * Represents the window frame, which contains child objects such as
+ * a title bar, client, and other objects contained in a window. The role
+ * is supported automatically by MS Windows.
+ */
+ const unsigned long ROLE_WINDOW = 9;
+
+ /**
+ * A sub-document (<frame> or <iframe>)
+ */
+ const unsigned long ROLE_INTERNAL_FRAME = 10;
+
+ /**
+ * Represents a menu, which presents a list of options from which the user can
+ * make a selection to perform an action. It is used for role="menu".
+ */
+ const unsigned long ROLE_MENUPOPUP = 11;
+
+ /**
+ * Represents a menu item, which is an entry in a menu that a user can choose
+ * to carry out a command, select an option. It is used for xul:menuitem,
+ * role="menuitem".
+ */
+ const unsigned long ROLE_MENUITEM = 12;
+
+ /**
+ * Represents a ToolTip that provides helpful hints.
+ */
+ const unsigned long ROLE_TOOLTIP = 13;
+
+ /**
+ * Represents a main window for an application. It is used for
+ * role="application". Also refer to ROLE_APP_ROOT
+ */
+ const unsigned long ROLE_APPLICATION = 14;
+
+ /**
+ * Represents a document window. A document window is always contained within
+ * an application window. For role="document", see NON_NATIVE_DOCUMENT.
+ */
+ const unsigned long ROLE_DOCUMENT = 15;
+
+ /**
+ * Represents a pane within a frame or document window. Users can navigate
+ * between panes and within the contents of the current pane, but cannot
+ * navigate between items in different panes. Thus, panes represent a level
+ * of grouping lower than frame windows or documents, but above individual
+ * controls. It is used for the first child of a <frame> or <iframe>.
+ */
+ const unsigned long ROLE_PANE = 16;
+
+ /**
+ * Represents a graphical image used to represent data.
+ */
+ const unsigned long ROLE_CHART = 17;
+
+ /**
+ * Represents a dialog box or message box. It is used for xul:dialog,
+ * role="dialog".
+ */
+ const unsigned long ROLE_DIALOG = 18;
+
+ /**
+ * Represents a window border.
+ */
+ const unsigned long ROLE_BORDER = 19;
+
+ /**
+ * Logically groups other objects. There is not always a parent-child
+ * relationship between the grouping object and the objects it contains. It
+ * is used for html:textfield, xul:groupbox, role="group".
+ */
+ const unsigned long ROLE_GROUPING = 20;
+
+ /**
+ * Used to visually divide a space into two regions, such as a separator menu
+ * item or a bar that divides split panes within a window. It is used for
+ * xul:separator, html:hr, role="separator".
+ */
+ const unsigned long ROLE_SEPARATOR = 21;
+
+ /**
+ * Represents a toolbar, which is a grouping of controls (push buttons or
+ * toggle buttons) that provides easy access to frequently used features. It
+ * is used for xul:toolbar, role="toolbar".
+ */
+ const unsigned long ROLE_TOOLBAR = 22;
+
+ /**
+ * Represents a status bar, which is an area at the bottom of a window that
+ * displays information about the current operation, state of the application,
+ * or selected object. The status bar has multiple fields, which display
+ * different kinds of information. It is used for xul:statusbar.
+ */
+ const unsigned long ROLE_STATUSBAR = 23;
+
+ /**
+ * Represents a table that contains rows and columns of cells, and optionally,
+ * row headers and column headers. It is used for html:table,
+ * role="grid". Also refer to the following roles: ROLE_COLUMNHEADER,
+ * ROLE_ROWHEADER, ROLE_COLUMN, ROLE_ROW, ROLE_CELL.
+ */
+ const unsigned long ROLE_TABLE = 24;
+
+ /**
+ * Represents a column header, providing a visual label for a column in
+ * a table. It is used for XUL tree column headers, html:th,
+ * role="colheader". Also refer to ROLE_TABLE.
+ */
+ const unsigned long ROLE_COLUMNHEADER = 25;
+
+ /**
+ * Represents a row header, which provides a visual label for a table row.
+ * It is used for role="rowheader". Also, see ROLE_TABLE.
+ */
+ const unsigned long ROLE_ROWHEADER = 26;
+
+ /**
+ * Represents a column of cells within a table. Also, see ROLE_TABLE.
+ */
+ const unsigned long ROLE_COLUMN = 27;
+
+ /**
+ * Represents a row of cells within a table. Also, see ROLE_TABLE.
+ */
+ const unsigned long ROLE_ROW = 28;
+
+ /**
+ * Represents a cell within a table. It is used for html:td and xul:tree cell.
+ * Also, see ROLE_TABLE.
+ */
+ const unsigned long ROLE_CELL = 29;
+
+ /**
+ * Represents a link to something else. This object might look like text or
+ * a graphic, but it acts like a button. It is used for
+ * xul:label@class="text-link", html:a, html:area.
+ */
+ const unsigned long ROLE_LINK = 30;
+
+ /**
+ * Displays a Help topic in the form of a ToolTip or Help balloon.
+ */
+ const unsigned long ROLE_HELPBALLOON = 31;
+
+ /**
+ * Represents a cartoon-like graphic object, such as Microsoft Office
+ * Assistant, which is displayed to provide help to users of an application.
+ */
+ const unsigned long ROLE_CHARACTER = 32;
+
+ /**
+ * Represents a list box, allowing the user to select one or more items. It
+ * is used for xul:listbox, html:select@size, role="list". See also
+ * ROLE_LIST_ITEM.
+ */
+ const unsigned long ROLE_LIST = 33;
+
+ /**
+ * Represents an item in a list. See also ROLE_LIST.
+ */
+ const unsigned long ROLE_LISTITEM = 34;
+
+ /**
+ * Represents an outline or tree structure, such as a tree view control,
+ * that displays a hierarchical list and allows the user to expand and
+ * collapse branches. Is is used for role="tree".
+ */
+ const unsigned long ROLE_OUTLINE = 35;
+
+ /**
+ * Represents an item in an outline or tree structure. It is used for
+ * role="treeitem".
+ */
+ const unsigned long ROLE_OUTLINEITEM = 36;
+
+ /**
+ * Represents a page tab, it is a child of a page tab list. It is used for
+ * xul:tab, role="treeitem". Also refer to ROLE_PAGETABLIST.
+ */
+ const unsigned long ROLE_PAGETAB = 37;
+
+ /**
+ * Represents a property sheet. It is used for xul:tabpanel,
+ * role="tabpanel".
+ */
+ const unsigned long ROLE_PROPERTYPAGE = 38;
+
+ /**
+ * Represents an indicator, such as a pointer graphic, that points to the
+ * current item.
+ */
+ const unsigned long ROLE_INDICATOR = 39;
+
+ /**
+ * Represents a picture. Is is used for xul:image, html:img.
+ */
+ const unsigned long ROLE_GRAPHIC = 40;
+
+ /**
+ * Represents read-only text, such as labels for other controls or
+ * instructions in a dialog box. Static text cannot be modified or selected.
+ * Is is used for xul:label, xul:description, html:label, role="label".
+ */
+ const unsigned long ROLE_STATICTEXT = 41;
+
+ /**
+ * Represents selectable text that allows edits or is designated read-only.
+ */
+ const unsigned long ROLE_TEXT_LEAF = 42;
+
+ /**
+ * Represents a push button control. It is used for xul:button, html:button,
+ * role="button".
+ */
+ const unsigned long ROLE_PUSHBUTTON = 43;
+
+ /**
+ * Represents a check box control. It is used for xul:checkbox,
+ * html:input@type="checkbox", role="checkbox".
+ */
+ const unsigned long ROLE_CHECKBUTTON = 44;
+
+ /**
+ * Represents an option button, also called a radio button. It is one of a
+ * group of mutually exclusive options. All objects sharing a single parent
+ * that have this attribute are assumed to be part of single mutually
+ * exclusive group. It is used for xul:radio, html:input@type="radio",
+ * role="radio".
+ */
+ const unsigned long ROLE_RADIOBUTTON = 45;
+
+ /**
+ * Represents a combo box; a popup button with an associated list box that
+ * provides a set of predefined choices. It is used for html:select with a
+ * size of 1 and xul:menulist. See also ROLE_EDITCOMBOBOX.
+ */
+ const unsigned long ROLE_COMBOBOX = 46;
+
+ /**
+ * Represents the calendar control.
+ */
+ const unsigned long ROLE_DROPLIST = 47;
+
+ /**
+ * Represents a progress bar, dynamically showing the user the percent
+ * complete of an operation in progress. It is used for html:progress,
+ * role="progressbar".
+ */
+ const unsigned long ROLE_PROGRESSBAR = 48;
+
+ /**
+ * Represents a dial or knob whose purpose is to allow a user to set a value.
+ */
+ const unsigned long ROLE_DIAL = 49;
+
+ /**
+ * Represents a hot-key field that allows the user to enter a combination or
+ * sequence of keystrokes.
+ */
+ const unsigned long ROLE_HOTKEYFIELD = 50;
+
+ /**
+ * Represents a slider, which allows the user to adjust a setting in given
+ * increments between minimum and maximum values. It is used by xul:scale,
+ * role="slider".
+ */
+ const unsigned long ROLE_SLIDER = 51;
+
+ /**
+ * Represents a spin box, which is a control that allows the user to increment
+ * or decrement the value displayed in a separate "buddy" control associated
+ * with the spin box. It is used for input[type=number] spin buttons.
+ */
+ const unsigned long ROLE_SPINBUTTON = 52;
+
+ /**
+ * Represents a graphical image used to diagram data. It is used for svg:svg.
+ */
+ const unsigned long ROLE_DIAGRAM = 53;
+
+ /**
+ * Represents an animation control, which contains content that changes over
+ * time, such as a control that displays a series of bitmap frames.
+ */
+ const unsigned long ROLE_ANIMATION = 54;
+
+ /**
+ * Represents a mathematical equation. It is used by MATHML, where there is a
+ * rich DOM subtree for an equation. Use ROLE_FLAT_EQUATION for <img role="math" alt="[TeX]"/>
+ */
+ const unsigned long ROLE_EQUATION = 55;
+
+ /**
+ * Represents a button that drops down a list of items.
+ */
+ const unsigned long ROLE_BUTTONDROPDOWN = 56;
+
+ /**
+ * Represents a button that drops down a menu.
+ */
+ const unsigned long ROLE_BUTTONMENU = 57;
+
+ /**
+ * Represents a button that drops down a grid. It is used for xul:colorpicker.
+ */
+ const unsigned long ROLE_BUTTONDROPDOWNGRID = 58;
+
+ /**
+ * Represents blank space between other objects.
+ */
+ const unsigned long ROLE_WHITESPACE = 59;
+
+ /**
+ * Represents a container of page tab controls. Is it used for xul:tabs,
+ * DHTML: role="tabs". Also refer to ROLE_PAGETAB.
+ */
+ const unsigned long ROLE_PAGETABLIST = 60;
+
+ /**
+ * Represents a control that displays time.
+ */
+ const unsigned long ROLE_CLOCK = 61;
+
+ /**
+ * Represents a button on a toolbar that has a drop-down list icon directly
+ * adjacent to the button.
+ */
+ const unsigned long ROLE_SPLITBUTTON = 62;
+
+ /**
+ * Represents an edit control designed for an Internet Protocol (IP) address.
+ * The edit control is divided into sections for the different parts of the
+ * IP address.
+ */
+ const unsigned long ROLE_IPADDRESS = 63;
+
+ /**
+ * Represents a label control that has an accelerator.
+ */
+ const unsigned long ROLE_ACCEL_LABEL = 64;
+
+ /**
+ * Represents an arrow in one of the four cardinal directions.
+ */
+ const unsigned long ROLE_ARROW = 65;
+
+ /**
+ * Represents a control that can be drawn into and is used to trap events.
+ * It is used for html:canvas.
+ */
+ const unsigned long ROLE_CANVAS = 66;
+
+ /**
+ * Represents a menu item with a check box.
+ */
+ const unsigned long ROLE_CHECK_MENU_ITEM = 67;
+
+ /**
+ * Represents a specialized dialog that lets the user choose a color.
+ */
+ const unsigned long ROLE_COLOR_CHOOSER = 68;
+
+ /**
+ * Represents control whose purpose is to allow a user to edit a date.
+ */
+ const unsigned long ROLE_DATE_EDITOR = 69;
+
+ /**
+ * An iconified internal frame in an ROLE_DESKTOP_PANE. Also refer to
+ * ROLE_INTERNAL_FRAME.
+ */
+ const unsigned long ROLE_DESKTOP_ICON = 70;
+
+ /**
+ * A desktop pane. A pane that supports internal frames and iconified
+ * versions of those internal frames.
+ */
+ const unsigned long ROLE_DESKTOP_FRAME = 71;
+
+ /**
+ * A directory pane. A pane that allows the user to navigate through
+ * and select the contents of a directory. May be used by a file chooser.
+ * Also refer to ROLE_FILE_CHOOSER.
+ */
+ const unsigned long ROLE_DIRECTORY_PANE = 72;
+
+ /**
+ * A file chooser. A specialized dialog that displays the files in the
+ * directory and lets the user select a file, browse a different directory,
+ * or specify a filename. May use the directory pane to show the contents of
+ * a directory. Also refer to ROLE_DIRECTORY_PANE.
+ */
+ const unsigned long ROLE_FILE_CHOOSER = 73;
+
+ /**
+ * A font chooser. A font chooser is a component that lets the user pick
+ * various attributes for fonts.
+ */
+ const unsigned long ROLE_FONT_CHOOSER = 74;
+
+ /**
+ * Frame role. A top level window with a title bar, border, menu bar, etc.
+ * It is often used as the primary window for an application.
+ */
+ const unsigned long ROLE_CHROME_WINDOW = 75;
+
+ /**
+ * A glass pane. A pane that is guaranteed to be painted on top of all
+ * panes beneath it. Also refer to ROLE_ROOT_PANE.
+ */
+ const unsigned long ROLE_GLASS_PANE = 76;
+
+ /**
+ * A document container for HTML, whose children represent the document
+ * content.
+ */
+ const unsigned long ROLE_HTML_CONTAINER = 77;
+
+ /**
+ * A small fixed size picture, typically used to decorate components.
+ */
+ const unsigned long ROLE_ICON = 78;
+
+ /**
+ * Presents an icon or short string in an interface.
+ */
+ const unsigned long ROLE_LABEL = 79;
+
+ /**
+ * A layered pane. A specialized pane that allows its children to be drawn
+ * in layers, providing a form of stacking order. This is usually the pane
+ * that holds the menu bar as well as the pane that contains most of the
+ * visual components in a window. Also refer to ROLE_GLASS_PANE and
+ * ROLE_ROOT_PANE.
+ */
+ const unsigned long ROLE_LAYERED_PANE = 80;
+
+ /**
+ * A specialized pane whose primary use is inside a dialog.
+ */
+ const unsigned long ROLE_OPTION_PANE = 81;
+
+ /**
+ * A text object uses for passwords, or other places where the text content
+ * is not shown visibly to the user.
+ */
+ const unsigned long ROLE_PASSWORD_TEXT = 82;
+
+ /**
+ * A temporary window that is usually used to offer the user a list of
+ * choices, and then hides when the user selects one of those choices.
+ */
+ const unsigned long ROLE_POPUP_MENU = 83;
+
+ /**
+ * A radio button that is a menu item.
+ */
+ const unsigned long ROLE_RADIO_MENU_ITEM = 84;
+
+ /**
+ * A root pane. A specialized pane that has a glass pane and a layered pane
+ * as its children. Also refer to ROLE_GLASS_PANE and ROLE_LAYERED_PANE.
+ */
+ const unsigned long ROLE_ROOT_PANE = 85;
+
+ /**
+ * A scroll pane. An object that allows a user to incrementally view a large
+ * amount of information. Its children can include scroll bars and a
+ * viewport. Also refer to ROLE_VIEW_PORT.
+ */
+ const unsigned long ROLE_SCROLL_PANE = 86;
+
+ /**
+ * A split pane. A specialized panel that presents two other panels at the
+ * same time. Between the two panels is a divider the user can manipulate to
+ * make one panel larger and the other panel smaller.
+ */
+ const unsigned long ROLE_SPLIT_PANE = 87;
+
+ /**
+ * The header for a column of a table.
+ * XXX: it looks this role is dupe of ROLE_COLUMNHEADER.
+ */
+ const unsigned long ROLE_TABLE_COLUMN_HEADER = 88;
+
+ /**
+ * The header for a row of a table.
+ * XXX: it looks this role is dupe of ROLE_ROWHEADER
+ */
+ const unsigned long ROLE_TABLE_ROW_HEADER = 89;
+
+ /**
+ * A menu item used to tear off and reattach its menu.
+ */
+ const unsigned long ROLE_TEAR_OFF_MENU_ITEM = 90;
+
+ /**
+ * Represents an accessible terminal.
+ */
+ const unsigned long ROLE_TERMINAL = 91;
+
+ /**
+ * Collection of objects that constitute a logical text entity.
+ */
+ const unsigned long ROLE_TEXT_CONTAINER = 92;
+
+ /**
+ * A toggle button. A specialized push button that can be checked or
+ * unchecked, but does not provide a separate indicator for the current state.
+ */
+ const unsigned long ROLE_TOGGLE_BUTTON = 93;
+
+ /**
+ * Representas a control that is capable of expanding and collapsing rows as
+ * well as showing multiple columns of data.
+ * XXX: it looks like this role is dupe of ROLE_OUTLINE.
+ */
+ const unsigned long ROLE_TREE_TABLE = 94;
+
+ /**
+ * A viewport. An object usually used in a scroll pane. It represents the
+ * portion of the entire data that the user can see. As the user manipulates
+ * the scroll bars, the contents of the viewport can change. Also refer to
+ * ROLE_SCROLL_PANE.
+ */
+ const unsigned long ROLE_VIEWPORT = 95;
+
+ /**
+ * Header of a document page. Also refer to ROLE_FOOTER.
+ */
+ const unsigned long ROLE_HEADER = 96;
+
+ /**
+ * Footer of a document page. Also refer to ROLE_HEADER.
+ */
+ const unsigned long ROLE_FOOTER = 97;
+
+ /**
+ * A paragraph of text.
+ */
+ const unsigned long ROLE_PARAGRAPH = 98;
+
+ /**
+ * A ruler such as those used in word processors.
+ */
+ const unsigned long ROLE_RULER = 99;
+
+ /**
+ * A text entry having dialog or list containing items for insertion into
+ * an entry widget, for instance a list of words for completion of a
+ * text entry. It is used for xul:textbox@autocomplete
+ */
+ const unsigned long ROLE_AUTOCOMPLETE = 100;
+
+ /**
+ * An editable text object in a toolbar.
+ */
+ const unsigned long ROLE_EDITBAR = 101;
+
+ /**
+ * An control whose textual content may be entered or modified by the user.
+ */
+ const unsigned long ROLE_ENTRY = 102;
+
+ /**
+ * A caption describing another object.
+ */
+ const unsigned long ROLE_CAPTION = 103;
+
+ /**
+ * An element containing content that assistive technology users may want to
+ * browse in a reading mode, rather than a focus/interactive/application mode.
+ * This role is used for role="document". For the container which holds the
+ * content of a web page, see ROLE_DOCUMENT.
+ */
+ const unsigned long ROLE_NON_NATIVE_DOCUMENT = 104;
+
+ /**
+ * Heading.
+ */
+ const unsigned long ROLE_HEADING = 105;
+
+ /**
+ * An object representing a page of document content. It is used in documents
+ * which are accessed by the user on a page by page basis.
+ */
+ const unsigned long ROLE_PAGE = 106;
+
+ /**
+ * A container of document content. An example of the use of this role is to
+ * represent an html:div.
+ */
+ const unsigned long ROLE_SECTION = 107;
+
+ /**
+ * An object which is redundant with another object in the accessible
+ * hierarchy. ATs typically ignore objects with this role.
+ */
+ const unsigned long ROLE_REDUNDANT_OBJECT = 108;
+
+ /**
+ * A container of form controls. An example of the use of this role is to
+ * represent an html:form.
+ */
+ const unsigned long ROLE_FORM = 109;
+
+ /**
+ * An object which is used to allow input of characters not found on a
+ * keyboard, such as the input of Chinese characters on a Western keyboard.
+ */
+ const unsigned long ROLE_IME = 110;
+
+ /**
+ * XXX: document this.
+ */
+ const unsigned long ROLE_APP_ROOT = 111;
+
+ /**
+ * Represents a menu item, which is an entry in a menu that a user can choose
+ * to display another menu.
+ */
+ const unsigned long ROLE_PARENT_MENUITEM = 112;
+
+ /**
+ * A calendar that allows the user to select a date.
+ */
+ const unsigned long ROLE_CALENDAR = 113;
+
+ /**
+ * A list of items that is shown by combobox.
+ */
+ const unsigned long ROLE_COMBOBOX_LIST = 114;
+
+ /**
+ * A item of list that is shown by combobox;
+ */
+ const unsigned long ROLE_COMBOBOX_OPTION = 115;
+
+ /**
+ * An image map -- has child links representing the areas
+ */
+ const unsigned long ROLE_IMAGE_MAP = 116;
+
+ /**
+ * An option in a listbox
+ */
+ const unsigned long ROLE_OPTION = 117;
+
+ /**
+ * A rich option in a listbox, it can have other widgets as children
+ */
+ const unsigned long ROLE_RICH_OPTION = 118;
+
+ /**
+ * A list of options
+ */
+ const unsigned long ROLE_LISTBOX = 119;
+
+ /**
+ * Represents a mathematical equation in the accessible name
+ */
+ const unsigned long ROLE_FLAT_EQUATION = 120;
+
+ /**
+ * Represents a cell within a grid. It is used for role="gridcell". Unlike
+ * ROLE_CELL, it allows the calculation of the accessible name from subtree.
+ * Also, see ROLE_TABLE.
+ */
+ const unsigned long ROLE_GRID_CELL = 121;
+
+ /**
+ * Represents an embedded object. It is used for html:object or html:embed.
+ */
+ const unsigned long ROLE_EMBEDDED_OBJECT = 122;
+
+ /**
+ * A note. Originally intended to be hidden until activated, but now also used
+ * for things like html 'aside'.
+ */
+ const unsigned long ROLE_NOTE = 123;
+
+ /**
+ * A figure. Used for things like HTML5 figure element.
+ */
+ const unsigned long ROLE_FIGURE = 124;
+
+ /**
+ * Represents a rich item with a check box.
+ */
+ const unsigned long ROLE_CHECK_RICH_OPTION = 125;
+
+ /**
+ * An HTML definition list <dl>
+ */
+ 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;
+
+ /**
+ * A keyboard or keypad key.
+ */
+ const unsigned long ROLE_KEY = 129;
+
+ /**
+ * A switch control widget.
+ */
+ const unsigned long ROLE_SWITCH = 130;
+
+ /**
+ * A block of MathML code (math).
+ */
+ const unsigned long ROLE_MATHML_MATH = 131;
+
+ /**
+ * A MathML identifier (mi in MathML).
+ */
+ const unsigned long ROLE_MATHML_IDENTIFIER = 132;
+
+ /**
+ * A MathML number (mn in MathML).
+ */
+ const unsigned long ROLE_MATHML_NUMBER = 133;
+
+ /**
+ * A MathML operator (mo in MathML).
+ */
+ const unsigned long ROLE_MATHML_OPERATOR = 134;
+
+ /**
+ * A MathML text (mtext in MathML).
+ */
+ const unsigned long ROLE_MATHML_TEXT = 135;
+
+ /**
+ * A MathML string literal (ms in MathML).
+ */
+ const unsigned long ROLE_MATHML_STRING_LITERAL = 136;
+
+ /**
+ * A MathML glyph (mglyph in MathML).
+ */
+ const unsigned long ROLE_MATHML_GLYPH = 137;
+
+ /**
+ * A MathML row (mrow in MathML).
+ */
+ const unsigned long ROLE_MATHML_ROW = 138;
+
+ /**
+ * A MathML fraction (mfrac in MathML).
+ */
+ const unsigned long ROLE_MATHML_FRACTION = 139;
+
+ /**
+ * A MathML square root (msqrt in MathML).
+ */
+ const unsigned long ROLE_MATHML_SQUARE_ROOT = 140;
+
+ /**
+ * A MathML root (mroot in MathML).
+ */
+ const unsigned long ROLE_MATHML_ROOT = 141;
+
+ /**
+ * A MathML enclosed element (menclose in MathML).
+ */
+ const unsigned long ROLE_MATHML_ENCLOSED = 143;
+
+ /**
+ * A MathML styling element (mstyle in MathML).
+ */
+ const unsigned long ROLE_MATHML_STYLE = 144;
+
+ /**
+ * A MathML subscript (msub in MathML).
+ */
+ const unsigned long ROLE_MATHML_SUB = 145;
+
+ /**
+ * A MathML superscript (msup in MathML).
+ */
+ const unsigned long ROLE_MATHML_SUP = 146;
+
+ /**
+ * A MathML subscript and superscript (msubsup in MathML).
+ */
+ const unsigned long ROLE_MATHML_SUB_SUP = 147;
+
+ /**
+ * A MathML underscript (munder in MathML).
+ */
+ const unsigned long ROLE_MATHML_UNDER = 148;
+
+ /**
+ * A MathML overscript (mover in MathML).
+ */
+ const unsigned long ROLE_MATHML_OVER = 149;
+
+ /**
+ * A MathML underscript and overscript (munderover in MathML).
+ */
+ const unsigned long ROLE_MATHML_UNDER_OVER = 150;
+
+ /**
+ * A MathML multiple subscript and superscript element (mmultiscripts in
+ * MathML).
+ */
+ const unsigned long ROLE_MATHML_MULTISCRIPTS = 151;
+
+ /**
+ * A MathML table (mtable in MathML).
+ */
+ const unsigned long ROLE_MATHML_TABLE = 152;
+
+ /**
+ * A MathML labelled table row (mlabeledtr in MathML).
+ */
+ const unsigned long ROLE_MATHML_LABELED_ROW = 153;
+
+ /**
+ * A MathML table row (mtr in MathML).
+ */
+ const unsigned long ROLE_MATHML_TABLE_ROW = 154;
+
+ /**
+ * A MathML table entry or cell (mtd in MathML).
+ */
+ const unsigned long ROLE_MATHML_CELL = 155;
+
+ /**
+ * A MathML interactive element (maction in MathML).
+ */
+ const unsigned long ROLE_MATHML_ACTION = 156;
+
+ /**
+ * A MathML error message (merror in MathML).
+ */
+ const unsigned long ROLE_MATHML_ERROR = 157;
+
+ /**
+ * A MathML stacked (rows of numbers) element (mstack in MathML).
+ */
+ const unsigned long ROLE_MATHML_STACK = 158;
+
+ /**
+ * A MathML long division element (mlongdiv in MathML).
+ */
+ const unsigned long ROLE_MATHML_LONG_DIVISION = 159;
+
+ /**
+ * A MathML stack group (msgroup in MathML).
+ */
+ const unsigned long ROLE_MATHML_STACK_GROUP = 160;
+
+ /**
+ * A MathML stack row (msrow in MathML).
+ */
+ const unsigned long ROLE_MATHML_STACK_ROW = 161;
+
+ /**
+ * MathML carries, borrows, or crossouts for a row (mscarries in MathML).
+ */
+ const unsigned long ROLE_MATHML_STACK_CARRIES = 162;
+
+ /**
+ * A MathML carry, borrow, or crossout for a column (mscarry in MathML).
+ */
+ const unsigned long ROLE_MATHML_STACK_CARRY = 163;
+
+ /**
+ * A MathML line in a stack (msline in MathML).
+ */
+ const unsigned long ROLE_MATHML_STACK_LINE = 164;
+
+ /**
+ * A group containing radio buttons
+ */
+ const unsigned long ROLE_RADIO_GROUP = 165;
+
+ /**
+ * A text container exposing brief amount of information. See related
+ * TEXT_CONTAINER role.
+ */
+ const unsigned long ROLE_TEXT = 166;
+
+ /**
+ * A text container exposing brief amount of information. See related
+ * DETAILS role.
+ */
+ const unsigned long ROLE_DETAILS = 167;
+
+ /**
+ * A text container exposing brief amount of information. See related
+ * SUMMARY role.
+ */
+ const unsigned long ROLE_SUMMARY = 168;
+
+ /**
+ * An ARIA landmark. See related NAVIGATION role.
+ */
+ const unsigned long ROLE_LANDMARK = 169;
+
+ /**
+ * A specific type of ARIA landmark. The ability to distinguish navigation
+ * landmarks from other types of landmarks is needed because macOS has a
+ * specific AXSubrole and AXRoleDescription for navigation landmarks.
+ */
+ const unsigned long ROLE_NAVIGATION = 170;
+
+ /**
+ * An object that contains the text of a footnote.
+ */
+ const unsigned long ROLE_FOOTNOTE = 171;
+
+ /**
+ * A complete or self-contained composition in a document, page, application,
+ * or site and that is, in principle, independently distributable or reusable,
+ * e.g. in syndication.
+ */
+ const unsigned long ROLE_ARTICLE = 172;
+
+ /**
+ * A perceivable section containing content that is relevant to a specific,
+ * author-specified purpose and sufficiently important that users will likely
+ * want to be able to navigate to the section easily and to have it listed in
+ * a summary of the page.
+ */
+ const unsigned long ROLE_REGION = 173;
+
+ /**
+ * Represents a control with a text input and a popup with a set of predefined
+ * choices. It is used for ARIA's combobox role. See also ROLE_COMBOBOX.
+ */
+ const unsigned long ROLE_EDITCOMBOBOX = 174;
+
+ /**
+ * A section of content that is quoted from another source.
+ */
+ const unsigned long ROLE_BLOCKQUOTE = 175;
+
+ /**
+ * Content previously deleted or proposed for deletion, e.g. in revision
+ * history or a content view providing suggestions from reviewers.
+ */
+ const unsigned long ROLE_CONTENT_DELETION = 176;
+
+ /**
+ * Content previously inserted or proposed for insertion, e.g. in revision
+ * history or a content view providing suggestions from reviewers.
+ */
+ const unsigned long ROLE_CONTENT_INSERTION = 177;
+
+ /**
+ * An html:form element with a label provided by WAI-ARIA.
+ * This may also be used if role="form" with a label should be exposed
+ * differently in the future.
+ */
+ const unsigned long ROLE_FORM_LANDMARK = 178;
+
+ /**
+ * The html:mark element.
+ * May also be used if WAI-ARIA gets an equivalent role.
+ */
+ const unsigned long ROLE_MARK = 179;
+
+ /**
+ * The WAI-ARIA suggestion role.
+ */
+ const unsigned long ROLE_SUGGESTION = 180;
+
+ /**
+ * The WAI-ARIA comment role.
+ */
+ const unsigned long ROLE_COMMENT = 181;
+
+ /**
+ * A snippet of program code. ATs might want to treat this differently.
+ */
+ const unsigned long ROLE_CODE = 182;
+
+ /**
+ * Represents control whose purpose is to allow a user to edit a time.
+ */
+ const unsigned long ROLE_TIME_EDITOR = 183;
+
+ /**
+ * Represents the marker associated with a list item. In unordered lists,
+ * this is a bullet, while in ordered lists this is a number.
+ */
+ const unsigned long ROLE_LISTITEM_MARKER = 184;
+
+ /**
+ * Essentially, this is a progress bar with a contextually defined
+ * scale, ex. the strength of a password entered in an input.
+ */
+ const unsigned long ROLE_METER = 185;
+
+ /**
+ * Represents phrasing content that is presented with vertical alignment
+ * lower than the baseline and a smaller font size. For example, the "2" in
+ * the chemical formula H2O.
+ */
+ const unsigned long ROLE_SUBSCRIPT = 186;
+
+ /**
+ * Represents phrasing content that is presented with vertical alignment
+ * higher than the baseline and a smaller font size. For example, the
+ * exponent in a math expression.
+ */
+ const unsigned long ROLE_SUPERSCRIPT = 187;
+
+};
diff --git a/accessible/interfaces/nsIAccessibleScrollingEvent.idl b/accessible/interfaces/nsIAccessibleScrollingEvent.idl
new file mode 100644
index 0000000000..229d745793
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleScrollingEvent.idl
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+/*
+ * An interface scroll events.
+ * Stores new scroll position and max scroll position.
+ */
+[scriptable, builtinclass, uuid(f75f0b32-5342-4d60-b1a5-b7bd6888eef5)]
+interface nsIAccessibleScrollingEvent : nsIAccessibleEvent
+{
+ /**
+ * New X scroll position within a scrollable container in device pixels.
+ */
+ readonly attribute unsigned long scrollX;
+
+ /**
+ * New Y scroll position within a scrollable container in device pixels.
+ */
+ readonly attribute unsigned long scrollY;
+
+ /**
+ * Max X scroll position within a scrollable container in device pixels.
+ */
+ readonly attribute unsigned long maxScrollX;
+
+ /**
+ * Max Y scroll position within a scrollable container in device pixels.
+ */
+ readonly attribute unsigned long maxScrollY;
+};
diff --git a/accessible/interfaces/nsIAccessibleSelectable.idl b/accessible/interfaces/nsIAccessibleSelectable.idl
new file mode 100644
index 0000000000..dff2677e20
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleSelectable.idl
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+interface nsIAccessible;
+interface nsIArray;
+
+/**
+ * An accessibility interface for selectable widgets.
+ */
+[scriptable, builtinclass, uuid(8efb03d4-1354-4875-94cf-261336057626)]
+interface nsIAccessibleSelectable : nsISupports
+{
+ /**
+ * Return an nsIArray of selected items within the widget.
+ */
+ readonly attribute nsIArray selectedItems;
+
+ /**
+ * Return the number of currently selected items.
+ */
+ readonly attribute unsigned long selectedItemCount;
+
+ /**
+ * Return a nth selected item within the widget.
+ */
+ nsIAccessible getSelectedItemAt(in unsigned long index);
+
+ /**
+ * Return true if the given item is selected.
+ */
+ boolean isItemSelected(in unsigned long index);
+
+ /**
+ * Adds the specified item to the widget's selection.
+ */
+ void addItemToSelection(in unsigned long index);
+
+ /**
+ * Removes the specified item from the widget's selection.
+ */
+ void removeItemFromSelection(in unsigned long index);
+
+ /**
+ * Select all items.
+ *
+ * @return false if the object does not accept multiple selection,
+ * otherwise true.
+ */
+ boolean selectAll();
+
+ /**
+ * Unselect all items.
+ */
+ void unselectAll();
+};
diff --git a/accessible/interfaces/nsIAccessibleStateChangeEvent.idl b/accessible/interfaces/nsIAccessibleStateChangeEvent.idl
new file mode 100644
index 0000000000..4d7505d5bb
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleStateChangeEvent.idl
@@ -0,0 +1,29 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+/**
+ * Fired when a state of an accessible changes.
+ */
+[scriptable, builtinclass, uuid(58b74954-1835-46ed-9ccd-c906490106f6)]
+interface nsIAccessibleStateChangeEvent : nsIAccessibleEvent
+{
+ /**
+ * Returns the state of accessible (see constants declared
+ * in nsIAccessibleStates).
+ */
+ readonly attribute unsigned long state;
+
+ /**
+ * Returns true if the state is extra state.
+ */
+ readonly attribute boolean isExtraState;
+
+ /**
+ * Returns true if the state is turned on.
+ */
+ readonly attribute boolean isEnabled;
+};
diff --git a/accessible/interfaces/nsIAccessibleStates.idl b/accessible/interfaces/nsIAccessibleStates.idl
new file mode 100644
index 0000000000..6d25e469c6
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleStates.idl
@@ -0,0 +1,76 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+[scriptable, uuid(f1e0fbb7-fde4-4519-9383-2bcbee428513)]
+interface nsIAccessibleStates : nsISupports
+{
+ /**
+ * MSAA State flags - used for bitfield. More than 1 allowed.
+ */
+ const unsigned long STATE_UNAVAILABLE = 0x00000001; // Disabled, maps to opposite of Java ENABLED, Gnome/ATK SENSITIVE?
+ const unsigned long STATE_SELECTED = 0x00000002;
+ const unsigned long STATE_FOCUSED = 0x00000004;
+ const unsigned long STATE_PRESSED = 0x00000008;
+ const unsigned long STATE_CHECKED = 0x00000010;
+ const unsigned long STATE_MIXED = 0x00000020; // 3-state checkbox or toolbar button
+ const unsigned long STATE_READONLY = 0x00000040; // Maps to opposite of Java/Gnome/ATK EDITABLE state
+ const unsigned long STATE_HOTTRACKED = 0x00000080;
+ const unsigned long STATE_DEFAULT = 0x00000100;
+ const unsigned long STATE_EXPANDED = 0x00000200;
+ const unsigned long STATE_COLLAPSED = 0x00000400;
+ const unsigned long STATE_BUSY = 0x00000800;
+ const unsigned long STATE_FLOATING = 0x00001000; // Children "owned" not "contained" by parent
+ const unsigned long STATE_MARQUEED = 0x00002000;
+ const unsigned long STATE_ANIMATED = 0x00004000;
+ const unsigned long STATE_INVISIBLE = 0x00008000; // Programatically hidden
+ const unsigned long STATE_OFFSCREEN = 0x00010000; // Scrolled off
+ const unsigned long STATE_SIZEABLE = 0x00020000;
+ const unsigned long STATE_MOVEABLE = 0x00040000;
+ const unsigned long STATE_SELFVOICING = 0x00080000;
+ const unsigned long STATE_FOCUSABLE = 0x00100000;
+ const unsigned long STATE_SELECTABLE = 0x00200000;
+ const unsigned long STATE_LINKED = 0x00400000;
+ const unsigned long STATE_TRAVERSED = 0x00800000;
+ const unsigned long STATE_MULTISELECTABLE = 0x01000000; // Supports multiple selection
+ const unsigned long STATE_EXTSELECTABLE = 0x02000000; // Supports extended selection
+ const unsigned long STATE_ALERT_LOW = 0x04000000; // This information is of low priority
+ const unsigned long STATE_ALERT_MEDIUM = 0x08000000; // This information is of medium priority
+ const unsigned long STATE_ALERT_HIGH = 0x10000000; // This information is of high priority
+ const unsigned long STATE_PROTECTED = 0x20000000; // Maps to Gnome's *Role* ATK_ROLE_PASSWD_TEXT, nothing for Java?
+ const unsigned long STATE_HASPOPUP = 0x40000000; // New in MSAA 2.0
+
+ // Mapping important states that we don't have to unused alert states on MSAA
+ // as per discussions with AT vendors. On ATK there will be legitimate states for
+ // STATE_REQUIRED AND STATE_INVALID
+ const unsigned long STATE_REQUIRED = STATE_ALERT_LOW;
+ const unsigned long STATE_IMPORTANT = STATE_ALERT_MEDIUM; // Not currently used
+ const unsigned long STATE_INVALID = STATE_ALERT_HIGH;
+ const unsigned long STATE_CHECKABLE = STATE_MARQUEED;
+
+/**
+ * Extended state flags (for now non-MSAA, for Java and Gnome/ATK support)
+ * "Extended state flags" has separate value space from "MSAA State flags".
+ */
+ const unsigned long EXT_STATE_SUPPORTS_AUTOCOMPLETION = 0x00000001; // For editable areas that have any kind of autocompletion
+ const unsigned long EXT_STATE_DEFUNCT = 0x00000002; // Object no longer exists
+ const unsigned long EXT_STATE_SELECTABLE_TEXT = 0x00000004; // For text which is selectable, object must implement nsIAccessibleText
+ const unsigned long EXT_STATE_EDITABLE = 0x00000008; // Implements nsIAccessibleEditableText
+ const unsigned long EXT_STATE_ACTIVE = 0x00000010; // This window is currently the active window
+ const unsigned long EXT_STATE_MODAL = 0x00000020; // Must do something with control before leaving it
+ const unsigned long EXT_STATE_MULTI_LINE = 0x00000040; // Edit control that can take multiple lines
+ const unsigned long EXT_STATE_HORIZONTAL = 0x00000080; // Uses horizontal layout
+ const unsigned long EXT_STATE_OPAQUE = 0x00000100; // Indicates this object paints every pixel within its rectangular region.
+ const unsigned long EXT_STATE_SINGLE_LINE = 0x00000200; // This text object can only contain 1 line of text
+ const unsigned long EXT_STATE_TRANSIENT = 0x00000400; //
+ const unsigned long EXT_STATE_VERTICAL = 0x00000800; // Especially used for sliders and scrollbars
+ const unsigned long EXT_STATE_STALE = 0x00001000; // Object not dead, but not up-to-date either
+ const unsigned long EXT_STATE_ENABLED = 0x00002000; // A widget that is not unavailable
+ const unsigned long EXT_STATE_SENSITIVE = 0x00004000; // Same as ENABLED for now
+ const unsigned long EXT_STATE_EXPANDABLE = 0x00008000; // If COLLAPSED or EXPANDED
+ const unsigned long EXT_STATE_PINNED = 0x00010000; // Indicates object is pinned.
+ const unsigned long EXT_STATE_CURRENT = 0x00020000; // Indicates object is the current item in its container
+};
diff --git a/accessible/interfaces/nsIAccessibleTable.idl b/accessible/interfaces/nsIAccessibleTable.idl
new file mode 100644
index 0000000000..ab4b60a5cc
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleTable.idl
@@ -0,0 +1,234 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * 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/. */
+
+#include "nsISupports.idl"
+
+interface nsIAccessible;
+interface nsIArray;
+
+[scriptable, builtinclass, uuid(cb0bf7b9-117e-40e2-9e46-189c3d43ce4a)]
+interface nsIAccessibleTable : nsISupports
+{
+ /**
+ * Return the caption accessible for the table. For example, html:caption
+ * element of html:table element.
+ */
+ readonly attribute nsIAccessible caption;
+
+ /**
+ * Return summary description for the table. For example, @summary attribute
+ * on html:table element.
+ */
+ readonly attribute AString summary;
+
+ /**
+ * Return columns count in the table.
+ */
+ readonly attribute long columnCount;
+
+ /**
+ * Return rows count in the table.
+ */
+ readonly attribute long rowCount;
+
+ /**
+ * Return the accessible object at the specified row and column in the table.
+ * If both row and column index are valid then the corresponding accessible
+ * object is returned that represents the requested cell regardless of whether
+ * the cell is currently visible (on the screen).
+ *
+ * @param rowIndex [in] the row index to retrieve the cell at
+ * @param columnIndex [in] the column index to retrieve the cell at
+ */
+ nsIAccessible getCellAt(in long rowIndex, in long columnIndex);
+
+ /**
+ * Translate the given row and column indices into the corresponding cell
+ * index.
+ *
+ * @param rowIndex [in] the row index to return cell index at
+ * @param columnIndex [in] the column index to return cell index at
+ */
+ long getCellIndexAt(in long rowIndex, in long columnIndex);
+
+ /**
+ * Translate the given cell index into the corresponding column index.
+ *
+ * @param cellIndex [in] index of the table cell to return column index for
+ */
+ long getColumnIndexAt(in long cellIndex);
+
+ /**
+ * Translate the given cell index into the corresponding row index.
+ *
+ * @param cellIndex [in] index of the table cell to return row index for
+ */
+ long getRowIndexAt(in long cellIndex);
+
+ /**
+ * Translate the given cell index into the corresponding row and column
+ * indices.
+ *
+ * @param cellIndex [in] cell index to return row and column indices for
+ * @param rowIndex [out] row index at the given cell index
+ * @param columnIndex [out] column index at the given cell index
+ */
+ void getRowAndColumnIndicesAt(in long cellIndex,
+ out long rowIndex, out long columnIndex);
+
+ /**
+ * Return the number of columns occupied by the accessible cell at
+ * the specified row and column in the table. The result differs from 1 if
+ * the specified cell spans multiple columns.
+ *
+ * @param row [in] row index of the cell to return the column extent for
+ * @param column [in] column index of the cell to return the column extent
+ * for
+ */
+ long getColumnExtentAt(in long row, in long column);
+
+ /**
+ * Return the number of rows occupied by the accessible cell at the specified
+ * row and column in the table. The result differs from 1 if the specified
+ * cell spans multiple rows.
+ *
+ * @param row [in] row index of the cell to return the column extent for
+ * @param column [in] column index of the cell to return the column extent
+ * for
+ */
+ long getRowExtentAt(in long row, in long column);
+
+ /**
+ * Return the description text of the specified column in the table.
+ *
+ * @param columnIndex [in] the column index to retrieve description for
+ */
+ AString getColumnDescription(in long columnIndex);
+
+ /**
+ * Return the description text of the specified row in the table.
+ *
+ * @param rowIndex [in] the row index to retrieve description for
+ */
+ AString getRowDescription(in long rowIndex);
+
+ /**
+ * Return a boolean value indicating whether the specified column is
+ * selected, i.e. all cells within the column are selected.
+ *
+ * @param columnIndex [in] the column index to determine if it's selected
+ */
+ boolean isColumnSelected(in long columnIndex);
+
+ /**
+ * Return a boolean value indicating whether the specified row is selected,
+ * i.e. all cells within the row are selected.
+ *
+ * @param rowIndex [in] the row index to determine whether it's selected
+ */
+ boolean isRowSelected(in long rowIndex);
+
+ /**
+ * Return a boolean value indicating whether the specified cell is selected.
+ *
+ * @param rowIndex [in] the row index of the cell
+ * @param columnIndex [in] the column index of the cell
+ */
+ boolean isCellSelected(in long rowIndex, in long columnIndex);
+
+ /**
+ * Return the total number of selected cells.
+ */
+ readonly attribute unsigned long selectedCellCount;
+
+ /**
+ * Return the total number of selected columns.
+ */
+ readonly attribute unsigned long selectedColumnCount;
+
+ /**
+ * Return the total number of selected rows.
+ */
+ readonly attribute unsigned long selectedRowCount;
+
+ /**
+ * Return an array of selected cells.
+ */
+ readonly attribute nsIArray selectedCells;
+
+ /**
+ * Return an array of cell indices currently selected.
+ *
+ * @return array of indexes of selected cells
+ */
+ Array<uint32_t> getSelectedCellIndices();
+
+ /**
+ * Return an array of column indices currently selected.
+ *
+ * @return array of indices of selected columns
+ */
+ Array<uint32_t> getSelectedColumnIndices();
+
+ /**
+ * Return an array of row indices currently selected.
+ *
+ * @return array of indices of selected rows
+ */
+ Array<uint32_t> getSelectedRowIndices();
+
+ /**
+ * Use heuristics to determine if table is most likely used for layout.
+ */
+ boolean isProbablyForLayout();
+};
+
+
+[scriptable, builtinclass, uuid(654e296d-fae6-452b-987d-746b20b9514b)]
+interface nsIAccessibleTableCell : nsISupports
+{
+ /**
+ * Return host table accessible.
+ */
+ readonly attribute nsIAccessibleTable table;
+
+ /**
+ * Return column index of this cell.
+ */
+ readonly attribute long columnIndex;
+
+ /**
+ * Return row index of this cell.
+ */
+ readonly attribute long rowIndex;
+
+ /**
+ * Return the number of columns occupied by this cell. The result differs
+ * from 1 if the specified cell spans multiple columns.
+ */
+ readonly attribute long columnExtent;
+
+ /**
+ * Return the number of rows occupied by this accessible cell. The result
+ * differs from 1 if the specified cell spans multiple rows.
+ */
+ readonly attribute long rowExtent;
+
+ /**
+ * Return an array of column header cells for this cell.
+ */
+ readonly attribute nsIArray columnHeaderCells;
+
+ /**
+ * Return an array of row header cells for this cell.
+ */
+ readonly attribute nsIArray rowHeaderCells;
+
+ /**
+ * Return a boolean value indicating whether this cell is selected.
+ */
+ boolean isSelected();
+};
diff --git a/accessible/interfaces/nsIAccessibleTableChangeEvent.idl b/accessible/interfaces/nsIAccessibleTableChangeEvent.idl
new file mode 100644
index 0000000000..f8804e6dae
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleTableChangeEvent.idl
@@ -0,0 +1,20 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+[scriptable, builtinclass, uuid(9fb3a8a4-d254-43d3-80a5-20e171d52b21)]
+interface nsIAccessibleTableChangeEvent: nsIAccessibleEvent
+{
+ /**
+ * Return the row or column index.
+ */
+ readonly attribute long rowOrColIndex;
+
+ /**
+ * Return the number of rows or cols
+ */
+ readonly attribute long RowsOrColsCount;
+};
diff --git a/accessible/interfaces/nsIAccessibleText.idl b/accessible/interfaces/nsIAccessibleText.idl
new file mode 100644
index 0000000000..d2c1ef19f7
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleText.idl
@@ -0,0 +1,242 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * 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/. */
+
+#include "nsISupports.idl"
+
+typedef long AccessibleTextBoundary;
+
+interface nsIAccessible;
+interface nsIArray;
+interface nsIPersistentProperties;
+interface nsIAccessibleTextRange;
+
+[scriptable, builtinclass, uuid(a4cc7576-45bb-44c5-b347-d9cb3ca4de9f)]
+interface nsIAccessibleText : nsISupports
+{
+ // In parameters for character offsets:
+ // -1 will be treated as the equal to the end of the text
+ // -2 will be treated as the caret position
+ const int32_t TEXT_OFFSET_END_OF_TEXT = -1;
+ const int32_t TEXT_OFFSET_CARET = -2;
+
+ const AccessibleTextBoundary BOUNDARY_CHAR = 0;
+ const AccessibleTextBoundary BOUNDARY_WORD_START = 1;
+ const AccessibleTextBoundary BOUNDARY_WORD_END = 2;
+ const AccessibleTextBoundary BOUNDARY_SENTENCE_START = 3; // don't use, deprecated
+ const AccessibleTextBoundary BOUNDARY_SENTENCE_END = 4; // don't use, deprecated
+ const AccessibleTextBoundary BOUNDARY_LINE_START = 5;
+ const AccessibleTextBoundary BOUNDARY_LINE_END = 6;
+ const AccessibleTextBoundary BOUNDARY_PARAGRAPH = 7;
+
+ /**
+ * The current current caret offset.
+ * If set < 0 then caret will be placed at the end of the text
+ */
+ attribute long caretOffset;
+
+ void getCaretRect(out long x, out long y, out long width, out long height);
+
+ readonly attribute long characterCount;
+ readonly attribute long selectionCount;
+
+ /**
+ * String methods may need to return multibyte-encoded strings,
+ * since some locales can't be encoded using 16-bit chars.
+ * So the methods below might return UTF-16 strings, or they could
+ * return "string" values which are UTF-8.
+ */
+ AString getText (in long startOffset, in long endOffset);
+
+ AString getTextAfterOffset (in long offset,
+ in AccessibleTextBoundary boundaryType,
+ out long startOffset,
+ out long endOffset);
+
+ AString getTextAtOffset (in long offset,
+ in AccessibleTextBoundary boundaryType,
+ out long startOffset,
+ out long endOffset);
+
+ AString getTextBeforeOffset (in long offset,
+ in AccessibleTextBoundary boundaryType,
+ out long startOffset,
+ out long endOffset);
+
+ /**
+ * It would be better to return an unsigned long here,
+ * to allow unicode chars > 16 bits
+ */
+ wchar getCharacterAtOffset (in long offset);
+
+ /**
+ * Get the accessible start/end offsets around the given offset,
+ * return the text attributes for this range of text.
+ *
+ * @param includeDefAttrs [in] points whether text attributes applied to
+ * the entire accessible should be included or not.
+ * @param offset [in] text offset
+ * @param rangeStartOffset [out] start offset of the range of text
+ * @param rangeEndOffset [out] end offset of the range of text
+ */
+ nsIPersistentProperties getTextAttributes(in boolean includeDefAttrs,
+ in long offset,
+ out long rangeStartOffset,
+ out long rangeEndOffset);
+
+ /**
+ * Return the text attributes that apply to the entire accessible.
+ */
+ readonly attribute nsIPersistentProperties defaultTextAttributes;
+
+ /**
+ * Returns the bounding box of the specified position.
+ *
+ * The virtual character after the last character of the represented text,
+ * i.e. the one at position length is a special case. It represents the
+ * current input position and will therefore typically be queried by AT more
+ * often than other positions. Because it does not represent an existing
+ * character its bounding box is defined in relation to preceding characters.
+ * It should be roughly equivalent to the bounding box of some character when
+ * inserted at the end of the text. Its height typically being the maximal
+ * height of all the characters in the text or the height of the preceding
+ * character, its width being at least one pixel so that the bounding box is
+ * not degenerate.
+ *
+ * @param offset - Index of the character for which to return its bounding
+ * box. The valid range is 0..length.
+ * @param x - X coordinate of the bounding box of the referenced character.
+ * @param y - Y coordinate of the bounding box of the referenced character.
+ * @param width - Width of the bounding box of the referenced character.
+ * @param height - Height of the bounding box of the referenced character.
+ * @param coordType - Specifies if the coordinates are relative to the screen
+ * or to the parent window (see constants declared in
+ * nsIAccessibleCoordinateType).
+ */
+ void getCharacterExtents (in long offset,
+ out long x,
+ out long y,
+ out long width,
+ out long height,
+ in unsigned long coordType);
+
+ void getRangeExtents (in long startOffset,
+ in long endOffset,
+ out long x,
+ out long y,
+ out long width,
+ out long height,
+ in unsigned long coordType);
+
+ /**
+ * Get the text offset at the given point, or return -1
+ * if no character exists at that point
+ *
+ * @param x - The position's x value for which to look up the index of the
+ * character that is rendered on to the display at that point.
+ * @param y - The position's y value for which to look up the index of the
+ * character that is rendered on to the display at that point.
+ * @param coordType - Screen coordinates or window coordinates (see constants
+ * declared in nsIAccessibleCoordinateType).
+ * @return offset - Index of the character under the given point or -1 if
+ * the point is invalid or there is no character under
+ * the point.
+ */
+ long getOffsetAtPoint (in long x, in long y,
+ in unsigned long coordType);
+
+ void getSelectionBounds (in long selectionNum,
+ out long startOffset,
+ out long endOffset);
+
+ /**
+ * Set the bounds for the given selection range.
+ * A reverse range where the start offset is larger than the end offset is
+ * acceptable. The caretOffset will be set to the endOffset argument.
+ */
+ void setSelectionBounds (in long selectionNum,
+ in long startOffset,
+ in long endOffset);
+
+ void addSelection (in long startOffset, in long endOffset);
+
+ void removeSelection (in long selectionNum);
+
+
+ /**
+ * Makes a specific part of string visible on screen.
+ *
+ * @param startIndex 0-based character offset
+ * @param endIndex 0-based character offset - the offset of the
+ * character just past the last character of the
+ * string
+ * @param scrollType defines how to scroll (see nsIAccessibleScrollType for
+ * available constants)
+ */
+ void scrollSubstringTo(in long startIndex, in long endIndex,
+ in unsigned long scrollType);
+
+ /**
+ * Moves the top left of a substring to a specified location.
+ *
+ * @param startIndex 0-based character offset
+ * @param endIndex 0-based character offset - the offset of the
+ * character just past the last character of
+ * the string
+ * @param coordinateType specifies the coordinates origin (for available
+ * constants refer to nsIAccessibleCoordinateType)
+ * @param x defines the x coordinate
+ * @param y defines the y coordinate
+ */
+ void scrollSubstringToPoint(in long startIndex, in long endIndex,
+ in unsigned long coordinateType,
+ in long x, in long y);
+
+ /**
+ * Return a range that encloses this text control or otherwise the document
+ * this text accessible belongs to.
+ */
+ readonly attribute nsIAccessibleTextRange enclosingRange;
+
+ /**
+ * Return an array of disjoint ranges for selected text within the text control
+ * or otherwise the document this accessible belongs to.
+ */
+ readonly attribute nsIArray selectionRanges;
+
+ /**
+ * Return an array of disjoint ranges of visible text within the text control
+ * or otherwise the document this accessible belongs to.
+ */
+ readonly attribute nsIArray visibleRanges;
+
+ /**
+ * Return a range containing the given accessible.
+ */
+ nsIAccessibleTextRange getRangeByChild(in nsIAccessible child);
+
+ /**
+ * Return a range containing an accessible at the given point.
+ */
+ nsIAccessibleTextRange getRangeAtPoint(in long x, in long y);
+};
+
+/*
+ Assumptions:
+
+ Using wstring (UCS2) instead of string encoded in UTF-8.
+ Multibyte encodings (or at least potentially multi-byte
+ encodings) would be preferred for the reasons cited above.
+
+ The following methods will throw an exception on failure
+ (since not every text component will allow every operation):
+ setSelectionBounds, addSelection, removeSelection, setCaretOffset.
+
+ we assume that all text components support the idea of
+ a caret offset, whether visible or "virtual". If this
+ isn't the case, caretOffset can be made readonly and
+ a setCaretOffset method provided which throws an exception
+ on failure (as with *selection methods above).
+*/
diff --git a/accessible/interfaces/nsIAccessibleTextChangeEvent.idl b/accessible/interfaces/nsIAccessibleTextChangeEvent.idl
new file mode 100644
index 0000000000..4aaadb8671
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleTextChangeEvent.idl
@@ -0,0 +1,33 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+/**
+ * Fired when an accessible's text changes.
+ */
+[scriptable, builtinclass, uuid(1fcc0dfa-93e6-48f4-bbd4-f80eb1d9f2e6)]
+interface nsIAccessibleTextChangeEvent : nsIAccessibleEvent
+{
+ /**
+ * Returns offset of changed text in accessible.
+ */
+ readonly attribute long start;
+
+ /**
+ * Returns length of changed text.
+ */
+ readonly attribute unsigned long length;
+
+ /**
+ * Returns true if text was inserted, otherwise false.
+ */
+ readonly attribute boolean isInserted;
+
+ /**
+ * The inserted or removed text
+ */
+ readonly attribute AString modifiedText;
+};
diff --git a/accessible/interfaces/nsIAccessibleTextLeafRange.idl b/accessible/interfaces/nsIAccessibleTextLeafRange.idl
new file mode 100644
index 0000000000..00b9cc4cad
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleTextLeafRange.idl
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+#include "nsIArray.idl"
+#include "nsIAccessibleText.idl"
+
+interface nsIAccessible;
+
+[scriptable, builtinclass, uuid(9181e777-8954-4f8f-8cee-32f9771e40d7)]
+interface nsIAccessibleTextLeafPoint : nsISupports
+{
+ attribute nsIAccessible accessible;
+
+ attribute long offset;
+
+ /**
+ * Find a boundary (word start, line start, etc.) in a specific direction.
+ * If no boundary is found, the start/end of the document is returned
+ * (depending on the direction).
+ *
+ * @param aBoundaryType [in] the boundary type to search for
+ * @param aDirection [in] search next or previous
+ * @param aFlags [in] optional flags for search
+ */
+ nsIAccessibleTextLeafPoint findBoundary(in AccessibleTextBoundary aBoundaryType,
+ in unsigned long aDirection,
+ in unsigned long aFlags);
+
+ const long DIRECTION_NEXT = 0x0;
+ const long DIRECTION_PREVIOUS = 0x1;
+
+ // Keep these flags up to date with the ones in TextLeafPoint.
+ const unsigned long BOUNDARY_FLAG_DEFAULT = 0x0;
+ // If current point is a matching boundary, return unchanged.
+ const unsigned long BOUNDARY_FLAG_INCLUDE_ORIGIN = 0x1;
+ // Do not search past end of editables.
+ const unsigned long BOUNDARY_FLAG_STOP_IN_EDITABLE = 0x2;
+ // Skip over list items in searches and don't consider them line or paragraph starts.
+ const unsigned long BOUNDARY_FLAG_SKIP_LIST_ITEM_MARKER = 0x4;
+};
diff --git a/accessible/interfaces/nsIAccessibleTextRange.idl b/accessible/interfaces/nsIAccessibleTextRange.idl
new file mode 100644
index 0000000000..2972eb5268
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleTextRange.idl
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+interface nsIAccessible;
+interface nsIAccessibleText;
+interface nsIArray;
+interface nsIVariant;
+
+/**
+ * A range representing a piece of text in the document.
+ */
+[scriptable, builtinclass, uuid(c4515623-55f9-4543-a3d5-c1e9afa588f4)]
+interface nsIAccessibleTextRange : nsISupports
+{
+ readonly attribute nsIAccessibleText startContainer;
+ readonly attribute long startOffset;
+ readonly attribute nsIAccessibleText endContainer;
+ readonly attribute long endOffset;
+
+ /**
+ * Return an accessible containing the whole range
+ */
+ readonly attribute nsIAccessible container;
+
+ /**
+ * Return embedded children within the range.
+ */
+ readonly attribute nsIArray embeddedChildren;
+
+ /**
+ * Return true if this range has the same end points of the given range.
+ */
+ boolean compare(in nsIAccessibleTextRange aOtherRange);
+
+ /**
+ * The two endpoints of the range (starting and ending).
+ */
+ const unsigned long EndPoint_Start = 1;
+ const unsigned long EndPoint_End = 2;
+
+ /**
+ * Compare this and given ranges end points.
+ *
+ * @return -1/0/1 if this range end point is before/equal/after the given
+ * range end point.
+ */
+ long compareEndPoints(in unsigned long aEndPoint,
+ in nsIAccessibleTextRange aOtherRange,
+ in unsigned long aOtherRangeEndPoint);
+
+ /**
+ * Return text within the range.
+ */
+ readonly attribute AString text;
+
+ /**
+ * Crops the range by the given accessible element.
+ */
+ boolean crop(in nsIAccessible aContainer);
+
+ const unsigned long AlignToTop = 0;
+ const unsigned long AlignToBottom = 1;
+
+ /**
+ * Scroll the range into view.
+ */
+ void scrollIntoView(in unsigned long aHow);
+};
diff --git a/accessible/interfaces/nsIAccessibleTextSelectionChangeEvent.idl b/accessible/interfaces/nsIAccessibleTextSelectionChangeEvent.idl
new file mode 100644
index 0000000000..6ca09192ef
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleTextSelectionChangeEvent.idl
@@ -0,0 +1,21 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+interface nsIArray;
+
+/**
+ * Fired when the caret changes position in text.
+ */
+[scriptable, builtinclass, uuid(011f98e2-2beb-4ec3-97a5-f154f624e112)]
+interface nsIAccessibleTextSelectionChangeEvent: nsIAccessibleEvent
+{
+ /**
+ * Return an array of disjoint ranges for selected text within the
+ * source of this event.
+ */
+ readonly attribute nsIArray selectionRanges;
+};
diff --git a/accessible/interfaces/nsIAccessibleTypes.idl b/accessible/interfaces/nsIAccessibleTypes.idl
new file mode 100644
index 0000000000..913636d2b0
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleTypes.idl
@@ -0,0 +1,80 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsISupports.idl"
+
+/**
+ * These constants control the scrolling of an object or substring into a
+ * window. Note, keep them synchronized with IA2ScrollType.
+ */
+[scriptable, builtinclass, uuid(05cd38b1-94b3-4cdf-8371-3935a9611405)]
+interface nsIAccessibleScrollType : nsISupports
+{
+ /**
+ * Scroll the top left of the object or substring to the top left of the
+ * window (or as close as possible).
+ */
+ const unsigned long SCROLL_TYPE_TOP_LEFT =0x00;
+
+ /**
+ * Scroll the bottom right of the object or substring to the bottom right of
+ * the window (or as close as possible).
+ */
+ const unsigned long SCROLL_TYPE_BOTTOM_RIGHT = 0x01;
+
+ /**
+ * Scroll the top edge of the object or substring to the top edge of the
+ * window (or as close as possible).
+ */
+ const unsigned long SCROLL_TYPE_TOP_EDGE = 0x02;
+
+ /**
+ * Scroll the bottom edge of the object or substring to the bottom edge of
+ * the window (or as close as possible).
+ */
+ const unsigned long SCROLL_TYPE_BOTTOM_EDGE = 0x03;
+
+ /**
+ * Scroll the left edge of the object or substring to the left edge of the
+ * window (or as close as possible).
+ */
+ const unsigned long SCROLL_TYPE_LEFT_EDGE =0x04;
+
+ /**
+ * Scroll the right edge of the object or substring to the right edge of the
+ * window (or as close as possible).
+ */
+ const unsigned long SCROLL_TYPE_RIGHT_EDGE = 0x05;
+
+ /**
+ * Scroll an object the minimum amount necessary in order for the entire
+ * frame to be visible (if possible).
+ */
+ const unsigned long SCROLL_TYPE_ANYWHERE = 0x06;
+};
+
+
+/**
+ * These constants define which coordinate system a point is located in.
+ */
+[scriptable, builtinclass, uuid(c9fbdf10-619e-436f-bf4b-8566686f1577)]
+interface nsIAccessibleCoordinateType : nsISupports
+{
+ /**
+ * The coordinates are relative to the screen.
+ */
+ const unsigned long COORDTYPE_SCREEN_RELATIVE = 0x00;
+
+ /**
+ * The coordinates are relative to the window.
+ */
+ const unsigned long COORDTYPE_WINDOW_RELATIVE = 0x01;
+
+ /**
+ * The coordinates are relative to the upper left corner of the bounding box
+ * of the immediate parent.
+ */
+ const unsigned long COORDTYPE_PARENT_RELATIVE = 0x02;
+};
diff --git a/accessible/interfaces/nsIAccessibleValue.idl b/accessible/interfaces/nsIAccessibleValue.idl
new file mode 100644
index 0000000000..886fcb8fed
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleValue.idl
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * 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/. */
+
+#include "nsISupports.idl"
+
+[scriptable, builtinclass, uuid(42a1e1dc-58cf-419d-bff0-ed3314c70016)]
+interface nsIAccessibleValue : nsISupports
+{
+ readonly attribute double maximumValue;
+ readonly attribute double minimumValue;
+ attribute double currentValue;
+ readonly attribute double minimumIncrement;
+};
+
+/*
+ Assumptions:
+
+ The attribute currentValue will throw an exception
+ if it cannot be set i.e. if the value is not a
+ member of the interval.
+ This may not be the 'desired' behaviour given gObject
+ equivalent. Thus it could be changed to be:
+
+ readonly attribute double currentValue;
+ boolean setCurrentValue (double long value);
+
+ GValue can represent many basic types.
+ Since this interface is designed to represent
+ an interval and a member of double should
+ cover the cases of char int and float.
+
+*/
diff --git a/accessible/interfaces/nsIAccessibleVirtualCursorChangeEvent.idl b/accessible/interfaces/nsIAccessibleVirtualCursorChangeEvent.idl
new file mode 100644
index 0000000000..8023f85a91
--- /dev/null
+++ b/accessible/interfaces/nsIAccessibleVirtualCursorChangeEvent.idl
@@ -0,0 +1,54 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+/* 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/. */
+
+#include "nsIAccessibleEvent.idl"
+
+/*
+ * An interface for virtual cursor changed events.
+ * Passes previous cursor position and text offsets.
+ */
+[scriptable, builtinclass, uuid(a58693b1-009e-4cc9-ae93-9c7d8f85cfdf)]
+interface nsIAccessibleVirtualCursorChangeEvent : nsIAccessibleEvent
+{
+ /**
+ * Previous object pointed at by virtual cursor, null if none.
+ */
+ readonly attribute nsIAccessible oldAccessible;
+
+ /**
+ * Previous start offset of pivot, otherwise -1.
+ */
+ readonly attribute long oldStartOffset;
+
+ /**
+ * Previous end offset of pivot, otherwise -1.
+ */
+ readonly attribute long oldEndOffset;
+
+ /**
+ * New object pointed at by virtual cursor, null if none.
+ */
+ readonly attribute nsIAccessible newAccessible;
+
+ /**
+ * New start offset of pivot, otherwise -1.
+ */
+ readonly attribute long newStartOffset;
+
+ /**
+ * New end offset of pivot, otherwise -1.
+ */
+ readonly attribute long newEndOffset;
+
+ /**
+ * Reason for virtual cursor move.
+ */
+ readonly attribute short reason;
+
+ /**
+ * Text boundary type for movement, NO_BOUNDARY if none.
+ */
+ readonly attribute short boundaryType;
+};