| Index: chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc
|
| diff --git a/chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc b/chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc
|
| index f37b755b08fecea856c30dc1f0dcc041b3043ff3..a26a8bbc8891c4cd1e3d8b6760c6c7b3800598de 100644
|
| --- a/chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc
|
| +++ b/chrome/browser/ui/webui/print_preview/printer_backend_proxy_chromeos.cc
|
| @@ -70,47 +70,12 @@ void FetchCapabilities(std::unique_ptr<chromeos::Printer> printer,
|
| base::Bind(&GetSettingsOnBlockingPool, printer->id(), basic_info), cb);
|
| }
|
|
|
| -void HandlePrinterSetup(std::unique_ptr<chromeos::Printer> printer,
|
| - const PrinterSetupCallback& cb,
|
| - chromeos::PrinterSetupResult result) {
|
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| -
|
| - switch (result) {
|
| - case chromeos::PrinterSetupResult::SUCCESS:
|
| - VLOG(1) << "Printer setup successful for " << printer->id()
|
| - << " fetching properties";
|
| -
|
| - // fetch settings on the blocking pool and invoke callback.
|
| - FetchCapabilities(std::move(printer), cb);
|
| - return;
|
| - case chromeos::PrinterSetupResult::PPD_NOT_FOUND:
|
| - LOG(WARNING) << "Could not find PPD. Check printer configuration.";
|
| - // Prompt user to update configuration.
|
| - // TODO(skau): Fill me in
|
| - break;
|
| - case chromeos::PrinterSetupResult::PPD_UNRETRIEVABLE:
|
| - LOG(WARNING) << "Could not download PPD. Check Internet connection.";
|
| - // Could not download PPD. Connect to Internet.
|
| - // TODO(skau): Fill me in
|
| - break;
|
| - case chromeos::PrinterSetupResult::PRINTER_UNREACHABLE:
|
| - case chromeos::PrinterSetupResult::DBUS_ERROR:
|
| - case chromeos::PrinterSetupResult::PPD_TOO_LARGE:
|
| - case chromeos::PrinterSetupResult::INVALID_PPD:
|
| - case chromeos::PrinterSetupResult::FATAL_ERROR:
|
| - LOG(ERROR) << "Unexpected error in printer setup." << result;
|
| - break;
|
| - }
|
| -
|
| - // TODO(skau): Open printer settings if this is resolvable.
|
| - cb.Run(nullptr);
|
| -}
|
| -
|
| class PrinterBackendProxyChromeos : public PrinterBackendProxy {
|
| public:
|
| explicit PrinterBackendProxyChromeos(Profile* profile)
|
| : prefs_(chromeos::PrintersManagerFactory::GetForBrowserContext(profile)),
|
| - printer_configurer_(chromeos::PrinterConfigurer::Create(profile)) {
|
| + printer_configurer_(chromeos::PrinterConfigurer::Create(profile)),
|
| + weak_factory_(this) {
|
| // Construct the CupsPrintJobManager to listen for printing events.
|
| chromeos::CupsPrintJobManagerFactory::GetForBrowserContext(profile);
|
| }
|
| @@ -158,16 +123,61 @@ class PrinterBackendProxyChromeos : public PrinterBackendProxy {
|
| return;
|
| }
|
|
|
| + if (prefs_->IsConfigurationCurrent(*printer)) {
|
| + // Skip setup if the printer is already installed.
|
| + HandlePrinterSetup(std::move(printer), cb, chromeos::SUCCESS);
|
| + return;
|
| + }
|
| +
|
| const chromeos::Printer& printer_ref = *printer;
|
| printer_configurer_->SetUpPrinter(
|
| printer_ref,
|
| - base::Bind(&HandlePrinterSetup, base::Passed(&printer), cb));
|
| + base::Bind(&PrinterBackendProxyChromeos::HandlePrinterSetup,
|
| + weak_factory_.GetWeakPtr(), base::Passed(&printer), cb));
|
| };
|
|
|
| private:
|
| + void HandlePrinterSetup(std::unique_ptr<chromeos::Printer> printer,
|
| + const PrinterSetupCallback& cb,
|
| + chromeos::PrinterSetupResult result) {
|
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| +
|
| + switch (result) {
|
| + case chromeos::PrinterSetupResult::SUCCESS:
|
| + VLOG(1) << "Printer setup successful for " << printer->id()
|
| + << " fetching properties";
|
| + prefs_->PrinterInstalled(*printer);
|
| +
|
| + // fetch settings on the blocking pool and invoke callback.
|
| + FetchCapabilities(std::move(printer), cb);
|
| + return;
|
| + case chromeos::PrinterSetupResult::PPD_NOT_FOUND:
|
| + LOG(WARNING) << "Could not find PPD. Check printer configuration.";
|
| + // Prompt user to update configuration.
|
| + // TODO(skau): Fill me in
|
| + break;
|
| + case chromeos::PrinterSetupResult::PPD_UNRETRIEVABLE:
|
| + LOG(WARNING) << "Could not download PPD. Check Internet connection.";
|
| + // Could not download PPD. Connect to Internet.
|
| + // TODO(skau): Fill me in
|
| + break;
|
| + case chromeos::PrinterSetupResult::PRINTER_UNREACHABLE:
|
| + case chromeos::PrinterSetupResult::DBUS_ERROR:
|
| + case chromeos::PrinterSetupResult::PPD_TOO_LARGE:
|
| + case chromeos::PrinterSetupResult::INVALID_PPD:
|
| + case chromeos::PrinterSetupResult::FATAL_ERROR:
|
| + LOG(ERROR) << "Unexpected error in printer setup." << result;
|
| + break;
|
| + }
|
| +
|
| + // TODO(skau): Open printer settings if this is resolvable.
|
| + cb.Run(nullptr);
|
| + }
|
| +
|
| chromeos::PrintersManager* prefs_;
|
| scoped_refptr<chromeos::printing::PpdProvider> ppd_provider_;
|
| std::unique_ptr<chromeos::PrinterConfigurer> printer_configurer_;
|
| + base::WeakPtrFactory<PrinterBackendProxyChromeos> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PrinterBackendProxyChromeos);
|
| };
|
|
|