diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-09-03 13:32:17 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-10-01 14:31:55 +0200 |
commit | 21ba0c5d4bf8fba15dddd97cd693bad2358b77fd (patch) | |
tree | 91be119f694044dfc1ff9fdc054459e925de9df0 /chromium/content/browser/accessibility/browser_accessibility_manager_win.cc | |
parent | 03c549e0392f92c02536d3f86d5e1d8dfa3435ac (diff) | |
download | qtwebengine-chromium-21ba0c5d4bf8fba15dddd97cd693bad2358b77fd.tar.gz |
BASELINE: Update Chromium to 92.0.4515.166
Change-Id: I42a050486714e9e54fc271f2a8939223a02ae364
Diffstat (limited to 'chromium/content/browser/accessibility/browser_accessibility_manager_win.cc')
-rw-r--r-- | chromium/content/browser/accessibility/browser_accessibility_manager_win.cc | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/chromium/content/browser/accessibility/browser_accessibility_manager_win.cc b/chromium/content/browser/accessibility/browser_accessibility_manager_win.cc index 27bdf3fd541..e77b8fc497a 100644 --- a/chromium/content/browser/accessibility/browser_accessibility_manager_win.cc +++ b/chromium/content/browser/accessibility/browser_accessibility_manager_win.cc @@ -11,7 +11,7 @@ #include <vector> #include "base/command_line.h" -#include "base/stl_util.h" +#include "base/containers/contains.h" #include "base/win/scoped_variant.h" #include "base/win/windows_version.h" #include "content/browser/accessibility/browser_accessibility_state_impl.h" @@ -237,22 +237,23 @@ void BrowserAccessibilityManagerWin::FireGeneratedEvent( case ui::AXEventGenerator::Event::DOCUMENT_SELECTION_CHANGED: { // Fire the event on the object where the focus of the selection is. This // is because the focus is the only endpoint that can move, and because - // the caret (if present) is at the focus. - ui::AXNodeID focus_id = - ax_tree()->GetUnignoredSelection().focus_object_id; + // the caret (if present) is at the focus. Since this is a focus-related + // event (and focused nodes are never ignored), we can query the focused + // node directly from the AXTree, and avoid calling GetUnignoredSelection. + ui::AXNodeID focus_id = ax_tree()->data().sel_focus_object_id; BrowserAccessibility* focus_object = GetFromID(focus_id); if (focus_object) { EnqueueSelectionChangedEvent(*focus_object); if (BrowserAccessibility* text_field = - focus_object->GetTextFieldAncestor()) { + focus_object->PlatformGetTextFieldAncestor()) { EnqueueSelectionChangedEvent(*text_field); - // Plain text fields (including input and textarea elements) have + // Atomic text fields (including input and textarea elements) have // descendant objects that are part of their internal implementation // in Blink, which are not exposed to platform APIs in the // accessibility tree. Firing an event on such descendants will not // reach the assistive software. - if (text_field->IsPlainTextField()) { + if (text_field->IsAtomicTextField()) { FireWinAccessibilityEvent(IA2_EVENT_TEXT_CARET_MOVED, text_field); } else { FireWinAccessibilityEvent(IA2_EVENT_TEXT_CARET_MOVED, focus_object); @@ -305,10 +306,6 @@ void BrowserAccessibilityManagerWin::FireGeneratedEvent( if (node->IsIgnored()) { FireWinAccessibilityEvent(EVENT_OBJECT_HIDE, node); FireUiaStructureChangedEvent(StructureChangeType_ChildRemoved, node); - if (node->GetRole() == ax::mojom::Role::kMenu) { - FireWinAccessibilityEvent(EVENT_SYSTEM_MENUPOPUPEND, node); - FireUiaAccessibilityEvent(UIA_MenuClosedEventId, node); - } } HandleAriaPropertiesChangedEvent(*node); break; @@ -364,6 +361,14 @@ void BrowserAccessibilityManagerWin::FireGeneratedEvent( case ui::AXEventGenerator::Event::LAYOUT_INVALIDATED: FireUiaAccessibilityEvent(UIA_LayoutInvalidatedEventId, node); break; + case ui::AXEventGenerator::Event::MENU_POPUP_END: + FireWinAccessibilityEvent(EVENT_SYSTEM_MENUPOPUPEND, node); + FireUiaAccessibilityEvent(UIA_MenuClosedEventId, node); + break; + case ui::AXEventGenerator::Event::MENU_POPUP_START: + FireWinAccessibilityEvent(EVENT_SYSTEM_MENUPOPUPSTART, node); + FireUiaAccessibilityEvent(UIA_MenuOpenedEventId, node); + break; case ui::AXEventGenerator::Event::MULTILINE_STATE_CHANGED: HandleAriaPropertiesChangedEvent(*node); break; @@ -469,10 +474,6 @@ void BrowserAccessibilityManagerWin::FireGeneratedEvent( case ui::AXEventGenerator::Event::SUBTREE_CREATED: FireWinAccessibilityEvent(EVENT_OBJECT_SHOW, node); FireUiaStructureChangedEvent(StructureChangeType_ChildAdded, node); - if (node->GetRole() == ax::mojom::Role::kMenu) { - FireWinAccessibilityEvent(EVENT_SYSTEM_MENUPOPUPSTART, node); - FireUiaAccessibilityEvent(UIA_MenuOpenedEventId, node); - } break; case ui::AXEventGenerator::Event::TEXT_ATTRIBUTE_CHANGED: FireWinAccessibilityEvent(IA2_EVENT_TEXT_ATTRIBUTE_CHANGED, node); @@ -572,6 +573,8 @@ void BrowserAccessibilityManagerWin::FireUiaAccessibilityEvent( return; } + ui::WinAccessibilityAPIUsageScopedUIAEventsNotifier scoped_events_notifier; + ::UiaRaiseAutomationEvent(ToBrowserAccessibilityWin(node)->GetCOM(), uia_event); } @@ -595,6 +598,8 @@ void BrowserAccessibilityManagerWin::FireUiaPropertyChangedEvent( VARIANT old_value = {}; old_value.vt = VT_EMPTY; + ui::WinAccessibilityAPIUsageScopedUIAEventsNotifier scoped_events_notifier; + auto* provider = ToBrowserAccessibilityWin(node)->GetCOM(); base::win::ScopedVariant new_value; if (SUCCEEDED( @@ -629,6 +634,8 @@ void BrowserAccessibilityManagerWin::FireUiaStructureChangedEvent( if (!provider || !provider_com) return; + ui::WinAccessibilityAPIUsageScopedUIAEventsNotifier scoped_events_notifier; + switch (change_type) { case StructureChangeType_ChildRemoved: { // 'ChildRemoved' fires on the parent and provides the runtime ID of @@ -730,16 +737,6 @@ void BrowserAccessibilityManagerWin::OnSubtreeWillBeDeleted(ui::AXTree* tree, } } -void BrowserAccessibilityManagerWin::OnNodeWillBeDeleted(ui::AXTree* tree, - ui::AXNode* node) { - if (node->data().role == ax::mojom::Role::kMenu) { - BrowserAccessibility* obj = GetFromAXNode(node); - DCHECK(obj); - FireWinAccessibilityEvent(EVENT_SYSTEM_MENUPOPUPEND, obj); - FireUiaAccessibilityEvent(UIA_MenuClosedEventId, obj); - } -} - void BrowserAccessibilityManagerWin::OnAtomicUpdateFinished( ui::AXTree* tree, bool root_changed, |