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() {
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(
std::string* origin,
fuchsia::web::WebMessage* message,
......@@ -572,7 +580,7 @@ void FrameImpl::CreateViewWithViewRef(
semantics_manager_for_test_ ? semantics_manager_for_test_
: semantics_manager.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(
......@@ -775,7 +783,7 @@ void FrameImpl::EnableHeadlessRendering() {
accessibility_bridge_ = std::make_unique<AccessibilityBridge>(
semantics_manager_for_test_, window_tree_host_->CreateViewRef(),
web_contents_.get(),
base::BindOnce(&FrameImpl::CloseAndDestroyFrame,
base::BindOnce(&FrameImpl::OnAccessibilityError,
base::Unretained(this)));
// Set bounds for testing hit testing.
......
......@@ -119,6 +119,9 @@ class FrameImpl : public fuchsia::web::Frame,
// Cleans up the MediaPlayerImpl on disconnect.
void OnMediaPlayerDisconnect();
// An error handler for |accessibility_bridge_|.
void OnAccessibilityError(zx_status_t error);
// Initializes WindowTreeHost for the view with the specified |view_token|.
// |view_token| may be uninitialized in headless mode.
void InitWindowTreeHost(fuchsia::ui::views::ViewToken view_token,
......@@ -288,6 +291,8 @@ class FrameImpl : public fuchsia::web::Frame,
media_control::MediaBlocker media_blocker_;
ThemeManager theme_manager_;
base::WeakPtrFactory<FrameImpl> weak_factory_{this};
};
#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