Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "chrome/service/cloud_print/print_system.h" | 5 #include "chrome/service/cloud_print/print_system.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 353 | 353 |
| 354 virtual void OnChildDied() override { PrintJobDone(false); } | 354 virtual void OnChildDied() override { PrintJobDone(false); } |
| 355 | 355 |
| 356 // base::win::ObjectWatcher::Delegate implementation. | 356 // base::win::ObjectWatcher::Delegate implementation. |
| 357 virtual void OnObjectSignaled(HANDLE object) override { | 357 virtual void OnObjectSignaled(HANDLE object) override { |
| 358 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is | 358 // TODO(vadimt): Remove ScopedTracker below once crbug.com/418183 is |
| 359 // fixed. | 359 // fixed. |
| 360 tracked_objects::ScopedTracker tracking_profile( | 360 tracked_objects::ScopedTracker tracking_profile( |
| 361 FROM_HERE_WITH_EXPLICIT_FUNCTION("Core_OnObjectSignaled")); | 361 FROM_HERE_WITH_EXPLICIT_FUNCTION("Core_OnObjectSignaled")); |
| 362 | 362 |
| 363 DCHECK(xps_print_job_); | 363 DCHECK(xps_print_job_.get()); |
| 364 DCHECK(object == job_progress_event_.Get()); | 364 DCHECK(object == job_progress_event_.Get()); |
| 365 ResetEvent(job_progress_event_.Get()); | 365 ResetEvent(job_progress_event_.Get()); |
| 366 if (!delegate_) | 366 if (!delegate_) |
| 367 return; | 367 return; |
| 368 XPS_JOB_STATUS job_status = {0}; | 368 XPS_JOB_STATUS job_status = {0}; |
| 369 xps_print_job_->GetJobStatus(&job_status); | 369 xps_print_job_->GetJobStatus(&job_status); |
| 370 if ((job_status.completion == XPS_JOB_CANCELLED) || | 370 if ((job_status.completion == XPS_JOB_CANCELLED) || |
| 371 (job_status.completion == XPS_JOB_FAILED)) { | 371 (job_status.completion == XPS_JOB_FAILED)) { |
| 372 delegate_->OnJobSpoolFailed(); | 372 delegate_->OnJobSpoolFailed(); |
| 373 } else if (job_status.jobId || | 373 } else if (job_status.jobId || |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 384 | 384 |
| 385 private: | 385 private: |
| 386 // Helper class to allow PrintXPSDocument() to have multiple exits. | 386 // Helper class to allow PrintXPSDocument() to have multiple exits. |
| 387 class PrintJobCanceler { | 387 class PrintJobCanceler { |
| 388 public: | 388 public: |
| 389 explicit PrintJobCanceler( | 389 explicit PrintJobCanceler( |
| 390 base::win::ScopedComPtr<IXpsPrintJob>* job_ptr) | 390 base::win::ScopedComPtr<IXpsPrintJob>* job_ptr) |
| 391 : job_ptr_(job_ptr) { | 391 : job_ptr_(job_ptr) { |
| 392 } | 392 } |
| 393 ~PrintJobCanceler() { | 393 ~PrintJobCanceler() { |
| 394 if (job_ptr_ && *job_ptr_) { | 394 if (job_ptr_ && job_ptr_->get()) { |
|
dcheng
2014/11/12 23:01:32
This seems pretty sketchy. I have a TODO to come b
| |
| 395 (*job_ptr_)->Cancel(); | 395 (*job_ptr_)->Cancel(); |
| 396 job_ptr_->Release(); | 396 job_ptr_->Release(); |
| 397 } | 397 } |
| 398 } | 398 } |
| 399 | 399 |
| 400 void reset() { job_ptr_ = NULL; } | 400 void reset() { job_ptr_ = NULL; } |
| 401 | 401 |
| 402 private: | 402 private: |
| 403 base::win::ScopedComPtr<IXpsPrintJob>* job_ptr_; | 403 base::win::ScopedComPtr<IXpsPrintJob>* job_ptr_; |
| 404 | 404 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 436 | 436 |
| 437 // Called on the service process IO thread. | 437 // Called on the service process IO thread. |
| 438 void RenderPDFPagesInSandbox(const base::FilePath& pdf_path, | 438 void RenderPDFPagesInSandbox(const base::FilePath& pdf_path, |
| 439 const gfx::Rect& render_area, | 439 const gfx::Rect& render_area, |
| 440 int render_dpi, | 440 int render_dpi, |
| 441 const scoped_refptr<base::MessageLoopProxy>& | 441 const scoped_refptr<base::MessageLoopProxy>& |
| 442 client_message_loop_proxy) { | 442 client_message_loop_proxy) { |
| 443 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> | 443 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> |
| 444 BelongsToCurrentThread()); | 444 BelongsToCurrentThread()); |
| 445 scoped_ptr<ServiceUtilityProcessHost> utility_host( | 445 scoped_ptr<ServiceUtilityProcessHost> utility_host( |
| 446 new ServiceUtilityProcessHost(this, client_message_loop_proxy)); | 446 new ServiceUtilityProcessHost(this, client_message_loop_proxy.get())); |
| 447 // TODO(gene): For now we disabling autorotation for CloudPrinting. | 447 // TODO(gene): For now we disabling autorotation for CloudPrinting. |
| 448 // Landscape/Portrait setting is passed in the print ticket and | 448 // Landscape/Portrait setting is passed in the print ticket and |
| 449 // server is generating portrait PDF always. | 449 // server is generating portrait PDF always. |
| 450 // We should enable autorotation once server will be able to generate | 450 // We should enable autorotation once server will be able to generate |
| 451 // PDF that matches paper size and orientation. | 451 // PDF that matches paper size and orientation. |
| 452 if (utility_host->StartRenderPDFPagesToMetafile( | 452 if (utility_host->StartRenderPDFPagesToMetafile( |
| 453 pdf_path, | 453 pdf_path, |
| 454 printing::PdfRenderSettings(render_area, render_dpi, false))) { | 454 printing::PdfRenderSettings(render_area, render_dpi, false))) { |
| 455 // The object will self-destruct when the child process dies. | 455 // The object will self-destruct when the child process dies. |
| 456 utility_host.release(); | 456 utility_host.release(); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 582 this, base::MessageLoopProxy::current())); | 582 this, base::MessageLoopProxy::current())); |
| 583 } | 583 } |
| 584 | 584 |
| 585 private: | 585 private: |
| 586 void GetPrinterCapsAndDefaultsImpl( | 586 void GetPrinterCapsAndDefaultsImpl( |
| 587 const scoped_refptr<base::MessageLoopProxy>& | 587 const scoped_refptr<base::MessageLoopProxy>& |
| 588 client_message_loop_proxy) { | 588 client_message_loop_proxy) { |
| 589 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> | 589 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> |
| 590 BelongsToCurrentThread()); | 590 BelongsToCurrentThread()); |
| 591 scoped_ptr<ServiceUtilityProcessHost> utility_host( | 591 scoped_ptr<ServiceUtilityProcessHost> utility_host( |
| 592 new ServiceUtilityProcessHost(this, client_message_loop_proxy)); | 592 new ServiceUtilityProcessHost(this, client_message_loop_proxy.get())); |
| 593 if (utility_host->StartGetPrinterCapsAndDefaults(printer_name_)) { | 593 if (utility_host->StartGetPrinterCapsAndDefaults(printer_name_)) { |
| 594 // The object will self-destruct when the child process dies. | 594 // The object will self-destruct when the child process dies. |
| 595 utility_host.release(); | 595 utility_host.release(); |
| 596 } else { | 596 } else { |
| 597 client_message_loop_proxy->PostTask( | 597 client_message_loop_proxy->PostTask( |
| 598 FROM_HERE, | 598 FROM_HERE, |
| 599 base::Bind(&PrinterCapsHandler::OnChildDied, this)); | 599 base::Bind(&PrinterCapsHandler::OnChildDied, this)); |
| 600 } | 600 } |
| 601 } | 601 } |
| 602 | 602 |
| 603 void GetPrinterSemanticCapsAndDefaultsImpl( | 603 void GetPrinterSemanticCapsAndDefaultsImpl( |
| 604 const scoped_refptr<base::MessageLoopProxy>& | 604 const scoped_refptr<base::MessageLoopProxy>& |
| 605 client_message_loop_proxy) { | 605 client_message_loop_proxy) { |
| 606 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> | 606 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> |
| 607 BelongsToCurrentThread()); | 607 BelongsToCurrentThread()); |
| 608 scoped_ptr<ServiceUtilityProcessHost> utility_host( | 608 scoped_ptr<ServiceUtilityProcessHost> utility_host( |
| 609 new ServiceUtilityProcessHost(this, client_message_loop_proxy)); | 609 new ServiceUtilityProcessHost(this, client_message_loop_proxy.get())); |
| 610 if (utility_host->StartGetPrinterSemanticCapsAndDefaults(printer_name_)) { | 610 if (utility_host->StartGetPrinterSemanticCapsAndDefaults(printer_name_)) { |
| 611 // The object will self-destruct when the child process dies. | 611 // The object will self-destruct when the child process dies. |
| 612 utility_host.release(); | 612 utility_host.release(); |
| 613 } else { | 613 } else { |
| 614 client_message_loop_proxy->PostTask( | 614 client_message_loop_proxy->PostTask( |
| 615 FROM_HERE, | 615 FROM_HERE, |
| 616 base::Bind(&PrinterCapsHandler::OnChildDied, this)); | 616 base::Bind(&PrinterCapsHandler::OnChildDied, this)); |
| 617 } | 617 } |
| 618 } | 618 } |
| 619 | 619 |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 830 } | 830 } |
| 831 | 831 |
| 832 } // namespace | 832 } // namespace |
| 833 | 833 |
| 834 scoped_refptr<PrintSystem> PrintSystem::CreateInstance( | 834 scoped_refptr<PrintSystem> PrintSystem::CreateInstance( |
| 835 const base::DictionaryValue* print_system_settings) { | 835 const base::DictionaryValue* print_system_settings) { |
| 836 return new PrintSystemWin; | 836 return new PrintSystemWin; |
| 837 } | 837 } |
| 838 | 838 |
| 839 } // namespace cloud_print | 839 } // namespace cloud_print |
| OLD | NEW |