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

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

Issue 2865133005: Create accessor for owner's manager to simplify code a bit (Closed)
Patch Set: address dmazzoni's comments Created 3 years, 7 months 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
« no previous file with comments | « content/browser/accessibility/browser_accessibility_com_win.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 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_com_win.h" 5 #include "content/browser/accessibility/browser_accessibility_com_win.h"
6 6
7 #include <UIAutomationClient.h> 7 #include <UIAutomationClient.h>
8 #include <UIAutomationCoreApi.h> 8 #include <UIAutomationCoreApi.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 } 339 }
340 340
341 STDMETHODIMP BrowserAccessibilityRelation::get_target(long target_index, 341 STDMETHODIMP BrowserAccessibilityRelation::get_target(long target_index,
342 IUnknown** target) { 342 IUnknown** target) {
343 if (!target) 343 if (!target)
344 return E_INVALIDARG; 344 return E_INVALIDARG;
345 345
346 if (!owner_->GetOwner()) 346 if (!owner_->GetOwner())
347 return E_FAIL; 347 return E_FAIL;
348 348
349 auto* manager = owner_->GetOwner()->manager(); 349 auto* manager = owner_->Manager();
350 if (!manager) 350 if (!manager)
351 return E_FAIL; 351 return E_FAIL;
352 352
353 if (target_index < 0 || 353 if (target_index < 0 ||
354 target_index >= static_cast<long>(target_ids_.size())) { 354 target_index >= static_cast<long>(target_ids_.size())) {
355 return E_INVALIDARG; 355 return E_INVALIDARG;
356 } 356 }
357 357
358 BrowserAccessibility* result = manager->GetFromID(target_ids_[target_index]); 358 BrowserAccessibility* result = manager->GetFromID(target_ids_[target_index]);
359 if (!result || !result->instance_active()) 359 if (!result || !result->instance_active())
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 // * There are some methods that don't touch any state such as get_toolkitName. 423 // * There are some methods that don't touch any state such as get_toolkitName.
424 // For these rare cases, you may not need to call GetOwner(). 424 // For these rare cases, you may not need to call GetOwner().
425 // 425 //
426 426
427 HRESULT BrowserAccessibilityComWin::accDoDefaultAction(VARIANT var_id) { 427 HRESULT BrowserAccessibilityComWin::accDoDefaultAction(VARIANT var_id) {
428 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_DO_DEFAULT_ACTION); 428 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_DO_DEFAULT_ACTION);
429 429
430 if (!GetOwner()) 430 if (!GetOwner())
431 return E_FAIL; 431 return E_FAIL;
432 432
433 auto* manager = GetOwner()->manager(); 433 auto* manager = Manager();
434 if (!manager) 434 if (!manager)
435 return E_FAIL; 435 return E_FAIL;
436 436
437 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 437 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
438 if (!target) 438 if (!target)
439 return E_INVALIDARG; 439 return E_INVALIDARG;
440 440
441 // Return an error if it's not clickable. 441 // Return an error if it's not clickable.
442 if (!target->GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION)) 442 if (!target->GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION))
443 return DISP_E_MEMBERNOTFOUND; 443 return DISP_E_MEMBERNOTFOUND;
444 444
445 manager->DoDefaultAction(*target->GetOwner()); 445 manager->DoDefaultAction(*target->GetOwner());
446 return S_OK; 446 return S_OK;
447 } 447 }
448 448
449 STDMETHODIMP BrowserAccessibilityComWin::accHitTest(LONG x_left, 449 STDMETHODIMP BrowserAccessibilityComWin::accHitTest(LONG x_left,
450 LONG y_top, 450 LONG y_top,
451 VARIANT* child) { 451 VARIANT* child) {
452 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_HIT_TEST); 452 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_HIT_TEST);
453 453
454 if (!GetOwner()) 454 if (!GetOwner())
455 return E_FAIL; 455 return E_FAIL;
456 456
457 auto* manager = GetOwner()->manager(); 457 auto* manager = Manager();
458 if (!manager) 458 if (!manager)
459 return E_FAIL; 459 return E_FAIL;
460 460
461 if (!child) 461 if (!child)
462 return E_INVALIDARG; 462 return E_INVALIDARG;
463 463
464 gfx::Point point(x_left, y_top); 464 gfx::Point point(x_left, y_top);
465 if (!GetOwner()->GetScreenBoundsRect().Contains(point)) { 465 if (!GetOwner()->GetScreenBoundsRect().Contains(point)) {
466 // Return S_FALSE and VT_EMPTY when outside the object's boundaries. 466 // Return S_FALSE and VT_EMPTY when outside the object's boundaries.
467 child->vt = VT_EMPTY; 467 child->vt = VT_EMPTY;
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 611
612 DCHECK(*desc); 612 DCHECK(*desc);
613 return S_OK; 613 return S_OK;
614 } 614 }
615 615
616 STDMETHODIMP BrowserAccessibilityComWin::get_accFocus(VARIANT* focus_child) { 616 STDMETHODIMP BrowserAccessibilityComWin::get_accFocus(VARIANT* focus_child) {
617 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_FOCUS); 617 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_FOCUS);
618 if (!GetOwner()) 618 if (!GetOwner())
619 return E_FAIL; 619 return E_FAIL;
620 620
621 auto* manager = GetOwner()->manager(); 621 auto* manager = Manager();
622 if (!manager) 622 if (!manager)
623 return E_FAIL; 623 return E_FAIL;
624 624
625 if (!focus_child) 625 if (!focus_child)
626 return E_INVALIDARG; 626 return E_INVALIDARG;
627 627
628 BrowserAccessibilityWin* focus = 628 BrowserAccessibilityWin* focus =
629 static_cast<BrowserAccessibilityWin*>(manager->GetFocus()); 629 static_cast<BrowserAccessibilityWin*>(manager->GetFocus());
630 if (focus == GetOwner()) { 630 if (focus == GetOwner()) {
631 focus_child->vt = VT_I4; 631 focus_child->vt = VT_I4;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 return E_FAIL; 686 return E_FAIL;
687 687
688 if (!disp_parent) 688 if (!disp_parent)
689 return E_INVALIDARG; 689 return E_INVALIDARG;
690 690
691 IAccessible* parent_obj = 691 IAccessible* parent_obj =
692 ToBrowserAccessibilityComWin(GetOwner()->PlatformGetParent()); 692 ToBrowserAccessibilityComWin(GetOwner()->PlatformGetParent());
693 if (parent_obj == NULL) { 693 if (parent_obj == NULL) {
694 // This happens if we're the root of the tree; 694 // This happens if we're the root of the tree;
695 // return the IAccessible for the window. 695 // return the IAccessible for the window.
696 parent_obj = GetOwner() 696 parent_obj =
697 ->manager() 697 Manager()->ToBrowserAccessibilityManagerWin()->GetParentIAccessible();
698 ->ToBrowserAccessibilityManagerWin()
699 ->GetParentIAccessible();
700 // |parent| can only be NULL if the manager was created before the parent 698 // |parent| can only be NULL if the manager was created before the parent
701 // IAccessible was known and it wasn't subsequently set before a client 699 // IAccessible was known and it wasn't subsequently set before a client
702 // requested it. This has been fixed. |parent| may also be NULL during 700 // requested it. This has been fixed. |parent| may also be NULL during
703 // destruction. Possible cases where this could occur include tabs being 701 // destruction. Possible cases where this could occur include tabs being
704 // dragged to a new window, etc. 702 // dragged to a new window, etc.
705 if (!parent_obj) { 703 if (!parent_obj) {
706 DVLOG(1) << "In Function: " << __func__ 704 DVLOG(1) << "In Function: " << __func__
707 << ". Parent IAccessible interface is NULL. Returning failure"; 705 << ". Parent IAccessible interface is NULL. Returning failure";
708 return E_FAIL; 706 return E_FAIL;
709 } 707 }
(...skipping 25 matching lines...) Expand all
735 } 733 }
736 return S_OK; 734 return S_OK;
737 } 735 }
738 736
739 STDMETHODIMP BrowserAccessibilityComWin::get_accState(VARIANT var_id, 737 STDMETHODIMP BrowserAccessibilityComWin::get_accState(VARIANT var_id,
740 VARIANT* state) { 738 VARIANT* state) {
741 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_STATE); 739 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_STATE);
742 if (!GetOwner()) 740 if (!GetOwner())
743 return E_FAIL; 741 return E_FAIL;
744 742
745 auto* manager = GetOwner()->manager(); 743 auto* manager = Manager();
746 if (!manager) 744 if (!manager)
747 return E_FAIL; 745 return E_FAIL;
748 746
749 if (!state) 747 if (!state)
750 return E_INVALIDARG; 748 return E_INVALIDARG;
751 749
752 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id); 750 BrowserAccessibilityComWin* target = GetTargetFromChildID(var_id);
753 if (!target) 751 if (!target)
754 return E_INVALIDARG; 752 return E_INVALIDARG;
755 753
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 static_cast<base::win::IUnknownImpl*>(enum_variant)); 859 static_cast<base::win::IUnknownImpl*>(enum_variant));
862 return S_OK; 860 return S_OK;
863 } 861 }
864 862
865 STDMETHODIMP BrowserAccessibilityComWin::accSelect(LONG flags_sel, 863 STDMETHODIMP BrowserAccessibilityComWin::accSelect(LONG flags_sel,
866 VARIANT var_id) { 864 VARIANT var_id) {
867 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_SELECT); 865 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_SELECT);
868 if (!GetOwner()) 866 if (!GetOwner())
869 return E_FAIL; 867 return E_FAIL;
870 868
871 auto* manager = GetOwner()->manager(); 869 auto* manager = Manager();
872 if (!manager) 870 if (!manager)
873 return E_FAIL; 871 return E_FAIL;
874 872
875 if (flags_sel & SELFLAG_TAKEFOCUS) { 873 if (flags_sel & SELFLAG_TAKEFOCUS) {
876 manager->SetFocus(*GetOwner()); 874 manager->SetFocus(*GetOwner());
877 return S_OK; 875 return S_OK;
878 } 876 }
879 877
880 return S_FALSE; 878 return S_FALSE;
881 } 879 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 } 954 }
957 955
958 STDMETHODIMP BrowserAccessibilityComWin::get_windowHandle(HWND* window_handle) { 956 STDMETHODIMP BrowserAccessibilityComWin::get_windowHandle(HWND* window_handle) {
959 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_WINDOW_HANDLE); 957 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_WINDOW_HANDLE);
960 if (!GetOwner()) 958 if (!GetOwner())
961 return E_FAIL; 959 return E_FAIL;
962 960
963 if (!window_handle) 961 if (!window_handle)
964 return E_INVALIDARG; 962 return E_INVALIDARG;
965 963
966 *window_handle = GetOwner() 964 *window_handle =
967 ->manager() 965 Manager()->ToBrowserAccessibilityManagerWin()->GetParentHWND();
968 ->ToBrowserAccessibilityManagerWin()
969 ->GetParentHWND();
970 if (!*window_handle) 966 if (!*window_handle)
971 return E_FAIL; 967 return E_FAIL;
972 968
973 return S_OK; 969 return S_OK;
974 } 970 }
975 971
976 STDMETHODIMP BrowserAccessibilityComWin::get_indexInParent( 972 STDMETHODIMP BrowserAccessibilityComWin::get_indexInParent(
977 LONG* index_in_parent) { 973 LONG* index_in_parent) {
978 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_INDEX_IN_PARENT); 974 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_INDEX_IN_PARENT);
979 if (!GetOwner()) 975 if (!GetOwner())
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 } 1039 }
1044 1040
1045 return S_OK; 1041 return S_OK;
1046 } 1042 }
1047 1043
1048 STDMETHODIMP BrowserAccessibilityComWin::scrollTo(IA2ScrollType scroll_type) { 1044 STDMETHODIMP BrowserAccessibilityComWin::scrollTo(IA2ScrollType scroll_type) {
1049 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IA2_SCROLL_TO); 1045 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IA2_SCROLL_TO);
1050 if (!GetOwner()) 1046 if (!GetOwner())
1051 return E_FAIL; 1047 return E_FAIL;
1052 1048
1053 auto* manager = GetOwner()->manager(); 1049 auto* manager = Manager();
1054 1050
1055 if (!manager) 1051 if (!manager)
1056 return E_FAIL; 1052 return E_FAIL;
1057 1053
1058 gfx::Rect r = GetOwner()->GetFrameBoundsRect(); 1054 gfx::Rect r = GetOwner()->GetFrameBoundsRect();
1059 switch (scroll_type) { 1055 switch (scroll_type) {
1060 case IA2_SCROLL_TYPE_TOP_LEFT: 1056 case IA2_SCROLL_TYPE_TOP_LEFT:
1061 manager->ScrollToMakeVisible(*GetOwner(), gfx::Rect(r.x(), r.y(), 0, 0)); 1057 manager->ScrollToMakeVisible(*GetOwner(), gfx::Rect(r.x(), r.y(), 0, 0));
1062 break; 1058 break;
1063 case IA2_SCROLL_TYPE_BOTTOM_RIGHT: 1059 case IA2_SCROLL_TYPE_BOTTOM_RIGHT:
(...skipping 26 matching lines...) Expand all
1090 } 1086 }
1091 1087
1092 STDMETHODIMP BrowserAccessibilityComWin::scrollToPoint( 1088 STDMETHODIMP BrowserAccessibilityComWin::scrollToPoint(
1093 IA2CoordinateType coordinate_type, 1089 IA2CoordinateType coordinate_type,
1094 LONG x, 1090 LONG x,
1095 LONG y) { 1091 LONG y) {
1096 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_TO_POINT); 1092 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_TO_POINT);
1097 if (!GetOwner()) 1093 if (!GetOwner())
1098 return E_FAIL; 1094 return E_FAIL;
1099 1095
1100 auto* manager = GetOwner()->manager(); 1096 auto* manager = Manager();
1101 if (!manager) 1097 if (!manager)
1102 return E_FAIL; 1098 return E_FAIL;
1103 1099
1104 gfx::Point scroll_to(x, y); 1100 gfx::Point scroll_to(x, y);
1105 1101
1106 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { 1102 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) {
1107 scroll_to -= manager->GetViewBounds().OffsetFromOrigin(); 1103 scroll_to -= manager->GetViewBounds().OffsetFromOrigin();
1108 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { 1104 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) {
1109 if (GetOwner()->PlatformGetParent()) { 1105 if (GetOwner()->PlatformGetParent()) {
1110 scroll_to += GetOwner() 1106 scroll_to += GetOwner()
(...skipping 1662 matching lines...) Expand 10 before | Expand all | Expand 10 after
2773 2769
2774 STDMETHODIMP BrowserAccessibilityComWin::doAction(long action_index) { 2770 STDMETHODIMP BrowserAccessibilityComWin::doAction(long action_index) {
2775 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_DO_ACTION); 2771 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_DO_ACTION);
2776 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2772 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2777 if (!GetOwner()) 2773 if (!GetOwner())
2778 return E_FAIL; 2774 return E_FAIL;
2779 2775
2780 if (!GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION) || action_index != 0) 2776 if (!GetOwner()->HasIntAttribute(ui::AX_ATTR_ACTION) || action_index != 0)
2781 return E_INVALIDARG; 2777 return E_INVALIDARG;
2782 2778
2783 GetOwner()->manager()->DoDefaultAction(*GetOwner()); 2779 Manager()->DoDefaultAction(*GetOwner());
2784 return S_OK; 2780 return S_OK;
2785 } 2781 }
2786 2782
2787 STDMETHODIMP 2783 STDMETHODIMP
2788 BrowserAccessibilityComWin::get_description(long action_index, 2784 BrowserAccessibilityComWin::get_description(long action_index,
2789 BSTR* description) { 2785 BSTR* description) {
2790 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IAACTION_GET_DESCRIPTION); 2786 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_IAACTION_GET_DESCRIPTION);
2791 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes); 2787 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes);
2792 return E_NOTIMPL; 2788 return E_NOTIMPL;
2793 } 2789 }
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
2933 2929
2934 // 2930 //
2935 // ISimpleDOMDocument methods. 2931 // ISimpleDOMDocument methods.
2936 // 2932 //
2937 2933
2938 STDMETHODIMP BrowserAccessibilityComWin::get_URL(BSTR* url) { 2934 STDMETHODIMP BrowserAccessibilityComWin::get_URL(BSTR* url) {
2939 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_URL); 2935 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_URL);
2940 if (!GetOwner()) 2936 if (!GetOwner())
2941 return E_FAIL; 2937 return E_FAIL;
2942 2938
2943 auto* manager = GetOwner()->manager(); 2939 auto* manager = Manager();
2944 if (!manager) 2940 if (!manager)
2945 return E_FAIL; 2941 return E_FAIL;
2946 2942
2947 if (!url) 2943 if (!url)
2948 return E_INVALIDARG; 2944 return E_INVALIDARG;
2949 2945
2950 if (GetOwner() != manager->GetRoot()) 2946 if (GetOwner() != manager->GetRoot())
2951 return E_FAIL; 2947 return E_FAIL;
2952 2948
2953 std::string str = manager->GetTreeData().url; 2949 std::string str = manager->GetTreeData().url;
2954 if (str.empty()) 2950 if (str.empty())
2955 return S_FALSE; 2951 return S_FALSE;
2956 2952
2957 *url = SysAllocString(base::UTF8ToUTF16(str).c_str()); 2953 *url = SysAllocString(base::UTF8ToUTF16(str).c_str());
2958 DCHECK(*url); 2954 DCHECK(*url);
2959 2955
2960 return S_OK; 2956 return S_OK;
2961 } 2957 }
2962 2958
2963 STDMETHODIMP BrowserAccessibilityComWin::get_title(BSTR* title) { 2959 STDMETHODIMP BrowserAccessibilityComWin::get_title(BSTR* title) {
2964 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TITLE); 2960 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_TITLE);
2965 if (!GetOwner()) 2961 if (!GetOwner())
2966 return E_FAIL; 2962 return E_FAIL;
2967 2963
2968 auto* manager = GetOwner()->manager(); 2964 auto* manager = Manager();
2969 if (!manager) 2965 if (!manager)
2970 return E_FAIL; 2966 return E_FAIL;
2971 2967
2972 if (!title) 2968 if (!title)
2973 return E_INVALIDARG; 2969 return E_INVALIDARG;
2974 2970
2975 std::string str = manager->GetTreeData().title; 2971 std::string str = manager->GetTreeData().title;
2976 if (str.empty()) 2972 if (str.empty())
2977 return S_FALSE; 2973 return S_FALSE;
2978 2974
2979 *title = SysAllocString(base::UTF8ToUTF16(str).c_str()); 2975 *title = SysAllocString(base::UTF8ToUTF16(str).c_str());
2980 DCHECK(*title); 2976 DCHECK(*title);
2981 2977
2982 return S_OK; 2978 return S_OK;
2983 } 2979 }
2984 2980
2985 STDMETHODIMP BrowserAccessibilityComWin::get_mimeType(BSTR* mime_type) { 2981 STDMETHODIMP BrowserAccessibilityComWin::get_mimeType(BSTR* mime_type) {
2986 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_MIME_TYPE); 2982 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_MIME_TYPE);
2987 if (!GetOwner()) 2983 if (!GetOwner())
2988 return E_FAIL; 2984 return E_FAIL;
2989 2985
2990 auto* manager = GetOwner()->manager(); 2986 auto* manager = Manager();
2991 if (!manager) 2987 if (!manager)
2992 return E_FAIL; 2988 return E_FAIL;
2993 2989
2994 if (!mime_type) 2990 if (!mime_type)
2995 return E_INVALIDARG; 2991 return E_INVALIDARG;
2996 2992
2997 std::string str = manager->GetTreeData().mimetype; 2993 std::string str = manager->GetTreeData().mimetype;
2998 if (str.empty()) 2994 if (str.empty())
2999 return S_FALSE; 2995 return S_FALSE;
3000 2996
3001 *mime_type = SysAllocString(base::UTF8ToUTF16(str).c_str()); 2997 *mime_type = SysAllocString(base::UTF8ToUTF16(str).c_str());
3002 DCHECK(*mime_type); 2998 DCHECK(*mime_type);
3003 2999
3004 return S_OK; 3000 return S_OK;
3005 } 3001 }
3006 3002
3007 STDMETHODIMP BrowserAccessibilityComWin::get_docType(BSTR* doc_type) { 3003 STDMETHODIMP BrowserAccessibilityComWin::get_docType(BSTR* doc_type) {
3008 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_DOC_TYPE); 3004 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_DOC_TYPE);
3009 if (!GetOwner()) 3005 if (!GetOwner())
3010 return E_FAIL; 3006 return E_FAIL;
3011 3007
3012 auto* manager = GetOwner()->manager(); 3008 auto* manager = Manager();
3013 if (!manager) 3009 if (!manager)
3014 return E_FAIL; 3010 return E_FAIL;
3015 3011
3016 if (!doc_type) 3012 if (!doc_type)
3017 return E_INVALIDARG; 3013 return E_INVALIDARG;
3018 3014
3019 std::string str = manager->GetTreeData().doctype; 3015 std::string str = manager->GetTreeData().doctype;
3020 if (str.empty()) 3016 if (str.empty())
3021 return S_FALSE; 3017 return S_FALSE;
3022 3018
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
3439 3435
3440 STDMETHODIMP BrowserAccessibilityComWin::scrollToSubstring( 3436 STDMETHODIMP BrowserAccessibilityComWin::scrollToSubstring(
3441 unsigned int start_index, 3437 unsigned int start_index,
3442 unsigned int end_index) { 3438 unsigned int end_index) {
3443 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_TO_SUBSTRING); 3439 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_SCROLL_TO_SUBSTRING);
3444 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes | 3440 AddAccessibilityModeFlags(kScreenReaderAndHTMLAccessibilityModes |
3445 AccessibilityMode::kInlineTextBoxes); 3441 AccessibilityMode::kInlineTextBoxes);
3446 if (!GetOwner()) 3442 if (!GetOwner())
3447 return E_FAIL; 3443 return E_FAIL;
3448 3444
3449 auto* manager = GetOwner()->manager(); 3445 auto* manager = Manager();
3450 if (!manager) 3446 if (!manager)
3451 return E_FAIL; 3447 return E_FAIL;
3452 3448
3453 unsigned int text_length = 3449 unsigned int text_length =
3454 static_cast<unsigned int>(GetOwner()->GetText().size()); 3450 static_cast<unsigned int>(GetOwner()->GetText().size());
3455 if (start_index > text_length || end_index > text_length || 3451 if (start_index > text_length || end_index > text_length ||
3456 start_index > end_index) { 3452 start_index > end_index) {
3457 return E_INVALIDARG; 3453 return E_INVALIDARG;
3458 } 3454 }
3459 3455
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
3728 3724
3729 win_attributes_->offset_to_text_attributes.swap(attributes_map); 3725 win_attributes_->offset_to_text_attributes.swap(attributes_map);
3730 } 3726 }
3731 3727
3732 // |offset| could either be a text character or a child index in case of 3728 // |offset| could either be a text character or a child index in case of
3733 // non-text objects. 3729 // non-text objects.
3734 // TODO(nektar): Remove this function once selection bugs are fixed in Blink. 3730 // TODO(nektar): Remove this function once selection bugs are fixed in Blink.
3735 AXPlatformPosition::AXPositionInstance 3731 AXPlatformPosition::AXPositionInstance
3736 BrowserAccessibilityComWin::CreatePositionForSelectionAt(int offset) const { 3732 BrowserAccessibilityComWin::CreatePositionForSelectionAt(int offset) const {
3737 if (!GetOwner()->IsNativeTextControl() && !GetOwner()->IsTextOnlyObject()) { 3733 if (!GetOwner()->IsNativeTextControl() && !GetOwner()->IsTextOnlyObject()) {
3738 auto* manager = GetOwner()->manager(); 3734 auto* manager = Manager();
3739 DCHECK(manager); 3735 DCHECK(manager);
3740 const BrowserAccessibilityComWin* child = this; 3736 const BrowserAccessibilityComWin* child = this;
3741 // TODO(nektar): Make parents of text-only objects not include the text of 3737 // TODO(nektar): Make parents of text-only objects not include the text of
3742 // children in their hypertext. 3738 // children in their hypertext.
3743 for (size_t i = 0; i < GetOwner()->InternalChildCount(); ++i) { 3739 for (size_t i = 0; i < GetOwner()->InternalChildCount(); ++i) {
3744 int new_offset = offset; 3740 int new_offset = offset;
3745 child = ToBrowserAccessibilityComWin(GetOwner()->InternalGetChild(i)); 3741 child = ToBrowserAccessibilityComWin(GetOwner()->InternalGetChild(i));
3746 DCHECK(child); 3742 DCHECK(child);
3747 if (child->GetOwner()->IsTextOnlyObject()) { 3743 if (child->GetOwner()->IsTextOnlyObject()) {
3748 new_offset -= child->GetOwner()->GetText().length(); 3744 new_offset -= child->GetOwner()->GetText().length();
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
3915 3911
3916 win_attributes_->name = GetOwner()->GetString16Attribute(ui::AX_ATTR_NAME); 3912 win_attributes_->name = GetOwner()->GetString16Attribute(ui::AX_ATTR_NAME);
3917 win_attributes_->description = 3913 win_attributes_->description =
3918 GetOwner()->GetString16Attribute(ui::AX_ATTR_DESCRIPTION); 3914 GetOwner()->GetString16Attribute(ui::AX_ATTR_DESCRIPTION);
3919 StringAttributeToIA2(ui::AX_ATTR_PLACEHOLDER, "placeholder"); 3915 StringAttributeToIA2(ui::AX_ATTR_PLACEHOLDER, "placeholder");
3920 3916
3921 base::string16 value = GetOwner()->GetValue(); 3917 base::string16 value = GetOwner()->GetValue();
3922 // On Windows, the value of a document should be its url. 3918 // On Windows, the value of a document should be its url.
3923 if (GetOwner()->GetRole() == ui::AX_ROLE_ROOT_WEB_AREA || 3919 if (GetOwner()->GetRole() == ui::AX_ROLE_ROOT_WEB_AREA ||
3924 GetOwner()->GetRole() == ui::AX_ROLE_WEB_AREA) { 3920 GetOwner()->GetRole() == ui::AX_ROLE_WEB_AREA) {
3925 value = base::UTF8ToUTF16(GetOwner()->manager()->GetTreeData().url); 3921 value = base::UTF8ToUTF16(Manager()->GetTreeData().url);
3926 } 3922 }
3927 // If this doesn't have a value and is linked then set its value to the url 3923 // If this doesn't have a value and is linked then set its value to the url
3928 // attribute. This allows screen readers to read an empty link's destination. 3924 // attribute. This allows screen readers to read an empty link's destination.
3929 if (value.empty() && (ia_state() & STATE_SYSTEM_LINKED)) 3925 if (value.empty() && (ia_state() & STATE_SYSTEM_LINKED))
3930 value = GetOwner()->GetString16Attribute(ui::AX_ATTR_URL); 3926 value = GetOwner()->GetString16Attribute(ui::AX_ATTR_URL);
3931 win_attributes_->value = value; 3927 win_attributes_->value = value;
3932 3928
3933 ClearOwnRelations(); 3929 ClearOwnRelations();
3934 AddBidirectionalRelations(IA2_RELATION_CONTROLLER_FOR, 3930 AddBidirectionalRelations(IA2_RELATION_CONTROLLER_FOR,
3935 IA2_RELATION_CONTROLLED_BY, 3931 IA2_RELATION_CONTROLLED_BY,
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
4082 ToBrowserAccessibilityComWin(GetOwner()->PlatformGetParent()); 4078 ToBrowserAccessibilityComWin(GetOwner()->PlatformGetParent());
4083 if (parent && GetOwner()->IsTextOnlyObject() && 4079 if (parent && GetOwner()->IsTextOnlyObject() &&
4084 name() != old_win_attributes_->name) { 4080 name() != old_win_attributes_->name) {
4085 parent->GetOwner()->UpdatePlatformAttributes(); 4081 parent->GetOwner()->UpdatePlatformAttributes();
4086 } 4082 }
4087 } 4083 }
4088 4084
4089 old_win_attributes_.reset(nullptr); 4085 old_win_attributes_.reset(nullptr);
4090 } 4086 }
4091 4087
4088 BrowserAccessibilityManager* BrowserAccessibilityComWin::Manager() const {
4089 auto* owner = GetOwner();
4090 DCHECK(owner);
4091
4092 auto* manager = owner->manager();
4093 DCHECK(manager);
4094 return manager;
4095 }
4096
4092 std::vector<base::string16> BrowserAccessibilityComWin::ComputeTextAttributes() 4097 std::vector<base::string16> BrowserAccessibilityComWin::ComputeTextAttributes()
4093 const { 4098 const {
4094 std::vector<base::string16> attributes; 4099 std::vector<base::string16> attributes;
4095 4100
4096 // We include list markers for now, but there might be other objects that are 4101 // We include list markers for now, but there might be other objects that are
4097 // auto generated. 4102 // auto generated.
4098 // TODO(nektar): Compute what objects are auto-generated in Blink. 4103 // TODO(nektar): Compute what objects are auto-generated in Blink.
4099 if (GetOwner()->GetRole() == ui::AX_ROLE_LIST_MARKER) 4104 if (GetOwner()->GetRole() == ui::AX_ROLE_LIST_MARKER)
4100 attributes.push_back(L"auto-generated:true"); 4105 attributes.push_back(L"auto-generated:true");
4101 else 4106 else
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
4378 } 4383 }
4379 4384
4380 void BrowserAccessibilityComWin::SetIA2HypertextSelection(LONG start_offset, 4385 void BrowserAccessibilityComWin::SetIA2HypertextSelection(LONG start_offset,
4381 LONG end_offset) { 4386 LONG end_offset) {
4382 HandleSpecialTextOffset(&start_offset); 4387 HandleSpecialTextOffset(&start_offset);
4383 HandleSpecialTextOffset(&end_offset); 4388 HandleSpecialTextOffset(&end_offset);
4384 AXPlatformPositionInstance start_position = 4389 AXPlatformPositionInstance start_position =
4385 CreatePositionForSelectionAt(static_cast<int>(start_offset)); 4390 CreatePositionForSelectionAt(static_cast<int>(start_offset));
4386 AXPlatformPositionInstance end_position = 4391 AXPlatformPositionInstance end_position =
4387 CreatePositionForSelectionAt(static_cast<int>(end_offset)); 4392 CreatePositionForSelectionAt(static_cast<int>(end_offset));
4388 GetOwner()->manager()->SetSelection(AXPlatformRange( 4393 Manager()->SetSelection(AXPlatformRange(start_position->AsTextPosition(),
4389 start_position->AsTextPosition(), end_position->AsTextPosition())); 4394 end_position->AsTextPosition()));
4390 } 4395 }
4391 4396
4392 void BrowserAccessibilityComWin::StringAttributeToIA2( 4397 void BrowserAccessibilityComWin::StringAttributeToIA2(
4393 ui::AXStringAttribute attribute, 4398 ui::AXStringAttribute attribute,
4394 const char* ia2_attr) { 4399 const char* ia2_attr) {
4395 base::string16 value; 4400 base::string16 value;
4396 if (GetOwner()->GetString16Attribute(attribute, &value)) { 4401 if (GetOwner()->GetString16Attribute(attribute, &value)) {
4397 SanitizeStringAttributeForIA2(value, &value); 4402 SanitizeStringAttributeForIA2(value, &value);
4398 win_attributes_->ia2_attributes.push_back(base::ASCIIToUTF16(ia2_attr) + 4403 win_attributes_->ia2_attributes.push_back(base::ASCIIToUTF16(ia2_attr) +
4399 L":" + value); 4404 L":" + value);
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
4589 if (endpoint_index_in_common_parent < index_in_common_parent) 4594 if (endpoint_index_in_common_parent < index_in_common_parent)
4590 return 0; 4595 return 0;
4591 if (endpoint_index_in_common_parent > index_in_common_parent) 4596 if (endpoint_index_in_common_parent > index_in_common_parent)
4592 return GetOwner()->GetText().size(); 4597 return GetOwner()->GetText().size();
4593 4598
4594 NOTREACHED(); 4599 NOTREACHED();
4595 return -1; 4600 return -1;
4596 } 4601 }
4597 4602
4598 int BrowserAccessibilityComWin::GetSelectionAnchor() const { 4603 int BrowserAccessibilityComWin::GetSelectionAnchor() const {
4599 int32_t anchor_id = GetOwner()->manager()->GetTreeData().sel_anchor_object_id; 4604 int32_t anchor_id = Manager()->GetTreeData().sel_anchor_object_id;
4600 const BrowserAccessibilityComWin* anchor_object = GetFromID(anchor_id); 4605 const BrowserAccessibilityComWin* anchor_object = GetFromID(anchor_id);
4601 if (!anchor_object) 4606 if (!anchor_object)
4602 return -1; 4607 return -1;
4603 4608
4604 int anchor_offset = GetOwner()->manager()->GetTreeData().sel_anchor_offset; 4609 int anchor_offset = Manager()->GetTreeData().sel_anchor_offset;
4605 return GetHypertextOffsetFromEndpoint(*anchor_object, anchor_offset); 4610 return GetHypertextOffsetFromEndpoint(*anchor_object, anchor_offset);
4606 } 4611 }
4607 4612
4608 int BrowserAccessibilityComWin::GetSelectionFocus() const { 4613 int BrowserAccessibilityComWin::GetSelectionFocus() const {
4609 int32_t focus_id = GetOwner()->manager()->GetTreeData().sel_focus_object_id; 4614 int32_t focus_id = Manager()->GetTreeData().sel_focus_object_id;
4610 const BrowserAccessibilityComWin* focus_object = GetFromID(focus_id); 4615 const BrowserAccessibilityComWin* focus_object = GetFromID(focus_id);
4611 if (!focus_object) 4616 if (!focus_object)
4612 return -1; 4617 return -1;
4613 4618
4614 int focus_offset = GetOwner()->manager()->GetTreeData().sel_focus_offset; 4619 int focus_offset = Manager()->GetTreeData().sel_focus_offset;
4615 return GetHypertextOffsetFromEndpoint(*focus_object, focus_offset); 4620 return GetHypertextOffsetFromEndpoint(*focus_object, focus_offset);
4616 } 4621 }
4617 4622
4618 void BrowserAccessibilityComWin::GetSelectionOffsets(int* selection_start, 4623 void BrowserAccessibilityComWin::GetSelectionOffsets(int* selection_start,
4619 int* selection_end) const { 4624 int* selection_end) const {
4620 DCHECK(selection_start && selection_end); 4625 DCHECK(selection_start && selection_end);
4621 4626
4622 if (GetOwner()->IsSimpleTextControl() && 4627 if (GetOwner()->IsSimpleTextControl() &&
4623 GetOwner()->GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, 4628 GetOwner()->GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START,
4624 selection_start) && 4629 selection_start) &&
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
4784 4789
4785 LONG BrowserAccessibilityComWin::FindBoundary( 4790 LONG BrowserAccessibilityComWin::FindBoundary(
4786 const base::string16& text, 4791 const base::string16& text,
4787 IA2TextBoundaryType ia2_boundary, 4792 IA2TextBoundaryType ia2_boundary,
4788 LONG start_offset, 4793 LONG start_offset,
4789 ui::TextBoundaryDirection direction) { 4794 ui::TextBoundaryDirection direction) {
4790 // If the boundary is relative to the caret, use the selection 4795 // If the boundary is relative to the caret, use the selection
4791 // affinity, otherwise default to downstream affinity. 4796 // affinity, otherwise default to downstream affinity.
4792 ui::AXTextAffinity affinity = 4797 ui::AXTextAffinity affinity =
4793 start_offset == IA2_TEXT_OFFSET_CARET 4798 start_offset == IA2_TEXT_OFFSET_CARET
4794 ? GetOwner()->manager()->GetTreeData().sel_focus_affinity 4799 ? Manager()->GetTreeData().sel_focus_affinity
4795 : ui::AX_TEXT_AFFINITY_DOWNSTREAM; 4800 : ui::AX_TEXT_AFFINITY_DOWNSTREAM;
4796 4801
4797 HandleSpecialTextOffset(&start_offset); 4802 HandleSpecialTextOffset(&start_offset);
4798 if (ia2_boundary == IA2_TEXT_BOUNDARY_WORD) { 4803 if (ia2_boundary == IA2_TEXT_BOUNDARY_WORD) {
4799 switch (direction) { 4804 switch (direction) {
4800 case ui::FORWARDS_DIRECTION: { 4805 case ui::FORWARDS_DIRECTION: {
4801 AXPlatformPositionInstance position = GetOwner()->CreatePositionAt( 4806 AXPlatformPositionInstance position = GetOwner()->CreatePositionAt(
4802 static_cast<int>(start_offset), affinity); 4807 static_cast<int>(start_offset), affinity);
4803 AXPlatformPositionInstance next_word = 4808 AXPlatformPositionInstance next_word =
4804 position->CreateNextWordStartPosition(); 4809 position->CreateNextWordStartPosition();
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
4882 } 4887 }
4883 4888
4884 NOTREACHED(); 4889 NOTREACHED();
4885 return start_offset; 4890 return start_offset;
4886 } 4891 }
4887 4892
4888 BrowserAccessibilityComWin* BrowserAccessibilityComWin::GetFromID( 4893 BrowserAccessibilityComWin* BrowserAccessibilityComWin::GetFromID(
4889 int32_t id) const { 4894 int32_t id) const {
4890 if (!GetOwner()) 4895 if (!GetOwner())
4891 return nullptr; 4896 return nullptr;
4892 return ToBrowserAccessibilityComWin(GetOwner()->manager()->GetFromID(id)); 4897 return ToBrowserAccessibilityComWin(Manager()->GetFromID(id));
4893 } 4898 }
4894 4899
4895 bool BrowserAccessibilityComWin::IsListBoxOptionOrMenuListOption() { 4900 bool BrowserAccessibilityComWin::IsListBoxOptionOrMenuListOption() {
4896 if (!GetOwner()->PlatformGetParent()) 4901 if (!GetOwner()->PlatformGetParent())
4897 return false; 4902 return false;
4898 4903
4899 int32_t role = GetOwner()->GetRole(); 4904 int32_t role = GetOwner()->GetRole();
4900 int32_t parent_role = GetOwner()->PlatformGetParent()->GetRole(); 4905 int32_t parent_role = GetOwner()->PlatformGetParent()->GetRole();
4901 4906
4902 if (role == ui::AX_ROLE_LIST_BOX_OPTION && 4907 if (role == ui::AX_ROLE_LIST_BOX_OPTION &&
(...skipping 817 matching lines...) Expand 10 before | Expand all | Expand 10 after
5720 5725
5721 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( 5726 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin(
5722 BrowserAccessibility* obj) { 5727 BrowserAccessibility* obj) {
5723 if (!obj || !obj->IsNative()) 5728 if (!obj || !obj->IsNative())
5724 return nullptr; 5729 return nullptr;
5725 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); 5730 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM();
5726 return result; 5731 return result;
5727 } 5732 }
5728 5733
5729 } // namespace content 5734 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/accessibility/browser_accessibility_com_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698