Commit 507b52f6 authored by Sharon Yang's avatar Sharon Yang Committed by Commit Bot

[fuchsia] Delay teardown of FrameImpl on accessibility errors

Tear down the Frame by posting a task instead of in the
AccessibilityBridge, by adding OnAccessibilityError.

Bug: 1128954
Change-Id: Iba40229d7e11eb61534ef45fc16326b10814e59a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2545575
Commit-Queue: Sharon Yang <yangsharon@chromium.org>
Reviewed-by: default avatarSergey Ulanov <sergeyu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#828547}
parent 0f7c1aa2
...@@ -493,6 +493,14 @@ void FrameImpl::OnMediaPlayerDisconnect() { ...@@ -493,6 +493,14 @@ void FrameImpl::OnMediaPlayerDisconnect() {
media_player_ = nullptr; media_player_ = nullptr;
} }
void FrameImpl::OnAccessibilityError(zx_status_t error) {
// The task is posted so |accessibility_bridge_| does not tear |this| down
// while events are still being processed.
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&FrameImpl::CloseAndDestroyFrame,
weak_factory_.GetWeakPtr(), error));
}
bool FrameImpl::MaybeHandleCastStreamingMessage( bool FrameImpl::MaybeHandleCastStreamingMessage(
std::string* origin, std::string* origin,
fuchsia::web::WebMessage* message, fuchsia::web::WebMessage* message,
...@@ -572,7 +580,7 @@ void FrameImpl::CreateViewWithViewRef( ...@@ -572,7 +580,7 @@ void FrameImpl::CreateViewWithViewRef(
semantics_manager_for_test_ ? semantics_manager_for_test_ semantics_manager_for_test_ ? semantics_manager_for_test_
: semantics_manager.get(), : semantics_manager.get(),
window_tree_host_->CreateViewRef(), web_contents_.get(), window_tree_host_->CreateViewRef(), web_contents_.get(),
base::BindOnce(&FrameImpl::CloseAndDestroyFrame, base::Unretained(this))); base::BindOnce(&FrameImpl::OnAccessibilityError, base::Unretained(this)));
} }
void FrameImpl::GetMediaPlayer( void FrameImpl::GetMediaPlayer(
...@@ -775,7 +783,7 @@ void FrameImpl::EnableHeadlessRendering() { ...@@ -775,7 +783,7 @@ void FrameImpl::EnableHeadlessRendering() {
accessibility_bridge_ = std::make_unique<AccessibilityBridge>( accessibility_bridge_ = std::make_unique<AccessibilityBridge>(
semantics_manager_for_test_, window_tree_host_->CreateViewRef(), semantics_manager_for_test_, window_tree_host_->CreateViewRef(),
web_contents_.get(), web_contents_.get(),
base::BindOnce(&FrameImpl::CloseAndDestroyFrame, base::BindOnce(&FrameImpl::OnAccessibilityError,
base::Unretained(this))); base::Unretained(this)));
// Set bounds for testing hit testing. // Set bounds for testing hit testing.
......
...@@ -119,6 +119,9 @@ class FrameImpl : public fuchsia::web::Frame, ...@@ -119,6 +119,9 @@ class FrameImpl : public fuchsia::web::Frame,
// Cleans up the MediaPlayerImpl on disconnect. // Cleans up the MediaPlayerImpl on disconnect.
void OnMediaPlayerDisconnect(); void OnMediaPlayerDisconnect();
// An error handler for |accessibility_bridge_|.
void OnAccessibilityError(zx_status_t error);
// Initializes WindowTreeHost for the view with the specified |view_token|. // Initializes WindowTreeHost for the view with the specified |view_token|.
// |view_token| may be uninitialized in headless mode. // |view_token| may be uninitialized in headless mode.
void InitWindowTreeHost(fuchsia::ui::views::ViewToken view_token, void InitWindowTreeHost(fuchsia::ui::views::ViewToken view_token,
...@@ -288,6 +291,8 @@ class FrameImpl : public fuchsia::web::Frame, ...@@ -288,6 +291,8 @@ class FrameImpl : public fuchsia::web::Frame,
media_control::MediaBlocker media_blocker_; media_control::MediaBlocker media_blocker_;
ThemeManager theme_manager_; ThemeManager theme_manager_;
base::WeakPtrFactory<FrameImpl> weak_factory_{this};
}; };
#endif // FUCHSIA_ENGINE_BROWSER_FRAME_IMPL_H_ #endif // FUCHSIA_ENGINE_BROWSER_FRAME_IMPL_H_
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