| OLD | NEW | 
|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "chrome/browser/ui/webui/print_preview/extension_printer_handler.h" | 5 #include "chrome/browser/ui/webui/print_preview/extension_printer_handler.h" | 
| 6 | 6 | 
| 7 #include <algorithm> | 7 #include <algorithm> | 
| 8 #include <utility> | 8 #include <utility> | 
| 9 | 9 | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 51 const char kContentTypePWGRaster[] = "image/pwg-raster"; | 51 const char kContentTypePWGRaster[] = "image/pwg-raster"; | 
| 52 const char kContentTypeAll[] = "*/*"; | 52 const char kContentTypeAll[] = "*/*"; | 
| 53 | 53 | 
| 54 const char kInvalidDataPrintError[] = "INVALID_DATA"; | 54 const char kInvalidDataPrintError[] = "INVALID_DATA"; | 
| 55 const char kInvalidTicketPrintError[] = "INVALID_TICKET"; | 55 const char kInvalidTicketPrintError[] = "INVALID_TICKET"; | 
| 56 | 56 | 
| 57 const char kProvisionalUsbLabel[] = "provisional-usb"; | 57 const char kProvisionalUsbLabel[] = "provisional-usb"; | 
| 58 | 58 | 
| 59 // Updates |job| with raster file path, size and last modification time. | 59 // Updates |job| with raster file path, size and last modification time. | 
| 60 // Returns the updated print job. | 60 // Returns the updated print job. | 
| 61 scoped_ptr<extensions::PrinterProviderPrintJob> UpdateJobFileInfoOnWorkerThread( | 61 std::unique_ptr<extensions::PrinterProviderPrintJob> | 
|  | 62 UpdateJobFileInfoOnWorkerThread( | 
| 62     const base::FilePath& raster_path, | 63     const base::FilePath& raster_path, | 
| 63     scoped_ptr<extensions::PrinterProviderPrintJob> job) { | 64     std::unique_ptr<extensions::PrinterProviderPrintJob> job) { | 
| 64   if (base::GetFileInfo(raster_path, &job->file_info)) | 65   if (base::GetFileInfo(raster_path, &job->file_info)) | 
| 65     job->document_path = raster_path; | 66     job->document_path = raster_path; | 
| 66   return job; | 67   return job; | 
| 67 } | 68 } | 
| 68 | 69 | 
| 69 // Callback to PWG raster conversion. | 70 // Callback to PWG raster conversion. | 
| 70 // Posts a task to update print job with info about file containing converted | 71 // Posts a task to update print job with info about file containing converted | 
| 71 // PWG raster data. The task is posted to |slow_task_runner|. | 72 // PWG raster data. The task is posted to |slow_task_runner|. | 
| 72 void UpdateJobFileInfo( | 73 void UpdateJobFileInfo( | 
| 73     scoped_ptr<extensions::PrinterProviderPrintJob> job, | 74     std::unique_ptr<extensions::PrinterProviderPrintJob> job, | 
| 74     const scoped_refptr<base::TaskRunner>& slow_task_runner, | 75     const scoped_refptr<base::TaskRunner>& slow_task_runner, | 
| 75     const ExtensionPrinterHandler::PrintJobCallback& callback, | 76     const ExtensionPrinterHandler::PrintJobCallback& callback, | 
| 76     bool success, | 77     bool success, | 
| 77     const base::FilePath& pwg_file_path) { | 78     const base::FilePath& pwg_file_path) { | 
| 78   if (!success) { | 79   if (!success) { | 
| 79     callback.Run(std::move(job)); | 80     callback.Run(std::move(job)); | 
| 80     return; | 81     return; | 
| 81   } | 82   } | 
| 82 | 83 | 
| 83   base::PostTaskAndReplyWithResult( | 84   base::PostTaskAndReplyWithResult( | 
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 181 } | 182 } | 
| 182 | 183 | 
| 183 void ExtensionPrinterHandler::StartPrint( | 184 void ExtensionPrinterHandler::StartPrint( | 
| 184     const std::string& destination_id, | 185     const std::string& destination_id, | 
| 185     const std::string& capability, | 186     const std::string& capability, | 
| 186     const base::string16& job_title, | 187     const base::string16& job_title, | 
| 187     const std::string& ticket_json, | 188     const std::string& ticket_json, | 
| 188     const gfx::Size& page_size, | 189     const gfx::Size& page_size, | 
| 189     const scoped_refptr<base::RefCountedMemory>& print_data, | 190     const scoped_refptr<base::RefCountedMemory>& print_data, | 
| 190     const PrinterHandler::PrintCallback& callback) { | 191     const PrinterHandler::PrintCallback& callback) { | 
| 191   scoped_ptr<extensions::PrinterProviderPrintJob> print_job( | 192   std::unique_ptr<extensions::PrinterProviderPrintJob> print_job( | 
| 192       new extensions::PrinterProviderPrintJob()); | 193       new extensions::PrinterProviderPrintJob()); | 
| 193   print_job->printer_id = destination_id; | 194   print_job->printer_id = destination_id; | 
| 194   print_job->job_title = job_title; | 195   print_job->job_title = job_title; | 
| 195   print_job->ticket_json = ticket_json; | 196   print_job->ticket_json = ticket_json; | 
| 196 | 197 | 
| 197   cloud_devices::CloudDeviceDescription printer_description; | 198   cloud_devices::CloudDeviceDescription printer_description; | 
| 198   printer_description.InitFromString(capability); | 199   printer_description.InitFromString(capability); | 
| 199 | 200 | 
| 200   cloud_devices::printer::ContentTypesCapability content_types; | 201   cloud_devices::printer::ContentTypesCapability content_types; | 
| 201   content_types.LoadFrom(printer_description); | 202   content_types.LoadFrom(printer_description); | 
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 248 | 249 | 
| 249   extensions::PrinterProviderAPIFactory::GetInstance() | 250   extensions::PrinterProviderAPIFactory::GetInstance() | 
| 250       ->GetForBrowserContext(browser_context_) | 251       ->GetForBrowserContext(browser_context_) | 
| 251       ->DispatchGetUsbPrinterInfoRequested( | 252       ->DispatchGetUsbPrinterInfoRequested( | 
| 252           extension_id, device, | 253           extension_id, device, | 
| 253           base::Bind(&ExtensionPrinterHandler::WrapGetPrinterInfoCallback, | 254           base::Bind(&ExtensionPrinterHandler::WrapGetPrinterInfoCallback, | 
| 254                      weak_ptr_factory_.GetWeakPtr(), callback)); | 255                      weak_ptr_factory_.GetWeakPtr(), callback)); | 
| 255 } | 256 } | 
| 256 | 257 | 
| 257 void ExtensionPrinterHandler::SetPWGRasterConverterForTesting( | 258 void ExtensionPrinterHandler::SetPWGRasterConverterForTesting( | 
| 258     scoped_ptr<PWGRasterConverter> pwg_raster_converter) { | 259     std::unique_ptr<PWGRasterConverter> pwg_raster_converter) { | 
| 259   pwg_raster_converter_ = std::move(pwg_raster_converter); | 260   pwg_raster_converter_ = std::move(pwg_raster_converter); | 
| 260 } | 261 } | 
| 261 | 262 | 
| 262 void ExtensionPrinterHandler::ConvertToPWGRaster( | 263 void ExtensionPrinterHandler::ConvertToPWGRaster( | 
| 263     const scoped_refptr<base::RefCountedMemory>& data, | 264     const scoped_refptr<base::RefCountedMemory>& data, | 
| 264     const cloud_devices::CloudDeviceDescription& printer_description, | 265     const cloud_devices::CloudDeviceDescription& printer_description, | 
| 265     const cloud_devices::CloudDeviceDescription& ticket, | 266     const cloud_devices::CloudDeviceDescription& ticket, | 
| 266     const gfx::Size& page_size, | 267     const gfx::Size& page_size, | 
| 267     scoped_ptr<extensions::PrinterProviderPrintJob> job, | 268     std::unique_ptr<extensions::PrinterProviderPrintJob> job, | 
| 268     const ExtensionPrinterHandler::PrintJobCallback& callback) { | 269     const ExtensionPrinterHandler::PrintJobCallback& callback) { | 
| 269   if (!pwg_raster_converter_) { | 270   if (!pwg_raster_converter_) { | 
| 270     pwg_raster_converter_ = PWGRasterConverter::CreateDefault(); | 271     pwg_raster_converter_ = PWGRasterConverter::CreateDefault(); | 
| 271   } | 272   } | 
| 272   pwg_raster_converter_->Start( | 273   pwg_raster_converter_->Start( | 
| 273       data.get(), | 274       data.get(), | 
| 274       PWGRasterConverter::GetConversionSettings(printer_description, page_size), | 275       PWGRasterConverter::GetConversionSettings(printer_description, page_size), | 
| 275       PWGRasterConverter::GetBitmapSettings(printer_description, ticket), | 276       PWGRasterConverter::GetBitmapSettings(printer_description, ticket), | 
| 276       base::Bind(&UpdateJobFileInfo, base::Passed(&job), slow_task_runner_, | 277       base::Bind(&UpdateJobFileInfo, base::Passed(&job), slow_task_runner_, | 
| 277                  callback)); | 278                  callback)); | 
| 278 } | 279 } | 
| 279 | 280 | 
| 280 void ExtensionPrinterHandler::DispatchPrintJob( | 281 void ExtensionPrinterHandler::DispatchPrintJob( | 
| 281     const PrinterHandler::PrintCallback& callback, | 282     const PrinterHandler::PrintCallback& callback, | 
| 282     scoped_ptr<extensions::PrinterProviderPrintJob> print_job) { | 283     std::unique_ptr<extensions::PrinterProviderPrintJob> print_job) { | 
| 283   if (print_job->document_path.empty() && !print_job->document_bytes) { | 284   if (print_job->document_path.empty() && !print_job->document_bytes) { | 
| 284     WrapPrintCallback(callback, false, kInvalidDataPrintError); | 285     WrapPrintCallback(callback, false, kInvalidDataPrintError); | 
| 285     return; | 286     return; | 
| 286   } | 287   } | 
| 287 | 288 | 
| 288   extensions::PrinterProviderAPIFactory::GetInstance() | 289   extensions::PrinterProviderAPIFactory::GetInstance() | 
| 289       ->GetForBrowserContext(browser_context_) | 290       ->GetForBrowserContext(browser_context_) | 
| 290       ->DispatchPrintRequested( | 291       ->DispatchPrintRequested( | 
| 291           *print_job, base::Bind(&ExtensionPrinterHandler::WrapPrintCallback, | 292           *print_job, base::Bind(&ExtensionPrinterHandler::WrapPrintCallback, | 
| 292                                  weak_ptr_factory_.GetWeakPtr(), callback)); | 293                                  weak_ptr_factory_.GetWeakPtr(), callback)); | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 366                 .Set("provisional", true) | 367                 .Set("provisional", true) | 
| 367                 .Build()); | 368                 .Build()); | 
| 368       } | 369       } | 
| 369     } | 370     } | 
| 370   } | 371   } | 
| 371 | 372 | 
| 372   DCHECK_GT(pending_enumeration_count_, 0); | 373   DCHECK_GT(pending_enumeration_count_, 0); | 
| 373   pending_enumeration_count_--; | 374   pending_enumeration_count_--; | 
| 374   callback.Run(*printer_list.Build().get(), pending_enumeration_count_ == 0); | 375   callback.Run(*printer_list.Build().get(), pending_enumeration_count_ == 0); | 
| 375 } | 376 } | 
| OLD | NEW | 
|---|