Index: printing/printing_context_win.cc |
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc |
index 8e0f0e11893df996ba0dbcfe0777f89dbbbbc051..96e3572154fc9eab1cbb9fa3e4b91d277052e911 100644 |
--- a/printing/printing_context_win.cc |
+++ b/printing/printing_context_win.cc |
@@ -17,6 +17,7 @@ |
#include "base/values.h" |
#include "base/win/metro.h" |
#include "printing/backend/print_backend.h" |
+#include "printing/backend/printing_info_win.h" |
#include "printing/backend/win_helper.h" |
#include "printing/print_job_constants.h" |
#include "printing/print_settings_initializer_win.h" |
@@ -44,59 +45,6 @@ const int kPDFA4Height = 11.69 * kPDFDpi; |
const int kPDFA3Width = 11.69 * kPDFDpi; |
const int kPDFA3Height = 16.54 * kPDFDpi; |
-// Retrieves the printer's PRINTER_INFO_* structure. |
-// Output |level| can be 9 (user-default), 8 (admin-default), or 2 |
-// (printer-default). |
-// |devmode| is a pointer points to the start of DEVMODE structure in |
-// |buffer|. |
-bool GetPrinterInfo(HANDLE printer, |
- const std::wstring &device_name, |
- int* level, |
- scoped_array<uint8>* buffer, |
- DEVMODE** dev_mode) { |
- DCHECK(buffer); |
- |
- // A PRINTER_INFO_9 structure specifying the per-user default printer |
- // settings. |
- printing::PrintingContextWin::GetPrinterHelper(printer, 9, buffer); |
- if (buffer->get()) { |
- PRINTER_INFO_9* info_9 = reinterpret_cast<PRINTER_INFO_9*>(buffer->get()); |
- if (info_9->pDevMode != NULL) { |
- *level = 9; |
- *dev_mode = info_9->pDevMode; |
- return true; |
- } |
- buffer->reset(); |
- } |
- |
- // A PRINTER_INFO_8 structure specifying the global default printer settings. |
- printing::PrintingContextWin::GetPrinterHelper(printer, 8, buffer); |
- if (buffer->get()) { |
- PRINTER_INFO_8* info_8 = reinterpret_cast<PRINTER_INFO_8*>(buffer->get()); |
- if (info_8->pDevMode != NULL) { |
- *level = 8; |
- *dev_mode = info_8->pDevMode; |
- return true; |
- } |
- buffer->reset(); |
- } |
- |
- // A PRINTER_INFO_2 structure specifying the driver's default printer |
- // settings. |
- printing::PrintingContextWin::GetPrinterHelper(printer, 2, buffer); |
- if (buffer->get()) { |
- PRINTER_INFO_2* info_2 = reinterpret_cast<PRINTER_INFO_2*>(buffer->get()); |
- if (info_2->pDevMode != NULL) { |
- *level = 2; |
- *dev_mode = info_2->pDevMode; |
- return true; |
- } |
- buffer->reset(); |
- } |
- |
- return false; |
-} |
- |
} // anonymous namespace |
namespace printing { |
@@ -661,18 +609,16 @@ bool PrintingContextWin::InitializeSettings(const DEVMODE& dev_mode, |
bool PrintingContextWin::GetPrinterSettings(HANDLE printer, |
const std::wstring& device_name) { |
DCHECK(!in_print_job_); |
- scoped_array<uint8> buffer; |
- int level = 0; |
- DEVMODE* dev_mode = NULL; |
- if (GetPrinterInfo(printer, device_name, &level, &buffer, &dev_mode) && |
- AllocateContext(device_name, dev_mode, &context_)) { |
- return InitializeSettings(*dev_mode, device_name, NULL, 0, false); |
+ UserDefaultDevMode user_settings; |
+ |
+ if (!user_settings.Init(printer) || |
+ !AllocateContext(device_name, user_settings.get(), &context_)) { |
+ ResetSettings(); |
+ return false; |
} |
- buffer.reset(); |
- ResetSettings(); |
- return false; |
+ return InitializeSettings(*user_settings.get(), device_name, NULL, 0, false); |
} |
// static |
@@ -813,18 +759,4 @@ PrintingContext::Result PrintingContextWin::ParseDialogResult( |
return context_ ? OK : FAILED; |
} |
-// static |
-void PrintingContextWin::GetPrinterHelper(HANDLE printer, int level, |
- scoped_array<uint8>* buffer) { |
- DWORD buf_size = 0; |
- GetPrinter(printer, level, NULL, 0, &buf_size); |
- if (buf_size) { |
- buffer->reset(new uint8[buf_size]); |
- memset(buffer->get(), 0, buf_size); |
- if (!GetPrinter(printer, level, buffer->get(), buf_size, &buf_size)) { |
- buffer->reset(); |
- } |
- } |
-} |
- |
} // namespace printing |