summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgene@chromium.org <gene@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-13 21:29:53 +0000
committergene@chromium.org <gene@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-13 21:29:53 +0000
commitc611e5e6c1cdc270981f6e96f7f5ccf052032440 (patch)
tree38ac4cb63a90ee3a5c15ca5adf44e363cf318026
parenta5c5ec8aa66189023162dabc7bd183aebb3ac977 (diff)
downloadchromium_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.cc65
-rw-r--r--chrome/service/service_utility_process_host.h13
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);