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

Side by Side Diff: chrome/service/cloud_print/print_system_win.cc

Issue 6544002: Fixed a corner case issue with printing XPS documents to the Microsoft XPS Do... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/service/cloud_print/print_system.h" 5 #include "chrome/service/cloud_print/print_system.h"
6 6
7 #include <objidl.h> 7 #include <objidl.h>
8 #include <winspool.h> 8 #include <winspool.h>
9 #if defined(_WIN32_WINNT) 9 #if defined(_WIN32_WINNT)
10 #undef _WIN32_WINNT 10 #undef _WIN32_WINNT
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 last_page_printed_ = highest_rendered_page_number; 457 last_page_printed_ = highest_rendered_page_number;
458 if (done_printing) 458 if (done_printing)
459 PrintJobDone(); 459 PrintJobDone();
460 else 460 else
461 RenderNextPDFPages(); 461 RenderNextPDFPages();
462 } 462 }
463 463
464 // base::win::ObjectWatcher::Delegate inplementation. 464 // base::win::ObjectWatcher::Delegate inplementation.
465 virtual void OnObjectSignaled(HANDLE object) { 465 virtual void OnObjectSignaled(HANDLE object) {
466 DCHECK(xps_print_job_); 466 DCHECK(xps_print_job_);
467 DCHECK(object == job_progress_event_.Get());
468 ResetEvent(job_progress_event_.Get());
467 if (!delegate_) 469 if (!delegate_)
468 return; 470 return;
469 XPS_JOB_STATUS job_status = {0}; 471 XPS_JOB_STATUS job_status = {0};
470 xps_print_job_->GetJobStatus(&job_status); 472 xps_print_job_->GetJobStatus(&job_status);
471 bool done = false; 473 bool done = false;
472 if ((job_status.completion == XPS_JOB_CANCELLED) || 474 if ((job_status.completion == XPS_JOB_CANCELLED) ||
473 (job_status.completion == XPS_JOB_FAILED)) { 475 (job_status.completion == XPS_JOB_FAILED)) {
474 delegate_->OnJobSpoolFailed(); 476 delegate_->OnJobSpoolFailed();
475 done = true; 477 done = true;
476 } else if (job_status.jobId) { 478 } else if (job_status.jobId ||
479 (job_status.completion == XPS_JOB_COMPLETED)) {
480 // Note: In the case of the XPS document being printed to the
481 // Microsoft XPS Document Writer, it seems to skip spooling the job
482 // and goes to the completed state without ever assigning a job id.
477 delegate_->OnJobSpoolSucceeded(job_status.jobId); 483 delegate_->OnJobSpoolSucceeded(job_status.jobId);
478 done = true; 484 done = true;
479 } else { 485 } else {
480 ResetEvent(job_progress_event_.Get());
481 job_progress_watcher_.StopWatching(); 486 job_progress_watcher_.StopWatching();
482 job_progress_watcher_.StartWatching(job_progress_event_.Get(), this); 487 job_progress_watcher_.StartWatching(job_progress_event_.Get(), this);
483 } 488 }
484 if (done && should_couninit_) { 489 if (done && should_couninit_) {
485 CoUninitialize(); 490 CoUninitialize();
486 should_couninit_ = false; 491 should_couninit_ = false;
487 } 492 }
488 } 493 }
489 494
490 virtual void OnRenderPDFPagesToMetafileFailed() { 495 virtual void OnRenderPDFPagesToMetafileFailed() {
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 NULL, 778 NULL,
774 kPTJobScope, 779 kPTJobScope,
775 result_ticket_stream.get(), 780 result_ticket_stream.get(),
776 error.Receive())); 781 error.Receive()));
777 printing::XPSModule::CloseProvider(provider); 782 printing::XPSModule::CloseProvider(provider);
778 } 783 }
779 return ret; 784 return ret;
780 } 785 }
781 786
782 bool PrintSystemWin::GetJobDetails(const std::string& printer_name, 787 bool PrintSystemWin::GetJobDetails(const std::string& printer_name,
783 PlatformJobId job_id, 788 PlatformJobId job_id,
784 PrintJobDetails *job_details) { 789 PrintJobDetails *job_details) {
785 DCHECK(job_details); 790 DCHECK(job_details);
786 HANDLE printer_handle = NULL; 791 HANDLE printer_handle = NULL;
787 std::wstring printer_name_wide = UTF8ToWide(printer_name); 792 std::wstring printer_name_wide = UTF8ToWide(printer_name);
788 OpenPrinter(const_cast<LPTSTR>(printer_name_wide.c_str()), &printer_handle, 793 OpenPrinter(const_cast<LPTSTR>(printer_name_wide.c_str()), &printer_handle,
789 NULL); 794 NULL);
790 DCHECK(printer_handle); 795 DCHECK(printer_handle);
791 bool ret = false; 796 bool ret = false;
792 if (printer_handle) { 797 if (printer_handle) {
793 DWORD bytes_needed = 0; 798 DWORD bytes_needed = 0;
794 GetJob(printer_handle, job_id, 1, NULL, 0, &bytes_needed); 799 GetJob(printer_handle, job_id, 1, NULL, 0, &bytes_needed);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 RpcStringFree(reinterpret_cast<RPC_WSTR *>(&proxy_id_as_string)); 864 RpcStringFree(reinterpret_cast<RPC_WSTR *>(&proxy_id_as_string));
860 return ret; 865 return ret;
861 } 866 }
862 867
863 scoped_refptr<PrintSystem> PrintSystem::CreateInstance( 868 scoped_refptr<PrintSystem> PrintSystem::CreateInstance(
864 const DictionaryValue* print_system_settings) { 869 const DictionaryValue* print_system_settings) {
865 return new PrintSystemWin; 870 return new PrintSystemWin;
866 } 871 }
867 872
868 } // namespace cloud_print 873 } // namespace cloud_print
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698