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