Commit cff22160 authored by Christopher Cameron's avatar Christopher Cameron Committed by Commit Bot

Don't use NSAccessibilityRemoteUIElement for WebContentsViewMac

Using this API may be causing crashes, and it was only added for code
cleanliness. Remove it.

TBR=ellyjones

Bug: 924955
Change-Id: Id25bab33958381bd16ce4887c842943ccae99a34
Reviewed-on: https://chromium-review.googlesource.com/c/1437395
Commit-Queue: ccameron <ccameron@chromium.org>
Reviewed-by: default avatarccameron <ccameron@chromium.org>
Cr-Commit-Position: refs/heads/master@{#626202}
parent ff6565a4
...@@ -14,7 +14,6 @@ ...@@ -14,7 +14,6 @@
#include "content/common/content_export.h" #include "content/common/content_export.h"
#include "content/public/common/web_contents_ns_view_bridge.mojom.h" #include "content/public/common/web_contents_ns_view_bridge.mojom.h"
#include "ui/base/cocoa/ns_view_ids.h" #include "ui/base/cocoa/ns_view_ids.h"
#include "ui/base/cocoa/remote_accessibility_api.h"
@class WebContentsViewCocoa; @class WebContentsViewCocoa;
...@@ -51,8 +50,6 @@ class CONTENT_EXPORT WebContentsNSViewBridge ...@@ -51,8 +50,6 @@ class CONTENT_EXPORT WebContentsNSViewBridge
private: private:
base::scoped_nsobject<WebContentsViewCocoa> cocoa_view_; base::scoped_nsobject<WebContentsViewCocoa> cocoa_view_;
base::scoped_nsobject<NSAccessibilityRemoteUIElement>
parent_accessibility_element_;
mojom::WebContentsNSViewClientAssociatedPtr client_; mojom::WebContentsNSViewClientAssociatedPtr client_;
std::unique_ptr<ui::ScopedNSViewIdMapping> view_id_; std::unique_ptr<ui::ScopedNSViewIdMapping> view_id_;
......
...@@ -46,15 +46,12 @@ void WebContentsNSViewBridge::SetParentNSView( ...@@ -46,15 +46,12 @@ void WebContentsNSViewBridge::SetParentNSView(
CHECK(parent_ns_view); CHECK(parent_ns_view);
[parent_ns_view addSubview:cocoa_view_]; [parent_ns_view addSubview:cocoa_view_];
parent_accessibility_element_ = // TODO(https://crbug.com/924955): Ignore the accessibility token because
ui::RemoteAccessibility::GetRemoteElementFromToken(parent_token); // using it causes crashes.
[cocoa_view_ setAccessibilityParentElement:parent_accessibility_element_];
} }
void WebContentsNSViewBridge::ResetParentNSView() { void WebContentsNSViewBridge::ResetParentNSView() {
[cocoa_view_ removeFromSuperview]; [cocoa_view_ removeFromSuperview];
[cocoa_view_ setAccessibilityParentElement:nil];
parent_accessibility_element_.reset();
} }
void WebContentsNSViewBridge::SetBounds(const gfx::Rect& bounds_in_window) { void WebContentsNSViewBridge::SetBounds(const gfx::Rect& bounds_in_window) {
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/interface_request.h"
#include "ui/base/cocoa/cocoa_base_utils.h" #include "ui/base/cocoa/cocoa_base_utils.h"
#include "ui/base/cocoa/ns_view_ids.h" #include "ui/base/cocoa/ns_view_ids.h"
#include "ui/base/cocoa/remote_accessibility_api.h"
#include "ui/gfx/image/image_skia_util_mac.h" #include "ui/gfx/image/image_skia_util_mac.h"
#include "ui/gfx/mac/coordinate_conversion.h" #include "ui/gfx/mac/coordinate_conversion.h"
...@@ -533,8 +532,12 @@ void WebContentsViewMac::PerformDragOperation( ...@@ -533,8 +532,12 @@ void WebContentsViewMac::PerformDragOperation(
void WebContentsViewMac::ViewsHostableAttach(ViewsHostableView::Host* host) { void WebContentsViewMac::ViewsHostableAttach(ViewsHostableView::Host* host) {
views_host_ = host; views_host_ = host;
std::vector<uint8_t> token = ui::RemoteAccessibility::GetTokenForLocalElement( // TODO(https://crbug.com/924955): Using the remote accessibility to set
views_host_->GetAccessibilityElement()); // the parent accessibility element here causes crashes, so just set it
// directly on the in-process WebContentsViewCocoa only.
std::vector<uint8_t> token;
[cocoa_view()
setAccessibilityParentElement:views_host_->GetAccessibilityElement()];
// Create an NSView in the target process, if one exists. // Create an NSView in the target process, if one exists.
uint64_t factory_host_id = views_host_->GetViewsFactoryHostId(); uint64_t factory_host_id = views_host_->GetViewsFactoryHostId();
...@@ -578,6 +581,7 @@ void WebContentsViewMac::ViewsHostableDetach() { ...@@ -578,6 +581,7 @@ void WebContentsViewMac::ViewsHostableDetach() {
// Permit the in-process NSView to call back into |this| again. // Permit the in-process NSView to call back into |this| again.
[cocoa_view() setClient:this]; [cocoa_view() setClient:this];
} }
[cocoa_view() setAccessibilityParentElement:nil];
ns_view_bridge_local_->SetVisible(false); ns_view_bridge_local_->SetVisible(false);
ns_view_bridge_local_->ResetParentNSView(); ns_view_bridge_local_->ResetParentNSView();
views_host_ = nullptr; views_host_ = nullptr;
......
...@@ -18,6 +18,8 @@ std::vector<uint8_t> RemoteAccessibility::GetTokenForLocalElement(id element) { ...@@ -18,6 +18,8 @@ std::vector<uint8_t> RemoteAccessibility::GetTokenForLocalElement(id element) {
base::scoped_nsobject<NSAccessibilityRemoteUIElement> base::scoped_nsobject<NSAccessibilityRemoteUIElement>
RemoteAccessibility::GetRemoteElementFromToken( RemoteAccessibility::GetRemoteElementFromToken(
const std::vector<uint8_t>& token) { const std::vector<uint8_t>& token) {
if (token.empty())
return base::scoped_nsobject<NSAccessibilityRemoteUIElement>();
base::scoped_nsobject<NSData> data( base::scoped_nsobject<NSData> data(
[[NSData alloc] initWithBytes:token.data() length:token.size()]); [[NSData alloc] initWithBytes:token.data() length:token.size()]);
return base::scoped_nsobject<NSAccessibilityRemoteUIElement>( return base::scoped_nsobject<NSAccessibilityRemoteUIElement>(
......
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