OLD | NEW |
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 <algorithm> | 7 #include <algorithm> |
8 #include <objidl.h> | 8 #include <objidl.h> |
9 #include <winspool.h> | 9 #include <winspool.h> |
10 | 10 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 PrintBackendWin() {} | 43 PrintBackendWin() {} |
44 virtual ~PrintBackendWin() {} | 44 virtual ~PrintBackendWin() {} |
45 | 45 |
46 virtual bool EnumeratePrinters(PrinterList* printer_list); | 46 virtual bool EnumeratePrinters(PrinterList* printer_list); |
47 | 47 |
48 virtual std::string GetDefaultPrinterName(); | 48 virtual std::string GetDefaultPrinterName(); |
49 | 49 |
50 virtual bool GetPrinterCapsAndDefaults(const std::string& printer_name, | 50 virtual bool GetPrinterCapsAndDefaults(const std::string& printer_name, |
51 PrinterCapsAndDefaults* printer_info); | 51 PrinterCapsAndDefaults* printer_info); |
52 | 52 |
53 virtual bool GetPrinterDriverInfo(const std::string& printer_name, | 53 virtual std::string GetPrinterDriverInfo(const std::string& printer_name); |
54 std::string* driver_info); | |
55 | 54 |
56 virtual bool IsValidPrinter(const std::string& printer_name); | 55 virtual bool IsValidPrinter(const std::string& printer_name); |
57 }; | 56 }; |
58 | 57 |
59 bool PrintBackendWin::EnumeratePrinters(PrinterList* printer_list) { | 58 bool PrintBackendWin::EnumeratePrinters(PrinterList* printer_list) { |
60 DCHECK(printer_list); | 59 DCHECK(printer_list); |
61 DWORD bytes_needed = 0; | 60 DWORD bytes_needed = 0; |
62 DWORD count_returned = 0; | 61 DWORD count_returned = 0; |
63 BOOL ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, 2, | 62 BOOL ret = EnumPrinters(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS, NULL, 2, |
64 NULL, 0, &bytes_needed, &count_returned); | 63 NULL, 0, &bytes_needed, &count_returned); |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 printer_info->defaults_mime_type = "text/xml"; | 170 printer_info->defaults_mime_type = "text/xml"; |
172 } | 171 } |
173 } | 172 } |
174 } | 173 } |
175 XPSModule::CloseProvider(provider); | 174 XPSModule::CloseProvider(provider); |
176 } | 175 } |
177 return true; | 176 return true; |
178 } | 177 } |
179 | 178 |
180 // Gets the information about driver for a specific printer. | 179 // Gets the information about driver for a specific printer. |
181 bool PrintBackendWin::GetPrinterDriverInfo(const std::string& printer_name, | 180 std::string PrintBackendWin::GetPrinterDriverInfo( |
182 std::string* driver_info) { | 181 const std::string& printer_name) { |
183 DCHECK(driver_info); | 182 std::string driver_info; |
184 ScopedPrinterHandle printer_handle; | 183 ScopedPrinterHandle printer_handle; |
185 if (!::OpenPrinter(const_cast<LPTSTR>(UTF8ToWide(printer_name).c_str()), | 184 if (!::OpenPrinter(const_cast<LPTSTR>(UTF8ToWide(printer_name).c_str()), |
186 printer_handle.Receive(), NULL)) { | 185 printer_handle.Receive(), NULL)) { |
187 return false; | 186 return false; |
188 } | 187 } |
189 DCHECK(printer_handle.IsValid()); | 188 DCHECK(printer_handle.IsValid()); |
190 DWORD bytes_needed = 0; | 189 DWORD bytes_needed = 0; |
191 ::GetPrinterDriver(printer_handle, NULL, 6, NULL, 0, &bytes_needed); | 190 ::GetPrinterDriver(printer_handle, NULL, 6, NULL, 0, &bytes_needed); |
192 scoped_array<BYTE> driver_info_buffer(new BYTE[bytes_needed]); | 191 scoped_array<BYTE> driver_info_buffer(new BYTE[bytes_needed]); |
193 if (!bytes_needed || !driver_info_buffer.get()) | 192 if (!bytes_needed || !driver_info_buffer.get()) |
(...skipping 16 matching lines...) Expand all Loading... |
210 scoped_ptr<FileVersionInfo> version_info( | 209 scoped_ptr<FileVersionInfo> version_info( |
211 FileVersionInfo::CreateFileVersionInfo( | 210 FileVersionInfo::CreateFileVersionInfo( |
212 FilePath(driver_info_6->pDriverPath))); | 211 FilePath(driver_info_6->pDriverPath))); |
213 info[1] = WideToUTF8(version_info->file_version()); | 212 info[1] = WideToUTF8(version_info->file_version()); |
214 info[2] = WideToUTF8(version_info->product_name()); | 213 info[2] = WideToUTF8(version_info->product_name()); |
215 info[3] = WideToUTF8(version_info->product_version()); | 214 info[3] = WideToUTF8(version_info->product_version()); |
216 } | 215 } |
217 | 216 |
218 for (size_t i = 0; i < arraysize(info); ++i) { | 217 for (size_t i = 0; i < arraysize(info); ++i) { |
219 std::replace(info[i].begin(), info[i].end(), ';', ','); | 218 std::replace(info[i].begin(), info[i].end(), ';', ','); |
220 driver_info->append(info[i]); | 219 driver_info.append(info[i]); |
221 driver_info->append(";"); | 220 driver_info.append(";"); |
222 } | 221 } |
223 | 222 |
224 return true; | 223 return driver_info; |
225 } | 224 } |
226 | 225 |
227 bool PrintBackendWin::IsValidPrinter(const std::string& printer_name) { | 226 bool PrintBackendWin::IsValidPrinter(const std::string& printer_name) { |
228 ScopedPrinterHandle printer_handle; | 227 ScopedPrinterHandle printer_handle; |
229 OpenPrinter(const_cast<LPTSTR>(UTF8ToWide(printer_name).c_str()), | 228 OpenPrinter(const_cast<LPTSTR>(UTF8ToWide(printer_name).c_str()), |
230 printer_handle.Receive(), NULL); | 229 printer_handle.Receive(), NULL); |
231 return printer_handle.IsValid(); | 230 return printer_handle.IsValid(); |
232 } | 231 } |
233 | 232 |
234 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( | 233 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( |
235 const base::DictionaryValue* print_backend_settings) { | 234 const base::DictionaryValue* print_backend_settings) { |
236 return new PrintBackendWin; | 235 return new PrintBackendWin; |
237 } | 236 } |
238 | 237 |
239 } // namespace printing | 238 } // namespace printing |
OLD | NEW |