Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: content/browser/accessibility/browser_accessibility_win.cc

Issue 25943003: Support accessible inline text boxes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix typo Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/accessibility/browser_accessibility_win.h" 5 #include "content/browser/accessibility/browser_accessibility_win.h"
6 6
7 #include <UIAutomationClient.h> 7 #include <UIAutomationClient.h>
8 #include <UIAutomationCoreApi.h> 8 #include <UIAutomationCoreApi.h>
9 9
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 return S_OK; 351 return S_OK;
352 } 352 }
353 353
354 STDMETHODIMP BrowserAccessibilityWin::get_accChildCount(LONG* child_count) { 354 STDMETHODIMP BrowserAccessibilityWin::get_accChildCount(LONG* child_count) {
355 if (!instance_active_) 355 if (!instance_active_)
356 return E_FAIL; 356 return E_FAIL;
357 357
358 if (!child_count) 358 if (!child_count)
359 return E_INVALIDARG; 359 return E_INVALIDARG;
360 360
361 *child_count = children_.size(); 361 *child_count = PlatformChildCount();
362
362 return S_OK; 363 return S_OK;
363 } 364 }
364 365
365 STDMETHODIMP BrowserAccessibilityWin::get_accDefaultAction(VARIANT var_id, 366 STDMETHODIMP BrowserAccessibilityWin::get_accDefaultAction(VARIANT var_id,
366 BSTR* def_action) { 367 BSTR* def_action) {
367 if (!instance_active_) 368 if (!instance_active_)
368 return E_FAIL; 369 return E_FAIL;
369 370
370 if (!def_action) 371 if (!def_action)
371 return E_INVALIDARG; 372 return E_INVALIDARG;
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 if (!instance_active_) 869 if (!instance_active_)
869 return E_FAIL; 870 return E_FAIL;
870 871
871 if (!group_level || !similar_items_in_group || !position_in_group) 872 if (!group_level || !similar_items_in_group || !position_in_group)
872 return E_INVALIDARG; 873 return E_INVALIDARG;
873 874
874 if (role_ == WebKit::WebAXRoleListBoxOption && 875 if (role_ == WebKit::WebAXRoleListBoxOption &&
875 parent_ && 876 parent_ &&
876 parent_->role() == WebKit::WebAXRoleListBox) { 877 parent_->role() == WebKit::WebAXRoleListBox) {
877 *group_level = 0; 878 *group_level = 0;
878 *similar_items_in_group = parent_->child_count(); 879 *similar_items_in_group = parent_->PlatformChildCount();
879 *position_in_group = index_in_parent_ + 1; 880 *position_in_group = index_in_parent_ + 1;
880 return S_OK; 881 return S_OK;
881 } 882 }
882 883
883 return E_NOTIMPL; 884 return E_NOTIMPL;
884 } 885 }
885 886
886 // 887 //
887 // IAccessibleApplication methods. 888 // IAccessibleApplication methods.
888 // 889 //
(...skipping 1722 matching lines...) Expand 10 before | Expand all | Expand 10 after
2611 2612
2612 STDMETHODIMP BrowserAccessibilityWin::get_childAt( 2613 STDMETHODIMP BrowserAccessibilityWin::get_childAt(
2613 unsigned int child_index, 2614 unsigned int child_index,
2614 ISimpleDOMNode** node) { 2615 ISimpleDOMNode** node) {
2615 if (!instance_active_) 2616 if (!instance_active_)
2616 return E_FAIL; 2617 return E_FAIL;
2617 2618
2618 if (!node) 2619 if (!node)
2619 return E_INVALIDARG; 2620 return E_INVALIDARG;
2620 2621
2621 if (child_index < children_.size()) { 2622 BrowserAccessibility* child = PlatformGetChild(child_index);
2623 if (!child) {
2622 *node = NULL; 2624 *node = NULL;
2623 return S_FALSE; 2625 return S_FALSE;
2624 } 2626 }
2625 2627
2626 *node = children_[child_index]->ToBrowserAccessibilityWin()->NewReference(); 2628 *node = child->ToBrowserAccessibilityWin()->NewReference();
2627 return S_OK; 2629 return S_OK;
2628 } 2630 }
2629 2631
2630 // 2632 //
2631 // ISimpleDOMText methods. 2633 // ISimpleDOMText methods.
2632 // 2634 //
2633 2635
2634 STDMETHODIMP BrowserAccessibilityWin::get_domText(BSTR* dom_text) { 2636 STDMETHODIMP BrowserAccessibilityWin::get_domText(BSTR* dom_text) {
2635 if (!instance_active_) 2637 if (!instance_active_)
2636 return E_FAIL; 2638 return E_FAIL;
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
2796 StringAttributeToIA2(AccessibilityNodeData::ATTR_ROLE, "xml-roles"); 2798 StringAttributeToIA2(AccessibilityNodeData::ATTR_ROLE, "xml-roles");
2797 2799
2798 // Expose "level" attribute for headings, trees, etc. 2800 // Expose "level" attribute for headings, trees, etc.
2799 IntAttributeToIA2(AccessibilityNodeData::ATTR_HIERARCHICAL_LEVEL, "level"); 2801 IntAttributeToIA2(AccessibilityNodeData::ATTR_HIERARCHICAL_LEVEL, "level");
2800 2802
2801 // Expose the set size and position in set for listbox options. 2803 // Expose the set size and position in set for listbox options.
2802 if (role_ == WebKit::WebAXRoleListBoxOption && 2804 if (role_ == WebKit::WebAXRoleListBoxOption &&
2803 parent_ && 2805 parent_ &&
2804 parent_->role() == WebKit::WebAXRoleListBox) { 2806 parent_->role() == WebKit::WebAXRoleListBox) {
2805 ia2_attributes_.push_back( 2807 ia2_attributes_.push_back(
2806 L"setsize:" + base::IntToString16(parent_->child_count())); 2808 L"setsize:" + base::IntToString16(parent_->PlatformChildCount()));
2807 ia2_attributes_.push_back( 2809 ia2_attributes_.push_back(
2808 L"setsize:" + base::IntToString16(index_in_parent_ + 1)); 2810 L"setsize:" + base::IntToString16(index_in_parent_ + 1));
2809 } 2811 }
2810 2812
2811 if (ia_role_ == ROLE_SYSTEM_CHECKBUTTON || 2813 if (ia_role_ == ROLE_SYSTEM_CHECKBUTTON ||
2812 ia_role_ == ROLE_SYSTEM_RADIOBUTTON || 2814 ia_role_ == ROLE_SYSTEM_RADIOBUTTON ||
2813 ia2_role_ == IA2_ROLE_TOGGLE_BUTTON) { 2815 ia2_role_ == IA2_ROLE_TOGGLE_BUTTON) {
2814 ia2_attributes_.push_back(L"checkable:true"); 2816 ia2_attributes_.push_back(L"checkable:true");
2815 } 2817 }
2816 2818
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
2963 } 2965 }
2964 } 2966 }
2965 2967
2966 void BrowserAccessibilityWin::PostInitialize() { 2968 void BrowserAccessibilityWin::PostInitialize() {
2967 BrowserAccessibility::PostInitialize(); 2969 BrowserAccessibility::PostInitialize();
2968 2970
2969 // Construct the hypertext for this node. 2971 // Construct the hypertext for this node.
2970 hyperlink_offset_to_index_.clear(); 2972 hyperlink_offset_to_index_.clear();
2971 hyperlinks_.clear(); 2973 hyperlinks_.clear();
2972 hypertext_.clear(); 2974 hypertext_.clear();
2973 for (unsigned int i = 0; i < children().size(); ++i) { 2975 for (unsigned int i = 0; i < PlatformChildCount(); ++i) {
2974 BrowserAccessibility* child = children()[i]; 2976 BrowserAccessibility* child = PlatformGetChild(i);
2975 if (child->role() == WebKit::WebAXRoleStaticText) { 2977 if (child->role() == WebKit::WebAXRoleStaticText) {
2976 hypertext_ += UTF8ToUTF16(child->name()); 2978 hypertext_ += UTF8ToUTF16(child->name());
2977 } else { 2979 } else {
2978 hyperlink_offset_to_index_[hypertext_.size()] = hyperlinks_.size(); 2980 hyperlink_offset_to_index_[hypertext_.size()] = hyperlinks_.size();
2979 hypertext_ += kEmbeddedCharacter; 2981 hypertext_ += kEmbeddedCharacter;
2980 hyperlinks_.push_back(i); 2982 hyperlinks_.push_back(i);
2981 } 2983 }
2982 } 2984 }
2983 DCHECK_EQ(hyperlink_offset_to_index_.size(), hyperlinks_.size()); 2985 DCHECK_EQ(hyperlink_offset_to_index_.size(), hyperlinks_.size());
2984 2986
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
3058 3060
3059 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID( 3061 BrowserAccessibilityWin* BrowserAccessibilityWin::GetTargetFromChildID(
3060 const VARIANT& var_id) { 3062 const VARIANT& var_id) {
3061 if (var_id.vt != VT_I4) 3063 if (var_id.vt != VT_I4)
3062 return NULL; 3064 return NULL;
3063 3065
3064 LONG child_id = var_id.lVal; 3066 LONG child_id = var_id.lVal;
3065 if (child_id == CHILDID_SELF) 3067 if (child_id == CHILDID_SELF)
3066 return this; 3068 return this;
3067 3069
3068 if (child_id >= 1 && child_id <= static_cast<LONG>(children_.size())) 3070 if (child_id >= 1 && child_id <= static_cast<LONG>(PlatformChildCount()))
3069 return children_[child_id - 1]->ToBrowserAccessibilityWin(); 3071 return PlatformGetChild(child_id - 1)->ToBrowserAccessibilityWin();
3070 3072
3071 return manager_->ToBrowserAccessibilityManagerWin()-> 3073 return manager_->ToBrowserAccessibilityManagerWin()->
3072 GetFromUniqueIdWin(child_id); 3074 GetFromUniqueIdWin(child_id);
3073 } 3075 }
3074 3076
3075 HRESULT BrowserAccessibilityWin::GetStringAttributeAsBstr( 3077 HRESULT BrowserAccessibilityWin::GetStringAttributeAsBstr(
3076 AccessibilityNodeData::StringAttribute attribute, 3078 AccessibilityNodeData::StringAttribute attribute,
3077 BSTR* value_bstr) { 3079 BSTR* value_bstr) {
3078 string16 str; 3080 string16 str;
3079 3081
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after
3661 // The role should always be set. 3663 // The role should always be set.
3662 DCHECK(!role_name_.empty() || ia_role_); 3664 DCHECK(!role_name_.empty() || ia_role_);
3663 3665
3664 // If we didn't explicitly set the IAccessible2 role, make it the same 3666 // If we didn't explicitly set the IAccessible2 role, make it the same
3665 // as the MSAA role. 3667 // as the MSAA role.
3666 if (!ia2_role_) 3668 if (!ia2_role_)
3667 ia2_role_ = ia_role_; 3669 ia2_role_ = ia_role_;
3668 } 3670 }
3669 3671
3670 } // namespace content 3672 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698