From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Mon, 6 Jul 2020 13:46:06 -0700 Subject: Adjust accessibility_ui for Electron This tweaks Chrome's Accessibility support at chrome://accessibility to make it usable from Electron by replacing use of the Profile PrefService with Electron's own PrefService in ElectronBrowserContext. It also removes usage of BrowserList and Browser as we subclass related methods and use our WindowList. diff --git a/chrome/browser/ui/webui/accessibility/accessibility_ui.cc b/chrome/browser/ui/webui/accessibility/accessibility_ui.cc index 7f8d93e3637188280cc6e10c5c47a2cdbc0cc38f..7ccd2a61b45b3f864c1d8caefd3b235308986a8c 100644 --- a/chrome/browser/ui/webui/accessibility/accessibility_ui.cc +++ b/chrome/browser/ui/webui/accessibility/accessibility_ui.cc @@ -48,6 +48,7 @@ #include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_user_data.h" #include "content/public/browser/web_ui_data_source.h" +#include "electron/shell/browser/electron_browser_context.h" #include "ui/accessibility/accessibility_features.h" #include "ui/accessibility/ax_mode.h" #include "ui/accessibility/ax_updates_and_events.h" @@ -178,7 +179,7 @@ base::Value::Dict BuildTargetDescriptor(content::RenderViewHost* rvh) { rvh->GetRoutingID(), accessibility_mode); } -#if !BUILDFLAG(IS_ANDROID) +#if 0 base::Value::Dict BuildTargetDescriptor(Browser* browser) { base::Value::Dict target_data; target_data.Set(kSessionIdField, browser->session_id().id()); @@ -224,7 +225,7 @@ void HandleAccessibilityRequestCallback( auto& browser_accessibility_state = *content::BrowserAccessibilityState::GetInstance(); base::Value::Dict data; - PrefService* pref = Profile::FromBrowserContext(current_context)->GetPrefs(); + PrefService* pref = static_cast(current_context)->prefs(); ui::AXMode mode = browser_accessibility_state.GetAccessibilityMode(); bool native = mode.has_mode(ui::AXMode::kNativeAPIs); bool web = mode.has_mode(ui::AXMode::kWebContents); @@ -285,7 +286,7 @@ void HandleAccessibilityRequestCallback( data.Set(kIsScreenReaderActive, is_screen_reader_active); std::string pref_api_type = - pref->GetString(prefs::kShownAccessibilityApiType); + std::string(pref->GetString(prefs::kShownAccessibilityApiType)); bool pref_api_type_supported = false; std::vector supported_api_types = @@ -353,11 +354,11 @@ void HandleAccessibilityRequestCallback( data.Set(kPagesField, std::move(page_list)); base::Value::List browser_list; -#if !BUILDFLAG(IS_ANDROID) +#if 0 for (Browser* browser : *BrowserList::GetInstance()) { browser_list.Append(BuildTargetDescriptor(browser)); } -#endif // !BUILDFLAG(IS_ANDROID) +#endif data.Set(kBrowsersField, std::move(browser_list)); #if BUILDFLAG(IS_WIN) @@ -845,7 +846,8 @@ void AccessibilityUIMessageHandler::SetGlobalString( const std::string value = CheckJSValue(data.FindString(kValueField)); if (string_name == kApiTypeField) { - PrefService* pref = Profile::FromWebUI(web_ui())->GetPrefs(); + PrefService* pref = static_cast( + web_ui()->GetWebContents()->GetBrowserContext())->prefs(); pref->SetString(prefs::kShownAccessibilityApiType, value); } } @@ -899,7 +901,8 @@ void AccessibilityUIMessageHandler::RequestWebContentsTree( AXPropertyFilter::ALLOW_EMPTY); AddPropertyFilters(property_filters, deny, AXPropertyFilter::DENY); - PrefService* pref = Profile::FromWebUI(web_ui())->GetPrefs(); + PrefService* pref = static_cast( + web_contents->GetBrowserContext())->prefs(); ui::AXApiType::Type api_type = ui::AXApiType::From(pref->GetString(prefs::kShownAccessibilityApiType)); std::string accessibility_contents = @@ -926,6 +929,7 @@ void AccessibilityUIMessageHandler::RequestNativeUITree( AXPropertyFilter::ALLOW_EMPTY); AddPropertyFilters(property_filters, deny, AXPropertyFilter::DENY); +#if 0 for (Browser* browser : *BrowserList::GetInstance()) { if (browser->session_id().id() == session_id) { base::Value::Dict result = BuildTargetDescriptor(browser); @@ -938,6 +942,7 @@ void AccessibilityUIMessageHandler::RequestNativeUITree( return; } } +#endif #endif // !BUILDFLAG(IS_ANDROID) // No browser with the specified |session_id| was found. base::Value::Dict result; @@ -981,11 +986,13 @@ void AccessibilityUIMessageHandler::StopRecording( } ui::AXApiType::Type AccessibilityUIMessageHandler::GetRecordingApiType() { - PrefService* pref = Profile::FromWebUI(web_ui())->GetPrefs(); - const std::vector supported_types = - content::AXInspectFactory::SupportedApis(); + PrefService* pref = static_cast( + web_ui()->GetWebContents()->GetBrowserContext())->prefs(); ui::AXApiType::Type api_type = ui::AXApiType::From(pref->GetString(prefs::kShownAccessibilityApiType)); + + const std::vector supported_types = + content::AXInspectFactory::SupportedApis(); // Check to see if it is in the supported types list. if (std::find(supported_types.begin(), supported_types.end(), api_type) == supported_types.end()) { @@ -1055,10 +1062,13 @@ void AccessibilityUIMessageHandler::RequestAccessibilityEvents( // static void AccessibilityUIMessageHandler::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { +#if 0 const std::string_view default_api_type = std::string_view(ui::AXApiType::Type(ui::AXApiType::kBlink)); registry->RegisterStringPref(prefs::kShownAccessibilityApiType, std::string(default_api_type)); + registry->RegisterBooleanPref(prefs::kShowInternalAccessibilityTree, false); +#endif } void AccessibilityUIMessageHandler::OnVisibilityChanged( diff --git a/chrome/browser/ui/webui/accessibility/accessibility_ui.h b/chrome/browser/ui/webui/accessibility/accessibility_ui.h index 4b9d7df73c901c57c14693e9f24a51694ecd375f..93e1c9a79d88c8b4c57b244c9eec1e83c1d1fa0a 100644 --- a/chrome/browser/ui/webui/accessibility/accessibility_ui.h +++ b/chrome/browser/ui/webui/accessibility/accessibility_ui.h @@ -28,6 +28,8 @@ namespace content { class WebContents; } // namespace content +class ElectronAccessibilityUIMessageHandler; + namespace user_prefs { class PrefRegistrySyncable; } // namespace user_prefs @@ -79,6 +81,8 @@ class AccessibilityUIMessageHandler : public content::WebUIMessageHandler, static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); private: + friend class ElectronAccessibilityUIMessageHandler; + void ToggleAccessibilityForWebContents(const base::Value::List& args); void SetGlobalFlag(const base::Value::List& args); void SetGlobalString(const base::Value::List& args);