Commit 52ea30b8 authored by Julie Jeongeun Kim's avatar Julie Jeongeun Kim Committed by Commit Bot

[a11y] Skip key snooping when AX mode is disabled on Linux desktop

This CL skips key snooping on Linux desktop if AX mode is not
enabled. Since AX mode is enabled dynamically[1], key snooping
should work on runtime, either.

[1]https://crrev.com/c/2277705

AX-Relnotes: AT gets key events if AX mode is enabled on runtime.
Bug: 1107373
Change-Id: I852a8d46e0603bdb362a08108b223e3edf56a143
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2309492
Commit-Queue: Julie Kim <jkim@igalia.com>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#791561}
parent f895fe6d
......@@ -56,10 +56,6 @@ static KeySnoopFuncMap& GetActiveKeySnoopFunctions() {
static guint AtkUtilAuraLinuxAddKeyEventListener(
AtkKeySnoopFunc key_snoop_function,
gpointer data) {
if (!ui::AXPlatformNode::GetAccessibilityMode().has_mode(
ui::AXMode::kNativeAPIs))
return 0;
static guint current_key_event_listener_id = 0;
current_key_event_listener_id++;
......@@ -131,7 +127,8 @@ DiscardAtkKeyEvent AtkUtilAuraLinux::HandleAtkKeyEvent(
AtkKeyEventStruct* key_event) {
DCHECK(key_event);
if (!GetInstance()->ShouldEnableAccessibility())
if (!ui::AXPlatformNode::GetAccessibilityMode().has_mode(
ui::AXMode::kNativeAPIs))
return DiscardAtkKeyEvent::Retain;
GetInstance()->InitializeAsync();
......
......@@ -66,6 +66,25 @@ TEST_F(AtkUtilAuraLinuxTest, KeySnooping) {
AtkUtilAuraLinux* atk_util = AtkUtilAuraLinux::GetInstance();
atk_util->HandleAtkKeyEvent(&atk_key_event);
// AX mode is enabled and Key snooping works.
EXPECT_EQ(keyval_seen, 55);
TestAXNodeWrapper* wrapper =
TestAXNodeWrapper::GetOrCreate(GetTree(), GetRootAsAXNode());
DCHECK(wrapper);
AXMode prev_mode = wrapper->ax_platform_node()->ax_mode_;
// Disables AX mode.
wrapper->ax_platform_node()->ax_mode_ = 0;
keyval_seen = 0;
atk_util->HandleAtkKeyEvent(&atk_key_event);
// When AX mode is not enabled, Key snooping doesn't work.
EXPECT_EQ(keyval_seen, 0);
// Restores the previous AX mode.
wrapper->ax_platform_node()->ax_mode_ = prev_mode;
keyval_seen = 0;
atk_util->HandleAtkKeyEvent(&atk_key_event);
// AX mode is set again, Key snooping works.
EXPECT_EQ(keyval_seen, 55);
atk_remove_key_event_listener(listener_id);
......
......@@ -109,6 +109,8 @@ class AX_EXPORT AXPlatformNode {
virtual ~AXPlatformNode();
private:
FRIEND_TEST_ALL_PREFIXES(AtkUtilAuraLinuxTest, KeySnooping);
// Global ObserverList for AXMode changes.
static base::LazyInstance<
base::ObserverList<AXModeObserver>::Unchecked>::Leaky ax_mode_observers_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment