Commit 02a25387 authored by Jessica Tallon's avatar Jessica Tallon Committed by Commit Bot

Fix duplicate events for auralinux accessibility event recorder

When a test uses continuations to call the "go" function multiple
times a new instance of the event recorder is created for each
call. This results in the ATK event hooks being added for every
time without the old ones being removed.

This fixes it array of event listeners shared amongst all instances of
the event recorder and not adding the listeners if they already
exist.

Bug: None
Change-Id: Ie09212f7b44113ad7c0aeeba963615fd4b8607e5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1840012Reviewed-by: default avatarMartin Robinson <mrobinson@igalia.com>
Commit-Queue: Jessica Tallon <jtallon@igalia.com>
Cr-Commit-Position: refs/heads/master@{#702828}
parent 1e081830
...@@ -63,7 +63,7 @@ class AccessibilityEventRecorderAuraLinux : public AccessibilityEventRecorder { ...@@ -63,7 +63,7 @@ class AccessibilityEventRecorderAuraLinux : public AccessibilityEventRecorder {
AtspiEventListener* atspi_event_listener_ = nullptr; AtspiEventListener* atspi_event_listener_ = nullptr;
base::ProcessId pid_; base::ProcessId pid_;
base::StringPiece application_name_match_pattern_; base::StringPiece application_name_match_pattern_;
std::vector<unsigned int> atk_listener_ids_; static std::vector<unsigned int> atk_listener_ids_;
static AccessibilityEventRecorderAuraLinux* instance_; static AccessibilityEventRecorderAuraLinux* instance_;
DISALLOW_COPY_AND_ASSIGN(AccessibilityEventRecorderAuraLinux); DISALLOW_COPY_AND_ASSIGN(AccessibilityEventRecorderAuraLinux);
...@@ -72,6 +72,9 @@ class AccessibilityEventRecorderAuraLinux : public AccessibilityEventRecorder { ...@@ -72,6 +72,9 @@ class AccessibilityEventRecorderAuraLinux : public AccessibilityEventRecorder {
// static // static
AccessibilityEventRecorderAuraLinux* AccessibilityEventRecorderAuraLinux*
AccessibilityEventRecorderAuraLinux::instance_ = nullptr; AccessibilityEventRecorderAuraLinux::instance_ = nullptr;
std::vector<unsigned int>
content::AccessibilityEventRecorderAuraLinux::atk_listener_ids_ =
std::vector<unsigned int>();
// static // static
gboolean AccessibilityEventRecorderAuraLinux::OnATKEventReceived( gboolean AccessibilityEventRecorderAuraLinux::OnATKEventReceived(
...@@ -146,6 +149,8 @@ void AccessibilityEventRecorderAuraLinux::AddATKEventListener( ...@@ -146,6 +149,8 @@ void AccessibilityEventRecorderAuraLinux::AddATKEventListener(
} }
void AccessibilityEventRecorderAuraLinux::AddATKEventListeners() { void AccessibilityEventRecorderAuraLinux::AddATKEventListeners() {
if (atk_listener_ids_.size() >= 1)
return;
GObject* gobject = G_OBJECT(g_object_new(G_TYPE_OBJECT, nullptr, nullptr)); GObject* gobject = G_OBJECT(g_object_new(G_TYPE_OBJECT, nullptr, nullptr));
g_object_unref(atk_no_op_object_new(gobject)); g_object_unref(atk_no_op_object_new(gobject));
g_object_unref(gobject); g_object_unref(gobject);
......
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