summaryrefslogtreecommitdiff
path: root/chromium/content/browser/accessibility/browser_accessibility_manager_win.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-09-03 13:32:17 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2021-10-01 14:31:55 +0200
commit21ba0c5d4bf8fba15dddd97cd693bad2358b77fd (patch)
tree91be119f694044dfc1ff9fdc054459e925de9df0 /chromium/content/browser/accessibility/browser_accessibility_manager_win.cc
parent03c549e0392f92c02536d3f86d5e1d8dfa3435ac (diff)
downloadqtwebengine-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.cc47
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,