| 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 b1c37ad87dc483737770f8f229cd36732f2098a4..c2636aad04480e2848a3603346259500e327f564 100644
|
| --- a/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
|
| +++ b/chrome/browser/ui/webui/print_preview/print_preview_handler.cc
|
| @@ -45,6 +45,7 @@
|
| #include "chrome/browser/ui/webui/print_preview/sticky_settings.h"
|
| #include "chrome/common/chrome_paths.h"
|
| #include "chrome/common/chrome_switches.h"
|
| +#include "chrome/common/cloud_print/cloud_print_cdd_conversion.h"
|
| #include "chrome/common/cloud_print/cloud_print_constants.h"
|
| #include "chrome/common/crash_keys.h"
|
| #include "chrome/common/pref_names.h"
|
| @@ -189,9 +190,6 @@ const char kLocalPdfPrinterId[] = "Save as PDF";
|
| // Additional printer capability setting keys.
|
| const char kPrinterId[] = "printerId";
|
| const char kPrinterCapabilities[] = "capabilities";
|
| -const char kDisableColorOption[] = "disableColorOption";
|
| -const char kSetDuplexAsDefault[] = "setDuplexAsDefault";
|
| -const char kPrinterDefaultDuplexValue[] = "printerDefaultDuplexValue";
|
| #if defined(USE_CUPS)
|
| const char kCUPSsColorModel[] = "cupsColorModel";
|
| const char kCUPSsBWModel[] = "cupsBWModel";
|
| @@ -349,6 +347,43 @@ scoped_ptr<base::DictionaryValue> GetPdfCapabilitiesOnFileThread(
|
| return scoped_ptr<base::DictionaryValue>(description.root().DeepCopy());
|
| }
|
|
|
| +scoped_ptr<base::DictionaryValue> GetLocalPrinterCapabilitiesOnFileThread(
|
| + const std::string& printer_name) {
|
| + DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| +
|
| + scoped_refptr<printing::PrintBackend> print_backend(
|
| + printing::PrintBackend::CreateInstance(NULL));
|
| +
|
| + VLOG(1) << "Get printer capabilities start for " << printer_name;
|
| + crash_keys::ScopedPrinterInfo crash_key(
|
| + print_backend->GetPrinterDriverInfo(printer_name));
|
| +
|
| + if (!print_backend->IsValidPrinter(printer_name)) {
|
| + LOG(WARNING) << "Invalid printer " << printer_name;
|
| + return scoped_ptr<base::DictionaryValue>();
|
| + }
|
| +
|
| + printing::PrinterSemanticCapsAndDefaults info;
|
| + if (!print_backend->GetPrinterSemanticCapsAndDefaults(printer_name, &info)) {
|
| + LOG(WARNING) << "Failed to get capabilities for " << printer_name;
|
| + return scoped_ptr<base::DictionaryValue>();
|
| + }
|
| +
|
| + scoped_ptr<base::DictionaryValue> description(
|
| + cloud_print::PrinterSemanticCapsAndDefaultsToCdd(info));
|
| + if (!description) {
|
| + LOG(WARNING) << "Failed to convert capabilities for " << printer_name;
|
| + return scoped_ptr<base::DictionaryValue>();
|
| + }
|
| +
|
| +#if defined(USE_CUPS)
|
| + // TODO(alekseys): Use CUSTOM_COLOR/MONOCHROME instead.
|
| + description->SetInteger(kCUPSsColorModel, info.color_model);
|
| + description->SetInteger(kCUPSsBWModel, info.bw_model);
|
| +#endif
|
| + return description.Pass();
|
| +}
|
| +
|
| void EnumeratePrintersOnFileThread(base::ListValue* printers) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
|
|
| @@ -410,64 +445,23 @@ void GetPrinterCapabilitiesOnFileThread(
|
| DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
| DCHECK(!printer_name.empty());
|
|
|
| - // Special case for PDF printer.
|
| - if (printer_name == kLocalPdfPrinterId) {
|
| - scoped_ptr<base::DictionaryValue> printer_info(new base::DictionaryValue);
|
| - printer_info->SetString(kPrinterId, printer_name);
|
| - printer_info->Set(kPrinterCapabilities,
|
| - GetPdfCapabilitiesOnFileThread(locale).release());
|
| - BrowserThread::PostTask(
|
| - BrowserThread::UI, FROM_HERE,
|
| - base::Bind(success_cb, base::Owned(printer_info.release())));
|
| - return;
|
| - }
|
| -
|
| - scoped_refptr<printing::PrintBackend> print_backend(
|
| - printing::PrintBackend::CreateInstance(NULL));
|
| -
|
| - VLOG(1) << "Get printer capabilities start for " << printer_name;
|
| - crash_keys::ScopedPrinterInfo crash_key(
|
| - print_backend->GetPrinterDriverInfo(printer_name));
|
| -
|
| - if (!print_backend->IsValidPrinter(printer_name)) {
|
| - // TODO(gene): Notify explicitly if printer is not valid, instead of
|
| - // failed to get capabilities.
|
| + scoped_ptr<base::DictionaryValue> printer_capabilities(
|
| + printer_name == kLocalPdfPrinterId ?
|
| + GetPdfCapabilitiesOnFileThread(locale) :
|
| + GetLocalPrinterCapabilitiesOnFileThread(printer_name));
|
| + if (!printer_capabilities) {
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| base::Bind(failure_cb, printer_name));
|
| return;
|
| }
|
|
|
| - printing::PrinterSemanticCapsAndDefaults info;
|
| - if (!print_backend->GetPrinterSemanticCapsAndDefaults(printer_name, &info)) {
|
| - LOG(WARNING) << "Failed to get capabilities for " << printer_name;
|
| - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
|
| - base::Bind(failure_cb, printer_name));
|
| - return;
|
| - }
|
| -
|
| - scoped_ptr<base::DictionaryValue> settings_info(new base::DictionaryValue);
|
| - settings_info->SetString(kPrinterId, printer_name);
|
| - settings_info->SetBoolean(kDisableColorOption, !info.color_changeable);
|
| - settings_info->SetBoolean(printing::kSettingSetColorAsDefault,
|
| - info.color_default);
|
| -#if defined(USE_CUPS)
|
| - settings_info->SetInteger(kCUPSsColorModel, info.color_model);
|
| - settings_info->SetInteger(kCUPSsBWModel, info.bw_model);
|
| -#endif
|
| -
|
| - // TODO(gene): Make new capabilities format for Print Preview
|
| - // that will suit semantic capabilities better.
|
| - // Refactor pld API code below
|
| - bool default_duplex = info.duplex_capable ?
|
| - (info.duplex_default != printing::SIMPLEX) : false;
|
| - int duplex_value = info.duplex_capable ?
|
| - printing::LONG_EDGE : printing::UNKNOWN_DUPLEX_MODE;
|
| - settings_info->SetBoolean(kSetDuplexAsDefault, default_duplex);
|
| - settings_info->SetInteger(kPrinterDefaultDuplexValue, duplex_value);
|
| + scoped_ptr<base::DictionaryValue> printer_info(new base::DictionaryValue);
|
| + printer_info->SetString(kPrinterId, printer_name);
|
| + printer_info->Set(kPrinterCapabilities, printer_capabilities.release());
|
|
|
| BrowserThread::PostTask(
|
| BrowserThread::UI, FROM_HERE,
|
| - base::Bind(success_cb, base::Owned(settings_info.release())));
|
| + base::Bind(success_cb, base::Owned(printer_info.release())));
|
| }
|
|
|
| base::LazyInstance<printing::StickySettings> g_sticky_settings =
|
| @@ -1420,10 +1414,16 @@ void PrintPreviewHandler::SaveCUPSColorSetting(
|
| const base::DictionaryValue* settings) {
|
| cups_printer_color_models_.reset(new CUPSPrinterColorModels);
|
| settings->GetString(kPrinterId, &cups_printer_color_models_->printer_name);
|
| - settings->GetInteger(
|
| + const base::DictionaryValue* capabilities = NULL;
|
| + if (!settings->GetDictionary(kPrinterCapabilities, &capabilities) ||
|
| + !capabilities) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + capabilities->GetInteger(
|
| kCUPSsColorModel,
|
| reinterpret_cast<int*>(&cups_printer_color_models_->color_model));
|
| - settings->GetInteger(
|
| + capabilities->GetInteger(
|
| kCUPSsBWModel,
|
| reinterpret_cast<int*>(&cups_printer_color_models_->bw_model));
|
| }
|
|
|