Commit 0a8e1351 authored by ckitagawa's avatar ckitagawa Committed by Commit Bot

[Paint Preview] Fix a few low-volume crashes

This CL fixes a few low-volume crashes in paint preview code.

1. PaintPreviewClient - a few instances where getting the URL for the
   renderer crashes due to it being invalid. I think this is only
   possible on dev builds, but worth fixing.
2. PlayerCompositorDelegate{Android} I believe |compositor_error_| might
   already be gone on rare occasion leading to a crash downstream.

This CL was uploaded by git cl split.

Change-Id: I1a775c9a076ea11c719936d8b7dd69fe54704eae
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2401399Reviewed-by: default avatarMehran Mahmoudi <mahmoudi@chromium.org>
Commit-Queue: Mehran Mahmoudi <mahmoudi@chromium.org>
Commit-Queue: Calder Kitagawa <ckitagawa@chromium.org>
Auto-Submit: Calder Kitagawa <ckitagawa@chromium.org>
Cr-Commit-Position: refs/heads/master@{#805352}
parent 623765f8
...@@ -280,12 +280,24 @@ void PaintPreviewClient::CapturePaintPreview( ...@@ -280,12 +280,24 @@ void PaintPreviewClient::CapturePaintPreview(
mojom::PaintPreviewStatus::kGuidCollision, {}); mojom::PaintPreviewStatus::kGuidCollision, {});
return; return;
} }
if (!render_frame_host) {
std::move(callback).Run(params.inner.document_guid,
mojom::PaintPreviewStatus::kFailed, {});
return;
}
const GURL& url = render_frame_host->GetLastCommittedURL();
if (!url.is_valid()) {
std::move(callback).Run(params.inner.document_guid,
mojom::PaintPreviewStatus::kFailed, {});
return;
}
InProgressDocumentCaptureState document_data; InProgressDocumentCaptureState document_data;
document_data.should_clean_up_files = true; document_data.should_clean_up_files = true;
document_data.persistence = params.persistence; document_data.persistence = params.persistence;
document_data.root_dir = params.root_dir; document_data.root_dir = params.root_dir;
auto* metadata = document_data.proto.mutable_metadata(); auto* metadata = document_data.proto.mutable_metadata();
metadata->set_url(render_frame_host->GetLastCommittedURL().spec()); metadata->set_url(url.spec());
metadata->set_version(kPaintPreviewVersion); metadata->set_version(kPaintPreviewVersion);
document_data.callback = std::move(callback); document_data.callback = std::move(callback);
document_data.source_id = document_data.source_id =
......
...@@ -98,10 +98,12 @@ void PlayerCompositorDelegateAndroid::OnCompositorReady( ...@@ -98,10 +98,12 @@ void PlayerCompositorDelegateAndroid::OnCompositorReady(
base::UmaHistogramBoolean( base::UmaHistogramBoolean(
"Browser.PaintPreview.Player.CompositorProcessStartedCorrectly", "Browser.PaintPreview.Player.CompositorProcessStartedCorrectly",
compositor_started); compositor_started);
if (!compositor_started && compositor_error_) { if (!compositor_started) {
LOG(ERROR) << "Compositor process failed to begin with code: " DLOG(ERROR) << "Compositor process failed to begin with code: "
<< static_cast<int>(compositor_status); << static_cast<int>(compositor_status);
std::move(compositor_error_).Run(static_cast<int>(compositor_status)); if (compositor_error_)
std::move(compositor_error_).Run(static_cast<int>(compositor_status));
return; return;
} }
auto delta = base::TimeTicks::Now() - startup_timestamp_; auto delta = base::TimeTicks::Now() - startup_timestamp_;
......
...@@ -168,10 +168,11 @@ void PlayerCompositorDelegate::OnCompositorReadyStatusAdapter( ...@@ -168,10 +168,11 @@ void PlayerCompositorDelegate::OnCompositorReadyStatusAdapter(
} }
void PlayerCompositorDelegate::OnCompositorServiceDisconnected() { void PlayerCompositorDelegate::OnCompositorServiceDisconnected() {
LOG(ERROR) << "Compositor service disconnected."; DLOG(ERROR) << "Compositor service disconnected.";
if (compositor_error_) if (compositor_error_) {
std::move(compositor_error_) std::move(compositor_error_)
.Run(static_cast<int>(CompositorStatus::COMPOSITOR_SERVICE_DISCONNECT)); .Run(static_cast<int>(CompositorStatus::COMPOSITOR_SERVICE_DISCONNECT));
}
} }
void PlayerCompositorDelegate::OnCompositorClientCreated( void PlayerCompositorDelegate::OnCompositorClientCreated(
...@@ -263,10 +264,11 @@ void PlayerCompositorDelegate::SendCompositeRequest( ...@@ -263,10 +264,11 @@ void PlayerCompositorDelegate::SendCompositeRequest(
} }
void PlayerCompositorDelegate::OnCompositorClientDisconnected() { void PlayerCompositorDelegate::OnCompositorClientDisconnected() {
LOG(ERROR) << "Compositor client disconnected."; DLOG(ERROR) << "Compositor client disconnected.";
if (compositor_error_) if (compositor_error_) {
std::move(compositor_error_) std::move(compositor_error_)
.Run(static_cast<int>(CompositorStatus::COMPOSITOR_CLIENT_DISCONNECT)); .Run(static_cast<int>(CompositorStatus::COMPOSITOR_CLIENT_DISCONNECT));
}
} }
void PlayerCompositorDelegate::RequestBitmap( void PlayerCompositorDelegate::RequestBitmap(
......
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