Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2178)

Unified Diff: chrome/browser/ui/webui/print_preview/print_preview_handler.cc

Issue 313723002: Convert local printer capabilites to CDD format to unify with cloud printers and PDF printer. This … (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix clang reported errors. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/print_preview/data/ticket_items/collate.js ('k') | chrome/chrome_common.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
}
« no previous file with comments | « chrome/browser/resources/print_preview/data/ticket_items/collate.js ('k') | chrome/chrome_common.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698