| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/printing_context.h" | 5 #include "printing/printing_context.h" |
| 6 | 6 |
| 7 #include <winspool.h> | 7 #include <winspool.h> |
| 8 | 8 |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/i18n/file_util_icu.h" | 10 #include "base/i18n/file_util_icu.h" |
| 11 #include "base/i18n/time_formatting.h" | 11 #include "base/i18n/time_formatting.h" |
| 12 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
| 13 #include "base/time.h" | 13 #include "base/time.h" |
| 14 #include "base/utf_string_conversions.h" |
| 14 #include "printing/printed_document.h" | 15 #include "printing/printed_document.h" |
| 15 #include "skia/ext/platform_device_win.h" | 16 #include "skia/ext/platform_device_win.h" |
| 16 | 17 |
| 17 using base::Time; | 18 using base::Time; |
| 18 | 19 |
| 19 namespace printing { | 20 namespace printing { |
| 20 | 21 |
| 21 class PrintingContext::CallbackHandler : public IPrintDialogCallback, | 22 class PrintingContext::CallbackHandler : public IPrintDialogCallback, |
| 22 public IObjectWithSite { | 23 public IObjectWithSite { |
| 23 public: | 24 public: |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 } | 240 } |
| 240 settings_.Clear(); | 241 settings_.Clear(); |
| 241 in_print_job_ = false; | 242 in_print_job_ = false; |
| 242 | 243 |
| 243 #ifndef NDEBUG | 244 #ifndef NDEBUG |
| 244 page_number_ = -1; | 245 page_number_ = -1; |
| 245 #endif | 246 #endif |
| 246 } | 247 } |
| 247 | 248 |
| 248 PrintingContext::Result PrintingContext::NewDocument( | 249 PrintingContext::Result PrintingContext::NewDocument( |
| 249 const std::wstring& document_name) { | 250 const string16& document_name) { |
| 250 DCHECK(!in_print_job_); | 251 DCHECK(!in_print_job_); |
| 251 if (!context_) | 252 if (!context_) |
| 252 return OnError(); | 253 return OnError(); |
| 253 | 254 |
| 254 // Set the flag used by the AbortPrintJob dialog procedure. | 255 // Set the flag used by the AbortPrintJob dialog procedure. |
| 255 abort_printing_ = false; | 256 abort_printing_ = false; |
| 256 | 257 |
| 257 in_print_job_ = true; | 258 in_print_job_ = true; |
| 258 | 259 |
| 259 // Register the application's AbortProc function with GDI. | 260 // Register the application's AbortProc function with GDI. |
| 260 if (SP_ERROR == SetAbortProc(context_, &AbortProc)) | 261 if (SP_ERROR == SetAbortProc(context_, &AbortProc)) |
| 261 return OnError(); | 262 return OnError(); |
| 262 | 263 |
| 263 DOCINFO di = { sizeof(DOCINFO) }; | 264 DOCINFO di = { sizeof(DOCINFO) }; |
| 264 di.lpszDocName = document_name.c_str(); | 265 di.lpszDocName = UTF16ToWide(document_name).c_str(); |
| 265 | 266 |
| 266 // Is there a debug dump directory specified? If so, force to print to a file. | 267 // Is there a debug dump directory specified? If so, force to print to a file. |
| 267 std::wstring debug_dump_path = PrintedDocument::debug_dump_path(); | 268 FilePath debug_dump_path = PrintedDocument::debug_dump_path(); |
| 268 if (!debug_dump_path.empty()) { | 269 if (!debug_dump_path.empty()) { |
| 269 // Create a filename. | 270 // Create a filename. |
| 270 std::wstring filename; | 271 std::wstring filename; |
| 271 Time now(Time::Now()); | 272 Time now(Time::Now()); |
| 272 filename = base::TimeFormatShortDateNumeric(now); | 273 filename = base::TimeFormatShortDateNumeric(now); |
| 273 filename += L"_"; | 274 filename += L"_"; |
| 274 filename += base::TimeFormatTimeOfDay(now); | 275 filename += base::TimeFormatTimeOfDay(now); |
| 275 filename += L"_"; | 276 filename += L"_"; |
| 276 filename += document_name; | 277 filename += UTF16ToWide(document_name); |
| 277 filename += L"_"; | 278 filename += L"_"; |
| 278 filename += L"buffer.prn"; | 279 filename += L"buffer.prn"; |
| 279 file_util::ReplaceIllegalCharactersInPath(&filename, '_'); | 280 file_util::ReplaceIllegalCharactersInPath(&filename, '_'); |
| 280 file_util::AppendToPath(&debug_dump_path, filename); | 281 debug_dump_path.Append(filename); |
| 281 di.lpszOutput = debug_dump_path.c_str(); | 282 di.lpszOutput = debug_dump_path.value().c_str(); |
| 282 } | 283 } |
| 283 | 284 |
| 284 // No message loop running in unit tests. | 285 // No message loop running in unit tests. |
| 285 DCHECK(!MessageLoop::current() ? true : | 286 DCHECK(!MessageLoop::current() ? true : |
| 286 !MessageLoop::current()->NestableTasksAllowed()); | 287 !MessageLoop::current()->NestableTasksAllowed()); |
| 287 | 288 |
| 288 // Begin a print job by calling the StartDoc function. | 289 // Begin a print job by calling the StartDoc function. |
| 289 // NOTE: StartDoc() starts a message loop. That causes a lot of problems with | 290 // NOTE: StartDoc() starts a message loop. That causes a lot of problems with |
| 290 // IPC. Make sure recursive task processing is disabled. | 291 // IPC. Make sure recursive task processing is disabled. |
| 291 if (StartDoc(context_, &di) <= 0) | 292 if (StartDoc(context_, &di) <= 0) |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 if (buf_size) { | 611 if (buf_size) { |
| 611 buffer->reset(new uint8[buf_size]); | 612 buffer->reset(new uint8[buf_size]); |
| 612 memset(buffer->get(), 0, buf_size); | 613 memset(buffer->get(), 0, buf_size); |
| 613 if (!GetPrinter(printer, level, buffer->get(), buf_size, &buf_size)) { | 614 if (!GetPrinter(printer, level, buffer->get(), buf_size, &buf_size)) { |
| 614 buffer->reset(); | 615 buffer->reset(); |
| 615 } | 616 } |
| 616 } | 617 } |
| 617 } | 618 } |
| 618 | 619 |
| 619 } // namespace printing | 620 } // namespace printing |
| OLD | NEW |