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

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

Issue 605563002: Remove implicit HANDLE conversions from printing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « no previous file | printing/backend/win_helper.cc » ('j') | 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 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 if (!ret) 190 if (!ret)
191 return false; 191 return false;
192 192
193 std::string default_printer = GetDefaultPrinterName(); 193 std::string default_printer = GetDefaultPrinterName();
194 PRINTER_INFO_4* printer_info = 194 PRINTER_INFO_4* printer_info =
195 reinterpret_cast<PRINTER_INFO_4*>(printer_info_buffer.get()); 195 reinterpret_cast<PRINTER_INFO_4*>(printer_info_buffer.get());
196 for (DWORD index = 0; index < count_returned; index++) { 196 for (DWORD index = 0; index < count_returned; index++) {
197 ScopedPrinterHandle printer; 197 ScopedPrinterHandle printer;
198 PrinterBasicInfo info; 198 PrinterBasicInfo info;
199 if (printer.OpenPrinter(printer_info[index].pPrinterName) && 199 if (printer.OpenPrinter(printer_info[index].pPrinterName) &&
200 InitBasicPrinterInfo(printer, &info)) { 200 InitBasicPrinterInfo(printer.Get(), &info)) {
201 info.is_default = (info.printer_name == default_printer); 201 info.is_default = (info.printer_name == default_printer);
202 printer_list->push_back(info); 202 printer_list->push_back(info);
203 } 203 }
204 } 204 }
205 return true; 205 return true;
206 } 206 }
207 207
208 std::string PrintBackendWin::GetDefaultPrinterName() { 208 std::string PrintBackendWin::GetDefaultPrinterName() {
209 DWORD size = MAX_PATH; 209 DWORD size = MAX_PATH;
210 TCHAR default_printer_name[MAX_PATH]; 210 TCHAR default_printer_name[MAX_PATH];
211 if (!::GetDefaultPrinter(default_printer_name, &size)) 211 if (!::GetDefaultPrinter(default_printer_name, &size))
212 return std::string(); 212 return std::string();
213 return base::WideToUTF8(default_printer_name); 213 return base::WideToUTF8(default_printer_name);
214 } 214 }
215 215
216 bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults( 216 bool PrintBackendWin::GetPrinterSemanticCapsAndDefaults(
217 const std::string& printer_name, 217 const std::string& printer_name,
218 PrinterSemanticCapsAndDefaults* printer_info) { 218 PrinterSemanticCapsAndDefaults* printer_info) {
219 ScopedPrinterHandle printer_handle; 219 ScopedPrinterHandle printer_handle;
220 if (!printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str())) { 220 if (!printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str())) {
221 LOG(WARNING) << "Failed to open printer, error = " << GetLastError(); 221 LOG(WARNING) << "Failed to open printer, error = " << GetLastError();
222 return false; 222 return false;
223 } 223 }
224 224
225 PrinterInfo5 info_5; 225 PrinterInfo5 info_5;
226 if (!info_5.Init(printer_handle)) 226 if (!info_5.Init(printer_handle.Get()))
227 return false; 227 return false;
228 const wchar_t* name = info_5.get()->pPrinterName; 228 const wchar_t* name = info_5.get()->pPrinterName;
229 const wchar_t* port = info_5.get()->pPortName; 229 const wchar_t* port = info_5.get()->pPortName;
230 DCHECK_EQ(name, base::UTF8ToUTF16(printer_name)); 230 DCHECK_EQ(name, base::UTF8ToUTF16(printer_name));
231 231
232 PrinterSemanticCapsAndDefaults caps; 232 PrinterSemanticCapsAndDefaults caps;
233 233
234 scoped_ptr<DEVMODE, base::FreeDeleter> user_settings = 234 scoped_ptr<DEVMODE, base::FreeDeleter> user_settings =
235 CreateDevMode(printer_handle, NULL); 235 CreateDevMode(printer_handle.Get(), NULL);
236 if (user_settings) { 236 if (user_settings) {
237 if (user_settings->dmFields & DM_COLOR) 237 if (user_settings->dmFields & DM_COLOR)
238 caps.color_default = (user_settings->dmColor == DMCOLOR_COLOR); 238 caps.color_default = (user_settings->dmColor == DMCOLOR_COLOR);
239 239
240 if (user_settings->dmFields & DM_DUPLEX) { 240 if (user_settings->dmFields & DM_DUPLEX) {
241 switch (user_settings->dmDuplex) { 241 switch (user_settings->dmDuplex) {
242 case DMDUP_SIMPLEX: 242 case DMDUP_SIMPLEX:
243 caps.duplex_default = SIMPLEX; 243 caps.duplex_default = SIMPLEX;
244 break; 244 break;
245 case DMDUP_VERTICAL: 245 case DMDUP_VERTICAL:
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 return false; 315 return false;
316 } 316 }
317 hr = StreamOnHGlobalToString(print_capabilities_stream.get(), 317 hr = StreamOnHGlobalToString(print_capabilities_stream.get(),
318 &printer_info->printer_capabilities); 318 &printer_info->printer_capabilities);
319 DCHECK(SUCCEEDED(hr)); 319 DCHECK(SUCCEEDED(hr));
320 printer_info->caps_mime_type = "text/xml"; 320 printer_info->caps_mime_type = "text/xml";
321 } 321 }
322 ScopedPrinterHandle printer_handle; 322 ScopedPrinterHandle printer_handle;
323 if (printer_handle.OpenPrinter(printer_name_wide.c_str())) { 323 if (printer_handle.OpenPrinter(printer_name_wide.c_str())) {
324 scoped_ptr<DEVMODE, base::FreeDeleter> devmode_out( 324 scoped_ptr<DEVMODE, base::FreeDeleter> devmode_out(
325 CreateDevMode(printer_handle, NULL)); 325 CreateDevMode(printer_handle.Get(), NULL));
326 if (!devmode_out) 326 if (!devmode_out)
327 return false; 327 return false;
328 base::win::ScopedComPtr<IStream> printer_defaults_stream; 328 base::win::ScopedComPtr<IStream> printer_defaults_stream;
329 hr = CreateStreamOnHGlobal(NULL, TRUE, 329 hr = CreateStreamOnHGlobal(NULL, TRUE,
330 printer_defaults_stream.Receive()); 330 printer_defaults_stream.Receive());
331 DCHECK(SUCCEEDED(hr)); 331 DCHECK(SUCCEEDED(hr));
332 if (printer_defaults_stream) { 332 if (printer_defaults_stream) {
333 DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra; 333 DWORD dm_size = devmode_out->dmSize + devmode_out->dmDriverExtra;
334 hr = XPSModule::ConvertDevModeToPrintTicket(provider, dm_size, 334 hr = XPSModule::ConvertDevModeToPrintTicket(provider, dm_size,
335 devmode_out.get(), kPTJobScope, printer_defaults_stream); 335 devmode_out.get(), kPTJobScope, printer_defaults_stream);
(...skipping 11 matching lines...) Expand all
347 return true; 347 return true;
348 } 348 }
349 349
350 // Gets the information about driver for a specific printer. 350 // Gets the information about driver for a specific printer.
351 std::string PrintBackendWin::GetPrinterDriverInfo( 351 std::string PrintBackendWin::GetPrinterDriverInfo(
352 const std::string& printer_name) { 352 const std::string& printer_name) {
353 ScopedPrinterHandle printer; 353 ScopedPrinterHandle printer;
354 if (!printer.OpenPrinter(base::UTF8ToWide(printer_name).c_str())) { 354 if (!printer.OpenPrinter(base::UTF8ToWide(printer_name).c_str())) {
355 return std::string(); 355 return std::string();
356 } 356 }
357 return GetDriverInfo(printer); 357 return GetDriverInfo(printer.Get());
358 } 358 }
359 359
360 bool PrintBackendWin::IsValidPrinter(const std::string& printer_name) { 360 bool PrintBackendWin::IsValidPrinter(const std::string& printer_name) {
361 ScopedPrinterHandle printer_handle; 361 ScopedPrinterHandle printer_handle;
362 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str()); 362 return printer_handle.OpenPrinter(base::UTF8ToWide(printer_name).c_str());
363 } 363 }
364 364
365 scoped_refptr<PrintBackend> PrintBackend::CreateInstance( 365 scoped_refptr<PrintBackend> PrintBackend::CreateInstance(
366 const base::DictionaryValue* print_backend_settings) { 366 const base::DictionaryValue* print_backend_settings) {
367 return new PrintBackendWin; 367 return new PrintBackendWin;
368 } 368 }
369 369
370 } // namespace printing 370 } // namespace printing
OLDNEW
« no previous file with comments | « no previous file | printing/backend/win_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698