| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include <xpsprint.h> | 9 #include <xpsprint.h> |
| 10 | 10 |
| 11 #include "base/bind.h" |
| 11 #include "base/file_path.h" | 12 #include "base/file_path.h" |
| 12 #include "base/file_util.h" | 13 #include "base/file_util.h" |
| 13 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
| 15 #include "base/win/object_watcher.h" | 16 #include "base/win/object_watcher.h" |
| 16 #include "base/win/scoped_bstr.h" | 17 #include "base/win/scoped_bstr.h" |
| 17 #include "base/win/scoped_comptr.h" | 18 #include "base/win/scoped_comptr.h" |
| 18 #include "base/win/scoped_hdc.h" | 19 #include "base/win/scoped_hdc.h" |
| 19 #include "chrome/service/service_process.h" | 20 #include "chrome/service/service_process.h" |
| 20 #include "chrome/service/service_utility_process_host.h" | 21 #include "chrome/service/service_utility_process_host.h" |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 range.to = last_page_printed_ + kPageCountPerBatch; | 526 range.to = last_page_printed_ + kPageCountPerBatch; |
| 526 std::vector<printing::PageRange> page_ranges; | 527 std::vector<printing::PageRange> page_ranges; |
| 527 page_ranges.push_back(range); | 528 page_ranges.push_back(range); |
| 528 | 529 |
| 529 int printer_dpi = ::GetDeviceCaps(printer_dc_.Get(), LOGPIXELSX); | 530 int printer_dpi = ::GetDeviceCaps(printer_dc_.Get(), LOGPIXELSX); |
| 530 int dc_width = GetDeviceCaps(printer_dc_.Get(), PHYSICALWIDTH); | 531 int dc_width = GetDeviceCaps(printer_dc_.Get(), PHYSICALWIDTH); |
| 531 int dc_height = GetDeviceCaps(printer_dc_.Get(), PHYSICALHEIGHT); | 532 int dc_height = GetDeviceCaps(printer_dc_.Get(), PHYSICALHEIGHT); |
| 532 gfx::Rect render_area(0, 0, dc_width, dc_height); | 533 gfx::Rect render_area(0, 0, dc_width, dc_height); |
| 533 g_service_process->io_thread()->message_loop_proxy()->PostTask( | 534 g_service_process->io_thread()->message_loop_proxy()->PostTask( |
| 534 FROM_HERE, | 535 FROM_HERE, |
| 535 NewRunnableMethod( | 536 base::Bind(&JobSpoolerWin::Core::RenderPDFPagesInSandbox, this, |
| 536 this, | 537 print_data_file_path_, render_area, printer_dpi, |
| 537 &JobSpoolerWin::Core::RenderPDFPagesInSandbox, | 538 page_ranges, base::MessageLoopProxy::current())); |
| 538 print_data_file_path_, | |
| 539 render_area, | |
| 540 printer_dpi, | |
| 541 page_ranges, | |
| 542 base::MessageLoopProxy::current())); | |
| 543 } | 539 } |
| 544 // Called on the service process IO thread. | 540 // Called on the service process IO thread. |
| 545 void RenderPDFPagesInSandbox( | 541 void RenderPDFPagesInSandbox( |
| 546 const FilePath& pdf_path, const gfx::Rect& render_area, | 542 const FilePath& pdf_path, const gfx::Rect& render_area, |
| 547 int render_dpi, const std::vector<printing::PageRange>& page_ranges, | 543 int render_dpi, const std::vector<printing::PageRange>& page_ranges, |
| 548 const scoped_refptr<base::MessageLoopProxy>& | 544 const scoped_refptr<base::MessageLoopProxy>& |
| 549 client_message_loop_proxy) { | 545 client_message_loop_proxy) { |
| 550 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> | 546 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> |
| 551 BelongsToCurrentThread()); | 547 BelongsToCurrentThread()); |
| 552 scoped_ptr<ServiceUtilityProcessHost> utility_host( | 548 scoped_ptr<ServiceUtilityProcessHost> utility_host( |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 652 class PrinterCapsHandler : public ServiceUtilityProcessHost::Client { | 648 class PrinterCapsHandler : public ServiceUtilityProcessHost::Client { |
| 653 public: | 649 public: |
| 654 PrinterCapsHandler( | 650 PrinterCapsHandler( |
| 655 const std::string& printer_name, | 651 const std::string& printer_name, |
| 656 PrinterCapsAndDefaultsCallback* callback) | 652 PrinterCapsAndDefaultsCallback* callback) |
| 657 : printer_name_(printer_name), callback_(callback) { | 653 : printer_name_(printer_name), callback_(callback) { |
| 658 } | 654 } |
| 659 virtual void Start() { | 655 virtual void Start() { |
| 660 g_service_process->io_thread()->message_loop_proxy()->PostTask( | 656 g_service_process->io_thread()->message_loop_proxy()->PostTask( |
| 661 FROM_HERE, | 657 FROM_HERE, |
| 662 NewRunnableMethod( | 658 base::Bind(&PrinterCapsHandler::GetPrinterCapsAndDefaultsImpl, this, |
| 663 this, | 659 base::MessageLoopProxy::current())); |
| 664 &PrinterCapsHandler::GetPrinterCapsAndDefaultsImpl, | |
| 665 base::MessageLoopProxy::current())); | |
| 666 } | 660 } |
| 667 | 661 |
| 668 virtual void OnChildDied() { | 662 virtual void OnChildDied() { |
| 669 OnGetPrinterCapsAndDefaultsFailed(printer_name_); | 663 OnGetPrinterCapsAndDefaultsFailed(printer_name_); |
| 670 } | 664 } |
| 671 virtual void OnGetPrinterCapsAndDefaultsSucceeded( | 665 virtual void OnGetPrinterCapsAndDefaultsSucceeded( |
| 672 const std::string& printer_name, | 666 const std::string& printer_name, |
| 673 const printing::PrinterCapsAndDefaults& caps_and_defaults) { | 667 const printing::PrinterCapsAndDefaults& caps_and_defaults) { |
| 674 callback_->Run(true, printer_name, caps_and_defaults); | 668 callback_->Run(true, printer_name, caps_and_defaults); |
| 675 callback_.reset(); | 669 callback_.reset(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 692 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> | 686 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> |
| 693 BelongsToCurrentThread()); | 687 BelongsToCurrentThread()); |
| 694 scoped_ptr<ServiceUtilityProcessHost> utility_host( | 688 scoped_ptr<ServiceUtilityProcessHost> utility_host( |
| 695 new ServiceUtilityProcessHost(this, client_message_loop_proxy)); | 689 new ServiceUtilityProcessHost(this, client_message_loop_proxy)); |
| 696 if (utility_host->StartGetPrinterCapsAndDefaults(printer_name_)) { | 690 if (utility_host->StartGetPrinterCapsAndDefaults(printer_name_)) { |
| 697 // The object will self-destruct when the child process dies. | 691 // The object will self-destruct when the child process dies. |
| 698 utility_host.release(); | 692 utility_host.release(); |
| 699 } else { | 693 } else { |
| 700 client_message_loop_proxy->PostTask( | 694 client_message_loop_proxy->PostTask( |
| 701 FROM_HERE, | 695 FROM_HERE, |
| 702 NewRunnableMethod( | 696 base::Bind(&PrinterCapsHandler::OnGetPrinterCapsAndDefaultsFailed, |
| 703 this, | 697 this, printer_name_)); |
| 704 &PrinterCapsHandler::OnGetPrinterCapsAndDefaultsFailed, | |
| 705 printer_name_)); | |
| 706 } | 698 } |
| 707 } | 699 } |
| 708 | 700 |
| 709 std::string printer_name_; | 701 std::string printer_name_; |
| 710 scoped_ptr<PrinterCapsAndDefaultsCallback> callback_; | 702 scoped_ptr<PrinterCapsAndDefaultsCallback> callback_; |
| 711 }; | 703 }; |
| 712 | 704 |
| 713 | 705 |
| 714 virtual PrintSystem::PrintServerWatcher* CreatePrintServerWatcher(); | 706 virtual PrintSystem::PrintServerWatcher* CreatePrintServerWatcher(); |
| 715 virtual PrintSystem::PrinterWatcher* CreatePrinterWatcher( | 707 virtual PrintSystem::PrinterWatcher* CreatePrinterWatcher( |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 RpcStringFree(reinterpret_cast<RPC_WSTR *>(&proxy_id_as_string)); | 868 RpcStringFree(reinterpret_cast<RPC_WSTR *>(&proxy_id_as_string)); |
| 877 return ret; | 869 return ret; |
| 878 } | 870 } |
| 879 | 871 |
| 880 scoped_refptr<PrintSystem> PrintSystem::CreateInstance( | 872 scoped_refptr<PrintSystem> PrintSystem::CreateInstance( |
| 881 const base::DictionaryValue* print_system_settings) { | 873 const base::DictionaryValue* print_system_settings) { |
| 882 return new PrintSystemWin; | 874 return new PrintSystemWin; |
| 883 } | 875 } |
| 884 | 876 |
| 885 } // namespace cloud_print | 877 } // namespace cloud_print |
| OLD | NEW |