summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralekseys@chromium.org <alekseys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-05 21:44:45 +0000
committeralekseys@chromium.org <alekseys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-05 21:44:45 +0000
commitdfb4a9d16122d903d026b8bba069ca144b8b729c (patch)
tree50fe7d4eaf1321fc9a3e15125a299367aedc7af4
parented5e116cc02087bb0172ef8aeaac4cc6cf656c70 (diff)
downloadchromium_src-dfb4a9d16122d903d026b8bba069ca144b8b729c.zip
chromium_src-dfb4a9d16122d903d026b8bba069ca144b8b729c.tar.gz
chromium_src-dfb4a9d16122d903d026b8bba069ca144b8b729c.tar.bz2
Convert local printer capabilites to CDD format to unify with cloud printers and PDF printer. This is a necessary step for adding paper size capability to local printers.
BUG=239879 Review URL: https://codereview.chromium.org/313723002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@275250 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/resources/print_preview/data/destination_store.js7
-rw-r--r--chrome/browser/resources/print_preview/data/local_parsers.js59
-rw-r--r--chrome/browser/resources/print_preview/data/ticket_items/collate.js5
-rw-r--r--chrome/browser/ui/webui/print_preview/print_preview_handler.cc110
-rw-r--r--chrome/chrome_common.gypi2
-rw-r--r--chrome/common/chrome_utility_messages.h10
-rw-r--r--chrome/common/cloud_print/cloud_print_cdd_conversion.cc120
-rw-r--r--chrome/common/cloud_print/cloud_print_cdd_conversion.h24
-rw-r--r--chrome/service/cloud_print/cdd_conversion_win.cc108
-rw-r--r--chrome/service/cloud_print/cdd_conversion_win.h7
-rw-r--r--chrome/service/cloud_print/print_system_win.cc10
-rw-r--r--chrome/test/data/webui/print_preview.js182
-rw-r--r--printing/backend/cups_helper.cc4
-rw-r--r--printing/backend/cups_helper_unittest.cc35
-rw-r--r--printing/backend/print_backend.cc17
-rw-r--r--printing/backend/print_backend.h22
16 files changed, 336 insertions, 386 deletions
diff --git a/chrome/browser/resources/print_preview/data/destination_store.js b/chrome/browser/resources/print_preview/data/destination_store.js
index 1f45947..84e54d5 100644
--- a/chrome/browser/resources/print_preview/data/destination_store.js
+++ b/chrome/browser/resources/print_preview/data/destination_store.js
@@ -733,17 +733,16 @@ cr.define('print_preview', function() {
destinationId,
'');
var destination = this.destinationMap_[key];
+ var capabilities = DestinationStore.localizeCapabilities_(
+ event.settingsInfo.capabilities);
// Special case for PDF printer (until local printers capabilities are
// reported in CDD format too).
if (destinationId ==
print_preview.Destination.GooglePromotedId.SAVE_AS_PDF) {
if (destination) {
- destination.capabilities = DestinationStore.localizeCapabilities_(
- event.settingsInfo.capabilities);
+ destination.capabilities = capabilities;
}
} else {
- var capabilities = print_preview.LocalCapabilitiesParser.parse(
- event.settingsInfo);
if (destination) {
// In case there were multiple capabilities request for this local
// destination, just ignore the later ones.
diff --git a/chrome/browser/resources/print_preview/data/local_parsers.js b/chrome/browser/resources/print_preview/data/local_parsers.js
index 22cfded..c15fb59 100644
--- a/chrome/browser/resources/print_preview/data/local_parsers.js
+++ b/chrome/browser/resources/print_preview/data/local_parsers.js
@@ -32,64 +32,6 @@ cr.define('print_preview', function() {
options);
};
- /** Namespace that contains a method to parse local print capabilities. */
- function LocalCapabilitiesParser() {};
-
- /**
- * Parses local print capabilities.
- * @param {!Object} settingsInfo Object that describes local print
- * capabilities.
- * @return {!print_preview.Cdd} Parsed local print capabilities.
- */
- LocalCapabilitiesParser.parse = function(settingsInfo) {
- var cdd = {
- version: '1.0',
- printer: {
- collate: {'default': true}
- }
- };
-
- if (!settingsInfo['disableColorOption']) {
- cdd.printer.color = {
- option: [
- {
- type: 'STANDARD_COLOR',
- is_default: !!settingsInfo['setColorAsDefault']
- },
- {
- type: 'STANDARD_MONOCHROME',
- is_default: !settingsInfo['setColorAsDefault']
- }
- ]
- };
- }
-
- if (!settingsInfo['disableCopiesOption']) {
- cdd.printer.copies = {'default': 1};
- }
-
- if (settingsInfo['printerDefaultDuplexValue'] !=
- print_preview.NativeLayer.DuplexMode.UNKNOWN_DUPLEX_MODE) {
- cdd.printer.duplex = {
- option: [
- {type: 'NO_DUPLEX', is_default: !settingsInfo['setDuplexAsDefault']},
- {type: 'LONG_EDGE', is_default: !!settingsInfo['setDuplexAsDefault']}
- ]
- };
- }
-
- if (!settingsInfo['disableLandscapeOption']) {
- cdd.printer.page_orientation = {
- option: [
- {type: 'PORTRAIT', is_default: true},
- {type: 'LANDSCAPE'}
- ]
- };
- }
-
- return cdd;
- };
-
function PrivetDestinationParser() {}
/**
@@ -126,7 +68,6 @@ cr.define('print_preview', function() {
// Export
return {
- LocalCapabilitiesParser: LocalCapabilitiesParser,
LocalDestinationParser: LocalDestinationParser,
PrivetDestinationParser: PrivetDestinationParser
};
diff --git a/chrome/browser/resources/print_preview/data/ticket_items/collate.js b/chrome/browser/resources/print_preview/data/ticket_items/collate.js
index 4c3f400..abf306d 100644
--- a/chrome/browser/resources/print_preview/data/ticket_items/collate.js
+++ b/chrome/browser/resources/print_preview/data/ticket_items/collate.js
@@ -38,12 +38,13 @@ cr.define('print_preview.ticket_items', function() {
/** @override */
getDefaultValueInternal: function() {
- return this.getCollateCapability_().default || false;
+ var capability = this.getCollateCapability_();
+ return capability.hasOwnProperty('default') ? capability.default : true;
},
/** @override */
getCapabilityNotAvailableValueInternal: function() {
- return false;
+ return true;
},
/**
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 b1c37ad..c2636aa 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));
}
diff --git a/chrome/chrome_common.gypi b/chrome/chrome_common.gypi
index 22a9ef6..aa711d92 100644
--- a/chrome/chrome_common.gypi
+++ b/chrome/chrome_common.gypi
@@ -85,6 +85,8 @@
'common/chrome_version_info.h',
'common/cloud_print/cloud_print_class_mac.h',
'common/cloud_print/cloud_print_class_mac.mm',
+ 'common/cloud_print/cloud_print_cdd_conversion.cc',
+ 'common/cloud_print/cloud_print_cdd_conversion.h',
'common/cloud_print/cloud_print_constants.cc',
'common/cloud_print/cloud_print_constants.h',
'common/cloud_print/cloud_print_helpers.cc',
diff --git a/chrome/common/chrome_utility_messages.h b/chrome/common/chrome_utility_messages.h
index 1bb2c46..a926690 100644
--- a/chrome/common/chrome_utility_messages.h
+++ b/chrome/common/chrome_utility_messages.h
@@ -58,6 +58,11 @@ IPC_STRUCT_TRAITS_END()
#endif
IPC_STRUCT_TRAITS_BEGIN(printing::PrinterSemanticCapsAndDefaults)
+ IPC_STRUCT_TRAITS_MEMBER(collate_capable)
+ IPC_STRUCT_TRAITS_MEMBER(collate_default)
+ IPC_STRUCT_TRAITS_MEMBER(copies_capable)
+ IPC_STRUCT_TRAITS_MEMBER(duplex_capable)
+ IPC_STRUCT_TRAITS_MEMBER(duplex_default)
IPC_STRUCT_TRAITS_MEMBER(color_changeable)
IPC_STRUCT_TRAITS_MEMBER(color_default)
#if defined(USE_CUPS)
@@ -65,16 +70,11 @@ IPC_STRUCT_TRAITS_BEGIN(printing::PrinterSemanticCapsAndDefaults)
IPC_STRUCT_TRAITS_MEMBER(bw_model)
#endif
#if defined(OS_WIN)
- IPC_STRUCT_TRAITS_MEMBER(collate_capable)
- IPC_STRUCT_TRAITS_MEMBER(collate_default)
- IPC_STRUCT_TRAITS_MEMBER(copies_capable)
IPC_STRUCT_TRAITS_MEMBER(papers)
IPC_STRUCT_TRAITS_MEMBER(default_paper)
IPC_STRUCT_TRAITS_MEMBER(dpis)
IPC_STRUCT_TRAITS_MEMBER(default_dpi)
#endif
- IPC_STRUCT_TRAITS_MEMBER(duplex_capable)
- IPC_STRUCT_TRAITS_MEMBER(duplex_default)
IPC_STRUCT_TRAITS_END()
IPC_ENUM_TRAITS(printing::PwgRasterTransformType);
diff --git a/chrome/common/cloud_print/cloud_print_cdd_conversion.cc b/chrome/common/cloud_print/cloud_print_cdd_conversion.cc
new file mode 100644
index 0000000..549b27d
--- /dev/null
+++ b/chrome/common/cloud_print/cloud_print_cdd_conversion.cc
@@ -0,0 +1,120 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/cloud_print/cloud_print_cdd_conversion.h"
+
+#include "components/cloud_devices/common/printer_description.h"
+#include "printing/backend/print_backend.h"
+
+namespace cloud_print {
+
+scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd(
+ const printing::PrinterSemanticCapsAndDefaults& semantic_info) {
+ using namespace cloud_devices::printer;
+ cloud_devices::CloudDeviceDescription description;
+
+ ContentTypesCapability content_types;
+ content_types.AddOption("application/pdf");
+ content_types.SaveTo(&description);
+
+ if (semantic_info.collate_capable) {
+ CollateCapability collate;
+ collate.set_default_value(semantic_info.collate_default);
+ collate.SaveTo(&description);
+ }
+
+ if (semantic_info.copies_capable) {
+ CopiesCapability copies;
+ copies.SaveTo(&description);
+ }
+
+ if (semantic_info.duplex_capable) {
+ DuplexCapability duplex;
+ duplex.AddDefaultOption(
+ NO_DUPLEX, semantic_info.duplex_default == printing::SIMPLEX);
+ duplex.AddDefaultOption(
+ LONG_EDGE, semantic_info.duplex_default == printing::LONG_EDGE);
+ duplex.AddDefaultOption(
+ SHORT_EDGE, semantic_info.duplex_default == printing::SHORT_EDGE);
+ duplex.SaveTo(&description);
+ }
+
+ ColorCapability color;
+ if (semantic_info.color_default || semantic_info.color_changeable) {
+ color.AddDefaultOption(Color(STANDARD_COLOR), semantic_info.color_default);
+ }
+ if (!semantic_info.color_default || semantic_info.color_changeable) {
+ color.AddDefaultOption(Color(STANDARD_MONOCHROME),
+ !semantic_info.color_default);
+ }
+ color.SaveTo(&description);
+
+#if defined(OS_WIN)
+ if (!semantic_info.papers.empty()) {
+ Media default_media(semantic_info.default_paper.name,
+ semantic_info.default_paper.size_um.width(),
+ semantic_info.default_paper.size_um.height());
+ default_media.MatchBySize();
+
+ MediaCapability media;
+ bool is_default_set = false;
+ for (size_t i = 0; i < semantic_info.papers.size(); ++i) {
+ gfx::Size paper_size = semantic_info.papers[i].size_um;
+ if (paper_size.width() > paper_size.height())
+ paper_size.SetSize(paper_size.height(), paper_size.width());
+ Media new_media(semantic_info.papers[i].name, paper_size.width(),
+ paper_size.height());
+ new_media.MatchBySize();
+ if (new_media.IsValid() && !media.Contains(new_media)) {
+ if (!default_media.IsValid())
+ default_media = new_media;
+ media.AddDefaultOption(new_media, new_media == default_media);
+ is_default_set = is_default_set || (new_media == default_media);
+ }
+ }
+ if (!is_default_set && default_media.IsValid())
+ media.AddDefaultOption(default_media, true);
+
+ if (media.IsValid()) {
+ media.SaveTo(&description);
+ } else {
+ NOTREACHED();
+ }
+ }
+
+ if (!semantic_info.dpis.empty()) {
+ DpiCapability dpi;
+ Dpi default_dpi(semantic_info.default_dpi.width(),
+ semantic_info.default_dpi.height());
+ bool is_default_set = false;
+ for (size_t i = 0; i < semantic_info.dpis.size(); ++i) {
+ Dpi new_dpi(semantic_info.dpis[i].width(),
+ semantic_info.dpis[i].height());
+ if (new_dpi.IsValid() && !dpi.Contains(new_dpi)) {
+ if (!default_dpi.IsValid())
+ default_dpi = new_dpi;
+ dpi.AddDefaultOption(new_dpi, new_dpi == default_dpi);
+ is_default_set = is_default_set || (new_dpi == default_dpi);
+ }
+ }
+ if (!is_default_set && default_dpi.IsValid())
+ dpi.AddDefaultOption(default_dpi, true);
+ if (dpi.IsValid()) {
+ dpi.SaveTo(&description);
+ } else {
+ NOTREACHED();
+ }
+ }
+#endif
+
+ OrientationCapability orientation;
+ orientation.AddDefaultOption(PORTRAIT, true);
+ orientation.AddOption(LANDSCAPE);
+ orientation.AddOption(AUTO_ORIENTATION);
+ orientation.SaveTo(&description);
+
+ return scoped_ptr<base::DictionaryValue>(description.root().DeepCopy());
+}
+
+} // namespace cloud_print
diff --git a/chrome/common/cloud_print/cloud_print_cdd_conversion.h b/chrome/common/cloud_print/cloud_print_cdd_conversion.h
new file mode 100644
index 0000000..9600280
--- /dev/null
+++ b/chrome/common/cloud_print/cloud_print_cdd_conversion.h
@@ -0,0 +1,24 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_COMMON_CLOUD_PRINT_CLOUD_PRINT_CDD_CONVERSION_H_
+#define CHROME_COMMON_CLOUD_PRINT_CLOUD_PRINT_CDD_CONVERSION_H_
+
+#include <string>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/values.h"
+
+namespace printing {
+struct PrinterSemanticCapsAndDefaults;
+}
+
+namespace cloud_print {
+
+scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd(
+ const printing::PrinterSemanticCapsAndDefaults& semantic_info);
+
+} // namespace cloud_print
+
+#endif // CHROME_COMMON_CLOUD_PRINT_CLOUD_PRINT_CDD_CONVERSION_H_
diff --git a/chrome/service/cloud_print/cdd_conversion_win.cc b/chrome/service/cloud_print/cdd_conversion_win.cc
index dab6cd0..bfcb920 100644
--- a/chrome/service/cloud_print/cdd_conversion_win.cc
+++ b/chrome/service/cloud_print/cdd_conversion_win.cc
@@ -5,7 +5,6 @@
#include "chrome/service/cloud_print/cdd_conversion_win.h"
#include "components/cloud_devices/common/printer_description.h"
-#include "printing/backend/print_backend.h"
#include "printing/backend/win_helper.h"
namespace cloud_print {
@@ -125,111 +124,4 @@ scoped_ptr<DEVMODE, base::FreeDeleter> CjtToDevMode(
return printing::CreateDevMode(printer, dev_mode.get());
}
-std::string CapabilitiesToCdd(
- const printing::PrinterSemanticCapsAndDefaults& semantic_info) {
- using namespace cloud_devices::printer;
- cloud_devices::CloudDeviceDescription description;
-
- ContentTypesCapability content_types;
- content_types.AddOption("application/pdf");
- content_types.SaveTo(&description);
-
- ColorCapability color;
- if (semantic_info.color_default || semantic_info.color_changeable) {
- color.AddDefaultOption(Color(STANDARD_COLOR), semantic_info.color_default);
- }
-
- if (!semantic_info.color_default || semantic_info.color_changeable) {
- color.AddDefaultOption(Color(STANDARD_MONOCHROME),
- !semantic_info.color_default);
- }
- color.SaveTo(&description);
-
- if (semantic_info.duplex_capable) {
- DuplexCapability duplex;
- duplex.AddDefaultOption(
- NO_DUPLEX, semantic_info.duplex_default == printing::SIMPLEX);
- duplex.AddDefaultOption(
- LONG_EDGE, semantic_info.duplex_default == printing::LONG_EDGE);
- duplex.AddDefaultOption(
- SHORT_EDGE, semantic_info.duplex_default == printing::SHORT_EDGE);
- duplex.SaveTo(&description);
- }
-
- if (!semantic_info.papers.empty()) {
- Media default_media(semantic_info.default_paper.name,
- semantic_info.default_paper.size_um.width(),
- semantic_info.default_paper.size_um.height());
- default_media.MatchBySize();
-
- MediaCapability media;
- bool is_default_set = false;
- for (size_t i = 0; i < semantic_info.papers.size(); ++i) {
- gfx::Size paper_size = semantic_info.papers[i].size_um;
- if (paper_size.width() > paper_size.height())
- paper_size.SetSize(paper_size.height(), paper_size.width());
- Media new_media(semantic_info.papers[i].name, paper_size.width(),
- paper_size.height());
- new_media.MatchBySize();
- if (new_media.IsValid() && !media.Contains(new_media)) {
- if (!default_media.IsValid())
- default_media = new_media;
- media.AddDefaultOption(new_media, new_media == default_media);
- is_default_set = is_default_set || (new_media == default_media);
- }
- }
- if (!is_default_set && default_media.IsValid())
- media.AddDefaultOption(default_media, true);
-
- if (media.IsValid()) {
- media.SaveTo(&description);
- } else {
- NOTREACHED();
- }
- }
-
- if (semantic_info.collate_capable) {
- CollateCapability collate;
- collate.set_default_value(semantic_info.collate_default);
- collate.SaveTo(&description);
- }
-
- if (semantic_info.copies_capable) {
- CopiesCapability copies;
- copies.SaveTo(&description);
- }
-
- if (!semantic_info.dpis.empty()) {
- DpiCapability dpi;
- Dpi default_dpi(semantic_info.default_dpi.width(),
- semantic_info.default_dpi.height());
- bool is_default_set = false;
- for (size_t i = 0; i < semantic_info.dpis.size(); ++i) {
- Dpi new_dpi(semantic_info.dpis[i].width(),
- semantic_info.dpis[i].height());
- if (new_dpi.IsValid() && !dpi.Contains(new_dpi)) {
- if (!default_dpi.IsValid())
- default_dpi = new_dpi;
- dpi.AddDefaultOption(new_dpi, new_dpi == default_dpi);
- is_default_set = is_default_set || (new_dpi == default_dpi);
- }
- }
- if (!is_default_set && default_dpi.IsValid())
- dpi.AddDefaultOption(default_dpi, true);
- if (dpi.IsValid()) {
- dpi.SaveTo(&description);
- } else {
- NOTREACHED();
- }
- }
-
- OrientationCapability orientation;
- orientation.AddDefaultOption(PORTRAIT, true);
- orientation.AddOption(LANDSCAPE);
- orientation.AddOption(AUTO_ORIENTATION);
- orientation.SaveTo(&description);
-
- return description.ToString();
-}
-
} // namespace cloud_print
diff --git a/chrome/service/cloud_print/cdd_conversion_win.h b/chrome/service/cloud_print/cdd_conversion_win.h
index 8f50fc9..0e9c3db 100644
--- a/chrome/service/cloud_print/cdd_conversion_win.h
+++ b/chrome/service/cloud_print/cdd_conversion_win.h
@@ -11,10 +11,6 @@
#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
-namespace printing {
-struct PrinterSemanticCapsAndDefaults;
-}
-
namespace cloud_print {
bool IsValidCjt(const std::string& print_ticket);
@@ -23,9 +19,6 @@ scoped_ptr<DEVMODE, base::FreeDeleter> CjtToDevMode(
const base::string16& printer_name,
const std::string& print_ticket);
-std::string CapabilitiesToCdd(
- const printing::PrinterSemanticCapsAndDefaults& semantic_info);
-
} // namespace cloud_print
#endif // CHROME_SERVICE_CLOUD_PRINT_CDD_CONVERSION_WIN_H_
diff --git a/chrome/service/cloud_print/print_system_win.cc b/chrome/service/cloud_print/print_system_win.cc
index 98a4e97..34d158f 100644
--- a/chrome/service/cloud_print/print_system_win.cc
+++ b/chrome/service/cloud_print/print_system_win.cc
@@ -6,6 +6,7 @@
#include "base/command_line.h"
#include "base/file_util.h"
+#include "base/json/json_writer.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/utf_string_conversions.h"
#include "base/win/object_watcher.h"
@@ -13,6 +14,7 @@
#include "base/win/scoped_comptr.h"
#include "base/win/scoped_hdc.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/service/cloud_print/cdd_conversion_win.h"
@@ -565,7 +567,13 @@ class PrinterCapsHandler : public ServiceUtilityProcessHost::Client {
printing::PrinterCapsAndDefaults printer_info;
if (succeeded) {
printer_info.caps_mime_type = kContentTypeJSON;
- printer_info.printer_capabilities = CapabilitiesToCdd(semantic_info);
+ scoped_ptr<base::DictionaryValue> description(
+ PrinterSemanticCapsAndDefaultsToCdd(semantic_info));
+ if (description) {
+ base::JSONWriter::WriteWithOptions(
+ description.get(), base::JSONWriter::OPTIONS_PRETTY_PRINT,
+ &printer_info.printer_capabilities);
+ }
}
callback_.Run(succeeded, printer_name, printer_info);
callback_.Reset();
diff --git a/chrome/test/data/webui/print_preview.js b/chrome/test/data/webui/print_preview.js
index 22f6389..a7d8bdf 100644
--- a/chrome/test/data/webui/print_preview.js
+++ b/chrome/test/data/webui/print_preview.js
@@ -224,6 +224,40 @@ function checkElementDisplayed(el, isDisplayed) {
expectEquals(isDisplayed, !el.hidden);
}
+function getCddTemplate(printerId) {
+ return {
+ "printerId": printerId,
+ "capabilities": {
+ "version": "1.0",
+ "printer": {
+ "supported_content_type": [{"content_type": "application/pdf"}],
+ "collate": {},
+ "color": {
+ "option": [
+ {"is_default": true, "type": "STANDARD_COLOR"},
+ {"type": "STANDARD_MONOCHROME"}
+ ]
+ },
+ "copies": {},
+ "duplex": {
+ "option": [
+ {"is_default": true, "type": "NO_DUPLEX"},
+ {"type": "LONG_EDGE"},
+ {"type": "SHORT_EDGE"}
+ ]
+ },
+ "page_orientation": {
+ "option": [
+ {"is_default": true, "type": "PORTRAIT"},
+ {"type": "LANDSCAPE"},
+ {"type": "AUTO"}
+ ]
+ }
+ }
+ }
+ };
+}
+
// Test that disabled settings hide the disabled sections.
TEST_F('PrintPreviewWebUITest', 'TestSectionsDisabled', function() {
checkSectionVisible($('layout-settings'), false);
@@ -242,14 +276,13 @@ TEST_F('PrintPreviewWebUITest', 'TestSectionsDisabled', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': true,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': false,
- 'printerDefaultDuplexValue': 0
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
+ capsSetEvent.settingsInfo.capabilities.printer.color = {
+ "option": [
+ {"is_default": true, "type": "STANDARD_COLOR"}
+ ]
};
+ delete capsSetEvent.settingsInfo.capabilities.printer.copies;
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkSectionVisible($('layout-settings'), true);
@@ -321,14 +354,7 @@ TEST_F('PrintPreviewWebUITest', 'SourceIsHTMLHideFitToPageOption', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkElementDisplayed(
@@ -353,14 +379,7 @@ TEST_F('PrintPreviewWebUITest', 'SourceIsPDFShowFitToPageOption', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkElementDisplayed(
@@ -388,14 +407,7 @@ TEST_F('PrintPreviewWebUITest', 'PrintScalingDisabledForPlugin', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
// Indicate that the PDF does not support scaling by default.
@@ -424,14 +436,7 @@ TEST_F('PrintPreviewWebUITest', 'CustomMarginsControlsCheck', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
printPreview.printTicketStore_.marginsType.updateValue(
@@ -462,14 +467,7 @@ TEST_F('PrintPreviewWebUITest',
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkElementDisplayed(
@@ -502,14 +500,7 @@ TEST_F('PrintPreviewWebUITest',
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkElementDisplayed(
@@ -542,14 +533,7 @@ TEST_F('PrintPreviewWebUITest',
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkElementDisplayed(
@@ -583,14 +567,7 @@ TEST_F('PrintPreviewWebUITest',
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkElementDisplayed(
@@ -621,14 +598,7 @@ TEST_F('PrintPreviewWebUITest', 'TestColorSettingsTrue', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': false,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkSectionVisible($('color-settings'), true);
@@ -653,13 +623,11 @@ TEST_F('PrintPreviewWebUITest', 'TestColorSettingsFalse', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': true,
- 'setColorAsDefault': false,
- 'disableCopiesOption': false,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
+ capsSetEvent.settingsInfo.capabilities.printer.color = {
+ "option": [
+ {"is_default": true, "type": "STANDARD_MONOCHROME"}
+ ]
};
this.nativeLayer_.dispatchEvent(capsSetEvent);
@@ -690,15 +658,7 @@ TEST_F('PrintPreviewWebUITest', 'TestDuplexSettingsTrue', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': false,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0,
- 'setDuplexAsDefault': false
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkSectionVisible(otherOptionsDiv, true);
@@ -724,15 +684,8 @@ TEST_F('PrintPreviewWebUITest', 'TestDuplexSettingsFalse', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': false,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': -1,
- 'setDuplexAsDefault': false
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
+ delete capsSetEvent.settingsInfo.capabilities.printer.duplex;
this.nativeLayer_.dispatchEvent(capsSetEvent);
checkSectionVisible(otherOptionsDiv, true);
@@ -754,14 +707,7 @@ TEST_F('PrintPreviewWebUITest', 'TestPrinterChangeUpdatesPreview', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'FooDevice',
- 'disableColorOption': false,
- 'setColorAsDefault': true,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
- };
+ capsSetEvent.settingsInfo = getCddTemplate("FooDevice");
this.nativeLayer_.dispatchEvent(capsSetEvent);
var previewGenerator = mock(print_preview.PreviewGenerator);
@@ -781,13 +727,11 @@ TEST_F('PrintPreviewWebUITest', 'TestPrinterChangeUpdatesPreview', function() {
var capsSetEvent =
new Event(print_preview.NativeLayer.EventType.CAPABILITIES_SET);
- capsSetEvent.settingsInfo = {
- 'printerId': 'BarDevice',
- 'disableColorOption': true,
- 'setColorAsDefault': false,
- 'disableCopiesOption': true,
- 'disableLandscapeOption': true,
- 'printerDefaultDuplexValue': 0
+ capsSetEvent.settingsInfo = getCddTemplate("BarDevice");
+ capsSetEvent.settingsInfo.capabilities.printer.color = {
+ "option": [
+ {"is_default": true, "type": "STANDARD_MONOCHROME"}
+ ]
};
this.nativeLayer_.dispatchEvent(capsSetEvent);
});
diff --git a/printing/backend/cups_helper.cc b/printing/backend/cups_helper.cc
index e183841..981a539 100644
--- a/printing/backend/cups_helper.cc
+++ b/printing/backend/cups_helper.cc
@@ -365,6 +365,10 @@ bool ParsePpdCapabilities(
#if !defined(OS_MACOSX)
MarkLpOptions(printer_name, &ppd);
#endif
+ caps.collate_capable = true;
+ caps.collate_default = true;
+ caps.copies_capable = true;
+
ppd_choice_t* duplex_choice = ppdFindMarkedChoice(ppd, kDuplex);
if (!duplex_choice) {
ppd_option_t* option = ppdFindOption(ppd, kDuplex);
diff --git a/printing/backend/cups_helper_unittest.cc b/printing/backend/cups_helper_unittest.cc
index 7f2b77c..83dc0a1 100644
--- a/printing/backend/cups_helper_unittest.cc
+++ b/printing/backend/cups_helper_unittest.cc
@@ -33,10 +33,13 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingNoColorDuplexLongEdge) {
printing::PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(printing::ParsePpdCapabilities("test", test_ppd_data, &caps));
- EXPECT_FALSE(caps.color_changeable);
- EXPECT_FALSE(caps.color_default);
+ EXPECT_TRUE(caps.collate_capable);
+ EXPECT_TRUE(caps.collate_default);
+ EXPECT_TRUE(caps.copies_capable);
EXPECT_TRUE(caps.duplex_capable);
EXPECT_EQ(caps.duplex_default, printing::LONG_EDGE);
+ EXPECT_FALSE(caps.color_changeable);
+ EXPECT_FALSE(caps.color_default);
}
// Test duplex detection code, which regressed in http://crbug.com/103999.
@@ -58,10 +61,13 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingNoColorDuplexSimples) {
printing::PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(printing::ParsePpdCapabilities("test", test_ppd_data, &caps));
- EXPECT_FALSE(caps.color_changeable);
- EXPECT_FALSE(caps.color_default);
+ EXPECT_TRUE(caps.collate_capable);
+ EXPECT_TRUE(caps.collate_default);
+ EXPECT_TRUE(caps.copies_capable);
EXPECT_TRUE(caps.duplex_capable);
EXPECT_EQ(caps.duplex_default, printing::SIMPLEX);
+ EXPECT_FALSE(caps.color_changeable);
+ EXPECT_FALSE(caps.color_default);
}
TEST(PrintBackendCupsHelperTest, TestPpdParsingNoColorNoDuplex) {
@@ -82,10 +88,13 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingNoColorNoDuplex) {
printing::PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(printing::ParsePpdCapabilities("test", test_ppd_data, &caps));
- EXPECT_FALSE(caps.color_changeable);
- EXPECT_FALSE(caps.color_default);
+ EXPECT_TRUE(caps.collate_capable);
+ EXPECT_TRUE(caps.collate_default);
+ EXPECT_TRUE(caps.copies_capable);
EXPECT_FALSE(caps.duplex_capable);
EXPECT_EQ(caps.duplex_default, printing::UNKNOWN_DUPLEX_MODE);
+ EXPECT_FALSE(caps.color_changeable);
+ EXPECT_FALSE(caps.color_default);
}
TEST(PrintBackendCupsHelperTest, TestPpdParsingColorTrueDuplexLongEdge) {
@@ -115,10 +124,13 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingColorTrueDuplexLongEdge) {
printing::PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(printing::ParsePpdCapabilities("test", test_ppd_data, &caps));
- EXPECT_TRUE(caps.color_changeable);
- EXPECT_TRUE(caps.color_default);
+ EXPECT_TRUE(caps.collate_capable);
+ EXPECT_TRUE(caps.collate_default);
+ EXPECT_TRUE(caps.copies_capable);
EXPECT_TRUE(caps.duplex_capable);
EXPECT_EQ(caps.duplex_default, printing::LONG_EDGE);
+ EXPECT_TRUE(caps.color_changeable);
+ EXPECT_TRUE(caps.color_default);
}
TEST(PrintBackendCupsHelperTest, TestPpdParsingColorFalseDuplexLongEdge) {
@@ -152,8 +164,11 @@ TEST(PrintBackendCupsHelperTest, TestPpdParsingColorFalseDuplexLongEdge) {
printing::PrinterSemanticCapsAndDefaults caps;
EXPECT_TRUE(printing::ParsePpdCapabilities("test", test_ppd_data, &caps));
- EXPECT_TRUE(caps.color_changeable);
- EXPECT_FALSE(caps.color_default);
+ EXPECT_TRUE(caps.collate_capable);
+ EXPECT_TRUE(caps.collate_default);
+ EXPECT_TRUE(caps.copies_capable);
EXPECT_TRUE(caps.duplex_capable);
EXPECT_EQ(caps.duplex_default, printing::LONG_EDGE);
+ EXPECT_TRUE(caps.color_changeable);
+ EXPECT_FALSE(caps.color_default);
}
diff --git a/printing/backend/print_backend.cc b/printing/backend/print_backend.cc
index 1ec7146..d071201 100644
--- a/printing/backend/print_backend.cc
+++ b/printing/backend/print_backend.cc
@@ -13,16 +13,19 @@ PrinterBasicInfo::PrinterBasicInfo()
PrinterBasicInfo::~PrinterBasicInfo() {}
PrinterSemanticCapsAndDefaults::PrinterSemanticCapsAndDefaults()
- : color_changeable(false),
- color_default(false),
-#if defined (OS_WIN)
- collate_capable(false),
+ : collate_capable(false),
collate_default(false),
copies_capable(false),
-#endif
duplex_capable(false),
- duplex_default(UNKNOWN_DUPLEX_MODE) {
-}
+ duplex_default(UNKNOWN_DUPLEX_MODE),
+ color_changeable(false),
+ color_default(false)
+#if defined (OS_POSIX)
+ ,
+ color_model(UNKNOWN_COLOR_MODEL),
+ bw_model(UNKNOWN_COLOR_MODEL)
+#endif
+{}
PrinterSemanticCapsAndDefaults::~PrinterSemanticCapsAndDefaults() {}
diff --git a/printing/backend/print_backend.h b/printing/backend/print_backend.h
index 43a2563..30e4512 100644
--- a/printing/backend/print_backend.h
+++ b/printing/backend/print_backend.h
@@ -38,20 +38,27 @@ struct PRINTING_EXPORT PrinterSemanticCapsAndDefaults {
PrinterSemanticCapsAndDefaults();
~PrinterSemanticCapsAndDefaults();
+ bool collate_capable;
+ bool collate_default;
+
+ bool copies_capable;
+
+ bool duplex_capable;
+ DuplexMode duplex_default;
+
bool color_changeable;
bool color_default;
-#if defined(USE_CUPS)
+ // These are CUPS specific data, which soon be removed altogether. They are
+ // not defined under USE_CUPS to do not pull CUPS dependency into common code.
+#if defined(OS_POSIX)
+ // TODO(alekseys): Resolve color model within printing context, do not expose
+ // it outside of the context.
ColorModel color_model;
ColorModel bw_model;
#endif
#if defined(OS_WIN)
- bool collate_capable;
- bool collate_default;
-
- bool copies_capable;
-
struct Paper {
std::string name;
gfx::Size size_um;
@@ -63,9 +70,6 @@ struct PRINTING_EXPORT PrinterSemanticCapsAndDefaults {
std::vector<gfx::Size> dpis;
gfx::Size default_dpi;
#endif
-
- bool duplex_capable;
- DuplexMode duplex_default;
};
struct PRINTING_EXPORT PrinterCapsAndDefaults {