adjust_accessibility_ui_for_electron.patch 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Shelley Vohr <[email protected]>
  3. Date: Mon, 6 Jul 2020 13:46:06 -0700
  4. Subject: Adjust accessibility_ui for Electron
  5. This tweaks Chrome's Accessibility support at chrome://accessibility
  6. to make it usable from Electron by replacing use of the Profile PrefService
  7. with Electron's own PrefService in ElectronBrowserContext. It also removes
  8. usage of BrowserList and Browser as we subclass related methods and use our
  9. WindowList.
  10. diff --git a/chrome/browser/ui/webui/accessibility/accessibility_ui.cc b/chrome/browser/ui/webui/accessibility/accessibility_ui.cc
  11. index 90d8660e8a109ac547d9ab8feacc641e8a6c5a57..fe176f7b2106d767da8b28864fd574a502a5f48e 100644
  12. --- a/chrome/browser/ui/webui/accessibility/accessibility_ui.cc
  13. +++ b/chrome/browser/ui/webui/accessibility/accessibility_ui.cc
  14. @@ -47,6 +47,7 @@
  15. #include "content/public/browser/web_contents_observer.h"
  16. #include "content/public/browser/web_contents_user_data.h"
  17. #include "content/public/browser/web_ui_data_source.h"
  18. +#include "electron/shell/browser/electron_browser_context.h"
  19. #include "ui/accessibility/accessibility_features.h"
  20. #include "ui/accessibility/ax_updates_and_events.h"
  21. #include "ui/accessibility/platform/ax_platform_node.h"
  22. @@ -170,7 +171,7 @@ base::Value::Dict BuildTargetDescriptor(content::RenderViewHost* rvh) {
  23. rvh->GetRoutingID(), accessibility_mode);
  24. }
  25. -#if !BUILDFLAG(IS_ANDROID)
  26. +#if 0
  27. base::Value::Dict BuildTargetDescriptor(Browser* browser) {
  28. base::Value::Dict target_data;
  29. target_data.Set(kSessionIdField, browser->session_id().id());
  30. @@ -191,7 +192,7 @@ void HandleAccessibilityRequestCallback(
  31. DCHECK(ShouldHandleAccessibilityRequestCallback(path));
  32. base::Value::Dict data;
  33. - PrefService* pref = Profile::FromBrowserContext(current_context)->GetPrefs();
  34. + PrefService* pref = static_cast<electron::ElectronBrowserContext*>(current_context)->prefs();
  35. ui::AXMode mode =
  36. content::BrowserAccessibilityState::GetInstance()->GetAccessibilityMode();
  37. bool is_native_enabled = content::BrowserAccessibilityState::GetInstance()
  38. @@ -220,7 +221,7 @@ void HandleAccessibilityRequestCallback(
  39. data.Set(kPDFPrinting, pdf_printing ? kOn : kOff);
  40. std::string pref_api_type =
  41. - pref->GetString(prefs::kShownAccessibilityApiType);
  42. + std::string(pref->GetString(prefs::kShownAccessibilityApiType));
  43. bool pref_api_type_supported = false;
  44. std::vector<ui::AXApiType::Type> supported_api_types =
  45. @@ -287,11 +288,11 @@ void HandleAccessibilityRequestCallback(
  46. data.Set(kPagesField, std::move(page_list));
  47. base::Value::List browser_list;
  48. -#if !BUILDFLAG(IS_ANDROID)
  49. +#if 0
  50. for (Browser* browser : *BrowserList::GetInstance()) {
  51. browser_list.Append(BuildTargetDescriptor(browser));
  52. }
  53. -#endif // !BUILDFLAG(IS_ANDROID)
  54. +#endif
  55. data.Set(kBrowsersField, std::move(browser_list));
  56. std::string json_string;
  57. @@ -761,7 +762,8 @@ void AccessibilityUIMessageHandler::SetGlobalString(
  58. const std::string value = CheckJSValue(data.FindString(kValueField));
  59. if (string_name == kApiTypeField) {
  60. - PrefService* pref = Profile::FromWebUI(web_ui())->GetPrefs();
  61. + PrefService* pref = static_cast<electron::ElectronBrowserContext*>(
  62. + web_ui()->GetWebContents()->GetBrowserContext())->prefs();
  63. pref->SetString(prefs::kShownAccessibilityApiType, value);
  64. }
  65. }
  66. @@ -815,7 +817,8 @@ void AccessibilityUIMessageHandler::RequestWebContentsTree(
  67. AXPropertyFilter::ALLOW_EMPTY);
  68. AddPropertyFilters(property_filters, deny, AXPropertyFilter::DENY);
  69. - PrefService* pref = Profile::FromWebUI(web_ui())->GetPrefs();
  70. + PrefService* pref = static_cast<electron::ElectronBrowserContext*>(
  71. + web_contents->GetBrowserContext())->prefs();
  72. ui::AXApiType::Type api_type =
  73. ui::AXApiType::From(pref->GetString(prefs::kShownAccessibilityApiType));
  74. std::string accessibility_contents =
  75. @@ -842,6 +845,7 @@ void AccessibilityUIMessageHandler::RequestNativeUITree(
  76. AXPropertyFilter::ALLOW_EMPTY);
  77. AddPropertyFilters(property_filters, deny, AXPropertyFilter::DENY);
  78. +#if 0
  79. for (Browser* browser : *BrowserList::GetInstance()) {
  80. if (browser->session_id().id() == session_id) {
  81. base::Value::Dict result = BuildTargetDescriptor(browser);
  82. @@ -854,6 +858,7 @@ void AccessibilityUIMessageHandler::RequestNativeUITree(
  83. return;
  84. }
  85. }
  86. +#endif
  87. #endif // !BUILDFLAG(IS_ANDROID)
  88. // No browser with the specified |session_id| was found.
  89. base::Value::Dict result;
  90. @@ -897,11 +902,13 @@ void AccessibilityUIMessageHandler::StopRecording(
  91. }
  92. ui::AXApiType::Type AccessibilityUIMessageHandler::GetRecordingApiType() {
  93. - PrefService* pref = Profile::FromWebUI(web_ui())->GetPrefs();
  94. - const std::vector<ui::AXApiType::Type> supported_types =
  95. - content::AXInspectFactory::SupportedApis();
  96. + PrefService* pref = static_cast<electron::ElectronBrowserContext*>(
  97. + web_ui()->GetWebContents()->GetBrowserContext())->prefs();
  98. ui::AXApiType::Type api_type =
  99. ui::AXApiType::From(pref->GetString(prefs::kShownAccessibilityApiType));
  100. +
  101. + const std::vector<ui::AXApiType::Type> supported_types =
  102. + content::AXInspectFactory::SupportedApis();
  103. // Check to see if it is in the supported types list.
  104. if (std::find(supported_types.begin(), supported_types.end(), api_type) ==
  105. supported_types.end()) {
  106. @@ -971,8 +978,11 @@ void AccessibilityUIMessageHandler::RequestAccessibilityEvents(
  107. // static
  108. void AccessibilityUIMessageHandler::RegisterProfilePrefs(
  109. user_prefs::PrefRegistrySyncable* registry) {
  110. +#if 0
  111. const std::string_view default_api_type =
  112. std::string_view(ui::AXApiType::Type(ui::AXApiType::kBlink));
  113. registry->RegisterStringPref(prefs::kShownAccessibilityApiType,
  114. std::string(default_api_type));
  115. + registry->RegisterBooleanPref(prefs::kShowInternalAccessibilityTree, false);
  116. +#endif
  117. }
  118. diff --git a/chrome/browser/ui/webui/accessibility/accessibility_ui.h b/chrome/browser/ui/webui/accessibility/accessibility_ui.h
  119. index b171afc941b2b3ef4aeba04a2b1c6eef2774d442..8f431aae69365bc8756e515c603332a7f1648148 100644
  120. --- a/chrome/browser/ui/webui/accessibility/accessibility_ui.h
  121. +++ b/chrome/browser/ui/webui/accessibility/accessibility_ui.h
  122. @@ -27,6 +27,8 @@ namespace content {
  123. class WebContents;
  124. } // namespace content
  125. +class ElectronAccessibilityUIMessageHandler;
  126. +
  127. namespace user_prefs {
  128. class PrefRegistrySyncable;
  129. } // namespace user_prefs
  130. @@ -77,6 +79,8 @@ class AccessibilityUIMessageHandler : public content::WebUIMessageHandler {
  131. static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
  132. private:
  133. + friend class ElectronAccessibilityUIMessageHandler;
  134. +
  135. void ToggleAccessibilityForWebContents(const base::Value::List& args);
  136. void SetGlobalFlag(const base::Value::List& args);
  137. void SetGlobalString(const base::Value::List& args);