Index: components/gcm_driver/gcm_driver_desktop.cc |
diff --git a/components/gcm_driver/gcm_driver_desktop.cc b/components/gcm_driver/gcm_driver_desktop.cc |
index 599957d2a5979fced996c2440031f4cee4344b7c..6408981e2b7d179d1df6d263fd5a0a03fff330a8 100644 |
--- a/components/gcm_driver/gcm_driver_desktop.cc |
+++ b/components/gcm_driver/gcm_driver_desktop.cc |
@@ -55,6 +55,9 @@ class GCMDriverDesktop::IOWorker : public GCMClient::Delegate { |
GCMClient::Result result) override; |
void OnMessageReceived(const std::string& app_id, |
const IncomingMessage& message) override; |
+ void OnMessageReceivedError(const std::string& app_id, |
+ const std::string& message_id, |
+ int status) override; |
void OnMessagesDeleted(const std::string& app_id) override; |
void OnMessageSendError( |
const std::string& app_id, |
@@ -244,6 +247,17 @@ void GCMDriverDesktop::IOWorker::OnMessageReceived( |
message)); |
} |
+void GCMDriverDesktop::IOWorker::OnMessageReceivedError( |
+ const std::string& app_id, |
+ const std::string& message_id, |
+ int status) { |
+ DCHECK(io_thread_->RunsTasksOnCurrentThread()); |
+ |
+ ui_thread_->PostTask( |
+ FROM_HERE, base::Bind(&GCMDriverDesktop::MessageReceivedError, service_, |
+ app_id, message_id, status)); |
+} |
+ |
void GCMDriverDesktop::IOWorker::OnMessagesDeleted(const std::string& app_id) { |
DCHECK(io_thread_->RunsTasksOnCurrentThread()); |
@@ -1226,6 +1240,18 @@ void GCMDriverDesktop::MessageReceived(const std::string& app_id, |
DispatchMessage(app_id, message); |
} |
+void GCMDriverDesktop::MessageReceivedError(const std::string& app_id, |
+ const std::string& message_id, |
+ int status) { |
+ DCHECK(ui_thread_->RunsTasksOnCurrentThread()); |
+ |
+ // Drop the event if the service has been stopped. |
+ if (!gcm_started_) |
+ return; |
+ |
+ SendMessageReceipt(app_id, message_id, status); |
+} |
+ |
void GCMDriverDesktop::MessagesDeleted(const std::string& app_id) { |
DCHECK(ui_thread_->RunsTasksOnCurrentThread()); |