Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Side by Side Diff: printing/backend/print_backend_win.cc

Issue 155663002: Fixed coping printer names. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "printing/backend/print_backend.h" 5 #include "printing/backend/print_backend.h"
6 6
7 #include <objidl.h> 7 #include <objidl.h>
8 #include <winspool.h> 8 #include <winspool.h>
9 9
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 const wchar_t* port, 52 const wchar_t* port,
53 const DEVMODE* devmode, 53 const DEVMODE* devmode,
54 PrinterSemanticCapsAndDefaults* caps) { 54 PrinterSemanticCapsAndDefaults* caps) {
55 static const size_t kToUm = 100; // Windows uses 0.1mm. 55 static const size_t kToUm = 100; // Windows uses 0.1mm.
56 static const size_t kMaxPaperName = 64; 56 static const size_t kMaxPaperName = 64;
57 57
58 struct PaperName { 58 struct PaperName {
59 wchar_t chars[kMaxPaperName]; 59 wchar_t chars[kMaxPaperName];
60 }; 60 };
61 61
62 DCHECK_EQ(sizeof(PaperName), sizeof(wchar_t) * kMaxPaperName);
Noam Samuel 2014/02/05 18:37:56 Very minor nit: This DCHECK seems superflous
63
62 // Paper 64 // Paper
63 std::vector<PaperName> names; 65 std::vector<PaperName> names;
64 GetDeviceCapabilityArray(printer, port, DC_PAPERNAMES, &names); 66 GetDeviceCapabilityArray(printer, port, DC_PAPERNAMES, &names);
65 67
66 std::vector<POINT> sizes; 68 std::vector<POINT> sizes;
67 GetDeviceCapabilityArray(printer, port, DC_PAPERSIZE, &sizes); 69 GetDeviceCapabilityArray(printer, port, DC_PAPERSIZE, &sizes);
68 70
69 std::vector<WORD> ids; 71 std::vector<WORD> ids;
70 GetDeviceCapabilityArray(printer, port, DC_PAPERS, &ids); 72 GetDeviceCapabilityArray(printer, port, DC_PAPERS, &ids);
71 73
72 DCHECK_EQ(ids.size(), sizes.size()); 74 DCHECK_EQ(ids.size(), sizes.size());
73 DCHECK_EQ(names.size(), sizes.size()); 75 DCHECK_EQ(names.size(), sizes.size());
74 76
75 if (ids.size() != sizes.size()) 77 if (ids.size() != sizes.size())
76 ids.clear(); 78 ids.clear();
77 if (names.size() != sizes.size()) 79 if (names.size() != sizes.size())
78 names.clear(); 80 names.clear();
79 81
80 for (size_t i = 0; i < sizes.size(); ++i) { 82 for (size_t i = 0; i < sizes.size(); ++i) {
81 PrinterSemanticCapsAndDefaults::Paper paper; 83 PrinterSemanticCapsAndDefaults::Paper paper;
82 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm); 84 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm);
83 if (!names.empty()) { 85 if (!names.empty()) {
84 paper.name.assign(&names[i].chars, &names[i].chars + kMaxPaperName); 86 const wchar_t* name_start = names[i].chars;
87 base::string16 tmp_name(name_start, kMaxPaperName);
85 // Trim trailing zeros. 88 // Trim trailing zeros.
86 paper.name = paper.name.c_str(); 89 tmp_name = tmp_name.c_str();
90 paper.name = base::WideToUTF8(tmp_name);
87 } 91 }
88 caps->papers.push_back(paper); 92 caps->papers.push_back(paper);
89 } 93 }
90 94
91 if (devmode) { 95 if (devmode) {
92 short default_id = 0; 96 short default_id = 0;
93 gfx::Size default_size; 97 gfx::Size default_size;
94 98
95 if ((devmode->dmFields & DM_PAPERSIZE) == DM_PAPERSIZE) 99 if ((devmode->dmFields & DM_PAPERSIZE) == DM_PAPERSIZE)
96 default_id = devmode->dmPaperSize; 100 default_id = devmode->dmPaperSize;
97 if ((devmode->dmFields & DM_PAPERWIDTH) == DM_PAPERWIDTH) 101 if ((devmode->dmFields & DM_PAPERWIDTH) == DM_PAPERWIDTH)
98 default_size.set_width(devmode->dmPaperWidth * kToUm); 102 default_size.set_width(devmode->dmPaperWidth * kToUm);
99 if ((devmode->dmFields & DM_PAPERLENGTH) == DM_PAPERLENGTH) 103 if ((devmode->dmFields & DM_PAPERLENGTH) == DM_PAPERLENGTH)
100 default_size.set_height(devmode->dmPaperLength * kToUm); 104 default_size.set_height(devmode->dmPaperLength * kToUm);
101 105
102 if (default_size.IsEmpty()) { 106 if (default_size.IsEmpty()) {
103 for (size_t i = 0; i < ids.size(); ++i) { 107 for (size_t i = 0; i < ids.size(); ++i) {
104 if (ids[i] == default_id) { 108 if (ids[i] == default_id) {
105 PrinterSemanticCapsAndDefaults::Paper paper; 109 PrinterSemanticCapsAndDefaults::Paper paper;
106 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm); 110 paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm);
107 if (!names.empty()) { 111 if (!names.empty()) {
108 paper.name.assign(&names[i].chars, &names[i].chars + kMaxPaperName); 112 const wchar_t* name_start = names[i].chars;
113 base::string16 tmp_name(name_start, kMaxPaperName);
109 // Trim trailing zeros. 114 // Trim trailing zeros.
110 paper.name = paper.name.c_str(); 115 tmp_name = tmp_name.c_str();
116 paper.name = base::WideToUTF8(tmp_name);
111 } 117 }
112 caps->default_paper = paper; 118 caps->default_paper = paper;
113 break; 119 break;
114 } 120 }
115 } 121 }
116 } else { 122 } else {
117 caps->default_paper.size_um = default_size; 123 caps->default_paper.size_um = default_size;
118 } 124 }
119 } 125 }
120 } 126 }
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 ScopedPrinterHandle printer_handle; 363 ScopedPrinterHandle printer_handle;
358 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); 364 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str());
359 } 365 }
360 366
361 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( 367 scoped_refptr<PrintBackend> PrintBackend::CreateInstance(
362 const base::DictionaryValue* print_backend_settings) { 368 const base::DictionaryValue* print_backend_settings) {
363 return new PrintBackendWin; 369 return new PrintBackendWin;
364 } 370 }
365 371
366 } // namespace printing 372 } // namespace printing
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698