Commit ac5cefdc authored by Abigail Klein's avatar Abigail Klein Committed by Commit Bot

[chrome:accessibility] Observe AXEvents

Observe AXEvents received by the RenderFrameHost. Log them in the
the accessibility events recorder, which records events from the
OS.

chrome: accessibility page, intermixed with the events recorded by
Bug: 785493
Change-Id: I7a72f786567c1f661de9f0945c01dc4d46789e72
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1900209
Commit-Queue: Abigail Klein <abigailbklein@google.com>
Reviewed-by: default avatarNektarios Paisios <nektar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#713515}
parent 6d1171cb
......@@ -26,6 +26,7 @@
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/accessibility_tree_formatter.h"
#include "content/public/browser/ax_event_notification_details.h"
#include "content/public/browser/browser_accessibility_state.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/favicon_status.h"
......@@ -348,11 +349,25 @@ AccessibilityUI::AccessibilityUI(content::WebUI* web_ui)
web_ui->AddMessageHandler(std::make_unique<AccessibilityUIMessageHandler>());
}
AccessibilityUI::~AccessibilityUI() {}
AccessibilityUI::~AccessibilityUI() = default;
AccessibilityUIMessageHandler::AccessibilityUIMessageHandler() {}
AccessibilityUIObserver::AccessibilityUIObserver(
content::WebContents* web_contents,
std::vector<std::string>* event_logs)
: content::WebContentsObserver(web_contents), event_logs_(event_logs) {}
AccessibilityUIMessageHandler::~AccessibilityUIMessageHandler() {}
AccessibilityUIObserver::~AccessibilityUIObserver() = default;
void AccessibilityUIObserver::AccessibilityEventReceived(
const content::AXEventNotificationDetails& details) {
for (const ui::AXEvent event : details.events) {
event_logs_->push_back(event.ToString());
}
}
AccessibilityUIMessageHandler::AccessibilityUIMessageHandler() = default;
AccessibilityUIMessageHandler::~AccessibilityUIMessageHandler() = default;
void AccessibilityUIMessageHandler::RegisterMessages() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
......@@ -649,11 +664,15 @@ void AccessibilityUIMessageHandler::RequestAccessibilityEvents(
base::BindRepeating(&AccessibilityUIMessageHandler::Callback,
base::Unretained(this)),
true);
observer_ =
std::make_unique<AccessibilityUIObserver>(web_contents, &event_logs_);
} else {
web_contents->RecordAccessibilityEvents(
base::BindRepeating(&AccessibilityUIMessageHandler::Callback,
base::Unretained(this)),
false);
observer_.release();
std::string event_logs_str;
for (std::string log : event_logs_) {
event_logs_str += log;
......
......@@ -5,7 +5,12 @@
#ifndef CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_UI_H_
#define CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_UI_H_
#include <memory>
#include <string>
#include <vector>
#include "base/macros.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_ui_controller.h"
#include "content/public/browser/web_ui_data_source.h"
#include "content/public/browser/web_ui_message_handler.h"
......@@ -14,16 +19,36 @@ namespace base {
class ListValue;
} // namespace base
namespace content {
struct AXEventNotificationDetails;
} // namespace content
namespace user_prefs {
class PrefRegistrySyncable;
} // namespace user_prefs
// Controls the accessibility web UI page.
class AccessibilityUI : public content::WebUIController {
public:
explicit AccessibilityUI(content::WebUI* web_ui);
~AccessibilityUI() override;
};
// Observes accessibility events from web contents.
class AccessibilityUIObserver : public content::WebContentsObserver {
public:
AccessibilityUIObserver(content::WebContents* web_contents,
std::vector<std::string>* event_logs);
~AccessibilityUIObserver() override;
void AccessibilityEventReceived(
const content::AXEventNotificationDetails& details) override;
private:
std::vector<std::string>* event_logs_;
};
// Manages messages sent from accessibility.js via json.
class AccessibilityUIMessageHandler : public content::WebUIMessageHandler {
public:
AccessibilityUIMessageHandler();
......@@ -35,6 +60,7 @@ class AccessibilityUIMessageHandler : public content::WebUIMessageHandler {
private:
std::vector<std::string> event_logs_;
std::unique_ptr<AccessibilityUIObserver> observer_;
void ToggleAccessibility(const base::ListValue* args);
void SetGlobalFlag(const base::ListValue* args);
......
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