summaryrefslogtreecommitdiffstats
path: root/chrome/service
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 /chrome/service
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
Diffstat (limited to 'chrome/service')
-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
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();