diff options
Diffstat (limited to 'chromium/chrome/browser/accessibility/accessibility_ui.cc')
-rw-r--r-- | chromium/chrome/browser/accessibility/accessibility_ui.cc | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/chromium/chrome/browser/accessibility/accessibility_ui.cc b/chromium/chrome/browser/accessibility/accessibility_ui.cc index c77a24e895d..012e421c6e7 100644 --- a/chromium/chrome/browser/accessibility/accessibility_ui.cc +++ b/chromium/chrome/browser/accessibility/accessibility_ui.cc @@ -13,6 +13,7 @@ #include "base/bind_helpers.h" #include "base/command_line.h" #include "base/json/json_writer.h" +#include "base/optional.h" #include "base/strings/pattern.h" #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" @@ -80,6 +81,7 @@ static const char kInternal[] = "internal"; static const char kLabelImages[] = "labelImages"; static const char kNative[] = "native"; static const char kPage[] = "page"; +static const char kPDF[] = "pdf"; static const char kScreenReader[] = "screenreader"; static const char kShowOrRefreshTree[] = "showOrRefreshTree"; static const char kText[] = "text"; @@ -177,6 +179,7 @@ void HandleAccessibilityRequestCallback( bool text = mode.has_mode(ui::AXMode::kInlineTextBoxes); bool screenreader = mode.has_mode(ui::AXMode::kScreenReader); bool html = mode.has_mode(ui::AXMode::kHTML); + bool pdf = mode.has_mode(ui::AXMode::kPDF); // The "native" and "web" flags are disabled if // --disable-renderer-accessibility is set. @@ -203,6 +206,9 @@ void HandleAccessibilityRequestCallback( ? (label_images ? kOn : kOff) : kDisabled); + // The "pdf" flag is independent of the others. + data.SetString(kPDF, pdf ? kOn : kOff); + bool show_internal = pref->GetBoolean(prefs::kShowInternalAccessibilityTree); data.SetString(kInternal, show_internal ? kOn : kOff); @@ -367,7 +373,14 @@ void AccessibilityUIObserver::AccessibilityEventReceived( AccessibilityUIMessageHandler::AccessibilityUIMessageHandler() = default; -AccessibilityUIMessageHandler::~AccessibilityUIMessageHandler() = default; +AccessibilityUIMessageHandler::~AccessibilityUIMessageHandler() { + if (!observer_) + return; + content::WebContents* web_contents = observer_->web_contents(); + if (!web_contents) + return; + StopRecording(web_contents); +} void AccessibilityUIMessageHandler::RegisterMessages() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); @@ -641,6 +654,12 @@ void AccessibilityUIMessageHandler::Callback(const std::string& str) { event_logs_.push_back(str); } +void AccessibilityUIMessageHandler::StopRecording( + content::WebContents* web_contents) { + web_contents->RecordAccessibilityEvents(false, base::nullopt); + observer_.reset(nullptr); +} + void AccessibilityUIMessageHandler::RequestAccessibilityEvents( const base::ListValue* args) { const base::DictionaryValue* data; @@ -648,7 +667,7 @@ void AccessibilityUIMessageHandler::RequestAccessibilityEvents( int process_id = *data->FindIntPath(kProcessIdField); int routing_id = *data->FindIntPath(kRoutingIdField); - bool start = *data->FindBoolPath(kStartField); + bool start_recording = *data->FindBoolPath(kStartField); AllowJavascript(); @@ -661,22 +680,17 @@ void AccessibilityUIMessageHandler::RequestAccessibilityEvents( std::unique_ptr<base::DictionaryValue> result(BuildTargetDescriptor(rvh)); content::WebContents* web_contents = content::WebContents::FromRenderViewHost(rvh); - if (start) { + if (start_recording) { if (observer_) { return; } web_contents->RecordAccessibilityEvents( - base::BindRepeating(&AccessibilityUIMessageHandler::Callback, - base::Unretained(this)), - true); + true, base::BindRepeating(&AccessibilityUIMessageHandler::Callback, + base::Unretained(this))); observer_ = std::make_unique<AccessibilityUIObserver>(web_contents, &event_logs_); } else { - web_contents->RecordAccessibilityEvents( - base::BindRepeating(&AccessibilityUIMessageHandler::Callback, - base::Unretained(this)), - false); - observer_.release(); + StopRecording(web_contents); std::string event_logs_str; for (std::string log : event_logs_) { |