diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-12 22:55:15 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-12 22:55:15 +0000 |
commit | 0a935a0d077703a4c2d91a56d8764585fdb8674a (patch) | |
tree | 12fb697231943352f4dd6a0f4c931978c37d72bb /content/common | |
parent | 00737f8f5c56fc51352f4aabb89292c7e30637dd (diff) | |
download | chromium_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.h | 18 | ||||
-rw-r--r-- | content/common/accessibility_node_data.cc | 411 | ||||
-rw-r--r-- | content/common/accessibility_node_data.h | 284 |
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_ |