diff options
author | gene@chromium.org <gene@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-13 21:29:53 +0000 |
---|---|---|
committer | gene@chromium.org <gene@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-13 21:29:53 +0000 |
commit | c611e5e6c1cdc270981f6e96f7f5ccf052032440 (patch) | |
tree | 38ac4cb63a90ee3a5c15ca5adf44e363cf318026 | |
parent | a5c5ec8aa66189023162dabc7bd183aebb3ac977 (diff) | |
download | chromium_src-c611e5e6c1cdc270981f6e96f7f5ccf052032440.zip chromium_src-c611e5e6c1cdc270981f6e96f7f5ccf052032440.tar.gz chromium_src-c611e5e6c1cdc270981f6e96f7f5ccf052032440.tar.bz2 |
Fixed issues with Cloud Print proxy.
Currently, we are clearing waiting_for_reply_ ONLY on handled messages.
Previously, we cleared waiting_for_reply_ on ANY message.
Because message was forwarded to a different thread, and flag was cleared irrespective of message handling.
BUG=none
TEST=Verify CloudPrint proxy works.
Review URL: http://codereview.chromium.org/8252002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105375 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/service/service_utility_process_host.cc | 65 | ||||
-rw-r--r-- | chrome/service/service_utility_process_host.h | 13 |
2 files changed, 49 insertions, 29 deletions
diff --git a/chrome/service/service_utility_process_host.cc b/chrome/service/service_utility_process_host.cc index cbdac15..387356c 100644 --- a/chrome/service/service_utility_process_host.cc +++ b/chrome/service/service_utility_process_host.cc @@ -151,21 +151,18 @@ bool ServiceUtilityProcessHost::OnMessageReceived(const IPC::Message& message) { IPC_MESSAGE_HANDLER( ChromeUtilityHostMsg_RenderPDFPagesToMetafile_Succeeded, OnRenderPDFPagesToMetafileSucceeded) - IPC_MESSAGE_UNHANDLED(msg_is_ok__ = MessageForClient(message)) + IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_RenderPDFPagesToMetafile_Failed, + OnRenderPDFPagesToMetafileFailed) + IPC_MESSAGE_HANDLER( + ChromeUtilityHostMsg_GetPrinterCapsAndDefaults_Succeeded, + OnGetPrinterCapsAndDefaultsSucceeded) + IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_GetPrinterCapsAndDefaults_Failed, + OnGetPrinterCapsAndDefaultsFailed) + IPC_MESSAGE_UNHANDLED(msg_is_ok__ = false) IPC_END_MESSAGE_MAP_EX() return true; } -bool ServiceUtilityProcessHost::MessageForClient(const IPC::Message& message) { - DCHECK(waiting_for_reply_); - bool ret = client_message_loop_proxy_->PostTask( - FROM_HERE, - NewRunnableMethod(client_.get(), &Client::OnMessageReceived, - message)); - waiting_for_reply_ = false; - return ret; -} - #if defined(OS_WIN) // This hack is Windows-specific. void ServiceUtilityProcessHost::OnPreCacheFont(const LOGFONT& font) { PreCacheFont(font, process_id_); @@ -179,6 +176,7 @@ void ServiceUtilityProcessHost::OnReleaseCachedFonts() { void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafileSucceeded( int highest_rendered_page_number) { DCHECK(waiting_for_reply_); + waiting_for_reply_ = false; // If the metafile was successfully created, we need to take our hands off the // scratch metafile directory. The client will delete it when it is done with // metafile. @@ -189,24 +187,39 @@ void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafileSucceeded( &Client::MetafileAvailable, metafile_path_, highest_rendered_page_number)); +} + +void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafileFailed() { + DCHECK(waiting_for_reply_); waiting_for_reply_ = false; + client_message_loop_proxy_->PostTask( + FROM_HERE, + NewRunnableMethod(client_.get(), + &Client::OnRenderPDFPagesToMetafileFailed)); } -bool ServiceUtilityProcessHost::Client::OnMessageReceived( - const IPC::Message& message) { - bool msg_is_ok = true; - bool handled = true; - IPC_BEGIN_MESSAGE_MAP_EX(ServiceUtilityProcessHost, message, msg_is_ok) - IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_RenderPDFPagesToMetafile_Failed, - Client::OnRenderPDFPagesToMetafileFailed) - IPC_MESSAGE_HANDLER( - ChromeUtilityHostMsg_GetPrinterCapsAndDefaults_Succeeded, - Client::OnGetPrinterCapsAndDefaultsSucceeded) - IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_GetPrinterCapsAndDefaults_Failed, - Client::OnGetPrinterCapsAndDefaultsFailed) - IPC_MESSAGE_UNHANDLED(handled = false) - IPC_END_MESSAGE_MAP_EX() - return handled; +void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsSucceeded( + const std::string& printer_name, + const printing::PrinterCapsAndDefaults& caps_and_defaults) { + DCHECK(waiting_for_reply_); + waiting_for_reply_ = false; + client_message_loop_proxy_->PostTask( + FROM_HERE, + NewRunnableMethod(client_.get(), + &Client::OnGetPrinterCapsAndDefaultsSucceeded, + printer_name, + caps_and_defaults)); +} + +void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsFailed( + const std::string& printer_name) { + DCHECK(waiting_for_reply_); + waiting_for_reply_ = false; + client_message_loop_proxy_->PostTask( + FROM_HERE, + NewRunnableMethod(client_.get(), + &Client::OnGetPrinterCapsAndDefaultsFailed, + printer_name)); } void ServiceUtilityProcessHost::Client::MetafileAvailable( diff --git a/chrome/service/service_utility_process_host.h b/chrome/service/service_utility_process_host.h index df9fc42..59f13d7 100644 --- a/chrome/service/service_utility_process_host.h +++ b/chrome/service/service_utility_process_host.h @@ -81,7 +81,6 @@ class ServiceUtilityProcessHost : public ServiceChildProcessHost { friend class base::RefCountedThreadSafe<Client>; friend class ServiceUtilityProcessHost; - bool OnMessageReceived(const IPC::Message& message); // Invoked when a metafile file is ready. void MetafileAvailable(const FilePath& metafile_path, int highest_rendered_page_number); @@ -126,8 +125,16 @@ class ServiceUtilityProcessHost : public ServiceChildProcessHost { // Called when at least one page in the specified PDF has been rendered // successfully into metafile_path_; void OnRenderPDFPagesToMetafileSucceeded(int highest_rendered_page_number); - // Any other messages to be handled by the client. - bool MessageForClient(const IPC::Message& message); + // Called when PDF rendering failed. + void OnRenderPDFPagesToMetafileFailed(); + // Called when the printer capabilities and defaults have been + // retrieved successfully. + void OnGetPrinterCapsAndDefaultsSucceeded( + const std::string& printer_name, + const printing::PrinterCapsAndDefaults& caps_and_defaults); + // Called when the printer capabilities and defaults could not be + // retrieved successfully. + void OnGetPrinterCapsAndDefaultsFailed(const std::string& printer_name); #if defined(OS_WIN) // This hack is Windows-specific. void OnPreCacheFont(const LOGFONT& font); |