| 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 6b757659c4a009775b65ef272600eb3c3f06805c..b41cffa6a5c944fc2a2e9deefb3ccbcafdaa569e 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
|
| @@ -96,11 +96,12 @@ void HandlePrinterSetup(std::unique_ptr<chromeos::Printer> printer,
|
|
|
| void OnPrinterAddResult(std::unique_ptr<chromeos::Printer> printer,
|
| const PrinterSetupCallback& cb,
|
| - bool success) {
|
| + int32_t result_code) {
|
| // It's expected that debug daemon posts callbacks on the UI thread.
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| - HandlePrinterSetup(std::move(printer), success ? SUCCESS : FAILURE, cb);
|
| + HandlePrinterSetup(std::move(printer), (result_code == 0) ? SUCCESS : FAILURE,
|
| + cb);
|
| }
|
|
|
| void OnPrinterAddError(const PrinterSetupCallback& cb) {
|
| @@ -112,28 +113,39 @@ void OnPrinterAddError(const PrinterSetupCallback& cb) {
|
| }
|
|
|
| void AddPrinter(std::unique_ptr<chromeos::Printer> printer,
|
| - const std::string& ppd_path,
|
| - bool ipp_everywhere,
|
| + const std::string& ppd_contents,
|
| const PrinterSetupCallback& cb) {
|
| // Always push configuration to CUPS. It may need an update.
|
| const std::string printer_name = printer->id();
|
| const std::string printer_uri = printer->uri();
|
|
|
| - chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()->CupsAddPrinter(
|
| - printer_name, printer_uri, ppd_path, ipp_everywhere,
|
| - base::Bind(&OnPrinterAddResult, base::Passed(&printer), cb),
|
| - base::Bind(&OnPrinterAddError, cb));
|
| + if (!ppd_contents.empty()) {
|
| + chromeos::DBusThreadManager::Get()
|
| + ->GetDebugDaemonClient()
|
| + ->CupsAddManuallyConfiguredPrinter(
|
| + printer_name, printer_uri, ppd_contents,
|
| + base::Bind(&OnPrinterAddResult, base::Passed(&printer), cb),
|
| + base::Bind(&OnPrinterAddError, cb));
|
| + } else {
|
| + // If we weren't given a ppd to use, we'd better be auto-configurable.
|
| + DCHECK(printer->IsIppEverywhere());
|
| + chromeos::DBusThreadManager::Get()
|
| + ->GetDebugDaemonClient()
|
| + ->CupsAddAutoConfiguredPrinter(
|
| + printer_name, printer_uri,
|
| + base::Bind(&OnPrinterAddResult, base::Passed(&printer), cb),
|
| + base::Bind(&OnPrinterAddError, cb));
|
| + }
|
| }
|
|
|
| void PPDResolve(std::unique_ptr<chromeos::Printer> printer,
|
| const PrinterSetupCallback& cb,
|
| chromeos::printing::PpdProvider::CallbackResultCode result,
|
| - base::FilePath path) {
|
| + const std::string& ppd_contents) {
|
| switch (result) {
|
| case chromeos::printing::PpdProvider::SUCCESS: {
|
| - DCHECK(!path.empty());
|
| - AddPrinter(std::move(printer), path.value() /* ppd path */,
|
| - false /* non-ipp-everywhere */, cb);
|
| + DCHECK(!ppd_contents.empty());
|
| + AddPrinter(std::move(printer), ppd_contents, cb);
|
| break;
|
| }
|
| case chromeos::printing::PpdProvider::NOT_FOUND:
|
| @@ -200,20 +212,18 @@ class PrinterBackendProxyChromeos : public PrinterBackendProxy {
|
|
|
| if (printer->IsIppEverywhere()) {
|
| // ChromeOS registers printer by GUID rather than display name.
|
| - AddPrinter(std::move(printer), "" /* empty ppd path */,
|
| - true /* ipp everywhere */, cb);
|
| - return;
|
| + AddPrinter(std::move(printer), "", cb);
|
| + } else {
|
| + // Ref taken because printer is moved.
|
| + const chromeos::Printer::PpdReference& ppd_ref = printer->ppd_reference();
|
| + ppd_provider_->ResolvePpd(
|
| + ppd_ref, base::Bind(&PPDResolve, base::Passed(&printer), cb));
|
| }
|
| -
|
| - // Ref taken because printer is moved.
|
| - const chromeos::Printer::PpdReference& ppd_ref = printer->ppd_reference();
|
| - ppd_provider_->Resolve(ppd_ref,
|
| - base::Bind(&PPDResolve, base::Passed(&printer), cb));
|
| };
|
|
|
| private:
|
| chromeos::PrinterPrefManager* prefs_;
|
| - std::unique_ptr<chromeos::printing::PpdProvider> ppd_provider_;
|
| + scoped_refptr<chromeos::printing::PpdProvider> ppd_provider_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PrinterBackendProxyChromeos);
|
| };
|
|
|