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

Side by Side Diff: chrome/service/service_utility_process_host.cc

Issue 1167163002: chrome: Remove use of MessageLoopProxy and deprecated MessageLoop APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added some missing message_loop.h includes. Created 5 years, 6 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
OLDNEW
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 <queue> 7 #include <queue>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/files/file.h" 11 #include "base/files/file.h"
12 #include "base/files/file_path.h" 12 #include "base/files/file_path.h"
13 #include "base/files/file_util.h" 13 #include "base/files/file_util.h"
14 #include "base/files/scoped_temp_dir.h" 14 #include "base/files/scoped_temp_dir.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/message_loop/message_loop_proxy.h"
17 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
18 #include "base/process/launch.h" 17 #include "base/process/launch.h"
19 #include "base/task_runner_util.h" 18 #include "base/task_runner_util.h"
19 #include "base/thread_task_runner_handle.h"
20 #include "chrome/common/chrome_switches.h" 20 #include "chrome/common/chrome_switches.h"
21 #include "chrome/common/chrome_utility_printing_messages.h" 21 #include "chrome/common/chrome_utility_printing_messages.h"
22 #include "content/public/common/child_process_host.h" 22 #include "content/public/common/child_process_host.h"
23 #include "content/public/common/result_codes.h" 23 #include "content/public/common/result_codes.h"
24 #include "content/public/common/sandbox_init.h" 24 #include "content/public/common/sandbox_init.h"
25 #include "content/public/common/sandboxed_process_launcher_delegate.h" 25 #include "content/public/common/sandboxed_process_launcher_delegate.h"
26 #include "ipc/ipc_switches.h" 26 #include "ipc/ipc_switches.h"
27 #include "printing/emf_win.h" 27 #include "printing/emf_win.h"
28 #include "sandbox/win/src/sandbox_policy_base.h" 28 #include "sandbox/win/src/sandbox_policy_base.h"
29 #include "ui/base/ui_base_switches.h" 29 #include "ui/base/ui_base_switches.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 base::ScopedTempDir temp_dir_; 143 base::ScopedTempDir temp_dir_;
144 ServiceUtilityProcessHost* host_; 144 ServiceUtilityProcessHost* host_;
145 std::queue<base::File> emf_files_; 145 std::queue<base::File> emf_files_;
146 int page_count_; 146 int page_count_;
147 int current_page_; 147 int current_page_;
148 int pages_in_progress_; 148 int pages_in_progress_;
149 }; 149 };
150 150
151 ServiceUtilityProcessHost::ServiceUtilityProcessHost( 151 ServiceUtilityProcessHost::ServiceUtilityProcessHost(
152 Client* client, 152 Client* client,
153 base::MessageLoopProxy* client_message_loop_proxy) 153 base::SingleThreadTaskRunner* client_task_runner)
154 : client_(client), 154 : client_(client),
155 client_message_loop_proxy_(client_message_loop_proxy), 155 client_task_runner_(client_task_runner),
156 waiting_for_reply_(false), 156 waiting_for_reply_(false),
157 weak_ptr_factory_(this) { 157 weak_ptr_factory_(this) {
158 child_process_host_.reset(ChildProcessHost::Create(this)); 158 child_process_host_.reset(ChildProcessHost::Create(this));
159 } 159 }
160 160
161 ServiceUtilityProcessHost::~ServiceUtilityProcessHost() { 161 ServiceUtilityProcessHost::~ServiceUtilityProcessHost() {
162 // We need to kill the child process when the host dies. 162 // We need to kill the child process when the host dies.
163 process_.Terminate(content::RESULT_CODE_NORMAL_EXIT, false); 163 process_.Terminate(content::RESULT_CODE_NORMAL_EXIT, false);
164 } 164 }
165 165
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 #else 251 #else
252 int flags = ChildProcessHost::CHILD_NORMAL; 252 int flags = ChildProcessHost::CHILD_NORMAL;
253 #endif 253 #endif
254 return ChildProcessHost::GetChildPath(flags); 254 return ChildProcessHost::GetChildPath(flags);
255 } 255 }
256 256
257 void ServiceUtilityProcessHost::OnChildDisconnected() { 257 void ServiceUtilityProcessHost::OnChildDisconnected() {
258 if (waiting_for_reply_) { 258 if (waiting_for_reply_) {
259 // If we are yet to receive a reply then notify the client that the 259 // If we are yet to receive a reply then notify the client that the
260 // child died. 260 // child died.
261 client_message_loop_proxy_->PostTask( 261 client_task_runner_->PostTask(
262 FROM_HERE, base::Bind(&Client::OnChildDied, client_.get())); 262 FROM_HERE, base::Bind(&Client::OnChildDied, client_.get()));
263 ReportUmaEvent(SERVICE_UTILITY_DISCONNECTED); 263 ReportUmaEvent(SERVICE_UTILITY_DISCONNECTED);
264 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityDisconnectTime", 264 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityDisconnectTime",
265 base::Time::Now() - start_time_); 265 base::Time::Now() - start_time_);
266 } 266 }
267 delete this; 267 delete this;
268 } 268 }
269 269
270 bool ServiceUtilityProcessHost::OnMessageReceived(const IPC::Message& message) { 270 bool ServiceUtilityProcessHost::OnMessageReceived(const IPC::Message& message) {
271 bool handled = true; 271 bool handled = true;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 } 312 }
313 313
314 void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafilesPageDone( 314 void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafilesPageDone(
315 bool success, 315 bool success,
316 float scale_factor) { 316 float scale_factor) {
317 DCHECK(waiting_for_reply_); 317 DCHECK(waiting_for_reply_);
318 if (!pdf_to_emf_state_ || !success) 318 if (!pdf_to_emf_state_ || !success)
319 return OnPDFToEmfFinished(false); 319 return OnPDFToEmfFinished(false);
320 base::File emf_file = pdf_to_emf_state_->TakeNextFile(); 320 base::File emf_file = pdf_to_emf_state_->TakeNextFile();
321 base::PostTaskAndReplyWithResult( 321 base::PostTaskAndReplyWithResult(
322 client_message_loop_proxy_.get(), FROM_HERE, 322 client_task_runner_.get(), FROM_HERE,
323 base::Bind(&Client::MetafileAvailable, client_.get(), scale_factor, 323 base::Bind(&Client::MetafileAvailable, client_.get(), scale_factor,
324 base::Passed(&emf_file)), 324 base::Passed(&emf_file)),
325 base::Bind(&ServiceUtilityProcessHost::OnMetafileSpooled, 325 base::Bind(&ServiceUtilityProcessHost::OnMetafileSpooled,
326 weak_ptr_factory_.GetWeakPtr())); 326 weak_ptr_factory_.GetWeakPtr()));
327 } 327 }
328 328
329 void ServiceUtilityProcessHost::OnPDFToEmfFinished(bool success) { 329 void ServiceUtilityProcessHost::OnPDFToEmfFinished(bool success) {
330 if (!waiting_for_reply_) 330 if (!waiting_for_reply_)
331 return; 331 return;
332 waiting_for_reply_ = false; 332 waiting_for_reply_ = false;
333 if (success) { 333 if (success) {
334 ReportUmaEvent(SERVICE_UTILITY_METAFILE_SUCCEEDED); 334 ReportUmaEvent(SERVICE_UTILITY_METAFILE_SUCCEEDED);
335 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityMetafileTime", 335 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityMetafileTime",
336 base::Time::Now() - start_time_); 336 base::Time::Now() - start_time_);
337 } else { 337 } else {
338 ReportUmaEvent(SERVICE_UTILITY_METAFILE_FAILED); 338 ReportUmaEvent(SERVICE_UTILITY_METAFILE_FAILED);
339 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityMetafileFailTime", 339 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityMetafileFailTime",
340 base::Time::Now() - start_time_); 340 base::Time::Now() - start_time_);
341 } 341 }
342 client_message_loop_proxy_->PostTask( 342 client_task_runner_->PostTask(
343 FROM_HERE, 343 FROM_HERE, base::Bind(&Client::OnRenderPDFPagesToMetafileDone,
344 base::Bind( 344 client_.get(), success));
345 &Client::OnRenderPDFPagesToMetafileDone, client_.get(), success));
346 pdf_to_emf_state_.reset(); 345 pdf_to_emf_state_.reset();
347 } 346 }
348 347
349 void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsSucceeded( 348 void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsSucceeded(
350 const std::string& printer_name, 349 const std::string& printer_name,
351 const printing::PrinterCapsAndDefaults& caps_and_defaults) { 350 const printing::PrinterCapsAndDefaults& caps_and_defaults) {
352 DCHECK(waiting_for_reply_); 351 DCHECK(waiting_for_reply_);
353 ReportUmaEvent(SERVICE_UTILITY_CAPS_SUCCEEDED); 352 ReportUmaEvent(SERVICE_UTILITY_CAPS_SUCCEEDED);
354 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityCapsTime", 353 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityCapsTime",
355 base::Time::Now() - start_time_); 354 base::Time::Now() - start_time_);
356 waiting_for_reply_ = false; 355 waiting_for_reply_ = false;
357 client_message_loop_proxy_->PostTask( 356 client_task_runner_->PostTask(
358 FROM_HERE, 357 FROM_HERE, base::Bind(&Client::OnGetPrinterCapsAndDefaults, client_.get(),
359 base::Bind(&Client::OnGetPrinterCapsAndDefaults, client_.get(), true, 358 true, printer_name, caps_and_defaults));
360 printer_name, caps_and_defaults));
361 } 359 }
362 360
363 void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaultsSucceeded( 361 void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaultsSucceeded(
364 const std::string& printer_name, 362 const std::string& printer_name,
365 const printing::PrinterSemanticCapsAndDefaults& caps_and_defaults) { 363 const printing::PrinterSemanticCapsAndDefaults& caps_and_defaults) {
366 DCHECK(waiting_for_reply_); 364 DCHECK(waiting_for_reply_);
367 ReportUmaEvent(SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED); 365 ReportUmaEvent(SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED);
368 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilitySemanticCapsTime", 366 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilitySemanticCapsTime",
369 base::Time::Now() - start_time_); 367 base::Time::Now() - start_time_);
370 waiting_for_reply_ = false; 368 waiting_for_reply_ = false;
371 client_message_loop_proxy_->PostTask( 369 client_task_runner_->PostTask(
372 FROM_HERE, 370 FROM_HERE,
373 base::Bind(&Client::OnGetPrinterSemanticCapsAndDefaults, client_.get(), 371 base::Bind(&Client::OnGetPrinterSemanticCapsAndDefaults, client_.get(),
374 true, printer_name, caps_and_defaults)); 372 true, printer_name, caps_and_defaults));
375 } 373 }
376 374
377 void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsFailed( 375 void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsFailed(
378 const std::string& printer_name) { 376 const std::string& printer_name) {
379 DCHECK(waiting_for_reply_); 377 DCHECK(waiting_for_reply_);
380 ReportUmaEvent(SERVICE_UTILITY_CAPS_FAILED); 378 ReportUmaEvent(SERVICE_UTILITY_CAPS_FAILED);
381 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityCapsFailTime", 379 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityCapsFailTime",
382 base::Time::Now() - start_time_); 380 base::Time::Now() - start_time_);
383 waiting_for_reply_ = false; 381 waiting_for_reply_ = false;
384 client_message_loop_proxy_->PostTask( 382 client_task_runner_->PostTask(
385 FROM_HERE, 383 FROM_HERE,
386 base::Bind(&Client::OnGetPrinterCapsAndDefaults, client_.get(), false, 384 base::Bind(&Client::OnGetPrinterCapsAndDefaults, client_.get(), false,
387 printer_name, printing::PrinterCapsAndDefaults())); 385 printer_name, printing::PrinterCapsAndDefaults()));
388 } 386 }
389 387
390 void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaultsFailed( 388 void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaultsFailed(
391 const std::string& printer_name) { 389 const std::string& printer_name) {
392 DCHECK(waiting_for_reply_); 390 DCHECK(waiting_for_reply_);
393 ReportUmaEvent(SERVICE_UTILITY_SEMANTIC_CAPS_FAILED); 391 ReportUmaEvent(SERVICE_UTILITY_SEMANTIC_CAPS_FAILED);
394 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilitySemanticCapsFailTime", 392 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilitySemanticCapsFailTime",
395 base::Time::Now() - start_time_); 393 base::Time::Now() - start_time_);
396 waiting_for_reply_ = false; 394 waiting_for_reply_ = false;
397 client_message_loop_proxy_->PostTask( 395 client_task_runner_->PostTask(
398 FROM_HERE, 396 FROM_HERE, base::Bind(&Client::OnGetPrinterSemanticCapsAndDefaults,
399 base::Bind(&Client::OnGetPrinterSemanticCapsAndDefaults, 397 client_.get(), false, printer_name,
400 client_.get(), false, printer_name, 398 printing::PrinterSemanticCapsAndDefaults()));
401 printing::PrinterSemanticCapsAndDefaults()));
402 } 399 }
403 400
404 bool ServiceUtilityProcessHost::Client::MetafileAvailable(float scale_factor, 401 bool ServiceUtilityProcessHost::Client::MetafileAvailable(float scale_factor,
405 base::File file) { 402 base::File file) {
406 file.Seek(base::File::FROM_BEGIN, 0); 403 file.Seek(base::File::FROM_BEGIN, 0);
407 int64 size = file.GetLength(); 404 int64 size = file.GetLength();
408 if (size <= 0) { 405 if (size <= 0) {
409 OnRenderPDFPagesToMetafileDone(false); 406 OnRenderPDFPagesToMetafileDone(false);
410 return false; 407 return false;
411 } 408 }
412 std::vector<char> data(size); 409 std::vector<char> data(size);
413 if (file.ReadAtCurrentPos(data.data(), data.size()) != size) { 410 if (file.ReadAtCurrentPos(data.data(), data.size()) != size) {
414 OnRenderPDFPagesToMetafileDone(false); 411 OnRenderPDFPagesToMetafileDone(false);
415 return false; 412 return false;
416 } 413 }
417 printing::Emf emf; 414 printing::Emf emf;
418 if (!emf.InitFromData(data.data(), data.size())) { 415 if (!emf.InitFromData(data.data(), data.size())) {
419 OnRenderPDFPagesToMetafileDone(false); 416 OnRenderPDFPagesToMetafileDone(false);
420 return false; 417 return false;
421 } 418 }
422 OnRenderPDFPagesToMetafilePageDone(scale_factor, emf); 419 OnRenderPDFPagesToMetafilePageDone(scale_factor, emf);
423 return true; 420 return true;
424 } 421 }
OLDNEW
« no previous file with comments | « chrome/service/service_utility_process_host.h ('k') | chrome/test/base/browser_with_test_window_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698