Index: printing/backend/print_backend_win.cc |
diff --git a/printing/backend/print_backend_win.cc b/printing/backend/print_backend_win.cc |
index 287a1f030468226b11644fadd37c5181cbf7bc99..a8139f397e069fef04bba3c6d7dc3c7350723eaa 100644 |
--- a/printing/backend/print_backend_win.cc |
+++ b/printing/backend/print_backend_win.cc |
@@ -9,6 +9,7 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/numerics/safe_conversions.h" |
+#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_piece.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/win/scoped_bstr.h" |
@@ -95,37 +96,34 @@ void LoadPaper(const wchar_t* printer, |
tmp_name = tmp_name.c_str(); |
paper.display_name = base::WideToUTF8(tmp_name); |
} |
+ if (!ids.empty()) |
+ paper.vendor_id = base::UintToString(ids[i]); |
caps->papers.push_back(paper); |
} |
if (devmode) { |
- short default_id = 0; |
- gfx::Size default_size; |
+ // Copy paper with the same ID as default paper. |
+ if (devmode->dmFields & DM_PAPERSIZE) { |
+ for (size_t i = 0; i < ids.size(); ++i) { |
+ if (ids[i] == devmode->dmPaperSize) { |
+ DCHECK_EQ(ids.size(), caps->papers.size()); |
+ caps->default_paper = caps->papers[i]; |
+ break; |
+ } |
+ } |
+ } |
- if (devmode->dmFields & DM_PAPERSIZE) |
- default_id = devmode->dmPaperSize; |
+ gfx::Size default_size; |
if (devmode->dmFields & DM_PAPERWIDTH) |
default_size.set_width(devmode->dmPaperWidth * kToUm); |
if (devmode->dmFields & DM_PAPERLENGTH) |
default_size.set_height(devmode->dmPaperLength * kToUm); |
- if (default_size.IsEmpty()) { |
- for (size_t i = 0; i < ids.size(); ++i) { |
- if (ids[i] == default_id) { |
- PrinterSemanticCapsAndDefaults::Paper paper; |
- paper.size_um.SetSize(sizes[i].x * kToUm, sizes[i].y * kToUm); |
- if (!names.empty()) { |
- const wchar_t* name_start = names[i].chars; |
- base::string16 tmp_name(name_start, kMaxPaperName); |
- // Trim trailing zeros. |
- tmp_name = tmp_name.c_str(); |
- paper.display_name = base::WideToUTF8(tmp_name); |
- } |
- caps->default_paper = paper; |
- break; |
- } |
- } |
- } else { |
+ if (!default_size.IsEmpty()) { |
+ // Reset default paper if |dmPaperWidth| or |dmPaperLength| does not |
+ // match default paper set by. |
+ if (default_size != caps->default_paper.size_um) |
+ caps->default_paper = PrinterSemanticCapsAndDefaults::Paper(); |
caps->default_paper.size_um = default_size; |
} |
} |