Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(188)

Unified Diff: chrome/browser/ui/webui/print_preview/extension_printer_handler.cc

Issue 973993003: Instead of ArrayBuffer, pass blob with printerProvider.onPrintRequested (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase & add ext fun histogram Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/print_preview/extension_printer_handler.cc
diff --git a/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc b/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc
index e47a228e9787472f3b0b012fd079c29dc870b064..e6753e4d2c184c896189d94a9eaec057ef9acfda 100644
--- a/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc
+++ b/chrome/browser/ui/webui/print_preview/extension_printer_handler.cc
@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/callback.h"
+#include "base/files/file.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/location.h"
@@ -34,41 +35,34 @@ const char kContentTypeAll[] = "*/*";
const char kInvalidDataPrintError[] = "INVALID_DATA";
const char kInvalidTicketPrintError[] = "INVALID_TICKET";
-// Reads raster data from file path |raster_path| and returns it as
-// RefCountedMemory. Returns NULL on error.
-scoped_refptr<base::RefCountedMemory> ReadConvertedPWGRasterFileOnWorkerThread(
- const base::FilePath& raster_path) {
- int64 file_size;
- if (base::GetFileSize(raster_path, &file_size) &&
- file_size <= extensions::PrinterProviderAPI::kMaxDocumentSize) {
- std::string data;
- data.reserve(file_size);
-
- if (base::ReadFileToString(raster_path, &data)) {
- return scoped_refptr<base::RefCountedMemory>(
- base::RefCountedString::TakeString(&data));
- }
- } else {
- LOG(ERROR) << "Invalid raster file size.";
- }
- return scoped_refptr<base::RefCountedMemory>();
+// Updates |job| with raster file path, size and last modification time.
+// Returns the updated print job.
+scoped_ptr<extensions::PrinterProviderPrintJob> UpdateJobFileInfoOnWorkerThread(
+ const base::FilePath& raster_path,
+ scoped_ptr<extensions::PrinterProviderPrintJob> job) {
+ if (base::GetFileInfo(raster_path, &job->file_info))
+ job->document_path = raster_path;
+ return job.Pass();
}
-// Posts a task to read a file containing converted PWG raster data to the
-// worker pool.
-void ReadConvertedPWGRasterFile(
+// Callback to PWG raster conversion.
+// Posts a task to update print job with info about file containing converted
+// PWG raster data. The task is posted to |slow_task_runner|.
+void UpdateJobFileInfo(
+ scoped_ptr<extensions::PrinterProviderPrintJob> job,
const scoped_refptr<base::TaskRunner>& slow_task_runner,
- const ExtensionPrinterHandler::RefCountedMemoryCallback& callback,
+ const ExtensionPrinterHandler::PrintJobCallback& callback,
bool success,
const base::FilePath& pwg_file_path) {
if (!success) {
- callback.Run(scoped_refptr<base::RefCountedMemory>());
+ callback.Run(job.Pass());
return;
}
base::PostTaskAndReplyWithResult(
slow_task_runner.get(), FROM_HERE,
- base::Bind(&ReadConvertedPWGRasterFileOnWorkerThread, pwg_file_path),
+ base::Bind(&UpdateJobFileInfoOnWorkerThread, pwg_file_path,
+ base::Passed(&job)),
callback);
}
@@ -133,8 +127,11 @@ void ExtensionPrinterHandler::StartPrint(
content_types.Contains(kContentTypeAll);
if (kUsePdf) {
+ // TODO(tbarzic): Consider writing larger PDF to disk and provide the data
+ // the same way as it's done with PWG raster.
print_job->content_type = kContentTypePdf;
- DispatchPrintJob(callback, print_job.Pass(), print_data);
+ print_job->document_bytes = print_data;
+ DispatchPrintJob(callback, print_job.Pass());
return;
}
@@ -146,9 +143,9 @@ void ExtensionPrinterHandler::StartPrint(
print_job->content_type = kContentTypePWGRaster;
ConvertToPWGRaster(print_data, printer_description, ticket, page_size,
+ print_job.Pass(),
base::Bind(&ExtensionPrinterHandler::DispatchPrintJob,
- weak_ptr_factory_.GetWeakPtr(), callback,
- base::Passed(&print_job)));
+ weak_ptr_factory_.GetWeakPtr(), callback));
}
void ExtensionPrinterHandler::SetPwgRasterConverterForTesting(
@@ -161,7 +158,8 @@ void ExtensionPrinterHandler::ConvertToPWGRaster(
const cloud_devices::CloudDeviceDescription& printer_description,
const cloud_devices::CloudDeviceDescription& ticket,
const gfx::Size& page_size,
- const ExtensionPrinterHandler::RefCountedMemoryCallback& callback) {
+ scoped_ptr<extensions::PrinterProviderPrintJob> job,
+ const ExtensionPrinterHandler::PrintJobCallback& callback) {
if (!pwg_raster_converter_) {
pwg_raster_converter_ = PWGRasterConverter::CreateDefault();
}
@@ -169,20 +167,18 @@ void ExtensionPrinterHandler::ConvertToPWGRaster(
data.get(),
PWGRasterConverter::GetConversionSettings(printer_description, page_size),
PWGRasterConverter::GetBitmapSettings(printer_description, ticket),
- base::Bind(&ReadConvertedPWGRasterFile, slow_task_runner_, callback));
+ base::Bind(&UpdateJobFileInfo, base::Passed(&job), slow_task_runner_,
+ callback));
}
void ExtensionPrinterHandler::DispatchPrintJob(
const PrinterHandler::PrintCallback& callback,
- scoped_ptr<extensions::PrinterProviderPrintJob> print_job,
- const scoped_refptr<base::RefCountedMemory>& print_data) {
- if (!print_data) {
+ scoped_ptr<extensions::PrinterProviderPrintJob> print_job) {
+ if (print_job->document_path.empty() && !print_job->document_bytes) {
WrapPrintCallback(callback, false, kInvalidDataPrintError);
return;
}
- print_job->document_bytes = print_data;
-
extensions::PrinterProviderAPIFactory::GetInstance()
->GetForBrowserContext(browser_context_)
->DispatchPrintRequested(

Powered by Google App Engine
This is Rietveld 408576698