webaccessibility.cc revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/webaccessibility.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/string_number_conversions.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_util.h" 9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/utf_string_conversions.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/WebKit/WebKit/chromium/public/WebAccessibilityCache.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/WebKit/WebKit/chromium/public/WebAccessibilityObject.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/WebKit/WebKit/chromium/public/WebAccessibilityRole.h" 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebAttribute.h" 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebDocumentType.h" 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebElement.h" 17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebFormControlElement.h" 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" 19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebInputElement.h" 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebNamedNodeMap.h" 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "third_party/WebKit/WebKit/chromium/public/WebNode.h" 22513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "third_party/WebKit/WebKit/chromium/public/WebSize.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/WebKit/WebKit/chromium/public/WebString.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing WebKit::WebAccessibilityCache; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing WebKit::WebAccessibilityRole; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing WebKit::WebAccessibilityObject; 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace webkit_glue { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Provides a conversion between the WebKit::WebAccessibilityRole and a role 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// supported on the Browser side. Listed alphabetically by the 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// WebAccessibilityRole (except for default role). 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWebAccessibility::Role ConvertRole(WebKit::WebAccessibilityRole role) { 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (role) { 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleAnnotation: 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_ANNOTATION; 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleApplication: 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_APPLICATION; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleApplicationAlert: 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_ALERT; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleApplicationAlertDialog: 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_ALERT_DIALOG; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleApplicationDialog: 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_DIALOG; 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleApplicationLog: 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LOG; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleApplicationMarquee: 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MARQUEE; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleApplicationStatus: 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_STATUS; 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleApplicationTimer: 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TIMER; 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleBrowser: 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_BROWSER; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleBusyIndicator: 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_BUSY_INDICATOR; 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleButton: 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_BUTTON; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleCell: 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_CELL; 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleCheckBox: 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_CHECKBOX; 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleColorWell: 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_COLOR_WELL; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleColumn: 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_COLUMN; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleColumnHeader: 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_COLUMN_HEADER; 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleComboBox: 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_COMBO_BOX; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDefinitionListDefinition: 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDefinitionListTerm: 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_DEFINITION_LIST_TERM; 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDirectory: 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_DIRECTORY; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDisclosureTriangle: 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_DISCLOSURE_TRIANGLE; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDocument: 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_DOCUMENT; 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDocumentArticle: 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_ARTICLE; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDocumentMath: 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MATH; 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDocumentNote: 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_NOTE; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDocumentRegion: 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_REGION; 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleDrawer: 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_DRAWER; 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleEditableText: 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_EDITABLE_TEXT; 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleGrid: 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_GRID; 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleGroup: 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_GROUP; 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleGrowArea: 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_GROW_AREA; 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleHeading: 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_HEADING; 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleHelpTag: 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_HELP_TAG; 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleIgnored: 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_IGNORED; 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleImage: 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_IMAGE; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleImageMap: 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_IMAGE_MAP; 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleImageMapLink: 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_IMAGE_MAP_LINK; 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleIncrementor: 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_INCREMENTOR; 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleLandmarkApplication: 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LANDMARK_APPLICATION; 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleLandmarkBanner: 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LANDMARK_BANNER; 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleLandmarkComplementary: 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY; 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleLandmarkContentInfo: 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LANDMARK_CONTENTINFO; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleLandmarkMain: 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LANDMARK_MAIN; 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleLandmarkNavigation: 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LANDMARK_NAVIGATION; 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleLandmarkSearch: 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LANDMARK_SEARCH; 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleLink: 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LINK; 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleList: 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LIST; 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleListBox: 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LISTBOX; 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleListBoxOption: 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LISTBOX_OPTION; 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleListItem: 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LIST_ITEM; 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleListMarker: 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_LIST_MARKER; 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleMatte: 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MATTE; 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleMenu: 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MENU; 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleMenuBar: 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MENU_BAR; 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleMenuButton: 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MENU_BUTTON; 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleMenuItem: 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MENU_ITEM; 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleMenuListOption: 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MENU_LIST_OPTION; 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleMenuListPopup: 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_MENU_LIST_POPUP; 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleOutline: 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_OUTLINE; 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRolePopUpButton: 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_POPUP_BUTTON; 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleProgressIndicator: 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_PROGRESS_INDICATOR; 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleRadioButton: 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_RADIO_BUTTON; 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleRadioGroup: 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_RADIO_GROUP; 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleRow: 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_ROW; 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleRowHeader: 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_ROW_HEADER; 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleRuler: 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_RULER; 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleRulerMarker: 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_RULER_MARKER; 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleScrollArea: 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_SCROLLAREA; 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleScrollBar: 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_SCROLLBAR; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleSheet: 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_SHEET; 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleSlider: 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_SLIDER; 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleSliderThumb: 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_SLIDER_THUMB; 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleSplitGroup: 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_SPLIT_GROUP; 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleSplitter: 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_SPLITTER; 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleStaticText: 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_STATIC_TEXT; 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleSystemWide: 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_SYSTEM_WIDE; 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTab: 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TAB; 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTabGroup: 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TAB_GROUP; 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTabList: 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TAB_LIST; 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTabPanel: 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TAB_PANEL; 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTable: 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TABLE; 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTableHeaderContainer: 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TABLE_HEADER_CONTAINER; 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTextArea: 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TEXTAREA; 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTextField: 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TEXT_FIELD; 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleToolbar: 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TOOLBAR; 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTreeGrid: 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TREE_GRID; 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTreeItemRole: 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TREE_ITEM; 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleTreeRole: 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TREE; 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleUserInterfaceTooltip: 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_TOOLTIP; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleValueIndicator: 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_VALUE_INDICATOR; 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleWebArea: 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_WEB_AREA; 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleWebCoreLink: 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_WEBCORE_LINK; 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WebKit::WebAccessibilityRoleWindow: 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_WINDOW; 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch default: 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return WebAccessibility::ROLE_UNKNOWN; 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochuint32 ConvertState(const WebAccessibilityObject& o) { 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch uint32 state = 0; 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isChecked()) 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_CHECKED); 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (o.isCollapsed()) 2363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick state |= (1 << WebAccessibility::STATE_COLLAPSED); 2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.canSetFocusAttribute()) 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_FOCUSABLE); 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isFocused()) 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_FOCUSED); 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (o.roleValue() == WebKit::WebAccessibilityRolePopUpButton) { 2453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick state |= (1 << WebAccessibility::STATE_HASPOPUP); 2463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!o.isCollapsed()) 2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick state |= (1 << WebAccessibility::STATE_EXPANDED); 2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isHovered()) 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_HOTTRACKED); 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isIndeterminate()) 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_INDETERMINATE); 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!o.isVisible()) 2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick state |= (1 << WebAccessibility::STATE_INVISIBLE); 2593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (o.isLinked()) 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_LINKED); 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isMultiSelectable()) 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_MULTISELECTABLE); 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isOffScreen()) 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_OFFSCREEN); 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isPressed()) 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_PRESSED); 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isPasswordField()) 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_PROTECTED); 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isReadOnly()) 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_READONLY); 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (o.canSetSelectedAttribute()) 2793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick state |= (1 << WebAccessibility::STATE_SELECTABLE); 2803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (o.isSelected()) 2823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick state |= (1 << WebAccessibility::STATE_SELECTED); 2833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (o.isVisited()) 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_TRAVERSED); 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!o.isEnabled()) 288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state |= (1 << WebAccessibility::STATE_UNAVAILABLE); 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return state; 291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWebAccessibility::WebAccessibility() 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : id(-1), 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch role(ROLE_NONE), 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state(-1) { 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochWebAccessibility::WebAccessibility(const WebKit::WebAccessibilityObject& src, 300513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WebKit::WebAccessibilityCache* cache, 301513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool include_children) { 302513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Init(src, cache, include_children); 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3053345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickWebAccessibility::~WebAccessibility() { 3063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WebAccessibility::Init(const WebKit::WebAccessibilityObject& src, 309513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WebKit::WebAccessibilityCache* cache, 310513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch bool include_children) { 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch name = src.title(); 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch value = src.stringValue(); 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch role = ConvertRole(src.roleValue()); 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch state = ConvertState(src); 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch location = src.boundingBoxRect(); 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (src.actionVerb().length()) 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch attributes[ATTR_ACTION] = src.actionVerb(); 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (src.accessibilityDescription().length()) 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch attributes[ATTR_DESCRIPTION] = src.accessibilityDescription(); 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (src.helpText().length()) 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch attributes[ATTR_HELP] = src.helpText(); 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (src.keyboardShortcut().length()) 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch attributes[ATTR_SHORTCUT] = src.keyboardShortcut(); 3253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (src.hasComputedStyle()) 3263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick attributes[ATTR_DISPLAY] = src.computedStyleDisplay(); 32721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen if (!src.url().isEmpty()) 32821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen attributes[ATTR_URL] = src.url().spec().utf16(); 3293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick WebKit::WebNode node = src.node(); 3313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!node.isNull() && node.isElementNode()) { 3333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick WebKit::WebElement element = node.to<WebKit::WebElement>(); 3343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(ctguil): The tagName in WebKit is lower cased but 3353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // HTMLElement::nodeName calls localNameUpper. Consider adding 3363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // a WebElement method that returns the original lower cased tagName. 3373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick attributes[ATTR_HTML_TAG] = StringToLowerASCII(string16(element.tagName())); 3383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick for (unsigned i = 0; i < element.attributes().length(); i++) { 3393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick html_attributes.push_back( 3403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::pair<string16, string16>( 3413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick element.attributes().attributeItem(i).localName(), 3423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick element.attributes().attributeItem(i).value())); 3433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 344731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 345731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (element.isFormControlElement()) { 346731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WebKit::WebFormControlElement form_element = 347731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick element.to<WebKit::WebFormControlElement>(); 348731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (form_element.formControlType() == ASCIIToUTF16("text")) { 349731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WebKit::WebInputElement input_element = 350731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick form_element.to<WebKit::WebInputElement>(); 351731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick attributes[ATTR_TEXT_SEL_START] = base::IntToString16( 352731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick input_element.selectionStart()); 353731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick attributes[ATTR_TEXT_SEL_END] = base::IntToString16( 354731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick input_element.selectionEnd()); 355731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 356731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 3573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 3583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (role == WebAccessibility::ROLE_DOCUMENT || 3603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick role == WebAccessibility::ROLE_WEB_AREA) { 361731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const WebKit::WebDocument& document = src.document(); 3623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (name.empty()) 3633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick name = document.title(); 3643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick attributes[ATTR_DOC_TITLE] = document.title(); 3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick attributes[ATTR_DOC_URL] = document.frame()->url().spec().utf16(); 3663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (document.isXHTMLDocument()) 3673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick attributes[ATTR_DOC_MIMETYPE] = WebKit::WebString("text/xhtml"); 3683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick else 3693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick attributes[ATTR_DOC_MIMETYPE] = WebKit::WebString("text/html"); 3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 371731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const WebKit::WebDocumentType& doctype = document.doctype(); 3723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!doctype.isNull()) 3733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick attributes[ATTR_DOC_DOCTYPE] = doctype.name(); 374513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 375513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const gfx::Size& scroll_offset = document.frame()->scrollOffset(); 376513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch attributes[ATTR_DOC_SCROLLX] = base::IntToString16(scroll_offset.width()); 377513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch attributes[ATTR_DOC_SCROLLY] = base::IntToString16(scroll_offset.height()); 3783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add the source object to the cache and store its id. 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch id = cache->addOrGetId(src); 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 383513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (include_children) { 384513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Recursively create children. 385513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch int child_count = src.childCount(); 386513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch for (int i = 0; i < child_count; i++) { 387513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch WebAccessibilityObject child = src.childAt(i); 388513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 389513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // The child may be invalid due to issues in webkit accessibility code. 390513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Don't add children are invalid thus preventing a crash. 391513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // https://bugs.webkit.org/show_bug.cgi?id=44149 392513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // TODO(ctguil): We may want to remove this check as webkit stabilizes. 393513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (child.isValid()) 394513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch children.push_back(WebAccessibility(child, cache, include_children)); 395513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace webkit_glue 400