mas_disable_remote_accessibility.patch 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Cheng Zhao <[email protected]>
  3. Date: Thu, 20 Sep 2018 17:48:49 -0700
  4. Subject: mas_disable_remote_accessibility.patch
  5. Disable remote accessibility APIs (NSAccessibilityRemoteUIElement) for MAS
  6. build.
  7. diff --git a/components/remote_cocoa/app_shim/bridge_factory_impl.mm b/components/remote_cocoa/app_shim/bridge_factory_impl.mm
  8. index 5ed3c60b5f4f502b4171271c4e38c722bddd9d14..20346425bfbb6bea148df8ca1d3e61cdb11be20e 100644
  9. --- a/components/remote_cocoa/app_shim/bridge_factory_impl.mm
  10. +++ b/components/remote_cocoa/app_shim/bridge_factory_impl.mm
  11. @@ -43,6 +43,7 @@ class Bridge : public BridgedNativeWidgetHostHelper {
  12. // BridgedNativeWidgetHostHelper:
  13. id GetNativeViewAccessible() override {
  14. +#ifndef MAS_BUILD
  15. if (!remote_accessibility_element_) {
  16. int64_t browser_pid = 0;
  17. std::vector<uint8_t> element_token;
  18. @@ -53,6 +54,9 @@ class Bridge : public BridgedNativeWidgetHostHelper {
  19. ui::RemoteAccessibility::GetRemoteElementFromToken(element_token);
  20. }
  21. return remote_accessibility_element_.get();
  22. +#else
  23. + return nil;
  24. +#endif
  25. }
  26. void DispatchKeyEvent(ui::KeyEvent* event) override {
  27. bool event_handled = false;
  28. @@ -90,8 +94,10 @@ class Bridge : public BridgedNativeWidgetHostHelper {
  29. mojom::TextInputHostAssociatedPtr text_input_host_ptr_;
  30. std::unique_ptr<BridgedNativeWidgetImpl> bridge_impl_;
  31. +#ifndef MAS_BUILD
  32. base::scoped_nsobject<NSAccessibilityRemoteUIElement>
  33. remote_accessibility_element_;
  34. +#endif
  35. };
  36. } // namespace
  37. diff --git a/components/remote_cocoa/app_shim/bridged_native_widget_impl.mm b/components/remote_cocoa/app_shim/bridged_native_widget_impl.mm
  38. index a9f2b8af7deeda5c5c05c6354ce83063c7261afb..402b6099126e0ac8dd3b6be5c0ffb1a1946dc139 100644
  39. --- a/components/remote_cocoa/app_shim/bridged_native_widget_impl.mm
  40. +++ b/components/remote_cocoa/app_shim/bridged_native_widget_impl.mm
  41. @@ -543,10 +543,12 @@ void BridgedNativeWidgetImpl::CreateContentView(uint64_t ns_view_id,
  42. // this should be treated as an error and caught early.
  43. CHECK(bridged_view_);
  44. +#ifndef MAS_BUILD
  45. // Send the accessibility tokens for the NSView now that it exists.
  46. host_->SetRemoteAccessibilityTokens(
  47. ui::RemoteAccessibility::GetTokenForLocalElement(window_),
  48. ui::RemoteAccessibility::GetTokenForLocalElement(bridged_view_));
  49. +#endif
  50. // Beware: This view was briefly removed (in favor of a bare CALayer) in
  51. // crrev/c/1236675. The ordering of unassociated layers relative to NSView
  52. diff --git a/content/app_shim_remote_cocoa/ns_view_bridge_factory_impl.mm b/content/app_shim_remote_cocoa/ns_view_bridge_factory_impl.mm
  53. index 98b4efbae0082f912f0df3315724db567811d4a1..cc0b1c5b2e7af5cef916c6bb581d33663bc577c4 100644
  54. --- a/content/app_shim_remote_cocoa/ns_view_bridge_factory_impl.mm
  55. +++ b/content/app_shim_remote_cocoa/ns_view_bridge_factory_impl.mm
  56. @@ -60,8 +60,10 @@ class RenderWidgetHostNSViewBridgeOwner
  57. return nil;
  58. }
  59. void SetAccessibilityWindow(NSWindow* window) override {
  60. +#ifndef MAS_BUILD
  61. client_->SetRemoteAccessibilityWindowToken(
  62. ui::RemoteAccessibility::GetTokenForLocalElement(window));
  63. +#endif
  64. }
  65. void ForwardKeyboardEvent(const NativeWebKeyboardEvent& key_event,
  66. @@ -122,8 +124,10 @@ class RenderWidgetHostNSViewBridgeOwner
  67. mojom::RenderWidgetHostNSViewClientAssociatedPtr client_;
  68. std::unique_ptr<RenderWidgetHostNSViewBridgeLocal> bridge_;
  69. +#ifndef MAS_BUILD
  70. base::scoped_nsobject<NSAccessibilityRemoteUIElement>
  71. remote_accessibility_element_;
  72. +#endif
  73. DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostNSViewBridgeOwner);
  74. };
  75. diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
  76. index 9194753f4719183efbea0afcac85e4dfcd3e6036..69ca0507b18edc31afc08d198450c01254cc8110 100644
  77. --- a/content/browser/renderer_host/render_widget_host_view_mac.h
  78. +++ b/content/browser/renderer_host/render_widget_host_view_mac.h
  79. @@ -44,7 +44,9 @@ class ScopedPasswordInputEnabler;
  80. @protocol RenderWidgetHostViewMacDelegate;
  81. +#ifndef MAS_BUILD
  82. @class NSAccessibilityRemoteUIElement;
  83. +#endif
  84. @class RenderWidgetHostViewCocoa;
  85. namespace content {
  86. @@ -642,10 +644,12 @@ class CONTENT_EXPORT RenderWidgetHostViewMac
  87. // EnsureSurfaceSynchronizedForWebTest().
  88. uint32_t latest_capture_sequence_number_ = 0u;
  89. +#ifndef MAS_BUILD
  90. // Remote accessibility objects corresponding to the NSWindow that this is
  91. // displayed to the user in.
  92. base::scoped_nsobject<NSAccessibilityRemoteUIElement>
  93. remote_window_accessible_;
  94. +#endif
  95. // Used to force the NSApplication's focused accessibility element to be the
  96. // content::BrowserAccessibilityCocoa accessibility tree when the NSView for
  97. diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
  98. index a1138408c0985efc1334c9a92f7e875680b69a4a..2b10c5b8f6d4a7a091ef3dd9d8ff324e5663f768 100644
  99. --- a/content/browser/renderer_host/render_widget_host_view_mac.mm
  100. +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
  101. @@ -244,8 +244,10 @@ RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
  102. void RenderWidgetHostViewMac::MigrateNSViewBridge(
  103. remote_cocoa::mojom::BridgeFactory* remote_cocoa_application,
  104. uint64_t parent_ns_view_id) {
  105. +#ifndef MAS_BUILD
  106. // Destroy the previous remote accessibility element.
  107. remote_window_accessible_.reset();
  108. +#endif
  109. // Disconnect from the previous bridge (this will have the effect of
  110. // destroying the associated bridge), and close the binding (to allow it
  111. @@ -1390,8 +1392,10 @@ RenderWidgetHostViewMac::AccessibilityGetNativeViewAccessible() {
  112. gfx::NativeViewAccessible
  113. RenderWidgetHostViewMac::AccessibilityGetNativeViewAccessibleForWindow() {
  114. +#ifndef MAS_BUILD
  115. if (remote_window_accessible_)
  116. return remote_window_accessible_.get();
  117. +#endif
  118. return [cocoa_view() window];
  119. }
  120. @@ -1431,9 +1435,11 @@ id RenderWidgetHostViewMac::GetFocusedBrowserAccessibilityElement() {
  121. }
  122. void RenderWidgetHostViewMac::SetAccessibilityWindow(NSWindow* window) {
  123. +#ifndef MAS_BUILD
  124. // When running in-process, just use the NSView's NSWindow as its own
  125. // accessibility element.
  126. remote_window_accessible_.reset();
  127. +#endif
  128. }
  129. bool RenderWidgetHostViewMac::SyncIsWidgetForMainFrame(
  130. @@ -1914,12 +1920,14 @@ void RenderWidgetHostViewMac::StopSpeaking() {
  131. void RenderWidgetHostViewMac::SetRemoteAccessibilityWindowToken(
  132. const std::vector<uint8_t>& window_token) {
  133. +#ifndef MAS_BUILD
  134. if (window_token.empty()) {
  135. remote_window_accessible_.reset();
  136. } else {
  137. remote_window_accessible_ =
  138. ui::RemoteAccessibility::GetRemoteElementFromToken(window_token);
  139. }
  140. +#endif
  141. }
  142. ///////////////////////////////////////////////////////////////////////////////
  143. diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
  144. index 20371e7cd4eb2b01d6d4411733428fa2ecf25a15..a039b947be9f458c1af3988ac9a2ac5c0a03edec 100644
  145. --- a/ui/base/BUILD.gn
  146. +++ b/ui/base/BUILD.gn
  147. @@ -289,6 +289,13 @@ jumbo_component("base") {
  148. "window_open_disposition.h",
  149. ]
  150. + if (is_mas_build) {
  151. + sources -= [
  152. + "cocoa/remote_accessibility_api.h",
  153. + "cocoa/remote_accessibility_api.mm",
  154. + ]
  155. + }
  156. +
  157. if (is_posix) {
  158. sources += [ "l10n/l10n_util_posix.cc" ]
  159. }
  160. diff --git a/ui/base/cocoa/remote_accessibility_api.h b/ui/base/cocoa/remote_accessibility_api.h
  161. index 2a58aebabb23443a2c11364af4988c573f3909ba..3424b6011e80e9c995519b6a8d652abd843d926b 100644
  162. --- a/ui/base/cocoa/remote_accessibility_api.h
  163. +++ b/ui/base/cocoa/remote_accessibility_api.h
  164. @@ -11,6 +11,8 @@
  165. #include "base/mac/scoped_nsobject.h"
  166. #include "ui/base/ui_base_export.h"
  167. +#ifndef MAS_BUILD
  168. +
  169. @interface NSAccessibilityRemoteUIElement : NSObject
  170. + (void)registerRemoteUIProcessIdentifier:(int)pid;
  171. + (NSData*)remoteTokenForLocalUIElement:(id)element;
  172. @@ -32,4 +34,6 @@ class UI_BASE_EXPORT RemoteAccessibility {
  173. } // namespace ui
  174. +#endif // MAS_BUILD
  175. +
  176. #endif // UI_BASE_COCOA_REMOTE_ACCESSIBILITY_API_H_
  177. diff --git a/ui/views/cocoa/bridged_native_widget_host_impl.h b/ui/views/cocoa/bridged_native_widget_host_impl.h
  178. index eb874f0d4bcd6e08ddecfab5a0f9b18b562d6d92..ede669bc842f39062fe9e7af4605cbd285ece58e 100644
  179. --- a/ui/views/cocoa/bridged_native_widget_host_impl.h
  180. +++ b/ui/views/cocoa/bridged_native_widget_host_impl.h
  181. @@ -28,7 +28,9 @@
  182. #include "ui/views/window/dialog_observer.h"
  183. @class NativeWidgetMacNSWindow;
  184. +#ifndef MAS_BUILD
  185. @class NSAccessibilityRemoteUIElement;
  186. +#endif
  187. @class NSView;
  188. namespace ui {
  189. @@ -397,11 +399,13 @@ class VIEWS_EXPORT BridgedNativeWidgetHostImpl
  190. // process.
  191. remote_cocoa::mojom::BridgedNativeWidgetAssociatedPtr bridge_ptr_;
  192. +#ifndef MAS_BUILD
  193. // Remote accessibility objects corresponding to the NSWindow and its root
  194. // NSView.
  195. base::scoped_nsobject<NSAccessibilityRemoteUIElement>
  196. remote_window_accessible_;
  197. base::scoped_nsobject<NSAccessibilityRemoteUIElement> remote_view_accessible_;
  198. +#endif
  199. // Used to force the NSApplication's focused accessibility element to be the
  200. // views::Views accessibility tree when the NSView for this is focused.
  201. diff --git a/ui/views/cocoa/bridged_native_widget_host_impl.mm b/ui/views/cocoa/bridged_native_widget_host_impl.mm
  202. index dd3365aa841dc7d4d9c998ff097ffc8f21c811eb..f46c10998f29a15bedc246fd23b53d1b68653ff8 100644
  203. --- a/ui/views/cocoa/bridged_native_widget_host_impl.mm
  204. +++ b/ui/views/cocoa/bridged_native_widget_host_impl.mm
  205. @@ -348,14 +348,22 @@ gfx::NativeViewAccessible
  206. BridgedNativeWidgetHostImpl::GetNativeViewAccessibleForNSView() const {
  207. if (bridge_impl_)
  208. return bridge_impl_->ns_view();
  209. +#ifndef MAS_BUILD
  210. return remote_view_accessible_.get();
  211. +#else
  212. + return nullptr;
  213. +#endif
  214. }
  215. gfx::NativeViewAccessible
  216. BridgedNativeWidgetHostImpl::GetNativeViewAccessibleForNSWindow() const {
  217. if (bridge_impl_)
  218. return bridge_impl_->ns_window();
  219. +#ifndef MAS_BUILD
  220. return remote_window_accessible_.get();
  221. +#else
  222. + return nullptr;
  223. +#endif
  224. }
  225. remote_cocoa::mojom::BridgedNativeWidget* BridgedNativeWidgetHostImpl::bridge()
  226. @@ -1172,6 +1180,7 @@ void BridgedNativeWidgetHostImpl::OnFocusWindowToolbar() {
  227. void BridgedNativeWidgetHostImpl::SetRemoteAccessibilityTokens(
  228. const std::vector<uint8_t>& window_token,
  229. const std::vector<uint8_t>& view_token) {
  230. +#ifndef MAS_BUILD
  231. remote_window_accessible_ =
  232. ui::RemoteAccessibility::GetRemoteElementFromToken(window_token);
  233. remote_view_accessible_ =
  234. @@ -1179,14 +1188,17 @@ void BridgedNativeWidgetHostImpl::SetRemoteAccessibilityTokens(
  235. [remote_view_accessible_ setWindowUIElement:remote_window_accessible_.get()];
  236. [remote_view_accessible_
  237. setTopLevelUIElement:remote_window_accessible_.get()];
  238. +#endif
  239. }
  240. bool BridgedNativeWidgetHostImpl::GetRootViewAccessibilityToken(
  241. int64_t* pid,
  242. std::vector<uint8_t>* token) {
  243. +#ifndef MAS_BUILD
  244. *pid = getpid();
  245. id element_id = GetNativeViewAccessible();
  246. *token = ui::RemoteAccessibility::GetTokenForLocalElement(element_id);
  247. +#endif
  248. return true;
  249. }