146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/common/cloud_print/cloud_print_cdd_conversion.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/cloud_devices/common/printer_description.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "printing/backend/print_backend.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace cloud_print { 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)scoped_ptr<base::DictionaryValue> PrinterSemanticCapsAndDefaultsToCdd( 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const printing::PrinterSemanticCapsAndDefaults& semantic_info) { 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) using namespace cloud_devices::printer; 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) cloud_devices::CloudDeviceDescription description; 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ContentTypesCapability content_types; 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content_types.AddOption("application/pdf"); 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content_types.SaveTo(&description); 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (semantic_info.collate_capable) { 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CollateCapability collate; 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) collate.set_default_value(semantic_info.collate_default); 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) collate.SaveTo(&description); 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (semantic_info.copies_capable) { 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CopiesCapability copies; 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) copies.SaveTo(&description); 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (semantic_info.duplex_capable) { 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DuplexCapability duplex; 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) duplex.AddDefaultOption( 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NO_DUPLEX, semantic_info.duplex_default == printing::SIMPLEX); 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) duplex.AddDefaultOption( 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) LONG_EDGE, semantic_info.duplex_default == printing::LONG_EDGE); 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) duplex.AddDefaultOption( 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SHORT_EDGE, semantic_info.duplex_default == printing::SHORT_EDGE); 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) duplex.SaveTo(&description); 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ColorCapability color; 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (semantic_info.color_default || semantic_info.color_changeable) { 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Color standard_color(STANDARD_COLOR); 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) standard_color.vendor_id = base::IntToString(semantic_info.color_model); 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) color.AddDefaultOption(standard_color, semantic_info.color_default); 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!semantic_info.color_default || semantic_info.color_changeable) { 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Color standard_monochrome(STANDARD_MONOCHROME); 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) standard_monochrome.vendor_id = base::IntToString(semantic_info.bw_model); 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) color.AddDefaultOption(standard_monochrome, !semantic_info.color_default); 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) color.SaveTo(&description); 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!semantic_info.papers.empty()) { 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Media default_media(semantic_info.default_paper.display_name, 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) semantic_info.default_paper.vendor_id, 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) semantic_info.default_paper.size_um.width(), 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) semantic_info.default_paper.size_um.height()); 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) default_media.MatchBySize(); 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) MediaCapability media; 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool is_default_set = false; 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (size_t i = 0; i < semantic_info.papers.size(); ++i) { 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Size paper_size = semantic_info.papers[i].size_um; 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (paper_size.width() > paper_size.height()) 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) paper_size.SetSize(paper_size.height(), paper_size.width()); 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Media new_media(semantic_info.papers[i].display_name, 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) semantic_info.papers[i].vendor_id, 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) paper_size.width(), 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) paper_size.height()); 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) new_media.MatchBySize(); 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (new_media.IsValid() && !media.Contains(new_media)) { 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!default_media.IsValid()) 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) default_media = new_media; 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) media.AddDefaultOption(new_media, new_media == default_media); 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) is_default_set = is_default_set || (new_media == default_media); 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!is_default_set && default_media.IsValid()) 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) media.AddDefaultOption(default_media, true); 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (media.IsValid()) { 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) media.SaveTo(&description); 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NOTREACHED(); 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!semantic_info.dpis.empty()) { 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DpiCapability dpi; 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Dpi default_dpi(semantic_info.default_dpi.width(), 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) semantic_info.default_dpi.height()); 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool is_default_set = false; 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) for (size_t i = 0; i < semantic_info.dpis.size(); ++i) { 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Dpi new_dpi(semantic_info.dpis[i].width(), 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) semantic_info.dpis[i].height()); 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (new_dpi.IsValid() && !dpi.Contains(new_dpi)) { 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!default_dpi.IsValid()) 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) default_dpi = new_dpi; 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) dpi.AddDefaultOption(new_dpi, new_dpi == default_dpi); 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) is_default_set = is_default_set || (new_dpi == default_dpi); 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (!is_default_set && default_dpi.IsValid()) 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) dpi.AddDefaultOption(default_dpi, true); 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) if (dpi.IsValid()) { 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) dpi.SaveTo(&description); 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } else { 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NOTREACHED(); 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) OrientationCapability orientation; 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) orientation.AddDefaultOption(PORTRAIT, true); 11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) orientation.AddOption(LANDSCAPE); 11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) orientation.AddOption(AUTO_ORIENTATION); 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) orientation.SaveTo(&description); 12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return scoped_ptr<base::DictionaryValue>(description.root().DeepCopy()); 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace cloud_print 126