| 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/service_utility_process_host.h" | 5 #include "chrome/service/service_utility_process_host.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <queue> | 9 #include <queue> |
| 10 #include <utility> |
| 10 | 11 |
| 11 #include "base/bind.h" | 12 #include "base/bind.h" |
| 12 #include "base/command_line.h" | 13 #include "base/command_line.h" |
| 13 #include "base/files/file.h" | 14 #include "base/files/file.h" |
| 14 #include "base/files/file_path.h" | 15 #include "base/files/file_path.h" |
| 15 #include "base/files/file_util.h" | 16 #include "base/files/file_util.h" |
| 16 #include "base/files/scoped_temp_dir.h" | 17 #include "base/files/scoped_temp_dir.h" |
| 17 #include "base/logging.h" | 18 #include "base/logging.h" |
| 18 #include "base/macros.h" | 19 #include "base/macros.h" |
| 19 #include "base/metrics/histogram.h" | 20 #include "base/metrics/histogram.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 public: | 88 public: |
| 88 explicit PdfToEmfState(ServiceUtilityProcessHost* host) | 89 explicit PdfToEmfState(ServiceUtilityProcessHost* host) |
| 89 : host_(host), page_count_(0), current_page_(0), pages_in_progress_(0) {} | 90 : host_(host), page_count_(0), current_page_(0), pages_in_progress_(0) {} |
| 90 ~PdfToEmfState() { Stop(); } | 91 ~PdfToEmfState() { Stop(); } |
| 91 | 92 |
| 92 bool Start(base::File pdf_file, | 93 bool Start(base::File pdf_file, |
| 93 const printing::PdfRenderSettings& conversion_settings) { | 94 const printing::PdfRenderSettings& conversion_settings) { |
| 94 if (!temp_dir_.CreateUniqueTempDir()) | 95 if (!temp_dir_.CreateUniqueTempDir()) |
| 95 return false; | 96 return false; |
| 96 return host_->Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles( | 97 return host_->Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles( |
| 97 IPC::TakeFileHandleForProcess(pdf_file.Pass(), host_->handle()), | 98 IPC::TakeFileHandleForProcess(std::move(pdf_file), host_->handle()), |
| 98 conversion_settings)); | 99 conversion_settings)); |
| 99 } | 100 } |
| 100 | 101 |
| 101 void GetMorePages() { | 102 void GetMorePages() { |
| 102 const int kMaxNumberOfTempFilesPerDocument = 3; | 103 const int kMaxNumberOfTempFilesPerDocument = 3; |
| 103 while (pages_in_progress_ < kMaxNumberOfTempFilesPerDocument && | 104 while (pages_in_progress_ < kMaxNumberOfTempFilesPerDocument && |
| 104 current_page_ < page_count_) { | 105 current_page_ < page_count_) { |
| 105 ++pages_in_progress_; | 106 ++pages_in_progress_; |
| 106 emf_files_.push(CreateTempFile()); | 107 emf_files_.push(CreateTempFile()); |
| 107 host_->Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles_GetPage( | 108 host_->Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles_GetPage( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 119 if (pages_in_progress_ || current_page_ < page_count_) | 120 if (pages_in_progress_ || current_page_ < page_count_) |
| 120 return false; | 121 return false; |
| 121 Stop(); | 122 Stop(); |
| 122 return true; | 123 return true; |
| 123 } | 124 } |
| 124 | 125 |
| 125 base::File TakeNextFile() { | 126 base::File TakeNextFile() { |
| 126 DCHECK(!emf_files_.empty()); | 127 DCHECK(!emf_files_.empty()); |
| 127 base::File file; | 128 base::File file; |
| 128 if (!emf_files_.empty()) | 129 if (!emf_files_.empty()) |
| 129 file = emf_files_.front().Pass(); | 130 file = std::move(emf_files_.front()); |
| 130 emf_files_.pop(); | 131 emf_files_.pop(); |
| 131 return file.Pass(); | 132 return file; |
| 132 } | 133 } |
| 133 | 134 |
| 134 void set_page_count(int page_count) { page_count_ = page_count; } | 135 void set_page_count(int page_count) { page_count_ = page_count; } |
| 135 bool has_page_count() { return page_count_ > 0; } | 136 bool has_page_count() { return page_count_ > 0; } |
| 136 | 137 |
| 137 private: | 138 private: |
| 138 void Stop() { | 139 void Stop() { |
| 139 host_->Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles_Stop()); | 140 host_->Send(new ChromeUtilityMsg_RenderPDFPagesToMetafiles_Stop()); |
| 140 } | 141 } |
| 141 | 142 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 ReportUmaEvent(SERVICE_UTILITY_METAFILE_REQUEST); | 181 ReportUmaEvent(SERVICE_UTILITY_METAFILE_REQUEST); |
| 181 start_time_ = base::Time::Now(); | 182 start_time_ = base::Time::Now(); |
| 182 base::File pdf_file(pdf_path, base::File::FLAG_OPEN | base::File::FLAG_READ); | 183 base::File pdf_file(pdf_path, base::File::FLAG_OPEN | base::File::FLAG_READ); |
| 183 if (!pdf_file.IsValid() || !StartProcess(false)) | 184 if (!pdf_file.IsValid() || !StartProcess(false)) |
| 184 return false; | 185 return false; |
| 185 | 186 |
| 186 DCHECK(!waiting_for_reply_); | 187 DCHECK(!waiting_for_reply_); |
| 187 waiting_for_reply_ = true; | 188 waiting_for_reply_ = true; |
| 188 | 189 |
| 189 pdf_to_emf_state_.reset(new PdfToEmfState(this)); | 190 pdf_to_emf_state_.reset(new PdfToEmfState(this)); |
| 190 return pdf_to_emf_state_->Start(pdf_file.Pass(), render_settings); | 191 return pdf_to_emf_state_->Start(std::move(pdf_file), render_settings); |
| 191 } | 192 } |
| 192 | 193 |
| 193 bool ServiceUtilityProcessHost::StartGetPrinterCapsAndDefaults( | 194 bool ServiceUtilityProcessHost::StartGetPrinterCapsAndDefaults( |
| 194 const std::string& printer_name) { | 195 const std::string& printer_name) { |
| 195 ReportUmaEvent(SERVICE_UTILITY_CAPS_REQUEST); | 196 ReportUmaEvent(SERVICE_UTILITY_CAPS_REQUEST); |
| 196 start_time_ = base::Time::Now(); | 197 start_time_ = base::Time::Now(); |
| 197 if (!StartProcess(true)) | 198 if (!StartProcess(true)) |
| 198 return false; | 199 return false; |
| 199 DCHECK(!waiting_for_reply_); | 200 DCHECK(!waiting_for_reply_); |
| 200 waiting_for_reply_ = true; | 201 waiting_for_reply_ = true; |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 return false; | 430 return false; |
| 430 } | 431 } |
| 431 printing::Emf emf; | 432 printing::Emf emf; |
| 432 if (!emf.InitFromData(data.data(), data.size())) { | 433 if (!emf.InitFromData(data.data(), data.size())) { |
| 433 OnRenderPDFPagesToMetafileDone(false); | 434 OnRenderPDFPagesToMetafileDone(false); |
| 434 return false; | 435 return false; |
| 435 } | 436 } |
| 436 OnRenderPDFPagesToMetafilePageDone(scale_factor, emf); | 437 OnRenderPDFPagesToMetafilePageDone(scale_factor, emf); |
| 437 return true; | 438 return true; |
| 438 } | 439 } |
| OLD | NEW |