Commit f8aa3c93 authored by Alan Screen's avatar Alan Screen Committed by Commit Bot

Ensure N-up PDF conversion failures notify Print Preview UI

From crbug.com/1000936, failures in doing conversion of PDF for N-up
caused the Print Preview UI to endlessly spin in the
"Loading preview ..." state without ever showing that it had failed.

Wrap the N-up conversion calls' callbacks with
mojo::WrapCallbackWithDefaultInvokeIfNotRun() so that a status is
provided even if the utility process disappears before completing.

Update the OnN-up<something>Done() callbacks to include a notification
call to the Print Preview UI to report errors.

Bug: 1003171
Change-Id: Ifd3b249196256b6186569d5a41b10ea39763f1dc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1823801Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Commit-Queue: Alan Screen <awscreen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#699958}
parent 9db99f13
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "content/public/browser/render_process_host.h" #include "content/public/browser/render_process_host.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui.h"
#include "mojo/public/cpp/bindings/callback_helpers.h"
#include "printing/nup_parameters.h" #include "printing/nup_parameters.h"
#include "printing/page_setup.h" #include "printing/page_setup.h"
#include "printing/print_job_constants.h" #include "printing/print_job_constants.h"
...@@ -353,8 +354,12 @@ void PrintPreviewMessageHandler::OnCompositePdfPageDone( ...@@ -353,8 +354,12 @@ void PrintPreviewMessageHandler::OnCompositePdfPageDone(
client->DoNupPdfConvert( client->DoNupPdfConvert(
document_cookie, pages_per_sheet, print_preview_ui->page_size(), document_cookie, pages_per_sheet, print_preview_ui->page_size(),
printable_area, std::move(pdf_page_regions), printable_area, std::move(pdf_page_regions),
base::BindOnce(&PrintPreviewMessageHandler::OnNupPdfConvertDone, mojo::WrapCallbackWithDefaultInvokeIfNotRun(
weak_ptr_factory_.GetWeakPtr(), new_page_number, ids)); base::BindOnce(&PrintPreviewMessageHandler::OnNupPdfConvertDone,
weak_ptr_factory_.GetWeakPtr(), new_page_number,
ids),
mojom::PdfNupConverter::Status::CONVERSION_FAILURE,
base::ReadOnlySharedMemoryRegion()));
} }
} }
} }
...@@ -365,12 +370,14 @@ void PrintPreviewMessageHandler::OnNupPdfConvertDone( ...@@ -365,12 +370,14 @@ void PrintPreviewMessageHandler::OnNupPdfConvertDone(
mojom::PdfNupConverter::Status status, mojom::PdfNupConverter::Status status,
base::ReadOnlySharedMemoryRegion region) { base::ReadOnlySharedMemoryRegion region) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
if (status != mojom::PdfNupConverter::Status::SUCCESS) { if (status != mojom::PdfNupConverter::Status::SUCCESS) {
DLOG(ERROR) << "Nup pdf page conversion failed with error " << status; DLOG(ERROR) << "Nup pdf page conversion failed with error " << status;
if (print_preview_ui)
print_preview_ui->OnPrintPreviewFailed(ids.request_id);
return; return;
} }
PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
if (!print_preview_ui) if (!print_preview_ui)
return; return;
...@@ -412,10 +419,13 @@ void PrintPreviewMessageHandler::OnCompositePdfDocumentDone( ...@@ -412,10 +419,13 @@ void PrintPreviewMessageHandler::OnCompositePdfDocumentDone(
client->DoNupPdfDocumentConvert( client->DoNupPdfDocumentConvert(
document_cookie, pages_per_sheet, print_preview_ui->page_size(), document_cookie, pages_per_sheet, print_preview_ui->page_size(),
printable_area, std::move(region), printable_area, std::move(region),
base::BindOnce(&PrintPreviewMessageHandler::OnNupPdfDocumentConvertDone, mojo::WrapCallbackWithDefaultInvokeIfNotRun(
weak_ptr_factory_.GetWeakPtr(), base::BindOnce(
(page_count + pages_per_sheet - 1) / pages_per_sheet, &PrintPreviewMessageHandler::OnNupPdfDocumentConvertDone,
ids)); weak_ptr_factory_.GetWeakPtr(),
(page_count + pages_per_sheet - 1) / pages_per_sheet, ids),
mojom::PdfNupConverter::Status::CONVERSION_FAILURE,
base::ReadOnlySharedMemoryRegion()));
} }
} }
...@@ -425,12 +435,14 @@ void PrintPreviewMessageHandler::OnNupPdfDocumentConvertDone( ...@@ -425,12 +435,14 @@ void PrintPreviewMessageHandler::OnNupPdfDocumentConvertDone(
mojom::PdfNupConverter::Status status, mojom::PdfNupConverter::Status status,
base::ReadOnlySharedMemoryRegion region) { base::ReadOnlySharedMemoryRegion region) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
if (status != mojom::PdfNupConverter::Status::SUCCESS) { if (status != mojom::PdfNupConverter::Status::SUCCESS) {
DLOG(ERROR) << "Nup pdf document convert failed with error " << status; DLOG(ERROR) << "Nup pdf document convert failed with error " << status;
if (print_preview_ui)
print_preview_ui->OnPrintPreviewFailed(ids.request_id);
return; return;
} }
PrintPreviewUI* print_preview_ui = GetPrintPreviewUI(ids.ui_id);
if (!print_preview_ui) if (!print_preview_ui)
return; return;
......
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