diff options
author | alekseys@chromium.org <alekseys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-05 21:44:45 +0000 |
---|---|---|
committer | alekseys@chromium.org <alekseys@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-05 21:44:45 +0000 |
commit | dfb4a9d16122d903d026b8bba069ca144b8b729c (patch) | |
tree | 50fe7d4eaf1321fc9a3e15125a299367aedc7af4 /chrome/service | |
parent | ed5e116cc02087bb0172ef8aeaac4cc6cf656c70 (diff) | |
download | chromium_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
Diffstat (limited to 'chrome/service')
-rw-r--r-- | chrome/service/cloud_print/cdd_conversion_win.cc | 108 | ||||
-rw-r--r-- | chrome/service/cloud_print/cdd_conversion_win.h | 7 | ||||
-rw-r--r-- | chrome/service/cloud_print/print_system_win.cc | 10 |
3 files changed, 9 insertions, 116 deletions
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(); |