OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chromeos/printing/printer_translator.h" | 5 #include "chromeos/printing/printer_translator.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
13 #include "base/values.h" | 13 #include "base/values.h" |
14 #include "chromeos/printing/printer_configuration.h" | 14 #include "chromeos/printing/printer_configuration.h" |
15 | 15 |
16 using base::DictionaryValue; | 16 using base::DictionaryValue; |
17 | 17 |
18 namespace chromeos { | 18 namespace chromeos { |
19 | 19 |
20 namespace { | 20 namespace { |
21 | 21 |
22 // ppd fields | 22 // PPD reference fields |
23 const char kPPDid[] = "id"; | 23 const char kUserSuppliedPpdUrl[] = "user_supplied_ppd_url"; |
24 const char kFileName[] = "file_name"; | 24 const char kEffectiveManufacturer[] = "effective_manufacturer"; |
25 const char kVersionNumber[] = "version_number"; | 25 const char kEffectiveModel[] = "effective_model"; |
26 const char kFromQuirks[] = "from_quirks_server"; | |
27 | 26 |
28 // printer fields | 27 // printer fields |
29 const char kDisplayName[] = "display_name"; | 28 const char kDisplayName[] = "display_name"; |
30 const char kDescription[] = "description"; | 29 const char kDescription[] = "description"; |
31 const char kManufacturer[] = "manufacturer"; | 30 const char kManufacturer[] = "manufacturer"; |
32 const char kModel[] = "model"; | 31 const char kModel[] = "model"; |
33 const char kUri[] = "uri"; | 32 const char kUri[] = "uri"; |
34 const char kPPD[] = "ppd"; | 33 const char kPpdReference[] = "ppd_reference"; |
35 const char kUUID[] = "uuid"; | 34 const char kUUID[] = "uuid"; |
36 | 35 |
37 std::unique_ptr<Printer::PPDFile> DictionaryToPPDFile( | 36 Printer::PpdReference DictionaryToPpdReference( |
38 const base::DictionaryValue* value) { | 37 const base::DictionaryValue* value) { |
39 std::unique_ptr<Printer::PPDFile> ppd = base::MakeUnique<Printer::PPDFile>(); | 38 Printer::PpdReference ppd; |
40 // struct PPDFile defines default values for these fields so there is no need | 39 value->GetString(kUserSuppliedPpdUrl, &ppd.user_supplied_ppd_url); |
41 // to check return values. | 40 value->GetString(kEffectiveManufacturer, &ppd.effective_manufacturer); |
42 value->GetInteger(kPPDid, &ppd->id); | 41 value->GetString(kEffectiveModel, &ppd.effective_model); |
43 value->GetString(kFileName, &ppd->file_name); | |
44 value->GetInteger(kVersionNumber, &ppd->version_number); | |
45 value->GetBoolean(kFromQuirks, &ppd->from_quirks_server); | |
46 return ppd; | 42 return ppd; |
47 } | 43 } |
48 | 44 |
49 std::unique_ptr<base::DictionaryValue> PPDFileToDictionary( | 45 // Convert a PpdReference struct to a DictionaryValue. |
50 const Printer::PPDFile& ppd) { | 46 std::unique_ptr<base::DictionaryValue> PpdReferenceToDictionary( |
51 std::unique_ptr<base::DictionaryValue> dictionary = | 47 const Printer::PpdReference& ppd) { |
52 base::MakeUnique<base::DictionaryValue>(); | 48 auto dictionary = base::MakeUnique<DictionaryValue>(); |
53 dictionary->SetInteger(kPPDid, ppd.id); | 49 if (!ppd.user_supplied_ppd_url.empty()) { |
54 dictionary->SetString(kFileName, ppd.file_name); | 50 dictionary->SetString(kUserSuppliedPpdUrl, ppd.user_supplied_ppd_url); |
55 dictionary->SetInteger(kVersionNumber, ppd.version_number); | 51 } |
56 dictionary->SetBoolean(kFromQuirks, ppd.from_quirks_server); | 52 if (!ppd.effective_manufacturer.empty()) { |
| 53 dictionary->SetString(kEffectiveManufacturer, ppd.effective_manufacturer); |
| 54 } |
| 55 if (!ppd.effective_model.empty()) { |
| 56 dictionary->SetString(kEffectiveModel, ppd.effective_model); |
| 57 } |
57 return dictionary; | 58 return dictionary; |
58 } | 59 } |
59 | 60 |
60 } // namespace | 61 } // namespace |
61 | 62 |
62 namespace printing { | 63 namespace printing { |
63 | 64 |
64 const char kPrinterId[] = "id"; | 65 const char kPrinterId[] = "id"; |
65 | 66 |
66 std::unique_ptr<Printer> PrefToPrinter(const DictionaryValue& value) { | 67 std::unique_ptr<Printer> PrefToPrinter(const DictionaryValue& value) { |
(...skipping 23 matching lines...) Expand all Loading... |
90 | 91 |
91 std::string uri; | 92 std::string uri; |
92 if (value.GetString(kUri, &uri)) | 93 if (value.GetString(kUri, &uri)) |
93 printer->set_uri(uri); | 94 printer->set_uri(uri); |
94 | 95 |
95 std::string uuid; | 96 std::string uuid; |
96 if (value.GetString(kUUID, &uuid)) | 97 if (value.GetString(kUUID, &uuid)) |
97 printer->set_uuid(uuid); | 98 printer->set_uuid(uuid); |
98 | 99 |
99 const DictionaryValue* ppd; | 100 const DictionaryValue* ppd; |
100 if (value.GetDictionary(kPPD, &ppd)) { | 101 if (value.GetDictionary(kPpdReference, &ppd)) { |
101 printer->SetPPD(DictionaryToPPDFile(ppd)); | 102 *printer->mutable_ppd_reference() = DictionaryToPpdReference(ppd); |
102 } | 103 } |
103 | 104 |
104 return printer; | 105 return printer; |
105 } | 106 } |
106 | 107 |
107 std::unique_ptr<base::DictionaryValue> PrinterToPref(const Printer& printer) { | 108 std::unique_ptr<base::DictionaryValue> PrinterToPref(const Printer& printer) { |
108 std::unique_ptr<DictionaryValue> dictionary = | 109 std::unique_ptr<DictionaryValue> dictionary = |
109 base::MakeUnique<base::DictionaryValue>(); | 110 base::MakeUnique<base::DictionaryValue>(); |
110 dictionary->SetString(kPrinterId, printer.id()); | 111 dictionary->SetString(kPrinterId, printer.id()); |
111 dictionary->SetString(kDisplayName, printer.display_name()); | 112 dictionary->SetString(kDisplayName, printer.display_name()); |
112 dictionary->SetString(kDescription, printer.description()); | 113 dictionary->SetString(kDescription, printer.description()); |
113 dictionary->SetString(kManufacturer, printer.manufacturer()); | 114 dictionary->SetString(kManufacturer, printer.manufacturer()); |
114 dictionary->SetString(kModel, printer.model()); | 115 dictionary->SetString(kModel, printer.model()); |
115 dictionary->SetString(kUri, printer.uri()); | 116 dictionary->SetString(kUri, printer.uri()); |
116 dictionary->SetString(kUUID, printer.uuid()); | 117 dictionary->SetString(kUUID, printer.uuid()); |
117 | 118 |
118 dictionary->Set(kPPD, PPDFileToDictionary(printer.ppd())); | 119 dictionary->Set(kPpdReference, |
| 120 PpdReferenceToDictionary(printer.ppd_reference())); |
119 | 121 |
120 return dictionary; | 122 return dictionary; |
121 } | 123 } |
122 | 124 |
123 } // namespace printing | 125 } // namespace printing |
124 | 126 |
125 } // namespace chromeos | 127 } // namespace chromeos |
OLD | NEW |