OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "chrome/browser/accessibility/browser_accessibility_win.h" | 5 #include "chrome/browser/accessibility/browser_accessibility_win.h" |
6 | 6 |
7 #include "base/string_number_conversions.h" | 7 #include "base/string_number_conversions.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "chrome/browser/accessibility/browser_accessibility_manager_win.h" | 10 #include "chrome/browser/accessibility/browser_accessibility_manager_win.h" |
11 #include "net/base/escape.h" | 11 #include "net/base/escape.h" |
12 | 12 |
13 using webkit_glue::WebAccessibility; | 13 using webkit_glue::WebAccessibility; |
14 | 14 |
15 // static | |
16 BrowserAccessibility* BrowserAccessibility::Create() { | |
17 CComObject<BrowserAccessibilityWin>* instance; | |
18 HRESULT hr = CComObject<BrowserAccessibilityWin>::CreateInstance(&instance); | |
19 DCHECK(SUCCEEDED(hr)); | |
20 return instance->NewReference(); | |
21 } | |
22 | |
23 BrowserAccessibilityWin* BrowserAccessibility::toBrowserAccessibilityWin() { | |
24 return static_cast<BrowserAccessibilityWin*>(this); | |
25 } | |
26 | |
27 BrowserAccessibilityWin::BrowserAccessibilityWin() | 15 BrowserAccessibilityWin::BrowserAccessibilityWin() |
28 : instance_active_(false) { | 16 : manager_(NULL), |
| 17 parent_(NULL), |
| 18 child_id_(-1), |
| 19 index_in_parent_(-1), |
| 20 renderer_id_(-1), |
| 21 instance_active_(false) { |
29 } | 22 } |
30 | 23 |
31 BrowserAccessibilityWin::~BrowserAccessibilityWin() { | 24 BrowserAccessibilityWin::~BrowserAccessibilityWin() { |
32 ReleaseTree(); | 25 InactivateTree(); |
| 26 } |
| 27 |
| 28 void BrowserAccessibilityWin::Initialize( |
| 29 BrowserAccessibilityManagerWin* manager, |
| 30 BrowserAccessibilityWin* parent, |
| 31 LONG child_id, |
| 32 LONG index_in_parent, |
| 33 const webkit_glue::WebAccessibility& src) { |
| 34 manager_ = manager; |
| 35 parent_ = parent; |
| 36 child_id_ = child_id; |
| 37 index_in_parent_ = index_in_parent; |
| 38 |
| 39 renderer_id_ = src.id; |
| 40 name_ = src.name; |
| 41 value_ = src.value; |
| 42 attributes_ = src.attributes; |
| 43 html_attributes_ = src.html_attributes; |
| 44 location_ = src.location; |
| 45 src_role_ = src.role; |
| 46 InitRoleAndState(src.role, src.state); |
| 47 |
| 48 // Expose headings levels to NVDA with the "level" object attribute. |
| 49 if (src.role == WebAccessibility::ROLE_HEADING && role_name_.size() == 2 && |
| 50 IsAsciiDigit(role_name_[1])) { |
| 51 html_attributes_.push_back(std::make_pair(L"level", role_name_.substr(1))); |
| 52 } |
| 53 |
| 54 // If this object doesn't have a name but it does have a description, |
| 55 // use the description as its name - because some screen readers only |
| 56 // announce the name. |
| 57 if (name_.empty() && HasAttribute(WebAccessibility::ATTR_DESCRIPTION)) { |
| 58 GetAttribute(WebAccessibility::ATTR_DESCRIPTION, &name_); |
| 59 } |
| 60 |
| 61 instance_active_ = true; |
| 62 } |
| 63 |
| 64 void BrowserAccessibilityWin::AddChild(BrowserAccessibilityWin* child) { |
| 65 children_.push_back(child); |
| 66 } |
| 67 |
| 68 void BrowserAccessibilityWin::InactivateTree() { |
| 69 if (!instance_active_) |
| 70 return; |
| 71 |
| 72 // Mark this object as inactive, so calls to all COM methods will return |
| 73 // failure. |
| 74 instance_active_ = false; |
| 75 |
| 76 // Now we can safely call InactivateTree on our children and remove |
| 77 // references to them, so that as much of the tree as possible will be |
| 78 // destroyed now - however, nodes that still have references to them |
| 79 // might stick around a while until all clients have released them. |
| 80 for (std::vector<BrowserAccessibilityWin*>::iterator iter = |
| 81 children_.begin(); |
| 82 iter != children_.end(); ++iter) { |
| 83 (*iter)->InactivateTree(); |
| 84 (*iter)->Release(); |
| 85 } |
| 86 children_.clear(); |
| 87 manager_->Remove(child_id_); |
| 88 } |
| 89 |
| 90 bool BrowserAccessibilityWin::IsDescendantOf( |
| 91 BrowserAccessibilityWin* ancestor) { |
| 92 if (this == ancestor) { |
| 93 return true; |
| 94 } else if (parent_) { |
| 95 return parent_->IsDescendantOf(ancestor); |
| 96 } |
| 97 |
| 98 return false; |
| 99 } |
| 100 |
| 101 BrowserAccessibilityWin* BrowserAccessibilityWin::GetParent() { |
| 102 return parent_; |
| 103 } |
| 104 |
| 105 uint32 BrowserAccessibilityWin::GetChildCount() { |
| 106 return children_.size(); |
| 107 } |
| 108 |
| 109 BrowserAccessibilityWin* BrowserAccessibilityWin::GetChild(uint32 child_index) { |
| 110 DCHECK(child_index >= 0 && child_index < children_.size()); |
| 111 return children_[child_index]; |
| 112 } |
| 113 |
| 114 BrowserAccessibilityWin* BrowserAccessibilityWin::GetPreviousSibling() { |
| 115 if (parent_ && index_in_parent_ > 0) |
| 116 return parent_->children_[index_in_parent_ - 1]; |
| 117 |
| 118 return NULL; |
| 119 } |
| 120 |
| 121 BrowserAccessibilityWin* BrowserAccessibilityWin::GetNextSibling() { |
| 122 if (parent_ && |
| 123 index_in_parent_ >= 0 && |
| 124 index_in_parent_ < static_cast<int>(parent_->children_.size() - 1)) { |
| 125 return parent_->children_[index_in_parent_ + 1]; |
| 126 } |
| 127 |
| 128 return NULL; |
| 129 } |
| 130 |
| 131 void BrowserAccessibilityWin::ReplaceChild( |
| 132 const BrowserAccessibilityWin* old_acc, BrowserAccessibilityWin* new_acc) { |
| 133 DCHECK_EQ(children_[old_acc->index_in_parent_], old_acc); |
| 134 |
| 135 old_acc = children_[old_acc->index_in_parent_]; |
| 136 children_[old_acc->index_in_parent_] = new_acc; |
| 137 } |
| 138 |
| 139 BrowserAccessibilityWin* BrowserAccessibilityWin::NewReference() { |
| 140 AddRef(); |
| 141 return this; |
33 } | 142 } |
34 | 143 |
35 // | 144 // |
36 // IAccessible methods. | 145 // IAccessible methods. |
37 // | 146 // |
38 // Conventions: | 147 // Conventions: |
39 // * Always test for instance_active_ first and return E_FAIL if it's false. | 148 // * Always test for instance_active_ first and return E_FAIL if it's false. |
40 // * Always check for invalid arguments first, even if they're unused. | 149 // * Always check for invalid arguments first, even if they're unused. |
41 // * Return S_FALSE if the only output is a string argument and it's empty. | 150 // * Return S_FALSE if the only output is a string argument and it's empty. |
42 // | 151 // |
(...skipping 29 matching lines...) Expand all Loading... |
72 | 181 |
73 if (!x_left || !y_top || !width || !height) | 182 if (!x_left || !y_top || !width || !height) |
74 return E_INVALIDARG; | 183 return E_INVALIDARG; |
75 | 184 |
76 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); | 185 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); |
77 if (!target) | 186 if (!target) |
78 return E_INVALIDARG; | 187 return E_INVALIDARG; |
79 | 188 |
80 // Find the top left corner of the containing window in screen coords, and | 189 // Find the top left corner of the containing window in screen coords, and |
81 // adjust the output position by this amount. | 190 // adjust the output position by this amount. |
82 HWND parent_hwnd = manager_->GetParentView(); | 191 HWND parent_hwnd = manager_->GetParentWindow(); |
83 POINT top_left = {0, 0}; | 192 POINT top_left = {0, 0}; |
84 ::ClientToScreen(parent_hwnd, &top_left); | 193 ::ClientToScreen(parent_hwnd, &top_left); |
85 | 194 |
86 *x_left = target->location_.x + top_left.x; | 195 *x_left = target->location_.x + top_left.x; |
87 *y_top = target->location_.y + top_left.y; | 196 *y_top = target->location_.y + top_left.y; |
88 *width = target->location_.width; | 197 *width = target->location_.width; |
89 *height = target->location_.height; | 198 *height = target->location_.height; |
90 | 199 |
91 return S_OK; | 200 return S_OK; |
92 } | 201 } |
93 | 202 |
94 STDMETHODIMP BrowserAccessibilityWin::accNavigate( | 203 STDMETHODIMP BrowserAccessibilityWin::accNavigate( |
95 LONG nav_dir, VARIANT start, VARIANT* end) { | 204 LONG nav_dir, VARIANT start, VARIANT* end) { |
96 BrowserAccessibilityWin* target = GetTargetFromChildID(start); | 205 BrowserAccessibilityWin* target = GetTargetFromChildID(start); |
97 if (!target) | 206 if (!target) |
98 return E_INVALIDARG; | 207 return E_INVALIDARG; |
99 | 208 |
100 if ((nav_dir == NAVDIR_LASTCHILD || nav_dir == NAVDIR_FIRSTCHILD) && | 209 if ((nav_dir == NAVDIR_LASTCHILD || nav_dir == NAVDIR_FIRSTCHILD) && |
101 start.lVal != CHILDID_SELF) { | 210 start.lVal != CHILDID_SELF) { |
102 // MSAA states that navigating to first/last child can only be from self. | 211 // MSAA states that navigating to first/last child can only be from self. |
103 return E_INVALIDARG; | 212 return E_INVALIDARG; |
104 } | 213 } |
105 | 214 |
106 BrowserAccessibility* result = NULL; | 215 BrowserAccessibilityWin* result = NULL; |
107 switch (nav_dir) { | 216 switch (nav_dir) { |
108 case NAVDIR_DOWN: | 217 case NAVDIR_DOWN: |
109 case NAVDIR_UP: | 218 case NAVDIR_UP: |
110 case NAVDIR_LEFT: | 219 case NAVDIR_LEFT: |
111 case NAVDIR_RIGHT: | 220 case NAVDIR_RIGHT: |
112 // These directions are not implemented, matching Mozilla and IE. | 221 // These directions are not implemented, matching Mozilla and IE. |
113 return E_NOTIMPL; | 222 return E_NOTIMPL; |
114 case NAVDIR_FIRSTCHILD: | 223 case NAVDIR_FIRSTCHILD: |
115 if (target->children_.size() > 0) | 224 if (target->children_.size() > 0) |
116 result = target->children_[0]; | 225 result = target->children_[0]; |
117 break; | 226 break; |
118 case NAVDIR_LASTCHILD: | 227 case NAVDIR_LASTCHILD: |
119 if (target->children_.size() > 0) | 228 if (target->children_.size() > 0) |
120 result = target->children_[target->children_.size() - 1]; | 229 result = target->children_[target->children_.size() - 1]; |
121 break; | 230 break; |
122 case NAVDIR_NEXT: | 231 case NAVDIR_NEXT: |
123 result = target->GetNextSibling(); | 232 result = target->GetNextSibling(); |
124 break; | 233 break; |
125 case NAVDIR_PREVIOUS: | 234 case NAVDIR_PREVIOUS: |
126 result = target->GetPreviousSibling(); | 235 result = target->GetPreviousSibling(); |
127 break; | 236 break; |
128 } | 237 } |
129 | 238 |
130 if (!result) { | 239 if (!result) { |
131 end->vt = VT_EMPTY; | 240 end->vt = VT_EMPTY; |
132 return S_FALSE; | 241 return S_FALSE; |
133 } | 242 } |
134 | 243 |
135 end->vt = VT_DISPATCH; | 244 end->vt = VT_DISPATCH; |
136 end->pdispVal = result->toBrowserAccessibilityWin()->NewReference(); | 245 end->pdispVal = result->NewReference(); |
137 return S_OK; | 246 return S_OK; |
138 } | 247 } |
139 | 248 |
140 STDMETHODIMP BrowserAccessibilityWin::get_accChild(VARIANT var_child, | 249 STDMETHODIMP BrowserAccessibilityWin::get_accChild(VARIANT var_child, |
141 IDispatch** disp_child) { | 250 IDispatch** disp_child) { |
142 if (!instance_active_) | 251 if (!instance_active_) |
143 return E_FAIL; | 252 return E_FAIL; |
144 | 253 |
145 if (!disp_child) | 254 if (!disp_child) |
146 return E_INVALIDARG; | 255 return E_INVALIDARG; |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 return S_OK; | 377 return S_OK; |
269 } | 378 } |
270 | 379 |
271 STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) { | 380 STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) { |
272 if (!instance_active_) | 381 if (!instance_active_) |
273 return E_FAIL; | 382 return E_FAIL; |
274 | 383 |
275 if (!disp_parent) | 384 if (!disp_parent) |
276 return E_INVALIDARG; | 385 return E_INVALIDARG; |
277 | 386 |
278 IAccessible* parent = parent_->toBrowserAccessibilityWin(); | 387 IAccessible* parent = parent_; |
279 if (parent == NULL) { | 388 if (parent == NULL) { |
280 // This happens if we're the root of the tree; | 389 // This happens if we're the root of the tree; |
281 // return the IAccessible for the window. | 390 // return the IAccessible for the window. |
282 parent = manager_->toBrowserAccessibilityManagerWin()-> | 391 parent = manager_->GetParentWindowIAccessible(); |
283 GetParentWindowIAccessible(); | |
284 } | 392 } |
285 | 393 |
286 parent->AddRef(); | 394 parent->AddRef(); |
287 *disp_parent = parent; | 395 *disp_parent = parent; |
288 return S_OK; | 396 return S_OK; |
289 } | 397 } |
290 | 398 |
291 STDMETHODIMP BrowserAccessibilityWin::get_accRole( | 399 STDMETHODIMP BrowserAccessibilityWin::get_accRole( |
292 VARIANT var_id, VARIANT* role) { | 400 VARIANT var_id, VARIANT* role) { |
293 if (!instance_active_) | 401 if (!instance_active_) |
294 return E_FAIL; | 402 return E_FAIL; |
295 | 403 |
296 if (!role) | 404 if (!role) |
297 return E_INVALIDARG; | 405 return E_INVALIDARG; |
298 | 406 |
299 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); | 407 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); |
300 if (!target) | 408 if (!target) |
301 return E_INVALIDARG; | 409 return E_INVALIDARG; |
302 | 410 |
303 if (!target->role_name_.empty()) { | 411 if (!target->role_name_.empty()) { |
304 role->vt = VT_BSTR; | 412 role->vt = VT_BSTR; |
305 role->bstrVal = SysAllocString(target->role_name_.c_str()); | 413 role->bstrVal = SysAllocString(target->role_name_.c_str()); |
306 } else { | 414 } else { |
307 role->vt = VT_I4; | 415 role->vt = VT_I4; |
308 role->lVal = target->ia_role_; | 416 role->lVal = target->role_; |
309 } | 417 } |
310 return S_OK; | 418 return S_OK; |
311 } | 419 } |
312 | 420 |
313 STDMETHODIMP BrowserAccessibilityWin::get_accState(VARIANT var_id, | 421 STDMETHODIMP BrowserAccessibilityWin::get_accState(VARIANT var_id, |
314 VARIANT* state) { | 422 VARIANT* state) { |
315 if (!instance_active_) | 423 if (!instance_active_) |
316 return E_FAIL; | 424 return E_FAIL; |
317 | 425 |
318 if (!state) | 426 if (!state) |
319 return E_INVALIDARG; | 427 return E_INVALIDARG; |
320 | 428 |
321 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); | 429 BrowserAccessibilityWin* target = GetTargetFromChildID(var_id); |
322 if (!target) | 430 if (!target) |
323 return E_INVALIDARG; | 431 return E_INVALIDARG; |
324 | 432 |
325 state->vt = VT_I4; | 433 state->vt = VT_I4; |
326 state->lVal = target->ia_state_; | 434 state->lVal = target->state_; |
327 if (manager_->GetFocus(NULL) == this) | 435 if (manager_->GetFocus(NULL) == this) |
328 state->lVal |= STATE_SYSTEM_FOCUSED; | 436 state->lVal |= STATE_SYSTEM_FOCUSED; |
329 | 437 |
330 return S_OK; | 438 return S_OK; |
331 } | 439 } |
332 | 440 |
333 STDMETHODIMP BrowserAccessibilityWin::get_accValue( | 441 STDMETHODIMP BrowserAccessibilityWin::get_accValue( |
334 VARIANT var_id, BSTR* value) { | 442 VARIANT var_id, BSTR* value) { |
335 if (!instance_active_) | 443 if (!instance_active_) |
336 return E_FAIL; | 444 return E_FAIL; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 return S_OK; | 546 return S_OK; |
439 } | 547 } |
440 | 548 |
441 STDMETHODIMP BrowserAccessibilityWin::get_windowHandle(HWND* window_handle) { | 549 STDMETHODIMP BrowserAccessibilityWin::get_windowHandle(HWND* window_handle) { |
442 if (!instance_active_) | 550 if (!instance_active_) |
443 return E_FAIL; | 551 return E_FAIL; |
444 | 552 |
445 if (!window_handle) | 553 if (!window_handle) |
446 return E_INVALIDARG; | 554 return E_INVALIDARG; |
447 | 555 |
448 *window_handle = manager_->GetParentView(); | 556 *window_handle = manager_->GetParentWindow(); |
449 return S_OK; | 557 return S_OK; |
450 } | 558 } |
451 | 559 |
452 STDMETHODIMP BrowserAccessibilityWin::get_indexInParent(LONG* index_in_parent) { | 560 STDMETHODIMP BrowserAccessibilityWin::get_indexInParent(LONG* index_in_parent) { |
453 if (!instance_active_) | 561 if (!instance_active_) |
454 return E_FAIL; | 562 return E_FAIL; |
455 | 563 |
456 if (!index_in_parent) | 564 if (!index_in_parent) |
457 return E_INVALIDARG; | 565 return E_INVALIDARG; |
458 | 566 |
(...skipping 17 matching lines...) Expand all Loading... |
476 | 584 |
477 STDMETHODIMP BrowserAccessibilityWin::get_imagePosition( | 585 STDMETHODIMP BrowserAccessibilityWin::get_imagePosition( |
478 enum IA2CoordinateType coordinate_type, LONG* x, LONG* y) { | 586 enum IA2CoordinateType coordinate_type, LONG* x, LONG* y) { |
479 if (!instance_active_) | 587 if (!instance_active_) |
480 return E_FAIL; | 588 return E_FAIL; |
481 | 589 |
482 if (!x || !y) | 590 if (!x || !y) |
483 return E_INVALIDARG; | 591 return E_INVALIDARG; |
484 | 592 |
485 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { | 593 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { |
486 HWND parent_hwnd = manager_->GetParentView(); | 594 HWND parent_hwnd = manager_->GetParentWindow(); |
487 POINT top_left = {0, 0}; | 595 POINT top_left = {0, 0}; |
488 ::ClientToScreen(parent_hwnd, &top_left); | 596 ::ClientToScreen(parent_hwnd, &top_left); |
489 *x = location_.x + top_left.x; | 597 *x = location_.x + top_left.x; |
490 *y = location_.y + top_left.y; | 598 *y = location_.y + top_left.y; |
491 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { | 599 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { |
492 *x = location_.x; | 600 *x = location_.x; |
493 *y = location_.y; | 601 *y = location_.y; |
494 if (parent_) { | 602 if (parent_) { |
495 *x -= parent_->location().x; | 603 *x -= parent_->location_.x; |
496 *y -= parent_->location().y; | 604 *y -= parent_->location_.y; |
497 } | 605 } |
498 } else { | 606 } else { |
499 return E_INVALIDARG; | 607 return E_INVALIDARG; |
500 } | 608 } |
501 | 609 |
502 return S_OK; | 610 return S_OK; |
503 } | 611 } |
504 | 612 |
505 STDMETHODIMP BrowserAccessibilityWin::get_imageSize(LONG* height, LONG* width) { | 613 STDMETHODIMP BrowserAccessibilityWin::get_imageSize(LONG* height, LONG* width) { |
506 if (!instance_active_) | 614 if (!instance_active_) |
(...skipping 11 matching lines...) Expand all Loading... |
518 // IAccessibleText methods. | 626 // IAccessibleText methods. |
519 // | 627 // |
520 | 628 |
521 STDMETHODIMP BrowserAccessibilityWin::get_nCharacters(LONG* n_characters) { | 629 STDMETHODIMP BrowserAccessibilityWin::get_nCharacters(LONG* n_characters) { |
522 if (!instance_active_) | 630 if (!instance_active_) |
523 return E_FAIL; | 631 return E_FAIL; |
524 | 632 |
525 if (!n_characters) | 633 if (!n_characters) |
526 return E_INVALIDARG; | 634 return E_INVALIDARG; |
527 | 635 |
528 if (role_ == WebAccessibility::ROLE_TEXT_FIELD) { | 636 if (src_role_ == WebAccessibility::ROLE_TEXT_FIELD) { |
529 *n_characters = value_.length(); | 637 *n_characters = value_.length(); |
530 } else { | 638 } else { |
531 *n_characters = name_.length(); | 639 *n_characters = name_.length(); |
532 } | 640 } |
533 | 641 |
534 return S_OK; | 642 return S_OK; |
535 } | 643 } |
536 | 644 |
537 STDMETHODIMP BrowserAccessibilityWin::get_text( | 645 STDMETHODIMP BrowserAccessibilityWin::get_text( |
538 LONG start_offset, LONG end_offset, BSTR* text) { | 646 LONG start_offset, LONG end_offset, BSTR* text) { |
539 if (!instance_active_) | 647 if (!instance_active_) |
540 return E_FAIL; | 648 return E_FAIL; |
541 | 649 |
542 if (!text) | 650 if (!text) |
543 return E_INVALIDARG; | 651 return E_INVALIDARG; |
544 | 652 |
545 string16 text_str; | 653 string16 text_str; |
546 if (role_ == WebAccessibility::ROLE_TEXT_FIELD) { | 654 if (src_role_ == WebAccessibility::ROLE_TEXT_FIELD) { |
547 text_str = value_; | 655 text_str = value_; |
548 } else { | 656 } else { |
549 text_str = name_; | 657 text_str = name_; |
550 } | 658 } |
551 | 659 |
552 // The spec allows the arguments to be reversed. | 660 // The spec allows the arguments to be reversed. |
553 if (start_offset > end_offset) { | 661 if (start_offset > end_offset) { |
554 LONG tmp = start_offset; | 662 LONG tmp = start_offset; |
555 start_offset = end_offset; | 663 start_offset = end_offset; |
556 end_offset = tmp; | 664 end_offset = tmp; |
(...skipping 16 matching lines...) Expand all Loading... |
573 return S_OK; | 681 return S_OK; |
574 } | 682 } |
575 | 683 |
576 STDMETHODIMP BrowserAccessibilityWin::get_caretOffset(LONG* offset) { | 684 STDMETHODIMP BrowserAccessibilityWin::get_caretOffset(LONG* offset) { |
577 if (!instance_active_) | 685 if (!instance_active_) |
578 return E_FAIL; | 686 return E_FAIL; |
579 | 687 |
580 if (!offset) | 688 if (!offset) |
581 return E_INVALIDARG; | 689 return E_INVALIDARG; |
582 | 690 |
583 if (role_ == WebAccessibility::ROLE_TEXT_FIELD) { | 691 if (src_role_ == WebAccessibility::ROLE_TEXT_FIELD) { |
584 int sel_start = 0; | 692 int sel_start = 0; |
585 if (GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_START, &sel_start)) { | 693 if (GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_START, &sel_start)) { |
586 *offset = sel_start; | 694 *offset = sel_start; |
587 } else { | 695 } else { |
588 *offset = 0; | 696 *offset = 0; |
589 } | 697 } |
590 } else { | 698 } else { |
591 *offset = 0; | 699 *offset = 0; |
592 } | 700 } |
593 | 701 |
594 return S_OK; | 702 return S_OK; |
595 } | 703 } |
596 | 704 |
597 STDMETHODIMP BrowserAccessibilityWin::get_nSelections(LONG* n_selections) { | 705 STDMETHODIMP BrowserAccessibilityWin::get_nSelections(LONG* n_selections) { |
598 if (!instance_active_) | 706 if (!instance_active_) |
599 return E_FAIL; | 707 return E_FAIL; |
600 | 708 |
601 if (!n_selections) | 709 if (!n_selections) |
602 return E_INVALIDARG; | 710 return E_INVALIDARG; |
603 | 711 |
604 if (role_ == WebAccessibility::ROLE_TEXT_FIELD) { | 712 if (src_role_ == WebAccessibility::ROLE_TEXT_FIELD) { |
605 int sel_start = 0; | 713 int sel_start = 0; |
606 int sel_end = 0; | 714 int sel_end = 0; |
607 if (GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_START, &sel_start) && | 715 if (GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_START, &sel_start) && |
608 GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_END, &sel_end) && | 716 GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_END, &sel_end) && |
609 sel_start != sel_end) { | 717 sel_start != sel_end) { |
610 *n_selections = 1; | 718 *n_selections = 1; |
611 } else { | 719 } else { |
612 *n_selections = 0; | 720 *n_selections = 0; |
613 } | 721 } |
614 } else { | 722 } else { |
615 *n_selections = 0; | 723 *n_selections = 0; |
616 } | 724 } |
617 | 725 |
618 return S_OK; | 726 return S_OK; |
619 } | 727 } |
620 | 728 |
621 STDMETHODIMP BrowserAccessibilityWin::get_selection(LONG selection_index, | 729 STDMETHODIMP BrowserAccessibilityWin::get_selection(LONG selection_index, |
622 LONG* start_offset, | 730 LONG* start_offset, |
623 LONG* end_offset) { | 731 LONG* end_offset) { |
624 if (!instance_active_) | 732 if (!instance_active_) |
625 return E_FAIL; | 733 return E_FAIL; |
626 | 734 |
627 if (!start_offset || !end_offset || selection_index != 0) | 735 if (!start_offset || !end_offset || selection_index != 0) |
628 return E_INVALIDARG; | 736 return E_INVALIDARG; |
629 | 737 |
630 if (role_ == WebAccessibility::ROLE_TEXT_FIELD) { | 738 if (src_role_ == WebAccessibility::ROLE_TEXT_FIELD) { |
631 int sel_start = 0; | 739 int sel_start = 0; |
632 int sel_end = 0; | 740 int sel_end = 0; |
633 if (GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_START, &sel_start) && | 741 if (GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_START, &sel_start) && |
634 GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_END, &sel_end)) { | 742 GetAttributeAsInt(WebAccessibility::ATTR_TEXT_SEL_END, &sel_end)) { |
635 *start_offset = sel_start; | 743 *start_offset = sel_start; |
636 *end_offset = sel_end; | 744 *end_offset = sel_end; |
637 } else { | 745 } else { |
638 *start_offset = 0; | 746 *start_offset = 0; |
639 *end_offset = 0; | 747 *end_offset = 0; |
640 } | 748 } |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 if (GetAttribute(WebAccessibility::ATTR_HTML_TAG, &tag)) | 821 if (GetAttribute(WebAccessibility::ATTR_HTML_TAG, &tag)) |
714 *node_name = SysAllocString(tag.c_str()); | 822 *node_name = SysAllocString(tag.c_str()); |
715 else | 823 else |
716 *node_name = NULL; | 824 *node_name = NULL; |
717 | 825 |
718 *name_space_id = 0; | 826 *name_space_id = 0; |
719 *node_value = SysAllocString(value_.c_str()); | 827 *node_value = SysAllocString(value_.c_str()); |
720 *num_children = children_.size(); | 828 *num_children = children_.size(); |
721 *unique_id = child_id_; | 829 *unique_id = child_id_; |
722 | 830 |
723 if (ia_role_ == ROLE_SYSTEM_DOCUMENT) { | 831 if (role_ == ROLE_SYSTEM_DOCUMENT) { |
724 *node_type = NODETYPE_DOCUMENT; | 832 *node_type = NODETYPE_DOCUMENT; |
725 } else if (ia_role_ == ROLE_SYSTEM_TEXT && | 833 } else if (role_ == ROLE_SYSTEM_TEXT && |
726 ((ia2_state_ & IA2_STATE_EDITABLE) == 0)) { | 834 ((ia2_state_ & IA2_STATE_EDITABLE) == 0)) { |
727 *node_type = NODETYPE_TEXT; | 835 *node_type = NODETYPE_TEXT; |
728 } else { | 836 } else { |
729 *node_type = NODETYPE_ELEMENT; | 837 *node_type = NODETYPE_ELEMENT; |
730 } | 838 } |
731 | 839 |
732 return S_OK; | 840 return S_OK; |
733 } | 841 } |
734 | 842 |
735 STDMETHODIMP BrowserAccessibilityWin::get_attributes( | 843 STDMETHODIMP BrowserAccessibilityWin::get_attributes( |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 return E_NOTIMPL; | 954 return E_NOTIMPL; |
847 } | 955 } |
848 | 956 |
849 STDMETHODIMP BrowserAccessibilityWin::get_parentNode(ISimpleDOMNode** node) { | 957 STDMETHODIMP BrowserAccessibilityWin::get_parentNode(ISimpleDOMNode** node) { |
850 if (!instance_active_) | 958 if (!instance_active_) |
851 return E_FAIL; | 959 return E_FAIL; |
852 | 960 |
853 if (!node) | 961 if (!node) |
854 return E_INVALIDARG; | 962 return E_INVALIDARG; |
855 | 963 |
856 *node = parent_->toBrowserAccessibilityWin()->NewReference(); | 964 *node = parent_->NewReference(); |
857 return S_OK; | 965 return S_OK; |
858 } | 966 } |
859 | 967 |
860 STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) { | 968 STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) { |
861 if (!instance_active_) | 969 if (!instance_active_) |
862 return E_FAIL; | 970 return E_FAIL; |
863 | 971 |
864 if (!node) | 972 if (!node) |
865 return E_INVALIDARG; | 973 return E_INVALIDARG; |
866 | 974 |
867 if (children_.size()) { | 975 if (children_.size()) { |
868 *node = children_[0]->toBrowserAccessibilityWin()->NewReference(); | 976 *node = children_[0]->NewReference(); |
869 return S_OK; | 977 return S_OK; |
870 } else { | 978 } else { |
871 *node = NULL; | 979 *node = NULL; |
872 return S_FALSE; | 980 return S_FALSE; |
873 } | 981 } |
874 } | 982 } |
875 | 983 |
876 STDMETHODIMP BrowserAccessibilityWin::get_lastChild(ISimpleDOMNode** node) { | 984 STDMETHODIMP BrowserAccessibilityWin::get_lastChild(ISimpleDOMNode** node) { |
877 if (!instance_active_) | 985 if (!instance_active_) |
878 return E_FAIL; | 986 return E_FAIL; |
879 | 987 |
880 if (!node) | 988 if (!node) |
881 return E_INVALIDARG; | 989 return E_INVALIDARG; |
882 | 990 |
883 if (children_.size()) { | 991 if (children_.size()) { |
884 *node = children_[children_.size() - 1]->toBrowserAccessibilityWin()-> | 992 *node = children_[children_.size() - 1]->NewReference(); |
885 NewReference(); | |
886 return S_OK; | 993 return S_OK; |
887 } else { | 994 } else { |
888 *node = NULL; | 995 *node = NULL; |
889 return S_FALSE; | 996 return S_FALSE; |
890 } | 997 } |
891 } | 998 } |
892 | 999 |
893 STDMETHODIMP BrowserAccessibilityWin::get_previousSibling( | 1000 STDMETHODIMP BrowserAccessibilityWin::get_previousSibling( |
894 ISimpleDOMNode** node) { | 1001 ISimpleDOMNode** node) { |
895 if (!instance_active_) | 1002 if (!instance_active_) |
896 return E_FAIL; | 1003 return E_FAIL; |
897 | 1004 |
898 if (!node) | 1005 if (!node) |
899 return E_INVALIDARG; | 1006 return E_INVALIDARG; |
900 | 1007 |
901 if (parent_ && index_in_parent_ > 0) { | 1008 if (parent_ && index_in_parent_ > 0) { |
902 *node = parent_->children()[index_in_parent_ - 1]-> | 1009 *node = parent_->children_[index_in_parent_ - 1]->NewReference(); |
903 toBrowserAccessibilityWin()->NewReference(); | |
904 return S_OK; | 1010 return S_OK; |
905 } else { | 1011 } else { |
906 *node = NULL; | 1012 *node = NULL; |
907 return S_FALSE; | 1013 return S_FALSE; |
908 } | 1014 } |
909 } | 1015 } |
910 | 1016 |
911 STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) { | 1017 STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) { |
912 if (!instance_active_) | 1018 if (!instance_active_) |
913 return E_FAIL; | 1019 return E_FAIL; |
914 | 1020 |
915 if (!node) | 1021 if (!node) |
916 return E_INVALIDARG; | 1022 return E_INVALIDARG; |
917 | 1023 |
918 if (parent_ && | 1024 if (parent_ && |
919 index_in_parent_ >= 0 && | 1025 index_in_parent_ >= 0 && |
920 index_in_parent_ < static_cast<int>(parent_->children().size()) - 1) { | 1026 index_in_parent_ < static_cast<int>(parent_->children_.size()) - 1) { |
921 *node = parent_->children()[index_in_parent_ + 1]-> | 1027 *node = parent_->children_[index_in_parent_ + 1]->NewReference(); |
922 toBrowserAccessibilityWin()->NewReference(); | |
923 return S_OK; | 1028 return S_OK; |
924 } else { | 1029 } else { |
925 *node = NULL; | 1030 *node = NULL; |
926 return S_FALSE; | 1031 return S_FALSE; |
927 } | 1032 } |
928 } | 1033 } |
929 | 1034 |
930 STDMETHODIMP BrowserAccessibilityWin::get_childAt( | 1035 STDMETHODIMP BrowserAccessibilityWin::get_childAt( |
931 unsigned int child_index, | 1036 unsigned int child_index, |
932 ISimpleDOMNode** node) { | 1037 ISimpleDOMNode** node) { |
933 if (!instance_active_) | 1038 if (!instance_active_) |
934 return E_FAIL; | 1039 return E_FAIL; |
935 | 1040 |
936 if (!node) | 1041 if (!node) |
937 return E_INVALIDARG; | 1042 return E_INVALIDARG; |
938 | 1043 |
939 if (child_index < children_.size()) { | 1044 if (child_index < children_.size()) { |
940 *node = children_[child_index]->toBrowserAccessibilityWin()->NewReference(); | 1045 *node = children_[child_index]->NewReference(); |
941 return S_OK; | 1046 return S_OK; |
942 } else { | 1047 } else { |
943 *node = NULL; | 1048 *node = NULL; |
944 return S_FALSE; | 1049 return S_FALSE; |
945 } | 1050 } |
946 } | 1051 } |
947 | 1052 |
948 // | 1053 // |
949 // ISimpleDOMText methods. | 1054 // ISimpleDOMText methods. |
950 // | 1055 // |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
990 // | 1095 // |
991 // CComObjectRootEx methods. | 1096 // CComObjectRootEx methods. |
992 // | 1097 // |
993 | 1098 |
994 HRESULT WINAPI BrowserAccessibilityWin::InternalQueryInterface( | 1099 HRESULT WINAPI BrowserAccessibilityWin::InternalQueryInterface( |
995 void* this_ptr, | 1100 void* this_ptr, |
996 const _ATL_INTMAP_ENTRY* entries, | 1101 const _ATL_INTMAP_ENTRY* entries, |
997 REFIID iid, | 1102 REFIID iid, |
998 void** object) { | 1103 void** object) { |
999 if (iid == IID_IAccessibleText) { | 1104 if (iid == IID_IAccessibleText) { |
1000 if (ia_role_ != ROLE_SYSTEM_LINK && ia_role_ != ROLE_SYSTEM_TEXT) { | 1105 if (role_ != ROLE_SYSTEM_LINK && role_ != ROLE_SYSTEM_TEXT) { |
1001 *object = NULL; | 1106 *object = NULL; |
1002 return E_NOINTERFACE; | 1107 return E_NOINTERFACE; |
1003 } | 1108 } |
1004 } else if (iid == IID_IAccessibleImage) { | 1109 } else if (iid == IID_IAccessibleImage) { |
1005 if (ia_role_ != ROLE_SYSTEM_GRAPHIC) { | 1110 if (role_ != ROLE_SYSTEM_GRAPHIC) { |
1006 *object = NULL; | 1111 *object = NULL; |
1007 return E_NOINTERFACE; | 1112 return E_NOINTERFACE; |
1008 } | 1113 } |
1009 } else if (iid == IID_ISimpleDOMDocument) { | 1114 } else if (iid == IID_ISimpleDOMDocument) { |
1010 if (ia_role_ != ROLE_SYSTEM_DOCUMENT) { | 1115 if (role_ != ROLE_SYSTEM_DOCUMENT) { |
1011 *object = NULL; | 1116 *object = NULL; |
1012 return E_NOINTERFACE; | 1117 return E_NOINTERFACE; |
1013 } | 1118 } |
1014 } | 1119 } |
1015 | 1120 |
1016 return CComObjectRootBase::InternalQueryInterface( | 1121 return CComObjectRootBase::InternalQueryInterface( |
1017 this_ptr, entries, iid, object); | 1122 this_ptr, entries, iid, object); |
1018 } | 1123 } |
1019 | 1124 |
1020 // | 1125 // |
1021 // Private methods. | 1126 // Private methods. |
1022 // | 1127 // |
1023 | 1128 |
1024 // Initialize this object and mark it as active. | |
1025 void BrowserAccessibilityWin::Initialize() { | |
1026 InitRoleAndState(); | |
1027 | |
1028 // Expose headings levels to NVDA with the "level" object attribute. | |
1029 if (role_ == WebAccessibility::ROLE_HEADING && role_name_.size() == 2 && | |
1030 IsAsciiDigit(role_name_[1])) { | |
1031 html_attributes_.push_back(std::make_pair(L"level", role_name_.substr(1))); | |
1032 } | |
1033 | |
1034 // If this object doesn't have a name but it does have a description, | |
1035 // use the description as its name - because some screen readers only | |
1036 // announce the name. | |
1037 if (name_.empty() && HasAttribute(WebAccessibility::ATTR_DESCRIPTION)) { | |
1038 GetAttribute(WebAccessibility::ATTR_DESCRIPTION, &name_); | |
1039 } | |
1040 | |
1041 instance_active_ = true; | |
1042 } | |
1043 | |
1044 // Mark this object as inactive, and remove references to all children. | |
1045 // When no other clients hold any references to this object it will be | |
1046 // deleted, and in the meantime, calls to any methods will return E_FAIL. | |
1047 void BrowserAccessibilityWin::ReleaseTree() { | |
1048 if (!instance_active_) | |
1049 return; | |
1050 | |
1051 // Mark this object as inactive, so calls to all COM methods will return | |
1052 // failure. | |
1053 instance_active_ = false; | |
1054 | |
1055 BrowserAccessibility::ReleaseTree(); | |
1056 } | |
1057 | |
1058 void BrowserAccessibilityWin::ReleaseReference() { | |
1059 Release(); | |
1060 } | |
1061 | |
1062 | |
1063 BrowserAccessibilityWin* BrowserAccessibilityWin::NewReference() { | |
1064 AddRef(); | |
1065 return this; | |
1066 } | |
1067 | |
1068 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( | 1129 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( |
1069 const VARIANT& var_id) { | 1130 const VARIANT& var_id) { |
1070 if (var_id.vt != VT_I4) | 1131 if (var_id.vt != VT_I4) |
1071 return NULL; | 1132 return NULL; |
1072 | 1133 |
1073 LONG child_id = var_id.lVal; | 1134 LONG child_id = var_id.lVal; |
1074 if (child_id == CHILDID_SELF) | 1135 if (child_id == CHILDID_SELF) |
1075 return this; | 1136 return this; |
1076 | 1137 |
1077 if (child_id >= 1 && child_id <= static_cast<LONG>(children_.size())) | 1138 if (child_id >= 1 && child_id <= static_cast<LONG>(children_.size())) |
1078 return children_[child_id - 1]->toBrowserAccessibilityWin(); | 1139 return children_[child_id - 1]; |
1079 | 1140 |
1080 return manager_->GetFromChildID(child_id)->toBrowserAccessibilityWin(); | 1141 return manager_->GetFromChildID(child_id); |
1081 } | 1142 } |
1082 | 1143 |
1083 bool BrowserAccessibilityWin::HasAttribute( | 1144 bool BrowserAccessibilityWin::HasAttribute( |
1084 WebAccessibility::Attribute attribute) { | 1145 WebAccessibility::Attribute attribute) { |
1085 return (attributes_.find(attribute) != attributes_.end()); | 1146 return (attributes_.find(attribute) != attributes_.end()); |
1086 } | 1147 } |
1087 | 1148 |
1088 bool BrowserAccessibilityWin::GetAttribute( | 1149 bool BrowserAccessibilityWin::GetAttribute( |
1089 WebAccessibility::Attribute attribute, string16* value) { | 1150 WebAccessibility::Attribute attribute, string16* value) { |
1090 std::map<int32, string16>::iterator iter = attributes_.find(attribute); | 1151 std::map<int32, string16>::iterator iter = attributes_.find(attribute); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1122 if (!base::StringToInt(value_str, value_int)) | 1183 if (!base::StringToInt(value_str, value_int)) |
1123 return false; | 1184 return false; |
1124 | 1185 |
1125 return true; | 1186 return true; |
1126 } | 1187 } |
1127 | 1188 |
1128 string16 BrowserAccessibilityWin::Escape(string16 str) { | 1189 string16 BrowserAccessibilityWin::Escape(string16 str) { |
1129 return EscapeQueryParamValueUTF8(str, false); | 1190 return EscapeQueryParamValueUTF8(str, false); |
1130 } | 1191 } |
1131 | 1192 |
1132 void BrowserAccessibilityWin::InitRoleAndState() { | 1193 void BrowserAccessibilityWin::InitRoleAndState(LONG web_role, |
1133 ia_state_ = 0; | 1194 LONG web_state) { |
| 1195 state_ = 0; |
1134 ia2_state_ = IA2_STATE_OPAQUE; | 1196 ia2_state_ = IA2_STATE_OPAQUE; |
1135 | 1197 |
1136 if ((state_ >> WebAccessibility::STATE_CHECKED) & 1) | 1198 if ((web_state >> WebAccessibility::STATE_CHECKED) & 1) |
1137 ia_state_ |= STATE_SYSTEM_CHECKED; | 1199 state_ |= STATE_SYSTEM_CHECKED; |
1138 if ((state_ >> WebAccessibility::STATE_COLLAPSED) & 1) | 1200 if ((web_state >> WebAccessibility::STATE_COLLAPSED) & 1) |
1139 ia_state_|= STATE_SYSTEM_COLLAPSED; | 1201 state_ |= STATE_SYSTEM_COLLAPSED; |
1140 if ((state_ >> WebAccessibility::STATE_EXPANDED) & 1) | 1202 if ((web_state >> WebAccessibility::STATE_EXPANDED) & 1) |
1141 ia_state_|= STATE_SYSTEM_EXPANDED; | 1203 state_ |= STATE_SYSTEM_EXPANDED; |
1142 if ((state_ >> WebAccessibility::STATE_FOCUSABLE) & 1) | 1204 if ((web_state >> WebAccessibility::STATE_FOCUSABLE) & 1) |
1143 ia_state_|= STATE_SYSTEM_FOCUSABLE; | 1205 state_ |= STATE_SYSTEM_FOCUSABLE; |
1144 if ((state_ >> WebAccessibility::STATE_HASPOPUP) & 1) | 1206 if ((web_state >> WebAccessibility::STATE_HASPOPUP) & 1) |
1145 ia_state_|= STATE_SYSTEM_HASPOPUP; | 1207 state_ |= STATE_SYSTEM_HASPOPUP; |
1146 if ((state_ >> WebAccessibility::STATE_HOTTRACKED) & 1) | 1208 if ((web_state >> WebAccessibility::STATE_HOTTRACKED) & 1) |
1147 ia_state_|= STATE_SYSTEM_HOTTRACKED; | 1209 state_ |= STATE_SYSTEM_HOTTRACKED; |
1148 if ((state_ >> WebAccessibility::STATE_INDETERMINATE) & 1) | 1210 if ((web_state >> WebAccessibility::STATE_INDETERMINATE) & 1) |
1149 ia_state_|= STATE_SYSTEM_INDETERMINATE; | 1211 state_ |= STATE_SYSTEM_INDETERMINATE; |
1150 if ((state_ >> WebAccessibility::STATE_INVISIBLE) & 1) | 1212 if ((web_state >> WebAccessibility::STATE_INVISIBLE) & 1) |
1151 ia_state_|= STATE_SYSTEM_INVISIBLE; | 1213 state_ |= STATE_SYSTEM_INVISIBLE; |
1152 if ((state_ >> WebAccessibility::STATE_LINKED) & 1) | 1214 if ((web_state >> WebAccessibility::STATE_LINKED) & 1) |
1153 ia_state_|= STATE_SYSTEM_LINKED; | 1215 state_ |= STATE_SYSTEM_LINKED; |
1154 if ((state_ >> WebAccessibility::STATE_MULTISELECTABLE) & 1) | 1216 if ((web_state >> WebAccessibility::STATE_MULTISELECTABLE) & 1) |
1155 ia_state_|= STATE_SYSTEM_MULTISELECTABLE; | 1217 state_ |= STATE_SYSTEM_MULTISELECTABLE; |
1156 // TODO(ctguil): Support STATE_SYSTEM_EXTSELECTABLE/accSelect. | 1218 // TODO(ctguil): Support STATE_SYSTEM_EXTSELECTABLE/accSelect. |
1157 if ((state_ >> WebAccessibility::STATE_OFFSCREEN) & 1) | 1219 if ((web_state >> WebAccessibility::STATE_OFFSCREEN) & 1) |
1158 ia_state_|= STATE_SYSTEM_OFFSCREEN; | 1220 state_ |= STATE_SYSTEM_OFFSCREEN; |
1159 if ((state_ >> WebAccessibility::STATE_PRESSED) & 1) | 1221 if ((web_state >> WebAccessibility::STATE_PRESSED) & 1) |
1160 ia_state_|= STATE_SYSTEM_PRESSED; | 1222 state_ |= STATE_SYSTEM_PRESSED; |
1161 if ((state_ >> WebAccessibility::STATE_PROTECTED) & 1) | 1223 if ((web_state >> WebAccessibility::STATE_PROTECTED) & 1) |
1162 ia_state_|= STATE_SYSTEM_PROTECTED; | 1224 state_ |= STATE_SYSTEM_PROTECTED; |
1163 if ((state_ >> WebAccessibility::STATE_SELECTABLE) & 1) | 1225 if ((web_state >> WebAccessibility::STATE_SELECTABLE) & 1) |
1164 ia_state_|= STATE_SYSTEM_SELECTABLE; | 1226 state_ |= STATE_SYSTEM_SELECTABLE; |
1165 if ((state_ >> WebAccessibility::STATE_SELECTED) & 1) | 1227 if ((web_state >> WebAccessibility::STATE_SELECTED) & 1) |
1166 ia_state_|= STATE_SYSTEM_SELECTED; | 1228 state_ |= STATE_SYSTEM_SELECTED; |
1167 if ((state_ >> WebAccessibility::STATE_READONLY) & 1) | 1229 if ((web_state >> WebAccessibility::STATE_READONLY) & 1) |
1168 ia_state_|= STATE_SYSTEM_READONLY; | 1230 state_ |= STATE_SYSTEM_READONLY; |
1169 if ((state_ >> WebAccessibility::STATE_TRAVERSED) & 1) | 1231 if ((web_state >> WebAccessibility::STATE_TRAVERSED) & 1) |
1170 ia_state_|= STATE_SYSTEM_TRAVERSED; | 1232 state_ |= STATE_SYSTEM_TRAVERSED; |
1171 if ((state_ >> WebAccessibility::STATE_BUSY) & 1) | 1233 if ((web_state >> WebAccessibility::STATE_BUSY) & 1) |
1172 ia_state_|= STATE_SYSTEM_BUSY; | 1234 state_ |= STATE_SYSTEM_BUSY; |
1173 if ((state_ >> WebAccessibility::STATE_UNAVAILABLE) & 1) | 1235 if ((web_state >> WebAccessibility::STATE_UNAVAILABLE) & 1) |
1174 ia_state_|= STATE_SYSTEM_UNAVAILABLE; | 1236 state_ |= STATE_SYSTEM_UNAVAILABLE; |
1175 | 1237 |
1176 ia_role_ = 0; | 1238 role_ = 0; |
1177 ia2_role_ = 0; | 1239 ia2_role_ = 0; |
1178 switch (role_) { | 1240 switch (web_role) { |
1179 case WebAccessibility::ROLE_ALERT: | 1241 case WebAccessibility::ROLE_ALERT: |
1180 case WebAccessibility::ROLE_ALERT_DIALOG: | 1242 case WebAccessibility::ROLE_ALERT_DIALOG: |
1181 ia_role_ = ROLE_SYSTEM_ALERT; | 1243 role_ = ROLE_SYSTEM_ALERT; |
1182 break; | 1244 break; |
1183 case WebAccessibility::ROLE_APPLICATION: | 1245 case WebAccessibility::ROLE_APPLICATION: |
1184 ia_role_ = ROLE_SYSTEM_APPLICATION; | 1246 role_ = ROLE_SYSTEM_APPLICATION; |
1185 break; | 1247 break; |
1186 case WebAccessibility::ROLE_ARTICLE: | 1248 case WebAccessibility::ROLE_ARTICLE: |
1187 ia_role_ = ROLE_SYSTEM_GROUPING; | 1249 role_ = ROLE_SYSTEM_GROUPING; |
1188 ia2_role_ = IA2_ROLE_SECTION; | 1250 ia2_role_ = IA2_ROLE_SECTION; |
1189 break; | 1251 break; |
1190 case WebAccessibility::ROLE_BUTTON: | 1252 case WebAccessibility::ROLE_BUTTON: |
1191 ia_role_ = ROLE_SYSTEM_PUSHBUTTON; | 1253 role_ = ROLE_SYSTEM_PUSHBUTTON; |
1192 break; | 1254 break; |
1193 case WebAccessibility::ROLE_CELL: | 1255 case WebAccessibility::ROLE_CELL: |
1194 ia_role_ = ROLE_SYSTEM_CELL; | 1256 role_ = ROLE_SYSTEM_CELL; |
1195 break; | 1257 break; |
1196 case WebAccessibility::ROLE_CHECKBOX: | 1258 case WebAccessibility::ROLE_CHECKBOX: |
1197 ia_role_ = ROLE_SYSTEM_CHECKBUTTON; | 1259 role_ = ROLE_SYSTEM_CHECKBUTTON; |
1198 break; | 1260 break; |
1199 case WebAccessibility::ROLE_COLOR_WELL: | 1261 case WebAccessibility::ROLE_COLOR_WELL: |
1200 ia_role_ = ROLE_SYSTEM_CLIENT; | 1262 role_ = ROLE_SYSTEM_CLIENT; |
1201 ia2_role_ = IA2_ROLE_COLOR_CHOOSER; | 1263 ia2_role_ = IA2_ROLE_COLOR_CHOOSER; |
1202 break; | 1264 break; |
1203 case WebAccessibility::ROLE_COLUMN: | 1265 case WebAccessibility::ROLE_COLUMN: |
1204 ia_role_ = ROLE_SYSTEM_COLUMN; | 1266 role_ = ROLE_SYSTEM_COLUMN; |
1205 break; | 1267 break; |
1206 case WebAccessibility::ROLE_COLUMN_HEADER: | 1268 case WebAccessibility::ROLE_COLUMN_HEADER: |
1207 ia_role_ = ROLE_SYSTEM_COLUMNHEADER; | 1269 role_ = ROLE_SYSTEM_COLUMNHEADER; |
1208 break; | 1270 break; |
1209 case WebAccessibility::ROLE_COMBO_BOX: | 1271 case WebAccessibility::ROLE_COMBO_BOX: |
1210 ia_role_ = ROLE_SYSTEM_COMBOBOX; | 1272 role_ = ROLE_SYSTEM_COMBOBOX; |
1211 break; | 1273 break; |
1212 case WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION: | 1274 case WebAccessibility::ROLE_DEFINITION_LIST_DEFINITION: |
1213 GetAttribute(WebAccessibility::ATTR_HTML_TAG, &role_name_); | 1275 GetAttribute(WebAccessibility::ATTR_HTML_TAG, &role_name_); |
1214 ia2_role_ = IA2_ROLE_PARAGRAPH; | 1276 ia2_role_ = IA2_ROLE_PARAGRAPH; |
1215 break; | 1277 break; |
1216 case WebAccessibility::ROLE_DEFINITION_LIST_TERM: | 1278 case WebAccessibility::ROLE_DEFINITION_LIST_TERM: |
1217 ia_role_ = ROLE_SYSTEM_LISTITEM; | 1279 role_ = ROLE_SYSTEM_LISTITEM; |
1218 break; | 1280 break; |
1219 case WebAccessibility::ROLE_DIALOG: | 1281 case WebAccessibility::ROLE_DIALOG: |
1220 ia_role_ = ROLE_SYSTEM_DIALOG; | 1282 role_ = ROLE_SYSTEM_DIALOG; |
1221 break; | 1283 break; |
1222 case WebAccessibility::ROLE_DOCUMENT: | 1284 case WebAccessibility::ROLE_DOCUMENT: |
1223 case WebAccessibility::ROLE_WEB_AREA: | 1285 case WebAccessibility::ROLE_WEB_AREA: |
1224 ia_role_ = ROLE_SYSTEM_DOCUMENT; | 1286 role_ = ROLE_SYSTEM_DOCUMENT; |
1225 ia_state_|= STATE_SYSTEM_READONLY; | 1287 state_ |= STATE_SYSTEM_READONLY; |
1226 ia_state_|= STATE_SYSTEM_FOCUSABLE; | 1288 state_ |= STATE_SYSTEM_FOCUSABLE; |
1227 break; | 1289 break; |
1228 case WebAccessibility::ROLE_EDITABLE_TEXT: | 1290 case WebAccessibility::ROLE_EDITABLE_TEXT: |
1229 ia_role_ = ROLE_SYSTEM_TEXT; | 1291 role_ = ROLE_SYSTEM_TEXT; |
1230 ia2_state_ |= IA2_STATE_SINGLE_LINE; | 1292 ia2_state_ |= IA2_STATE_SINGLE_LINE; |
1231 ia2_state_ |= IA2_STATE_EDITABLE; | 1293 ia2_state_ |= IA2_STATE_EDITABLE; |
1232 break; | 1294 break; |
1233 case WebAccessibility::ROLE_GRID: | 1295 case WebAccessibility::ROLE_GRID: |
1234 ia_role_ = ROLE_SYSTEM_TABLE; | 1296 role_ = ROLE_SYSTEM_TABLE; |
1235 break; | 1297 break; |
1236 case WebAccessibility::ROLE_GROUP: | 1298 case WebAccessibility::ROLE_GROUP: |
1237 GetAttribute(WebAccessibility::ATTR_HTML_TAG, &role_name_); | 1299 GetAttribute(WebAccessibility::ATTR_HTML_TAG, &role_name_); |
1238 if (role_name_.empty()) | 1300 if (role_name_.empty()) |
1239 role_name_ = L"div"; | 1301 role_name_ = L"div"; |
1240 ia2_role_ = IA2_ROLE_SECTION; | 1302 ia2_role_ = IA2_ROLE_SECTION; |
1241 break; | 1303 break; |
1242 case WebAccessibility::ROLE_HEADING: | 1304 case WebAccessibility::ROLE_HEADING: |
1243 GetAttribute(WebAccessibility::ATTR_HTML_TAG, &role_name_); | 1305 GetAttribute(WebAccessibility::ATTR_HTML_TAG, &role_name_); |
1244 ia2_role_ = IA2_ROLE_HEADING; | 1306 ia2_role_ = IA2_ROLE_HEADING; |
1245 break; | 1307 break; |
1246 case WebAccessibility::ROLE_IMAGE: | 1308 case WebAccessibility::ROLE_IMAGE: |
1247 ia_role_ = ROLE_SYSTEM_GRAPHIC; | 1309 role_ = ROLE_SYSTEM_GRAPHIC; |
1248 break; | 1310 break; |
1249 case WebAccessibility::ROLE_IMAGE_MAP: | 1311 case WebAccessibility::ROLE_IMAGE_MAP: |
1250 GetAttribute(WebAccessibility::ATTR_HTML_TAG, &role_name_); | 1312 GetAttribute(WebAccessibility::ATTR_HTML_TAG, &role_name_); |
1251 ia2_role_ = IA2_ROLE_IMAGE_MAP; | 1313 ia2_role_ = IA2_ROLE_IMAGE_MAP; |
1252 break; | 1314 break; |
1253 case WebAccessibility::ROLE_IMAGE_MAP_LINK: | 1315 case WebAccessibility::ROLE_IMAGE_MAP_LINK: |
1254 ia_role_ = ROLE_SYSTEM_LINK; | 1316 role_ = ROLE_SYSTEM_LINK; |
1255 ia_state_|= STATE_SYSTEM_LINKED; | 1317 state_ |= STATE_SYSTEM_LINKED; |
1256 break; | 1318 break; |
1257 case WebAccessibility::ROLE_LANDMARK_APPLICATION: | 1319 case WebAccessibility::ROLE_LANDMARK_APPLICATION: |
1258 case WebAccessibility::ROLE_LANDMARK_BANNER: | 1320 case WebAccessibility::ROLE_LANDMARK_BANNER: |
1259 case WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY: | 1321 case WebAccessibility::ROLE_LANDMARK_COMPLEMENTARY: |
1260 case WebAccessibility::ROLE_LANDMARK_CONTENTINFO: | 1322 case WebAccessibility::ROLE_LANDMARK_CONTENTINFO: |
1261 case WebAccessibility::ROLE_LANDMARK_MAIN: | 1323 case WebAccessibility::ROLE_LANDMARK_MAIN: |
1262 case WebAccessibility::ROLE_LANDMARK_NAVIGATION: | 1324 case WebAccessibility::ROLE_LANDMARK_NAVIGATION: |
1263 case WebAccessibility::ROLE_LANDMARK_SEARCH: | 1325 case WebAccessibility::ROLE_LANDMARK_SEARCH: |
1264 ia_role_ = ROLE_SYSTEM_GROUPING; | 1326 role_ = ROLE_SYSTEM_GROUPING; |
1265 ia2_role_ = IA2_ROLE_SECTION; | 1327 ia2_role_ = IA2_ROLE_SECTION; |
1266 break; | 1328 break; |
1267 case WebAccessibility::ROLE_LINK: | 1329 case WebAccessibility::ROLE_LINK: |
1268 case WebAccessibility::ROLE_WEBCORE_LINK: | 1330 case WebAccessibility::ROLE_WEBCORE_LINK: |
1269 ia_role_ = ROLE_SYSTEM_LINK; | 1331 role_ = ROLE_SYSTEM_LINK; |
1270 ia_state_|= STATE_SYSTEM_LINKED; | 1332 state_ |= STATE_SYSTEM_LINKED; |
1271 break; | 1333 break; |
1272 case WebAccessibility::ROLE_LIST: | 1334 case WebAccessibility::ROLE_LIST: |
1273 ia_role_ = ROLE_SYSTEM_LIST; | 1335 role_ = ROLE_SYSTEM_LIST; |
1274 break; | 1336 break; |
1275 case WebAccessibility::ROLE_LISTBOX: | 1337 case WebAccessibility::ROLE_LISTBOX: |
1276 ia_role_ = ROLE_SYSTEM_LIST; | 1338 role_ = ROLE_SYSTEM_LIST; |
1277 break; | 1339 break; |
1278 case WebAccessibility::ROLE_LISTBOX_OPTION: | 1340 case WebAccessibility::ROLE_LISTBOX_OPTION: |
1279 case WebAccessibility::ROLE_LIST_ITEM: | 1341 case WebAccessibility::ROLE_LIST_ITEM: |
1280 case WebAccessibility::ROLE_LIST_MARKER: | 1342 case WebAccessibility::ROLE_LIST_MARKER: |
1281 ia_role_ = ROLE_SYSTEM_LISTITEM; | 1343 role_ = ROLE_SYSTEM_LISTITEM; |
1282 break; | 1344 break; |
1283 case WebAccessibility::ROLE_MENU: | 1345 case WebAccessibility::ROLE_MENU: |
1284 case WebAccessibility::ROLE_MENU_BUTTON: | 1346 case WebAccessibility::ROLE_MENU_BUTTON: |
1285 ia_role_ = ROLE_SYSTEM_MENUPOPUP; | 1347 role_ = ROLE_SYSTEM_MENUPOPUP; |
1286 break; | 1348 break; |
1287 case WebAccessibility::ROLE_MENU_BAR: | 1349 case WebAccessibility::ROLE_MENU_BAR: |
1288 ia_role_ = ROLE_SYSTEM_MENUBAR; | 1350 role_ = ROLE_SYSTEM_MENUBAR; |
1289 break; | 1351 break; |
1290 case WebAccessibility::ROLE_MENU_ITEM: | 1352 case WebAccessibility::ROLE_MENU_ITEM: |
1291 case WebAccessibility::ROLE_MENU_LIST_OPTION: | 1353 case WebAccessibility::ROLE_MENU_LIST_OPTION: |
1292 ia_role_ = ROLE_SYSTEM_MENUITEM; | 1354 role_ = ROLE_SYSTEM_MENUITEM; |
1293 break; | 1355 break; |
1294 case WebAccessibility::ROLE_MENU_LIST_POPUP: | 1356 case WebAccessibility::ROLE_MENU_LIST_POPUP: |
1295 ia_role_ = ROLE_SYSTEM_MENUPOPUP; | 1357 role_ = ROLE_SYSTEM_MENUPOPUP; |
1296 break; | 1358 break; |
1297 case WebAccessibility::ROLE_NOTE: | 1359 case WebAccessibility::ROLE_NOTE: |
1298 ia_role_ = ROLE_SYSTEM_GROUPING; | 1360 role_ = ROLE_SYSTEM_GROUPING; |
1299 ia2_role_ = IA2_ROLE_NOTE; | 1361 ia2_role_ = IA2_ROLE_NOTE; |
1300 break; | 1362 break; |
1301 case WebAccessibility::ROLE_OUTLINE: | 1363 case WebAccessibility::ROLE_OUTLINE: |
1302 ia_role_ = ROLE_SYSTEM_OUTLINE; | 1364 role_ = ROLE_SYSTEM_OUTLINE; |
1303 break; | 1365 break; |
1304 case WebAccessibility::ROLE_POPUP_BUTTON: | 1366 case WebAccessibility::ROLE_POPUP_BUTTON: |
1305 ia_role_ = ROLE_SYSTEM_COMBOBOX; | 1367 role_ = ROLE_SYSTEM_COMBOBOX; |
1306 break; | 1368 break; |
1307 case WebAccessibility::ROLE_PROGRESS_INDICATOR: | 1369 case WebAccessibility::ROLE_PROGRESS_INDICATOR: |
1308 ia_role_ = ROLE_SYSTEM_PROGRESSBAR; | 1370 role_ = ROLE_SYSTEM_PROGRESSBAR; |
1309 break; | 1371 break; |
1310 case WebAccessibility::ROLE_RADIO_BUTTON: | 1372 case WebAccessibility::ROLE_RADIO_BUTTON: |
1311 ia_role_ = ROLE_SYSTEM_RADIOBUTTON; | 1373 role_ = ROLE_SYSTEM_RADIOBUTTON; |
1312 break; | 1374 break; |
1313 case WebAccessibility::ROLE_RADIO_GROUP: | 1375 case WebAccessibility::ROLE_RADIO_GROUP: |
1314 ia_role_ = ROLE_SYSTEM_GROUPING; | 1376 role_ = ROLE_SYSTEM_GROUPING; |
1315 ia2_role_ = IA2_ROLE_SECTION; | 1377 ia2_role_ = IA2_ROLE_SECTION; |
1316 break; | 1378 break; |
1317 case WebAccessibility::ROLE_REGION: | 1379 case WebAccessibility::ROLE_REGION: |
1318 ia_role_ = ROLE_SYSTEM_GROUPING; | 1380 role_ = ROLE_SYSTEM_GROUPING; |
1319 ia2_role_ = IA2_ROLE_SECTION; | 1381 ia2_role_ = IA2_ROLE_SECTION; |
1320 break; | 1382 break; |
1321 case WebAccessibility::ROLE_ROW: | 1383 case WebAccessibility::ROLE_ROW: |
1322 ia_role_ = ROLE_SYSTEM_ROW; | 1384 role_ = ROLE_SYSTEM_ROW; |
1323 break; | 1385 break; |
1324 case WebAccessibility::ROLE_ROW_HEADER: | 1386 case WebAccessibility::ROLE_ROW_HEADER: |
1325 ia_role_ = ROLE_SYSTEM_ROWHEADER; | 1387 role_ = ROLE_SYSTEM_ROWHEADER; |
1326 break; | 1388 break; |
1327 case WebAccessibility::ROLE_RULER: | 1389 case WebAccessibility::ROLE_RULER: |
1328 ia_role_ = ROLE_SYSTEM_CLIENT; | 1390 role_ = ROLE_SYSTEM_CLIENT; |
1329 ia2_role_ = IA2_ROLE_RULER; | 1391 ia2_role_ = IA2_ROLE_RULER; |
1330 break; | 1392 break; |
1331 case WebAccessibility::ROLE_SCROLLAREA: | 1393 case WebAccessibility::ROLE_SCROLLAREA: |
1332 ia_role_ = ROLE_SYSTEM_CLIENT; | 1394 role_ = ROLE_SYSTEM_CLIENT; |
1333 ia2_role_ = IA2_ROLE_SCROLL_PANE; | 1395 ia2_role_ = IA2_ROLE_SCROLL_PANE; |
1334 break; | 1396 break; |
1335 case WebAccessibility::ROLE_SCROLLBAR: | 1397 case WebAccessibility::ROLE_SCROLLBAR: |
1336 ia_role_ = ROLE_SYSTEM_SCROLLBAR; | 1398 role_ = ROLE_SYSTEM_SCROLLBAR; |
1337 break; | 1399 break; |
1338 case WebAccessibility::ROLE_SLIDER: | 1400 case WebAccessibility::ROLE_SLIDER: |
1339 ia_role_ = ROLE_SYSTEM_SLIDER; | 1401 role_ = ROLE_SYSTEM_SLIDER; |
1340 break; | 1402 break; |
1341 case WebAccessibility::ROLE_SPLIT_GROUP: | 1403 case WebAccessibility::ROLE_SPLIT_GROUP: |
1342 ia_role_ = ROLE_SYSTEM_CLIENT; | 1404 role_ = ROLE_SYSTEM_CLIENT; |
1343 ia2_role_ = IA2_ROLE_SPLIT_PANE; | 1405 ia2_role_ = IA2_ROLE_SPLIT_PANE; |
1344 break; | 1406 break; |
1345 case WebAccessibility::ROLE_ANNOTATION: | 1407 case WebAccessibility::ROLE_ANNOTATION: |
1346 case WebAccessibility::ROLE_STATIC_TEXT: | 1408 case WebAccessibility::ROLE_STATIC_TEXT: |
1347 ia_role_ = ROLE_SYSTEM_TEXT; | 1409 role_ = ROLE_SYSTEM_TEXT; |
1348 break; | 1410 break; |
1349 case WebAccessibility::ROLE_STATUS: | 1411 case WebAccessibility::ROLE_STATUS: |
1350 ia_role_ = ROLE_SYSTEM_STATUSBAR; | 1412 role_ = ROLE_SYSTEM_STATUSBAR; |
1351 break; | 1413 break; |
1352 case WebAccessibility::ROLE_TAB: | 1414 case WebAccessibility::ROLE_TAB: |
1353 ia_role_ = ROLE_SYSTEM_PAGETAB; | 1415 role_ = ROLE_SYSTEM_PAGETAB; |
1354 break; | 1416 break; |
1355 case WebAccessibility::ROLE_TABLE: | 1417 case WebAccessibility::ROLE_TABLE: |
1356 ia_role_ = ROLE_SYSTEM_TABLE; | 1418 role_ = ROLE_SYSTEM_TABLE; |
1357 break; | 1419 break; |
1358 case WebAccessibility::ROLE_TABLE_HEADER_CONTAINER: | 1420 case WebAccessibility::ROLE_TABLE_HEADER_CONTAINER: |
1359 ia_role_ = ROLE_SYSTEM_GROUPING; | 1421 role_ = ROLE_SYSTEM_GROUPING; |
1360 ia2_role_ = IA2_ROLE_SECTION; | 1422 ia2_role_ = IA2_ROLE_SECTION; |
1361 break; | 1423 break; |
1362 case WebAccessibility::ROLE_TAB_GROUP: | 1424 case WebAccessibility::ROLE_TAB_GROUP: |
1363 case WebAccessibility::ROLE_TAB_LIST: | 1425 case WebAccessibility::ROLE_TAB_LIST: |
1364 case WebAccessibility::ROLE_TAB_PANEL: | 1426 case WebAccessibility::ROLE_TAB_PANEL: |
1365 ia_role_ = ROLE_SYSTEM_PAGETABLIST; | 1427 role_ = ROLE_SYSTEM_PAGETABLIST; |
1366 break; | 1428 break; |
1367 case WebAccessibility::ROLE_TEXTAREA: | 1429 case WebAccessibility::ROLE_TEXTAREA: |
1368 ia_role_ = ROLE_SYSTEM_TEXT; | 1430 role_ = ROLE_SYSTEM_TEXT; |
1369 ia2_state_ |= IA2_STATE_MULTI_LINE; | 1431 ia2_state_ |= IA2_STATE_MULTI_LINE; |
1370 ia2_state_ |= IA2_STATE_EDITABLE; | 1432 ia2_state_ |= IA2_STATE_EDITABLE; |
1371 break; | 1433 break; |
1372 case WebAccessibility::ROLE_TEXT_FIELD: | 1434 case WebAccessibility::ROLE_TEXT_FIELD: |
1373 ia_role_ = ROLE_SYSTEM_TEXT; | 1435 role_ = ROLE_SYSTEM_TEXT; |
1374 ia2_state_ |= IA2_STATE_SINGLE_LINE; | 1436 ia2_state_ |= IA2_STATE_SINGLE_LINE; |
1375 ia2_state_ |= IA2_STATE_EDITABLE; | 1437 ia2_state_ |= IA2_STATE_EDITABLE; |
1376 break; | 1438 break; |
1377 case WebAccessibility::ROLE_TOOLBAR: | 1439 case WebAccessibility::ROLE_TOOLBAR: |
1378 ia_role_ = ROLE_SYSTEM_TOOLBAR; | 1440 role_ = ROLE_SYSTEM_TOOLBAR; |
1379 break; | 1441 break; |
1380 case WebAccessibility::ROLE_TOOLTIP: | 1442 case WebAccessibility::ROLE_TOOLTIP: |
1381 ia_role_ = ROLE_SYSTEM_TOOLTIP; | 1443 role_ = ROLE_SYSTEM_TOOLTIP; |
1382 break; | 1444 break; |
1383 case WebAccessibility::ROLE_TREE: | 1445 case WebAccessibility::ROLE_TREE: |
1384 ia_role_ = ROLE_SYSTEM_OUTLINE; | 1446 role_ = ROLE_SYSTEM_OUTLINE; |
1385 break; | 1447 break; |
1386 case WebAccessibility::ROLE_TREE_GRID: | 1448 case WebAccessibility::ROLE_TREE_GRID: |
1387 ia_role_ = ROLE_SYSTEM_OUTLINE; | 1449 role_ = ROLE_SYSTEM_OUTLINE; |
1388 break; | 1450 break; |
1389 case WebAccessibility::ROLE_TREE_ITEM: | 1451 case WebAccessibility::ROLE_TREE_ITEM: |
1390 ia_role_ = ROLE_SYSTEM_OUTLINEITEM; | 1452 role_ = ROLE_SYSTEM_OUTLINEITEM; |
1391 break; | 1453 break; |
1392 case WebAccessibility::ROLE_WINDOW: | 1454 case WebAccessibility::ROLE_WINDOW: |
1393 ia_role_ = ROLE_SYSTEM_WINDOW; | 1455 role_ = ROLE_SYSTEM_WINDOW; |
1394 break; | 1456 break; |
1395 | 1457 |
1396 // TODO(dmazzoni): figure out the proper MSAA role for all of these. | 1458 // TODO(dmazzoni): figure out the proper MSAA role for all of these. |
1397 case WebAccessibility::ROLE_BROWSER: | 1459 case WebAccessibility::ROLE_BROWSER: |
1398 case WebAccessibility::ROLE_BUSY_INDICATOR: | 1460 case WebAccessibility::ROLE_BUSY_INDICATOR: |
1399 case WebAccessibility::ROLE_DIRECTORY: | 1461 case WebAccessibility::ROLE_DIRECTORY: |
1400 case WebAccessibility::ROLE_DISCLOSURE_TRIANGLE: | 1462 case WebAccessibility::ROLE_DISCLOSURE_TRIANGLE: |
1401 case WebAccessibility::ROLE_DRAWER: | 1463 case WebAccessibility::ROLE_DRAWER: |
1402 case WebAccessibility::ROLE_GROW_AREA: | 1464 case WebAccessibility::ROLE_GROW_AREA: |
1403 case WebAccessibility::ROLE_HELP_TAG: | 1465 case WebAccessibility::ROLE_HELP_TAG: |
1404 case WebAccessibility::ROLE_IGNORED: | 1466 case WebAccessibility::ROLE_IGNORED: |
1405 case WebAccessibility::ROLE_INCREMENTOR: | 1467 case WebAccessibility::ROLE_INCREMENTOR: |
1406 case WebAccessibility::ROLE_LOG: | 1468 case WebAccessibility::ROLE_LOG: |
1407 case WebAccessibility::ROLE_MARQUEE: | 1469 case WebAccessibility::ROLE_MARQUEE: |
1408 case WebAccessibility::ROLE_MATH: | 1470 case WebAccessibility::ROLE_MATH: |
1409 case WebAccessibility::ROLE_MATTE: | 1471 case WebAccessibility::ROLE_MATTE: |
1410 case WebAccessibility::ROLE_RULER_MARKER: | 1472 case WebAccessibility::ROLE_RULER_MARKER: |
1411 case WebAccessibility::ROLE_SHEET: | 1473 case WebAccessibility::ROLE_SHEET: |
1412 case WebAccessibility::ROLE_SLIDER_THUMB: | 1474 case WebAccessibility::ROLE_SLIDER_THUMB: |
1413 case WebAccessibility::ROLE_SPLITTER: | 1475 case WebAccessibility::ROLE_SPLITTER: |
1414 case WebAccessibility::ROLE_SYSTEM_WIDE: | 1476 case WebAccessibility::ROLE_SYSTEM_WIDE: |
1415 case WebAccessibility::ROLE_TIMER: | 1477 case WebAccessibility::ROLE_TIMER: |
1416 case WebAccessibility::ROLE_VALUE_INDICATOR: | 1478 case WebAccessibility::ROLE_VALUE_INDICATOR: |
1417 default: | 1479 default: |
1418 ia_role_ = ROLE_SYSTEM_CLIENT; | 1480 role_ = ROLE_SYSTEM_CLIENT; |
1419 break; | 1481 break; |
1420 } | 1482 } |
1421 | 1483 |
1422 // The role should always be set. | 1484 // The role should always be set. |
1423 DCHECK(!role_name_.empty() || ia_role_); | 1485 DCHECK(!role_name_.empty() || role_); |
1424 | 1486 |
1425 // If we didn't explicitly set the IAccessible2 role, make it the same | 1487 // If we didn't explicitly set the IAccessible2 role, make it the same |
1426 // as the MSAA role. | 1488 // as the MSAA role. |
1427 if (!ia2_role_) | 1489 if (!ia2_role_) |
1428 ia2_role_ = ia_role_; | 1490 ia2_role_ = role_; |
1429 } | 1491 } |
OLD | NEW |