| Index: chrome/browser/ui/webui/print_preview/print_preview_handler.cc | 
| diff --git a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc | 
| index de2fc1255d17e2a97ba53f2257c88a3671bd04f6..1d66c9838403de882aeb9d10f55b7102c5a1f300 100644 | 
| --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc | 
| +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc | 
| @@ -518,7 +518,8 @@ PrintPreviewHandler::PrintPreviewHandler() | 
| manage_cloud_printers_dialog_request_count_(0), | 
| reported_failed_preview_(false), | 
| has_logged_printers_count_(false), | 
| -      gaia_cookie_manager_service_(NULL), | 
| +      gaia_cookie_manager_service_(nullptr), | 
| +      printer_backend_proxy_(nullptr), | 
| weak_factory_(this) { | 
| ReportUserActionHistogram(PREVIEW_STARTED); | 
| } | 
| @@ -611,11 +612,27 @@ PrintPreviewUI* PrintPreviewHandler::print_preview_ui() const { | 
| return static_cast<PrintPreviewUI*>(web_ui()->GetController()); | 
| } | 
|  | 
| +printing::PrinterBackendProxy* PrintPreviewHandler::printer_backend_proxy() { | 
| +  DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| + | 
| +  if (!printer_backend_proxy_) { | 
| +#if defined(OS_CHROMEOS) | 
| +    // ChromeOS stores printer information in printer prefs which requires a | 
| +    // profile.  Other plaforms retrieve printer information from OS resources. | 
| +    printer_backend_proxy_ = | 
| +        printing::PrinterBackendProxy::Create(Profile::FromWebUI(web_ui())); | 
| +#else | 
| +    printer_backend_proxy_ = printing::PrinterBackendProxy::Create(); | 
| +#endif | 
| +  } | 
| + | 
| +  return printer_backend_proxy_.get(); | 
| +} | 
| + | 
| void PrintPreviewHandler::HandleGetPrinters(const base::ListValue* /*args*/) { | 
| VLOG(1) << "Enumerate printers start"; | 
| -  printing::EnumeratePrinters(Profile::FromWebUI(web_ui()), | 
| -                              base::Bind(&PrintPreviewHandler::SetupPrinterList, | 
| -                                         weak_factory_.GetWeakPtr())); | 
| +  printer_backend_proxy()->EnumeratePrinters(base::Bind( | 
| +      &PrintPreviewHandler::SetupPrinterList, weak_factory_.GetWeakPtr())); | 
| } | 
|  | 
| void PrintPreviewHandler::HandleGetPrivetPrinters(const base::ListValue* args) { | 
| @@ -1029,8 +1046,8 @@ void PrintPreviewHandler::HandleGetPrinterCapabilities( | 
| base::Bind(&PrintPreviewHandler::SendPrinterCapabilities, | 
| weak_factory_.GetWeakPtr(), printer_name); | 
|  | 
| -  printing::ConfigurePrinterAndFetchCapabilities(Profile::FromWebUI(web_ui()), | 
| -                                                 printer_name, cb); | 
| +  printer_backend_proxy()->ConfigurePrinterAndFetchCapabilities(printer_name, | 
| +                                                                cb); | 
| } | 
|  | 
| void PrintPreviewHandler::OnSigninComplete() { | 
| @@ -1152,11 +1169,8 @@ void PrintPreviewHandler::HandleGetInitialSettings( | 
| const base::ListValue* /*args*/) { | 
| // Send before SendInitialSettings() to allow cloud printer auto select. | 
| SendCloudPrintEnabled(); | 
| -  base::PostTaskAndReplyWithResult( | 
| -      BrowserThread::GetBlockingPool(), FROM_HERE, | 
| -      base::Bind(&printing::GetDefaultPrinterOnBlockingPoolThread), | 
| -      base::Bind(&PrintPreviewHandler::SendInitialSettings, | 
| -                 weak_factory_.GetWeakPtr())); | 
| +  printer_backend_proxy()->GetDefaultPrinter(base::Bind( | 
| +      &PrintPreviewHandler::SendInitialSettings, weak_factory_.GetWeakPtr())); | 
| } | 
|  | 
| void PrintPreviewHandler::HandleForceOpenNewTab(const base::ListValue* args) { | 
|  |