| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/accessibility/browser_accessibility_win.h" | 5 #include "content/browser/accessibility/browser_accessibility_win.h" |
| 6 | 6 |
| 7 #include <UIAutomationClient.h> | 7 #include <UIAutomationClient.h> |
| 8 #include <UIAutomationCoreApi.h> | 8 #include <UIAutomationCoreApi.h> |
| 9 | 9 |
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 return E_INVALIDARG; | 128 return E_INVALIDARG; |
| 129 } | 129 } |
| 130 | 130 |
| 131 BrowserAccessibilityManager* manager = owner_->manager(); | 131 BrowserAccessibilityManager* manager = owner_->manager(); |
| 132 BrowserAccessibility* result = | 132 BrowserAccessibility* result = |
| 133 manager->GetFromRendererID(target_ids_[target_index]); | 133 manager->GetFromRendererID(target_ids_[target_index]); |
| 134 if (!result || !result->instance_active()) | 134 if (!result || !result->instance_active()) |
| 135 return E_FAIL; | 135 return E_FAIL; |
| 136 | 136 |
| 137 *target = static_cast<IAccessible*>( | 137 *target = static_cast<IAccessible*>( |
| 138 result->ToBrowserAccessibilityWin()->NewReference()); | 138 result->toBrowserAccessibilityWin()->NewReference()); |
| 139 return S_OK; | 139 return S_OK; |
| 140 } | 140 } |
| 141 | 141 |
| 142 STDMETHODIMP BrowserAccessibilityRelation::get_targets( | 142 STDMETHODIMP BrowserAccessibilityRelation::get_targets( |
| 143 long max_targets, IUnknown** targets, long* n_targets) { | 143 long max_targets, IUnknown** targets, long* n_targets) { |
| 144 if (!targets || !n_targets) | 144 if (!targets || !n_targets) |
| 145 return E_INVALIDARG; | 145 return E_INVALIDARG; |
| 146 | 146 |
| 147 if (!owner_->instance_active()) | 147 if (!owner_->instance_active()) |
| 148 return E_FAIL; | 148 return E_FAIL; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 169 // | 169 // |
| 170 | 170 |
| 171 // static | 171 // static |
| 172 BrowserAccessibility* BrowserAccessibility::Create() { | 172 BrowserAccessibility* BrowserAccessibility::Create() { |
| 173 CComObject<BrowserAccessibilityWin>* instance; | 173 CComObject<BrowserAccessibilityWin>* instance; |
| 174 HRESULT hr = CComObject<BrowserAccessibilityWin>::CreateInstance(&instance); | 174 HRESULT hr = CComObject<BrowserAccessibilityWin>::CreateInstance(&instance); |
| 175 DCHECK(SUCCEEDED(hr)); | 175 DCHECK(SUCCEEDED(hr)); |
| 176 return instance->NewReference(); | 176 return instance->NewReference(); |
| 177 } | 177 } |
| 178 | 178 |
| 179 BrowserAccessibilityWin* BrowserAccessibility::ToBrowserAccessibilityWin() { | 179 BrowserAccessibilityWin* BrowserAccessibility::toBrowserAccessibilityWin() { |
| 180 return static_cast<BrowserAccessibilityWin*>(this); | 180 return static_cast<BrowserAccessibilityWin*>(this); |
| 181 } | 181 } |
| 182 | 182 |
| 183 BrowserAccessibilityWin::BrowserAccessibilityWin() | 183 BrowserAccessibilityWin::BrowserAccessibilityWin() |
| 184 : ia_role_(0), | 184 : ia_role_(0), |
| 185 ia_state_(0), | 185 ia_state_(0), |
| 186 ia2_role_(0), | 186 ia2_role_(0), |
| 187 ia2_state_(0), | 187 ia2_state_(0), |
| 188 first_time_(true), | 188 first_time_(true), |
| 189 old_ia_state_(0) { | 189 old_ia_state_(0) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 return S_FALSE; | 231 return S_FALSE; |
| 232 } | 232 } |
| 233 | 233 |
| 234 BrowserAccessibility* result = BrowserAccessibilityForPoint(point); | 234 BrowserAccessibility* result = BrowserAccessibilityForPoint(point); |
| 235 if (result == this) { | 235 if (result == this) { |
| 236 // Point is within this object. | 236 // Point is within this object. |
| 237 child->vt = VT_I4; | 237 child->vt = VT_I4; |
| 238 child->lVal = CHILDID_SELF; | 238 child->lVal = CHILDID_SELF; |
| 239 } else { | 239 } else { |
| 240 child->vt = VT_DISPATCH; | 240 child->vt = VT_DISPATCH; |
| 241 child->pdispVal = result->ToBrowserAccessibilityWin()->NewReference(); | 241 child->pdispVal = result->toBrowserAccessibilityWin()->NewReference(); |
| 242 } | 242 } |
| 243 return S_OK; | 243 return S_OK; |
| 244 } | 244 } |
| 245 | 245 |
| 246 STDMETHODIMP BrowserAccessibilityWin::accLocation(LONG* x_left, LONG* y_top, | 246 STDMETHODIMP BrowserAccessibilityWin::accLocation(LONG* x_left, LONG* y_top, |
| 247 LONG* width, LONG* height, | 247 LONG* width, LONG* height, |
| 248 VARIANT var_id) { | 248 VARIANT var_id) { |
| 249 if (!instance_active_) | 249 if (!instance_active_) |
| 250 return E_FAIL; | 250 return E_FAIL; |
| 251 | 251 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 300 result = target->GetPreviousSibling(); | 300 result = target->GetPreviousSibling(); |
| 301 break; | 301 break; |
| 302 } | 302 } |
| 303 | 303 |
| 304 if (!result) { | 304 if (!result) { |
| 305 end->vt = VT_EMPTY; | 305 end->vt = VT_EMPTY; |
| 306 return S_FALSE; | 306 return S_FALSE; |
| 307 } | 307 } |
| 308 | 308 |
| 309 end->vt = VT_DISPATCH; | 309 end->vt = VT_DISPATCH; |
| 310 end->pdispVal = result->ToBrowserAccessibilityWin()->NewReference(); | 310 end->pdispVal = result->toBrowserAccessibilityWin()->NewReference(); |
| 311 return S_OK; | 311 return S_OK; |
| 312 } | 312 } |
| 313 | 313 |
| 314 STDMETHODIMP BrowserAccessibilityWin::get_accChild(VARIANT var_child, | 314 STDMETHODIMP BrowserAccessibilityWin::get_accChild(VARIANT var_child, |
| 315 IDispatch** disp_child) { | 315 IDispatch** disp_child) { |
| 316 if (!instance_active_) | 316 if (!instance_active_) |
| 317 return E_FAIL; | 317 return E_FAIL; |
| 318 | 318 |
| 319 if (!disp_child) | 319 if (!disp_child) |
| 320 return E_INVALIDARG; | 320 return E_INVALIDARG; |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 return S_OK; | 458 return S_OK; |
| 459 } | 459 } |
| 460 | 460 |
| 461 STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) { | 461 STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) { |
| 462 if (!instance_active_) | 462 if (!instance_active_) |
| 463 return E_FAIL; | 463 return E_FAIL; |
| 464 | 464 |
| 465 if (!disp_parent) | 465 if (!disp_parent) |
| 466 return E_INVALIDARG; | 466 return E_INVALIDARG; |
| 467 | 467 |
| 468 IAccessible* parent = parent_->ToBrowserAccessibilityWin(); | 468 IAccessible* parent = parent_->toBrowserAccessibilityWin(); |
| 469 if (parent == NULL) { | 469 if (parent == NULL) { |
| 470 // This happens if we're the root of the tree; | 470 // This happens if we're the root of the tree; |
| 471 // return the IAccessible for the window. | 471 // return the IAccessible for the window. |
| 472 parent = manager_->ToBrowserAccessibilityManagerWin()-> | 472 parent = manager_->toBrowserAccessibilityManagerWin()-> |
| 473 GetParentWindowIAccessible(); | 473 GetParentWindowIAccessible(); |
| 474 } | 474 } |
| 475 | 475 |
| 476 parent->AddRef(); | 476 parent->AddRef(); |
| 477 *disp_parent = parent; | 477 *disp_parent = parent; |
| 478 return S_OK; | 478 return S_OK; |
| 479 } | 479 } |
| 480 | 480 |
| 481 STDMETHODIMP BrowserAccessibilityWin::get_accRole( | 481 STDMETHODIMP BrowserAccessibilityWin::get_accRole( |
| 482 VARIANT var_id, VARIANT* role) { | 482 VARIANT var_id, VARIANT* role) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 559 if (selected_count == 0) { | 559 if (selected_count == 0) { |
| 560 selected->vt = VT_EMPTY; | 560 selected->vt = VT_EMPTY; |
| 561 return S_OK; | 561 return S_OK; |
| 562 } | 562 } |
| 563 | 563 |
| 564 if (selected_count == 1) { | 564 if (selected_count == 1) { |
| 565 for (size_t i = 0; i < children_.size(); ++i) { | 565 for (size_t i = 0; i < children_.size(); ++i) { |
| 566 if (children_[i]->HasState(WebAccessibility::STATE_SELECTED)) { | 566 if (children_[i]->HasState(WebAccessibility::STATE_SELECTED)) { |
| 567 selected->vt = VT_DISPATCH; | 567 selected->vt = VT_DISPATCH; |
| 568 selected->pdispVal = | 568 selected->pdispVal = |
| 569 children_[i]->ToBrowserAccessibilityWin()->NewReference(); | 569 children_[i]->toBrowserAccessibilityWin()->NewReference(); |
| 570 return S_OK; | 570 return S_OK; |
| 571 } | 571 } |
| 572 } | 572 } |
| 573 } | 573 } |
| 574 | 574 |
| 575 // Multiple items are selected. | 575 // Multiple items are selected. |
| 576 base::win::EnumVariant* enum_variant = | 576 base::win::EnumVariant* enum_variant = |
| 577 new base::win::EnumVariant(selected_count); | 577 new base::win::EnumVariant(selected_count); |
| 578 enum_variant->AddRef(); | 578 enum_variant->AddRef(); |
| 579 unsigned long index = 0; | 579 unsigned long index = 0; |
| 580 for (size_t i = 0; i < children_.size(); ++i) { | 580 for (size_t i = 0; i < children_.size(); ++i) { |
| 581 if (children_[i]->HasState(WebAccessibility::STATE_SELECTED)) { | 581 if (children_[i]->HasState(WebAccessibility::STATE_SELECTED)) { |
| 582 enum_variant->ItemAt(index)->vt = VT_DISPATCH; | 582 enum_variant->ItemAt(index)->vt = VT_DISPATCH; |
| 583 enum_variant->ItemAt(index)->pdispVal = | 583 enum_variant->ItemAt(index)->pdispVal = |
| 584 children_[i]->ToBrowserAccessibilityWin()->NewReference(); | 584 children_[i]->toBrowserAccessibilityWin()->NewReference(); |
| 585 ++index; | 585 ++index; |
| 586 } | 586 } |
| 587 } | 587 } |
| 588 selected->vt = VT_UNKNOWN; | 588 selected->vt = VT_UNKNOWN; |
| 589 selected->punkVal = static_cast<IUnknown*>( | 589 selected->punkVal = static_cast<IUnknown*>( |
| 590 static_cast<base::win::IUnknownImpl*>(enum_variant)); | 590 static_cast<base::win::IUnknownImpl*>(enum_variant)); |
| 591 return S_OK; | 591 return S_OK; |
| 592 } | 592 } |
| 593 | 593 |
| 594 STDMETHODIMP BrowserAccessibilityWin::accSelect( | 594 STDMETHODIMP BrowserAccessibilityWin::accSelect( |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1066 return E_INVALIDARG; | 1066 return E_INVALIDARG; |
| 1067 | 1067 |
| 1068 int cell_id_count = static_cast<int>(unique_cell_ids_.size()); | 1068 int cell_id_count = static_cast<int>(unique_cell_ids_.size()); |
| 1069 if (cell_index < 0) | 1069 if (cell_index < 0) |
| 1070 return E_INVALIDARG; | 1070 return E_INVALIDARG; |
| 1071 if (cell_index >= cell_id_count) | 1071 if (cell_index >= cell_id_count) |
| 1072 return S_FALSE; | 1072 return S_FALSE; |
| 1073 | 1073 |
| 1074 int cell_id = unique_cell_ids_[cell_index]; | 1074 int cell_id = unique_cell_ids_[cell_index]; |
| 1075 BrowserAccessibilityWin* cell = | 1075 BrowserAccessibilityWin* cell = |
| 1076 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1076 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1077 int col_index; | 1077 int col_index; |
| 1078 if (cell && | 1078 if (cell && |
| 1079 cell->GetIntAttribute( | 1079 cell->GetIntAttribute( |
| 1080 WebAccessibility::ATTR_TABLE_CELL_COLUMN_INDEX, &col_index)) { | 1080 WebAccessibility::ATTR_TABLE_CELL_COLUMN_INDEX, &col_index)) { |
| 1081 *column_index = col_index; | 1081 *column_index = col_index; |
| 1082 return S_OK; | 1082 return S_OK; |
| 1083 } | 1083 } |
| 1084 | 1084 |
| 1085 return S_FALSE; | 1085 return S_FALSE; |
| 1086 } | 1086 } |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1173 rows <= 0) { | 1173 rows <= 0) { |
| 1174 return S_FALSE; | 1174 return S_FALSE; |
| 1175 } | 1175 } |
| 1176 | 1176 |
| 1177 if (row < 0 || row >= rows) | 1177 if (row < 0 || row >= rows) |
| 1178 return E_INVALIDARG; | 1178 return E_INVALIDARG; |
| 1179 | 1179 |
| 1180 for (int i = 0; i < columns; ++i) { | 1180 for (int i = 0; i < columns; ++i) { |
| 1181 int cell_id = cell_ids_[row * columns + i]; | 1181 int cell_id = cell_ids_[row * columns + i]; |
| 1182 BrowserAccessibilityWin* cell = | 1182 BrowserAccessibilityWin* cell = |
| 1183 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1183 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1184 if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER) { | 1184 if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER) { |
| 1185 if (cell->name_.size() > 0) { | 1185 if (cell->name_.size() > 0) { |
| 1186 *description = SysAllocString(cell->name_.c_str()); | 1186 *description = SysAllocString(cell->name_.c_str()); |
| 1187 return S_OK; | 1187 return S_OK; |
| 1188 } | 1188 } |
| 1189 | 1189 |
| 1190 return cell->GetStringAttributeAsBstr( | 1190 return cell->GetStringAttributeAsBstr( |
| 1191 WebAccessibility::ATTR_DESCRIPTION, description); | 1191 WebAccessibility::ATTR_DESCRIPTION, description); |
| 1192 } | 1192 } |
| 1193 } | 1193 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1212 columns <= 0 || | 1212 columns <= 0 || |
| 1213 rows <= 0) { | 1213 rows <= 0) { |
| 1214 return S_FALSE; | 1214 return S_FALSE; |
| 1215 } | 1215 } |
| 1216 | 1216 |
| 1217 if (row < 0 || row >= rows || column < 0 || column >= columns) | 1217 if (row < 0 || row >= rows || column < 0 || column >= columns) |
| 1218 return E_INVALIDARG; | 1218 return E_INVALIDARG; |
| 1219 | 1219 |
| 1220 int cell_id = cell_ids_[row * columns + column]; | 1220 int cell_id = cell_ids_[row * columns + column]; |
| 1221 BrowserAccessibilityWin* cell = | 1221 BrowserAccessibilityWin* cell = |
| 1222 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1222 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1223 int rowspan; | 1223 int rowspan; |
| 1224 if (cell && | 1224 if (cell && |
| 1225 cell->GetIntAttribute( | 1225 cell->GetIntAttribute( |
| 1226 WebAccessibility::ATTR_TABLE_CELL_ROW_SPAN, &rowspan) && | 1226 WebAccessibility::ATTR_TABLE_CELL_ROW_SPAN, &rowspan) && |
| 1227 rowspan >= 1) { | 1227 rowspan >= 1) { |
| 1228 *n_rows_spanned = rowspan; | 1228 *n_rows_spanned = rowspan; |
| 1229 return S_OK; | 1229 return S_OK; |
| 1230 } | 1230 } |
| 1231 | 1231 |
| 1232 return S_FALSE; | 1232 return S_FALSE; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1249 return E_INVALIDARG; | 1249 return E_INVALIDARG; |
| 1250 | 1250 |
| 1251 int cell_id_count = static_cast<int>(unique_cell_ids_.size()); | 1251 int cell_id_count = static_cast<int>(unique_cell_ids_.size()); |
| 1252 if (cell_index < 0) | 1252 if (cell_index < 0) |
| 1253 return E_INVALIDARG; | 1253 return E_INVALIDARG; |
| 1254 if (cell_index >= cell_id_count) | 1254 if (cell_index >= cell_id_count) |
| 1255 return S_FALSE; | 1255 return S_FALSE; |
| 1256 | 1256 |
| 1257 int cell_id = unique_cell_ids_[cell_index]; | 1257 int cell_id = unique_cell_ids_[cell_index]; |
| 1258 BrowserAccessibilityWin* cell = | 1258 BrowserAccessibilityWin* cell = |
| 1259 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1259 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1260 int cell_row_index; | 1260 int cell_row_index; |
| 1261 if (cell && | 1261 if (cell && |
| 1262 cell->GetIntAttribute( | 1262 cell->GetIntAttribute( |
| 1263 WebAccessibility::ATTR_TABLE_CELL_ROW_INDEX, &cell_row_index)) { | 1263 WebAccessibility::ATTR_TABLE_CELL_ROW_INDEX, &cell_row_index)) { |
| 1264 *row_index = cell_row_index; | 1264 *row_index = cell_row_index; |
| 1265 return S_OK; | 1265 return S_OK; |
| 1266 } | 1266 } |
| 1267 | 1267 |
| 1268 return S_FALSE; | 1268 return S_FALSE; |
| 1269 } | 1269 } |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1382 return E_INVALIDARG; | 1382 return E_INVALIDARG; |
| 1383 | 1383 |
| 1384 int cell_id_count = static_cast<int>(unique_cell_ids_.size()); | 1384 int cell_id_count = static_cast<int>(unique_cell_ids_.size()); |
| 1385 if (index < 0) | 1385 if (index < 0) |
| 1386 return E_INVALIDARG; | 1386 return E_INVALIDARG; |
| 1387 if (index >= cell_id_count) | 1387 if (index >= cell_id_count) |
| 1388 return S_FALSE; | 1388 return S_FALSE; |
| 1389 | 1389 |
| 1390 int cell_id = unique_cell_ids_[index]; | 1390 int cell_id = unique_cell_ids_[index]; |
| 1391 BrowserAccessibilityWin* cell = | 1391 BrowserAccessibilityWin* cell = |
| 1392 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1392 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1393 int rowspan; | 1393 int rowspan; |
| 1394 int colspan; | 1394 int colspan; |
| 1395 if (cell && | 1395 if (cell && |
| 1396 cell->GetIntAttribute( | 1396 cell->GetIntAttribute( |
| 1397 WebAccessibility::ATTR_TABLE_CELL_ROW_SPAN, &rowspan) && | 1397 WebAccessibility::ATTR_TABLE_CELL_ROW_SPAN, &rowspan) && |
| 1398 cell->GetIntAttribute( | 1398 cell->GetIntAttribute( |
| 1399 WebAccessibility::ATTR_TABLE_CELL_COLUMN_SPAN, &colspan) && | 1399 WebAccessibility::ATTR_TABLE_CELL_COLUMN_SPAN, &colspan) && |
| 1400 rowspan >= 1 && | 1400 rowspan >= 1 && |
| 1401 colspan >= 1) { | 1401 colspan >= 1) { |
| 1402 *row_extents = rowspan; | 1402 *row_extents = rowspan; |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1520 !table->GetIntAttribute( | 1520 !table->GetIntAttribute( |
| 1521 WebAccessibility::ATTR_TABLE_ROW_COUNT, &rows)) { | 1521 WebAccessibility::ATTR_TABLE_ROW_COUNT, &rows)) { |
| 1522 return S_FALSE; | 1522 return S_FALSE; |
| 1523 } | 1523 } |
| 1524 if (columns <= 0 || rows <= 0 || column < 0 || column >= columns) | 1524 if (columns <= 0 || rows <= 0 || column < 0 || column >= columns) |
| 1525 return S_FALSE; | 1525 return S_FALSE; |
| 1526 | 1526 |
| 1527 for (int i = 0; i < rows; ++i) { | 1527 for (int i = 0; i < rows; ++i) { |
| 1528 int cell_id = table->cell_ids()[i * columns + column]; | 1528 int cell_id = table->cell_ids()[i * columns + column]; |
| 1529 BrowserAccessibilityWin* cell = | 1529 BrowserAccessibilityWin* cell = |
| 1530 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1530 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1531 if (cell && cell->role_ == WebAccessibility::ROLE_COLUMN_HEADER) | 1531 if (cell && cell->role_ == WebAccessibility::ROLE_COLUMN_HEADER) |
| 1532 (*n_column_header_cells)++; | 1532 (*n_column_header_cells)++; |
| 1533 } | 1533 } |
| 1534 | 1534 |
| 1535 *cell_accessibles = static_cast<IUnknown**>(CoTaskMemAlloc( | 1535 *cell_accessibles = static_cast<IUnknown**>(CoTaskMemAlloc( |
| 1536 (*n_column_header_cells) * sizeof(cell_accessibles[0]))); | 1536 (*n_column_header_cells) * sizeof(cell_accessibles[0]))); |
| 1537 int index = 0; | 1537 int index = 0; |
| 1538 for (int i = 0; i < rows; ++i) { | 1538 for (int i = 0; i < rows; ++i) { |
| 1539 int cell_id = table->cell_ids()[i * columns + column]; | 1539 int cell_id = table->cell_ids()[i * columns + column]; |
| 1540 BrowserAccessibilityWin* cell = | 1540 BrowserAccessibilityWin* cell = |
| 1541 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1541 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1542 if (cell && cell->role_ == WebAccessibility::ROLE_COLUMN_HEADER) { | 1542 if (cell && cell->role_ == WebAccessibility::ROLE_COLUMN_HEADER) { |
| 1543 (*cell_accessibles)[index] = | 1543 (*cell_accessibles)[index] = |
| 1544 static_cast<IAccessible*>(cell->NewReference()); | 1544 static_cast<IAccessible*>(cell->NewReference()); |
| 1545 ++index; | 1545 ++index; |
| 1546 } | 1546 } |
| 1547 } | 1547 } |
| 1548 | 1548 |
| 1549 return S_OK; | 1549 return S_OK; |
| 1550 } | 1550 } |
| 1551 | 1551 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1618 !table->GetIntAttribute( | 1618 !table->GetIntAttribute( |
| 1619 WebAccessibility::ATTR_TABLE_ROW_COUNT, &rows)) { | 1619 WebAccessibility::ATTR_TABLE_ROW_COUNT, &rows)) { |
| 1620 return S_FALSE; | 1620 return S_FALSE; |
| 1621 } | 1621 } |
| 1622 if (columns <= 0 || rows <= 0 || row < 0 || row >= rows) | 1622 if (columns <= 0 || rows <= 0 || row < 0 || row >= rows) |
| 1623 return S_FALSE; | 1623 return S_FALSE; |
| 1624 | 1624 |
| 1625 for (int i = 0; i < columns; ++i) { | 1625 for (int i = 0; i < columns; ++i) { |
| 1626 int cell_id = table->cell_ids()[row * columns + i]; | 1626 int cell_id = table->cell_ids()[row * columns + i]; |
| 1627 BrowserAccessibilityWin* cell = | 1627 BrowserAccessibilityWin* cell = |
| 1628 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1628 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1629 if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER) | 1629 if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER) |
| 1630 (*n_row_header_cells)++; | 1630 (*n_row_header_cells)++; |
| 1631 } | 1631 } |
| 1632 | 1632 |
| 1633 *cell_accessibles = static_cast<IUnknown**>(CoTaskMemAlloc( | 1633 *cell_accessibles = static_cast<IUnknown**>(CoTaskMemAlloc( |
| 1634 (*n_row_header_cells) * sizeof(cell_accessibles[0]))); | 1634 (*n_row_header_cells) * sizeof(cell_accessibles[0]))); |
| 1635 int index = 0; | 1635 int index = 0; |
| 1636 for (int i = 0; i < columns; ++i) { | 1636 for (int i = 0; i < columns; ++i) { |
| 1637 int cell_id = table->cell_ids()[row * columns + i]; | 1637 int cell_id = table->cell_ids()[row * columns + i]; |
| 1638 BrowserAccessibilityWin* cell = | 1638 BrowserAccessibilityWin* cell = |
| 1639 manager_->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1639 manager_->GetFromRendererID(cell_id)->toBrowserAccessibilityWin(); |
| 1640 if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER) { | 1640 if (cell && cell->role_ == WebAccessibility::ROLE_ROW_HEADER) { |
| 1641 (*cell_accessibles)[index] = | 1641 (*cell_accessibles)[index] = |
| 1642 static_cast<IAccessible*>(cell->NewReference()); | 1642 static_cast<IAccessible*>(cell->NewReference()); |
| 1643 ++index; | 1643 ++index; |
| 1644 } | 1644 } |
| 1645 } | 1645 } |
| 1646 | 1646 |
| 1647 return S_OK; | 1647 return S_OK; |
| 1648 } | 1648 } |
| 1649 | 1649 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1730 | 1730 |
| 1731 BrowserAccessibility* find_table = parent(); | 1731 BrowserAccessibility* find_table = parent(); |
| 1732 while (find_table && find_table->role() != WebAccessibility::ROLE_TABLE) | 1732 while (find_table && find_table->role() != WebAccessibility::ROLE_TABLE) |
| 1733 find_table = find_table->parent(); | 1733 find_table = find_table->parent(); |
| 1734 if (!find_table) { | 1734 if (!find_table) { |
| 1735 NOTREACHED(); | 1735 NOTREACHED(); |
| 1736 return S_FALSE; | 1736 return S_FALSE; |
| 1737 } | 1737 } |
| 1738 | 1738 |
| 1739 *table = static_cast<IAccessibleTable*>( | 1739 *table = static_cast<IAccessibleTable*>( |
| 1740 find_table->ToBrowserAccessibilityWin()->NewReference()); | 1740 find_table->toBrowserAccessibilityWin()->NewReference()); |
| 1741 | 1741 |
| 1742 return S_OK; | 1742 return S_OK; |
| 1743 } | 1743 } |
| 1744 | 1744 |
| 1745 // | 1745 // |
| 1746 // IAccessibleText methods. | 1746 // IAccessibleText methods. |
| 1747 // | 1747 // |
| 1748 | 1748 |
| 1749 STDMETHODIMP BrowserAccessibilityWin::get_nCharacters(LONG* n_characters) { | 1749 STDMETHODIMP BrowserAccessibilityWin::get_nCharacters(LONG* n_characters) { |
| 1750 if (!instance_active_) | 1750 if (!instance_active_) |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2088 if (!instance_active_) | 2088 if (!instance_active_) |
| 2089 return E_FAIL; | 2089 return E_FAIL; |
| 2090 | 2090 |
| 2091 if (!hyperlink || | 2091 if (!hyperlink || |
| 2092 index < 0 || | 2092 index < 0 || |
| 2093 index >= static_cast<long>(hyperlinks_.size())) { | 2093 index >= static_cast<long>(hyperlinks_.size())) { |
| 2094 return E_INVALIDARG; | 2094 return E_INVALIDARG; |
| 2095 } | 2095 } |
| 2096 | 2096 |
| 2097 BrowserAccessibilityWin* child = | 2097 BrowserAccessibilityWin* child = |
| 2098 children_[hyperlinks_[index]]->ToBrowserAccessibilityWin(); | 2098 children_[hyperlinks_[index]]->toBrowserAccessibilityWin(); |
| 2099 *hyperlink = static_cast<IAccessibleHyperlink*>(child->NewReference()); | 2099 *hyperlink = static_cast<IAccessibleHyperlink*>(child->NewReference()); |
| 2100 return S_OK; | 2100 return S_OK; |
| 2101 } | 2101 } |
| 2102 | 2102 |
| 2103 STDMETHODIMP BrowserAccessibilityWin::get_hyperlinkIndex( | 2103 STDMETHODIMP BrowserAccessibilityWin::get_hyperlinkIndex( |
| 2104 long char_index, | 2104 long char_index, |
| 2105 long* hyperlink_index) { | 2105 long* hyperlink_index) { |
| 2106 if (!instance_active_) | 2106 if (!instance_active_) |
| 2107 return E_FAIL; | 2107 return E_FAIL; |
| 2108 | 2108 |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2390 IA2_SCROLL_TYPE_ANYWHERE); | 2390 IA2_SCROLL_TYPE_ANYWHERE); |
| 2391 } | 2391 } |
| 2392 | 2392 |
| 2393 STDMETHODIMP BrowserAccessibilityWin::get_parentNode(ISimpleDOMNode** node) { | 2393 STDMETHODIMP BrowserAccessibilityWin::get_parentNode(ISimpleDOMNode** node) { |
| 2394 if (!instance_active_) | 2394 if (!instance_active_) |
| 2395 return E_FAIL; | 2395 return E_FAIL; |
| 2396 | 2396 |
| 2397 if (!node) | 2397 if (!node) |
| 2398 return E_INVALIDARG; | 2398 return E_INVALIDARG; |
| 2399 | 2399 |
| 2400 *node = parent_->ToBrowserAccessibilityWin()->NewReference(); | 2400 *node = parent_->toBrowserAccessibilityWin()->NewReference(); |
| 2401 return S_OK; | 2401 return S_OK; |
| 2402 } | 2402 } |
| 2403 | 2403 |
| 2404 STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) { | 2404 STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) { |
| 2405 if (!instance_active_) | 2405 if (!instance_active_) |
| 2406 return E_FAIL; | 2406 return E_FAIL; |
| 2407 | 2407 |
| 2408 if (!node) | 2408 if (!node) |
| 2409 return E_INVALIDARG; | 2409 return E_INVALIDARG; |
| 2410 | 2410 |
| 2411 if (children_.size()) { | 2411 if (children_.size()) { |
| 2412 *node = children_[0]->ToBrowserAccessibilityWin()->NewReference(); | 2412 *node = children_[0]->toBrowserAccessibilityWin()->NewReference(); |
| 2413 return S_OK; | 2413 return S_OK; |
| 2414 } else { | 2414 } else { |
| 2415 *node = NULL; | 2415 *node = NULL; |
| 2416 return S_FALSE; | 2416 return S_FALSE; |
| 2417 } | 2417 } |
| 2418 } | 2418 } |
| 2419 | 2419 |
| 2420 STDMETHODIMP BrowserAccessibilityWin::get_lastChild(ISimpleDOMNode** node) { | 2420 STDMETHODIMP BrowserAccessibilityWin::get_lastChild(ISimpleDOMNode** node) { |
| 2421 if (!instance_active_) | 2421 if (!instance_active_) |
| 2422 return E_FAIL; | 2422 return E_FAIL; |
| 2423 | 2423 |
| 2424 if (!node) | 2424 if (!node) |
| 2425 return E_INVALIDARG; | 2425 return E_INVALIDARG; |
| 2426 | 2426 |
| 2427 if (children_.size()) { | 2427 if (children_.size()) { |
| 2428 *node = children_[children_.size() - 1]->ToBrowserAccessibilityWin()-> | 2428 *node = children_[children_.size() - 1]->toBrowserAccessibilityWin()-> |
| 2429 NewReference(); | 2429 NewReference(); |
| 2430 return S_OK; | 2430 return S_OK; |
| 2431 } else { | 2431 } else { |
| 2432 *node = NULL; | 2432 *node = NULL; |
| 2433 return S_FALSE; | 2433 return S_FALSE; |
| 2434 } | 2434 } |
| 2435 } | 2435 } |
| 2436 | 2436 |
| 2437 STDMETHODIMP BrowserAccessibilityWin::get_previousSibling( | 2437 STDMETHODIMP BrowserAccessibilityWin::get_previousSibling( |
| 2438 ISimpleDOMNode** node) { | 2438 ISimpleDOMNode** node) { |
| 2439 if (!instance_active_) | 2439 if (!instance_active_) |
| 2440 return E_FAIL; | 2440 return E_FAIL; |
| 2441 | 2441 |
| 2442 if (!node) | 2442 if (!node) |
| 2443 return E_INVALIDARG; | 2443 return E_INVALIDARG; |
| 2444 | 2444 |
| 2445 if (parent_ && index_in_parent_ > 0) { | 2445 if (parent_ && index_in_parent_ > 0) { |
| 2446 *node = parent_->children()[index_in_parent_ - 1]-> | 2446 *node = parent_->children()[index_in_parent_ - 1]-> |
| 2447 ToBrowserAccessibilityWin()->NewReference(); | 2447 toBrowserAccessibilityWin()->NewReference(); |
| 2448 return S_OK; | 2448 return S_OK; |
| 2449 } else { | 2449 } else { |
| 2450 *node = NULL; | 2450 *node = NULL; |
| 2451 return S_FALSE; | 2451 return S_FALSE; |
| 2452 } | 2452 } |
| 2453 } | 2453 } |
| 2454 | 2454 |
| 2455 STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) { | 2455 STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) { |
| 2456 if (!instance_active_) | 2456 if (!instance_active_) |
| 2457 return E_FAIL; | 2457 return E_FAIL; |
| 2458 | 2458 |
| 2459 if (!node) | 2459 if (!node) |
| 2460 return E_INVALIDARG; | 2460 return E_INVALIDARG; |
| 2461 | 2461 |
| 2462 if (parent_ && | 2462 if (parent_ && |
| 2463 index_in_parent_ >= 0 && | 2463 index_in_parent_ >= 0 && |
| 2464 index_in_parent_ < static_cast<int>(parent_->children().size()) - 1) { | 2464 index_in_parent_ < static_cast<int>(parent_->children().size()) - 1) { |
| 2465 *node = parent_->children()[index_in_parent_ + 1]-> | 2465 *node = parent_->children()[index_in_parent_ + 1]-> |
| 2466 ToBrowserAccessibilityWin()->NewReference(); | 2466 toBrowserAccessibilityWin()->NewReference(); |
| 2467 return S_OK; | 2467 return S_OK; |
| 2468 } else { | 2468 } else { |
| 2469 *node = NULL; | 2469 *node = NULL; |
| 2470 return S_FALSE; | 2470 return S_FALSE; |
| 2471 } | 2471 } |
| 2472 } | 2472 } |
| 2473 | 2473 |
| 2474 STDMETHODIMP BrowserAccessibilityWin::get_childAt( | 2474 STDMETHODIMP BrowserAccessibilityWin::get_childAt( |
| 2475 unsigned int child_index, | 2475 unsigned int child_index, |
| 2476 ISimpleDOMNode** node) { | 2476 ISimpleDOMNode** node) { |
| 2477 if (!instance_active_) | 2477 if (!instance_active_) |
| 2478 return E_FAIL; | 2478 return E_FAIL; |
| 2479 | 2479 |
| 2480 if (!node) | 2480 if (!node) |
| 2481 return E_INVALIDARG; | 2481 return E_INVALIDARG; |
| 2482 | 2482 |
| 2483 if (child_index < children_.size()) { | 2483 if (child_index < children_.size()) { |
| 2484 *node = children_[child_index]->ToBrowserAccessibilityWin()->NewReference(); | 2484 *node = children_[child_index]->toBrowserAccessibilityWin()->NewReference(); |
| 2485 return S_OK; | 2485 return S_OK; |
| 2486 } else { | 2486 } else { |
| 2487 *node = NULL; | 2487 *node = NULL; |
| 2488 return S_FALSE; | 2488 return S_FALSE; |
| 2489 } | 2489 } |
| 2490 } | 2490 } |
| 2491 | 2491 |
| 2492 // | 2492 // |
| 2493 // ISimpleDOMText methods. | 2493 // ISimpleDOMText methods. |
| 2494 // | 2494 // |
| (...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2841 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( | 2841 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( |
| 2842 const VARIANT& var_id) { | 2842 const VARIANT& var_id) { |
| 2843 if (var_id.vt != VT_I4) | 2843 if (var_id.vt != VT_I4) |
| 2844 return NULL; | 2844 return NULL; |
| 2845 | 2845 |
| 2846 LONG child_id = var_id.lVal; | 2846 LONG child_id = var_id.lVal; |
| 2847 if (child_id == CHILDID_SELF) | 2847 if (child_id == CHILDID_SELF) |
| 2848 return this; | 2848 return this; |
| 2849 | 2849 |
| 2850 if (child_id >= 1 && child_id <= static_cast<LONG>(children_.size())) | 2850 if (child_id >= 1 && child_id <= static_cast<LONG>(children_.size())) |
| 2851 return children_[child_id - 1]->ToBrowserAccessibilityWin(); | 2851 return children_[child_id - 1]->toBrowserAccessibilityWin(); |
| 2852 | 2852 |
| 2853 return manager_->GetFromChildID(child_id)->ToBrowserAccessibilityWin(); | 2853 return manager_->GetFromChildID(child_id)->toBrowserAccessibilityWin(); |
| 2854 } | 2854 } |
| 2855 | 2855 |
| 2856 HRESULT BrowserAccessibilityWin::GetStringAttributeAsBstr( | 2856 HRESULT BrowserAccessibilityWin::GetStringAttributeAsBstr( |
| 2857 WebAccessibility::StringAttribute attribute, BSTR* value_bstr) { | 2857 WebAccessibility::StringAttribute attribute, BSTR* value_bstr) { |
| 2858 string16 str; | 2858 string16 str; |
| 2859 | 2859 |
| 2860 if (!GetStringAttribute(attribute, &str)) | 2860 if (!GetStringAttribute(attribute, &str)) |
| 2861 return S_FALSE; | 2861 return S_FALSE; |
| 2862 | 2862 |
| 2863 if (str.empty()) | 2863 if (str.empty()) |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2937 LONG start_offset, | 2937 LONG start_offset, |
| 2938 ui::TextBoundaryDirection direction) { | 2938 ui::TextBoundaryDirection direction) { |
| 2939 HandleSpecialTextOffset(text, &start_offset); | 2939 HandleSpecialTextOffset(text, &start_offset); |
| 2940 ui::TextBoundaryType boundary = IA2TextBoundaryToTextBoundary(ia2_boundary); | 2940 ui::TextBoundaryType boundary = IA2TextBoundaryToTextBoundary(ia2_boundary); |
| 2941 return ui::FindAccessibleTextBoundary( | 2941 return ui::FindAccessibleTextBoundary( |
| 2942 text, line_breaks_, boundary, start_offset, direction); | 2942 text, line_breaks_, boundary, start_offset, direction); |
| 2943 } | 2943 } |
| 2944 | 2944 |
| 2945 BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromRendererID( | 2945 BrowserAccessibilityWin* BrowserAccessibilityWin::GetFromRendererID( |
| 2946 int32 renderer_id) { | 2946 int32 renderer_id) { |
| 2947 return manager_->GetFromRendererID(renderer_id)->ToBrowserAccessibilityWin(); | 2947 return manager_->GetFromRendererID(renderer_id)->toBrowserAccessibilityWin(); |
| 2948 } | 2948 } |
| 2949 | 2949 |
| 2950 void BrowserAccessibilityWin::InitRoleAndState() { | 2950 void BrowserAccessibilityWin::InitRoleAndState() { |
| 2951 ia_state_ = 0; | 2951 ia_state_ = 0; |
| 2952 ia2_state_ = IA2_STATE_OPAQUE; | 2952 ia2_state_ = IA2_STATE_OPAQUE; |
| 2953 ia2_attributes_.clear(); | 2953 ia2_attributes_.clear(); |
| 2954 | 2954 |
| 2955 if (HasState(WebAccessibility::STATE_BUSY)) | 2955 if (HasState(WebAccessibility::STATE_BUSY)) |
| 2956 ia_state_|= STATE_SYSTEM_BUSY; | 2956 ia_state_|= STATE_SYSTEM_BUSY; |
| 2957 if (HasState(WebAccessibility::STATE_CHECKED)) | 2957 if (HasState(WebAccessibility::STATE_CHECKED)) |
| (...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3376 } | 3376 } |
| 3377 | 3377 |
| 3378 // The role should always be set. | 3378 // The role should always be set. |
| 3379 DCHECK(!role_name_.empty() || ia_role_); | 3379 DCHECK(!role_name_.empty() || ia_role_); |
| 3380 | 3380 |
| 3381 // If we didn't explicitly set the IAccessible2 role, make it the same | 3381 // If we didn't explicitly set the IAccessible2 role, make it the same |
| 3382 // as the MSAA role. | 3382 // as the MSAA role. |
| 3383 if (!ia2_role_) | 3383 if (!ia2_role_) |
| 3384 ia2_role_ = ia_role_; | 3384 ia2_role_ = ia_role_; |
| 3385 } | 3385 } |
| OLD | NEW |