summaryrefslogtreecommitdiffstats
path: root/content/common
diff options
context:
space:
mode:
authordmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-12 22:55:15 +0000
committerdmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-12 22:55:15 +0000
commit0a935a0d077703a4c2d91a56d8764585fdb8674a (patch)
tree12fb697231943352f4dd6a0f4c931978c37d72bb /content/common
parent00737f8f5c56fc51352f4aabb89292c7e30637dd (diff)
downloadchromium_src-0a935a0d077703a4c2d91a56d8764585fdb8674a.zip
chromium_src-0a935a0d077703a4c2d91a56d8764585fdb8674a.tar.gz
chromium_src-0a935a0d077703a4c2d91a56d8764585fdb8674a.tar.bz2
Refactor all accessibility code out of webkit/glue.
Moves the data definitions into content/common and the serialization code into content/renderer. There are no code changes here, this is just a refactoring. BUG=132129 TEST=none Review URL: https://chromiumcodereview.appspot.com/10544099 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@141768 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/common')
-rw-r--r--content/common/accessibility_messages.h18
-rw-r--r--content/common/accessibility_node_data.cc411
-rw-r--r--content/common/accessibility_node_data.h284
3 files changed, 704 insertions, 9 deletions
diff --git a/content/common/accessibility_messages.h b/content/common/accessibility_messages.h
index bf9ce4a..912eda9 100644
--- a/content/common/accessibility_messages.h
+++ b/content/common/accessibility_messages.h
@@ -6,6 +6,7 @@
// Multiply-included message file, hence no include guard.
#include "base/basictypes.h"
+#include "content/common/accessibility_node_data.h"
#include "content/common/content_export.h"
#include "content/common/view_message_enums.h"
#include "content/public/common/common_param_traits.h"
@@ -15,7 +16,6 @@
#include "ipc/param_traits_macros.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebPoint.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h"
-#include "webkit/glue/webaccessibility.h"
#undef IPC_MESSAGE_EXPORT
#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
@@ -97,14 +97,14 @@ enum AccessibilityNotification {
IPC_ENUM_TRAITS(AccessibilityNotification)
-IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::BoolAttribute)
-IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::FloatAttribute)
-IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::IntAttribute)
-IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::Role)
-IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::State)
-IPC_ENUM_TRAITS(webkit_glue::WebAccessibility::StringAttribute)
+IPC_ENUM_TRAITS(content::AccessibilityNodeData::BoolAttribute)
+IPC_ENUM_TRAITS(content::AccessibilityNodeData::FloatAttribute)
+IPC_ENUM_TRAITS(content::AccessibilityNodeData::IntAttribute)
+IPC_ENUM_TRAITS(content::AccessibilityNodeData::Role)
+IPC_ENUM_TRAITS(content::AccessibilityNodeData::State)
+IPC_ENUM_TRAITS(content::AccessibilityNodeData::StringAttribute)
-IPC_STRUCT_TRAITS_BEGIN(webkit_glue::WebAccessibility)
+IPC_STRUCT_TRAITS_BEGIN(content::AccessibilityNodeData)
IPC_STRUCT_TRAITS_MEMBER(id)
IPC_STRUCT_TRAITS_MEMBER(name)
IPC_STRUCT_TRAITS_MEMBER(value)
@@ -131,7 +131,7 @@ IPC_STRUCT_BEGIN(AccessibilityHostMsg_NotificationParams)
IPC_STRUCT_MEMBER(int, id)
// The accessibility node tree.
- IPC_STRUCT_MEMBER(webkit_glue::WebAccessibility, acc_tree)
+ IPC_STRUCT_MEMBER(content::AccessibilityNodeData, acc_tree)
// Whether children are included in this tree, otherwise it's just an
// update to this one node and existing children are left in place.
diff --git a/content/common/accessibility_node_data.cc b/content/common/accessibility_node_data.cc
new file mode 100644
index 0000000..dc55432
--- /dev/null
+++ b/content/common/accessibility_node_data.cc
@@ -0,0 +1,411 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/accessibility_node_data.h"
+
+#include <set>
+
+#include "base/string_number_conversions.h"
+#include "base/string_util.h"
+#include "base/utf_string_conversions.h"
+
+using base::DoubleToString;
+using base::IntToString;
+
+namespace {
+
+#ifndef NDEBUG
+std::string IntVectorToString(const std::vector<int>& items) {
+ std::string str;
+ for (size_t i = 0; i < items.size(); ++i) {
+ if (i > 0)
+ str += ",";
+ str += IntToString(items[i]);
+ }
+ return str;
+}
+#endif
+
+} // Anonymous namespace
+
+namespace content {
+
+AccessibilityNodeData::AccessibilityNodeData()
+ : id(-1),
+ role(ROLE_UNKNOWN),
+ state(-1) {
+}
+
+AccessibilityNodeData::~AccessibilityNodeData() {
+}
+
+#ifndef NDEBUG
+std::string AccessibilityNodeData::DebugString(bool recursive) const {
+ std::string result;
+ static int indent = 0;
+ result += "\n";
+ for (int i = 0; i < indent; ++i)
+ result += " ";
+
+ result += "id=" + IntToString(id);
+
+ switch (role) {
+ case ROLE_ALERT: result += " ALERT"; break;
+ case ROLE_ALERT_DIALOG: result += " ALERT_DIALOG"; break;
+ case ROLE_ANNOTATION: result += " ANNOTATION"; break;
+ case ROLE_APPLICATION: result += " APPLICATION"; break;
+ case ROLE_ARTICLE: result += " ARTICLE"; break;
+ case ROLE_BROWSER: result += " BROWSER"; break;
+ case ROLE_BUSY_INDICATOR: result += " BUSY_INDICATOR"; break;
+ case ROLE_BUTTON: result += " BUTTON"; break;
+ case ROLE_CELL: result += " CELL"; break;
+ case ROLE_CHECKBOX: result += " CHECKBOX"; break;
+ case ROLE_COLOR_WELL: result += " COLOR_WELL"; break;
+ case ROLE_COLUMN: result += " COLUMN"; break;
+ case ROLE_COLUMN_HEADER: result += " COLUMN_HEADER"; break;
+ case ROLE_COMBO_BOX: result += " COMBO_BOX"; break;
+ case ROLE_DEFINITION_LIST_DEFINITION: result += " DL_DEFINITION"; break;
+ case ROLE_DEFINITION_LIST_TERM: result += " DL_TERM"; break;
+ case ROLE_DIALOG: result += " DIALOG"; break;
+ case ROLE_DIRECTORY: result += " DIRECTORY"; break;
+ case ROLE_DISCLOSURE_TRIANGLE: result += " DISCLOSURE_TRIANGLE"; break;
+ case ROLE_DOCUMENT: result += " DOCUMENT"; break;
+ case ROLE_DRAWER: result += " DRAWER"; break;
+ case ROLE_EDITABLE_TEXT: result += " EDITABLE_TEXT"; break;
+ case ROLE_GRID: result += " GRID"; break;
+ case ROLE_GROUP: result += " GROUP"; break;
+ case ROLE_GROW_AREA: result += " GROW_AREA"; break;
+ case ROLE_HEADING: result += " HEADING"; break;
+ case ROLE_HELP_TAG: result += " HELP_TAG"; break;
+ case ROLE_IGNORED: result += " IGNORED"; break;
+ case ROLE_IMAGE: result += " IMAGE"; break;
+ case ROLE_IMAGE_MAP: result += " IMAGE_MAP"; break;
+ case ROLE_IMAGE_MAP_LINK: result += " IMAGE_MAP_LINK"; break;
+ case ROLE_INCREMENTOR: result += " INCREMENTOR"; break;
+ case ROLE_LANDMARK_APPLICATION: result += " L_APPLICATION"; break;
+ case ROLE_LANDMARK_BANNER: result += " L_BANNER"; break;
+ case ROLE_LANDMARK_COMPLEMENTARY: result += " L_COMPLEMENTARY"; break;
+ case ROLE_LANDMARK_CONTENTINFO: result += " L_CONTENTINFO"; break;
+ case ROLE_LANDMARK_MAIN: result += " L_MAIN"; break;
+ case ROLE_LANDMARK_NAVIGATION: result += " L_NAVIGATION"; break;
+ case ROLE_LANDMARK_SEARCH: result += " L_SEARCH"; break;
+ case ROLE_LINK: result += " LINK"; break;
+ case ROLE_LIST: result += " LIST"; break;
+ case ROLE_LISTBOX: result += " LISTBOX"; break;
+ case ROLE_LISTBOX_OPTION: result += " LISTBOX_OPTION"; break;
+ case ROLE_LIST_ITEM: result += " LIST_ITEM"; break;
+ case ROLE_LIST_MARKER: result += " LIST_MARKER"; break;
+ case ROLE_LOG: result += " LOG"; break;
+ case ROLE_MARQUEE: result += " MARQUEE"; break;
+ case ROLE_MATH: result += " MATH"; break;
+ case ROLE_MATTE: result += " MATTE"; break;
+ case ROLE_MENU: result += " MENU"; break;
+ case ROLE_MENU_BAR: result += " MENU_BAR"; break;
+ case ROLE_MENU_BUTTON: result += " MENU_BUTTON"; break;
+ case ROLE_MENU_ITEM: result += " MENU_ITEM"; break;
+ case ROLE_MENU_LIST_OPTION: result += " MENU_LIST_OPTION"; break;
+ case ROLE_MENU_LIST_POPUP: result += " MENU_LIST_POPUP"; break;
+ case ROLE_NOTE: result += " NOTE"; break;
+ case ROLE_OUTLINE: result += " OUTLINE"; break;
+ case ROLE_POPUP_BUTTON: result += " POPUP_BUTTON"; break;
+ case ROLE_PROGRESS_INDICATOR: result += " PROGRESS_INDICATOR"; break;
+ case ROLE_RADIO_BUTTON: result += " RADIO_BUTTON"; break;
+ case ROLE_RADIO_GROUP: result += " RADIO_GROUP"; break;
+ case ROLE_REGION: result += " REGION"; break;
+ case ROLE_ROOT_WEB_AREA: result += " ROOT_WEB_AREA"; break;
+ case ROLE_ROW: result += " ROW"; break;
+ case ROLE_ROW_HEADER: result += " ROW_HEADER"; break;
+ case ROLE_RULER: result += " RULER"; break;
+ case ROLE_RULER_MARKER: result += " RULER_MARKER"; break;
+ case ROLE_SCROLLAREA: result += " SCROLLAREA"; break;
+ case ROLE_SCROLLBAR: result += " SCROLLBAR"; break;
+ case ROLE_SHEET: result += " SHEET"; break;
+ case ROLE_SLIDER: result += " SLIDER"; break;
+ case ROLE_SLIDER_THUMB: result += " SLIDER_THUMB"; break;
+ case ROLE_SPLITTER: result += " SPLITTER"; break;
+ case ROLE_SPLIT_GROUP: result += " SPLIT_GROUP"; break;
+ case ROLE_STATIC_TEXT: result += " STATIC_TEXT"; break;
+ case ROLE_STATUS: result += " STATUS"; break;
+ case ROLE_SYSTEM_WIDE: result += " SYSTEM_WIDE"; break;
+ case ROLE_TAB: result += " TAB"; break;
+ case ROLE_TABLE: result += " TABLE"; break;
+ case ROLE_TABLE_HEADER_CONTAINER: result += " TABLE_HDR_CONTAINER"; break;
+ case ROLE_TAB_GROUP_UNUSED: result += " TAB_GROUP_UNUSED"; break;
+ case ROLE_TAB_LIST: result += " TAB_LIST"; break;
+ case ROLE_TAB_PANEL: result += " TAB_PANEL"; break;
+ case ROLE_TEXTAREA: result += " TEXTAREA"; break;
+ case ROLE_TEXT_FIELD: result += " TEXT_FIELD"; break;
+ case ROLE_TIMER: result += " TIMER"; break;
+ case ROLE_TOOLBAR: result += " TOOLBAR"; break;
+ case ROLE_TOOLTIP: result += " TOOLTIP"; break;
+ case ROLE_TREE: result += " TREE"; break;
+ case ROLE_TREE_GRID: result += " TREE_GRID"; break;
+ case ROLE_TREE_ITEM: result += " TREE_ITEM"; break;
+ case ROLE_UNKNOWN: result += " UNKNOWN"; break;
+ case ROLE_VALUE_INDICATOR: result += " VALUE_INDICATOR"; break;
+ case ROLE_WEBCORE_LINK: result += " WEBCORE_LINK"; break;
+ case ROLE_WEB_AREA: result += " WEB_AREA"; break;
+ case ROLE_WINDOW: result += " WINDOW"; break;
+ default:
+ assert(false);
+ }
+
+ if (state & (1 << STATE_BUSY))
+ result += " BUSY";
+ if (state & (1 << STATE_CHECKED))
+ result += " CHECKED";
+ if (state & (1 << STATE_COLLAPSED))
+ result += " COLLAPSED";
+ if (state & (1 << STATE_EXPANDED))
+ result += " EXPANDED";
+ if (state & (1 << STATE_FOCUSABLE))
+ result += " FOCUSABLE";
+ if (state & (1 << STATE_FOCUSED))
+ result += " FOCUSED";
+ if (state & (1 << STATE_HASPOPUP))
+ result += " HASPOPUP";
+ if (state & (1 << STATE_HOTTRACKED))
+ result += " HOTTRACKED";
+ if (state & (1 << STATE_INDETERMINATE))
+ result += " INDETERMINATE";
+ if (state & (1 << STATE_INVISIBLE))
+ result += " INVISIBLE";
+ if (state & (1 << STATE_LINKED))
+ result += " LINKED";
+ if (state & (1 << STATE_MULTISELECTABLE))
+ result += " MULTISELECTABLE";
+ if (state & (1 << STATE_OFFSCREEN))
+ result += " OFFSCREEN";
+ if (state & (1 << STATE_PRESSED))
+ result += " PRESSED";
+ if (state & (1 << STATE_PROTECTED))
+ result += " PROTECTED";
+ if (state & (1 << STATE_READONLY))
+ result += " READONLY";
+ if (state & (1 << STATE_REQUIRED))
+ result += " REQUIRED";
+ if (state & (1 << STATE_SELECTABLE))
+ result += " SELECTABLE";
+ if (state & (1 << STATE_SELECTED))
+ result += " SELECTED";
+ if (state & (1 << STATE_TRAVERSED))
+ result += " TRAVERSED";
+ if (state & (1 << STATE_UNAVAILABLE))
+ result += " UNAVAILABLE";
+ if (state & (1 << STATE_VERTICAL))
+ result += " VERTICAL";
+ if (state & (1 << STATE_VISITED))
+ result += " VISITED";
+
+ std::string tmp = UTF16ToUTF8(name);
+ RemoveChars(tmp, "\n", &tmp);
+ if (!tmp.empty())
+ result += " name=" + tmp;
+
+ tmp = UTF16ToUTF8(value);
+ RemoveChars(tmp, "\n", &tmp);
+ if (!tmp.empty())
+ result += " value=" + tmp;
+
+ result += " (" + IntToString(location.x()) + ", " +
+ IntToString(location.y()) + ")-(" +
+ IntToString(location.width()) + ", " +
+ IntToString(location.height()) + ")";
+
+ for (std::map<IntAttribute, int32>::const_iterator iter =
+ int_attributes.begin();
+ iter != int_attributes.end();
+ ++iter) {
+ std::string value = IntToString(iter->second);
+ switch (iter->first) {
+ case ATTR_SCROLL_X:
+ result += " scroll_x=" + value;
+ break;
+ case ATTR_SCROLL_X_MIN:
+ result += " scroll_x_min=" + value;
+ break;
+ case ATTR_SCROLL_X_MAX:
+ result += " scroll_x_max=" + value;
+ break;
+ case ATTR_SCROLL_Y:
+ result += " scroll_y=" + value;
+ break;
+ case ATTR_SCROLL_Y_MIN:
+ result += " scroll_y_min=" + value;
+ break;
+ case ATTR_SCROLL_Y_MAX:
+ result += " scroll_y_max=" + value;
+ break;
+ case ATTR_HIERARCHICAL_LEVEL:
+ result += " level=" + value;
+ break;
+ case ATTR_TEXT_SEL_START:
+ result += " sel_start=" + value;
+ break;
+ case ATTR_TEXT_SEL_END:
+ result += " sel_end=" + value;
+ break;
+ case ATTR_TABLE_ROW_COUNT:
+ result += " rows=" + value;
+ break;
+ case ATTR_TABLE_COLUMN_COUNT:
+ result += " cols=" + value;
+ break;
+ case ATTR_TABLE_CELL_COLUMN_INDEX:
+ result += " col=" + value;
+ break;
+ case ATTR_TABLE_CELL_ROW_INDEX:
+ result += " row=" + value;
+ break;
+ case ATTR_TABLE_CELL_COLUMN_SPAN:
+ result += " colspan=" + value;
+ break;
+ case ATTR_TABLE_CELL_ROW_SPAN:
+ result += " rowspan=" + value;
+ break;
+ case ATTR_TITLE_UI_ELEMENT:
+ result += " title_elem=" + value;
+ break;
+ }
+ }
+
+ for (std::map<StringAttribute, string16>::const_iterator iter =
+ string_attributes.begin();
+ iter != string_attributes.end();
+ ++iter) {
+ std::string value = UTF16ToUTF8(iter->second);
+ switch (iter->first) {
+ case ATTR_DOC_URL:
+ result += " doc_url=" + value;
+ break;
+ case ATTR_DOC_TITLE:
+ result += " doc_title=" + value;
+ break;
+ case ATTR_DOC_MIMETYPE:
+ result += " doc_mimetype=" + value;
+ break;
+ case ATTR_DOC_DOCTYPE:
+ result += " doc_doctype=" + value;
+ break;
+ case ATTR_ACCESS_KEY:
+ result += " access_key=" + value;
+ break;
+ case ATTR_ACTION:
+ result += " action=" + value;
+ break;
+ case ATTR_DESCRIPTION:
+ result += " description=" + value;
+ break;
+ case ATTR_DISPLAY:
+ result += " display=" + value;
+ break;
+ case ATTR_HELP:
+ result += " help=" + value;
+ break;
+ case ATTR_HTML_TAG:
+ result += " html_tag=" + value;
+ break;
+ case ATTR_LIVE_RELEVANT:
+ result += " relevant=" + value;
+ break;
+ case ATTR_LIVE_STATUS:
+ result += " live=" + value;
+ break;
+ case ATTR_CONTAINER_LIVE_RELEVANT:
+ result += " container_relevant=" + value;
+ break;
+ case ATTR_CONTAINER_LIVE_STATUS:
+ result += " container_live=" + value;
+ break;
+ case ATTR_ROLE:
+ result += " role=" + value;
+ break;
+ case ATTR_SHORTCUT:
+ result += " shortcut=" + value;
+ break;
+ case ATTR_URL:
+ result += " url=" + value;
+ break;
+ }
+ }
+
+ for (std::map<FloatAttribute, float>::const_iterator iter =
+ float_attributes.begin();
+ iter != float_attributes.end();
+ ++iter) {
+ std::string value = DoubleToString(iter->second);
+ switch (iter->first) {
+ case ATTR_DOC_LOADING_PROGRESS:
+ result += " doc_progress=" + value;
+ break;
+ case ATTR_VALUE_FOR_RANGE:
+ result += " value_for_range=" + value;
+ break;
+ case ATTR_MAX_VALUE_FOR_RANGE:
+ result += " max_value=" + value;
+ break;
+ case ATTR_MIN_VALUE_FOR_RANGE:
+ result += " min_value=" + value;
+ break;
+ }
+ }
+
+ for (std::map<BoolAttribute, bool>::const_iterator iter =
+ bool_attributes.begin();
+ iter != bool_attributes.end();
+ ++iter) {
+ std::string value = iter->second ? "true" : "false";
+ switch (iter->first) {
+ case ATTR_DOC_LOADED:
+ result += " doc_loaded=" + value;
+ break;
+ case ATTR_BUTTON_MIXED:
+ result += " mixed=" + value;
+ break;
+ case ATTR_LIVE_ATOMIC:
+ result += " atomic=" + value;
+ break;
+ case ATTR_LIVE_BUSY:
+ result += " busy=" + value;
+ break;
+ case ATTR_CONTAINER_LIVE_ATOMIC:
+ result += " container_atomic=" + value;
+ break;
+ case ATTR_CONTAINER_LIVE_BUSY:
+ result += " container_busy=" + value;
+ break;
+ case ATTR_ARIA_READONLY:
+ result += " aria_readonly=" + value;
+ break;
+ case ATTR_CAN_SET_VALUE:
+ result += " can_set_value=" + value;
+ break;
+ }
+ }
+
+ if (!children.empty())
+ result += " children=" + IntToString(children.size());
+
+ if (!indirect_child_ids.empty())
+ result += " indirect_child_ids=" + IntVectorToString(indirect_child_ids);
+
+ if (!line_breaks.empty())
+ result += " line_breaks=" + IntVectorToString(line_breaks);
+
+ if (!cell_ids.empty())
+ result += " cell_ids=" + IntVectorToString(cell_ids);
+
+ if (recursive) {
+ result += "\n";
+ ++indent;
+ for (size_t i = 0; i < children.size(); ++i)
+ result += children[i].DebugString(true);
+ --indent;
+ }
+
+ return result;
+}
+#endif // ifndef NDEBUG
+
+} // namespace content
diff --git a/content/common/accessibility_node_data.h b/content/common/accessibility_node_data.h
new file mode 100644
index 0000000..640df55
--- /dev/null
+++ b/content/common/accessibility_node_data.h
@@ -0,0 +1,284 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_COMMON_ACCESSIBILITY_NODE_DATA_H_
+#define CONTENT_COMMON_ACCESSIBILITY_NODE_DATA_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/string16.h"
+#include "content/common/content_export.h"
+#include "ui/gfx/rect.h"
+
+namespace content {
+
+// A compact representation of the accessibility information for a
+// single web object, in a form that can be serialized and sent from
+// the renderer process to the browser process.
+struct CONTENT_EXPORT AccessibilityNodeData {
+ // An enumeration of accessibility roles.
+ enum Role {
+ ROLE_UNKNOWN = 0,
+
+ // Used by Chromium to distinguish between the root of the tree
+ // for this page, and a web area for a frame within this page.
+ ROLE_ROOT_WEB_AREA,
+
+ // These roles all directly correspond to WebKit accessibility roles,
+ // keep these alphabetical.
+ ROLE_ALERT,
+ ROLE_ALERT_DIALOG,
+ ROLE_ANNOTATION,
+ ROLE_APPLICATION,
+ ROLE_ARTICLE,
+ ROLE_BROWSER,
+ ROLE_BUSY_INDICATOR,
+ ROLE_BUTTON,
+ ROLE_CELL,
+ ROLE_CHECKBOX,
+ ROLE_COLOR_WELL,
+ ROLE_COLUMN,
+ ROLE_COLUMN_HEADER,
+ ROLE_COMBO_BOX,
+ ROLE_DEFINITION_LIST_DEFINITION,
+ ROLE_DEFINITION_LIST_TERM,
+ ROLE_DIALOG,
+ ROLE_DIRECTORY,
+ ROLE_DISCLOSURE_TRIANGLE,
+ ROLE_DOCUMENT,
+ ROLE_DRAWER,
+ ROLE_EDITABLE_TEXT,
+ ROLE_FOOTER,
+ ROLE_GRID,
+ ROLE_GROUP,
+ ROLE_GROW_AREA,
+ ROLE_HEADING,
+ ROLE_HELP_TAG,
+ ROLE_IGNORED,
+ ROLE_IMAGE,
+ ROLE_IMAGE_MAP,
+ ROLE_IMAGE_MAP_LINK,
+ ROLE_INCREMENTOR,
+ ROLE_LANDMARK_APPLICATION,
+ ROLE_LANDMARK_BANNER,
+ ROLE_LANDMARK_COMPLEMENTARY,
+ ROLE_LANDMARK_CONTENTINFO,
+ ROLE_LANDMARK_MAIN,
+ ROLE_LANDMARK_NAVIGATION,
+ ROLE_LANDMARK_SEARCH,
+ ROLE_LINK,
+ ROLE_LIST,
+ ROLE_LISTBOX,
+ ROLE_LISTBOX_OPTION,
+ ROLE_LIST_ITEM,
+ ROLE_LIST_MARKER,
+ ROLE_LOG,
+ ROLE_MARQUEE,
+ ROLE_MATH,
+ ROLE_MATTE,
+ ROLE_MENU,
+ ROLE_MENU_BAR,
+ ROLE_MENU_ITEM,
+ ROLE_MENU_BUTTON,
+ ROLE_MENU_LIST_OPTION,
+ ROLE_MENU_LIST_POPUP,
+ ROLE_NOTE,
+ ROLE_OUTLINE,
+ ROLE_POPUP_BUTTON,
+ ROLE_PROGRESS_INDICATOR,
+ ROLE_RADIO_BUTTON,
+ ROLE_RADIO_GROUP,
+ ROLE_REGION,
+ ROLE_ROW,
+ ROLE_ROW_HEADER,
+ ROLE_RULER,
+ ROLE_RULER_MARKER,
+ ROLE_SCROLLAREA,
+ ROLE_SCROLLBAR,
+ ROLE_SHEET,
+ ROLE_SLIDER,
+ ROLE_SLIDER_THUMB,
+ ROLE_SPLITTER,
+ ROLE_SPLIT_GROUP,
+ ROLE_STATIC_TEXT,
+ ROLE_STATUS,
+ ROLE_SYSTEM_WIDE,
+ ROLE_TAB,
+ ROLE_TABLE,
+ ROLE_TABLE_HEADER_CONTAINER,
+ ROLE_TAB_GROUP_UNUSED, // WebKit doesn't use (uses ROLE_TAB_LIST)
+ ROLE_TAB_LIST,
+ ROLE_TAB_PANEL,
+ ROLE_TEXTAREA,
+ ROLE_TEXT_FIELD,
+ ROLE_TIMER,
+ ROLE_TOOLBAR,
+ ROLE_TOOLTIP,
+ ROLE_TREE,
+ ROLE_TREE_GRID,
+ ROLE_TREE_ITEM,
+ ROLE_VALUE_INDICATOR,
+ ROLE_WEBCORE_LINK,
+ ROLE_WEB_AREA,
+ ROLE_WINDOW,
+ NUM_ROLES
+ };
+
+ // An alphabetical enumeration of accessibility states.
+ // A state bitmask is formed by shifting 1 to the left by each state,
+ // for example:
+ // int mask = (1 << STATE_CHECKED) | (1 << STATE_FOCUSED);
+ enum State {
+ STATE_BUSY,
+ STATE_CHECKED,
+ STATE_COLLAPSED,
+ STATE_EXPANDED,
+ STATE_FOCUSABLE,
+ STATE_FOCUSED,
+ STATE_HASPOPUP,
+ STATE_HOTTRACKED,
+ STATE_INDETERMINATE,
+ STATE_INVISIBLE,
+ STATE_LINKED,
+ STATE_MULTISELECTABLE,
+ STATE_OFFSCREEN,
+ STATE_PRESSED,
+ STATE_PROTECTED,
+ STATE_READONLY,
+ STATE_REQUIRED,
+ STATE_SELECTABLE,
+ STATE_SELECTED,
+ STATE_TRAVERSED,
+ STATE_UNAVAILABLE,
+ STATE_VERTICAL,
+ STATE_VISITED,
+ NUM_STATES
+ };
+
+ COMPILE_ASSERT(NUM_STATES <= 31, state_enum_not_too_large);
+
+ // Additional optional attributes that can be optionally attached to
+ // a node.
+ enum StringAttribute {
+ // Document attributes.
+ ATTR_DOC_URL,
+ ATTR_DOC_TITLE,
+ ATTR_DOC_MIMETYPE,
+ ATTR_DOC_DOCTYPE,
+
+ // Attributes that could apply to any node.
+ ATTR_ACCESS_KEY,
+ ATTR_ACTION,
+ ATTR_CONTAINER_LIVE_RELEVANT,
+ ATTR_CONTAINER_LIVE_STATUS,
+ ATTR_DESCRIPTION,
+ ATTR_DISPLAY,
+ ATTR_HELP,
+ ATTR_HTML_TAG,
+ ATTR_LIVE_RELEVANT,
+ ATTR_LIVE_STATUS,
+ ATTR_ROLE,
+ ATTR_SHORTCUT,
+ ATTR_URL,
+ };
+
+ enum IntAttribute {
+ // Scrollable container attributes.
+ ATTR_SCROLL_X,
+ ATTR_SCROLL_X_MIN,
+ ATTR_SCROLL_X_MAX,
+ ATTR_SCROLL_Y,
+ ATTR_SCROLL_Y_MIN,
+ ATTR_SCROLL_Y_MAX,
+
+ // Editable text attributes.
+ ATTR_TEXT_SEL_START,
+ ATTR_TEXT_SEL_END,
+
+ // Table attributes.
+ ATTR_TABLE_ROW_COUNT,
+ ATTR_TABLE_COLUMN_COUNT,
+
+ // Table cell attributes.
+ ATTR_TABLE_CELL_COLUMN_INDEX,
+ ATTR_TABLE_CELL_COLUMN_SPAN,
+ ATTR_TABLE_CELL_ROW_INDEX,
+ ATTR_TABLE_CELL_ROW_SPAN,
+
+ // Tree control attributes.
+ ATTR_HIERARCHICAL_LEVEL,
+
+ // Relationships between this element and other elements.
+ ATTR_TITLE_UI_ELEMENT,
+ };
+
+ enum FloatAttribute {
+ // Document attributes.
+ ATTR_DOC_LOADING_PROGRESS,
+
+ // Range attributes.
+ ATTR_VALUE_FOR_RANGE,
+ ATTR_MIN_VALUE_FOR_RANGE,
+ ATTR_MAX_VALUE_FOR_RANGE,
+ };
+
+ enum BoolAttribute {
+ // Document attributes.
+ ATTR_DOC_LOADED,
+
+ // True if a checkbox or radio button is in the "mixed" state.
+ ATTR_BUTTON_MIXED,
+
+ // Live region attributes.
+ ATTR_CONTAINER_LIVE_ATOMIC,
+ ATTR_CONTAINER_LIVE_BUSY,
+ ATTR_LIVE_ATOMIC,
+ ATTR_LIVE_BUSY,
+
+ // ARIA readonly flag.
+ ATTR_ARIA_READONLY,
+
+ // Writeable attributes
+ ATTR_CAN_SET_VALUE,
+ };
+
+ AccessibilityNodeData();
+ ~AccessibilityNodeData();
+
+#ifndef NDEBUG
+ std::string DebugString(bool recursive) const;
+#endif
+
+ // This is a simple serializable struct. All member variables should be
+ // public and copyable.
+ int32 id;
+ string16 name;
+ string16 value;
+ Role role;
+ uint32 state;
+ gfx::Rect location;
+ std::map<StringAttribute, string16> string_attributes;
+ std::map<IntAttribute, int32> int_attributes;
+ std::map<FloatAttribute, float> float_attributes;
+ std::map<BoolAttribute, bool> bool_attributes;
+ std::vector<AccessibilityNodeData> children;
+ std::vector<int32> indirect_child_ids;
+ std::vector<std::pair<string16, string16> > html_attributes;
+ std::vector<int32> line_breaks;
+
+ // For a table, the cell ids in row-major order, with duplicate entries
+ // when there's a rowspan or colspan, and with -1 for missing cells.
+ // There are always exactly rows * columns entries.
+ std::vector<int32> cell_ids;
+
+ // For a table, the unique cell ids in row-major order of their first
+ // occurrence.
+ std::vector<int32> unique_cell_ids;
+};
+
+} // namespace content
+
+#endif // CONTENT_COMMON_ACCESSIBILITY_NODE_DATA_H_