Index: components/gcm_driver/gcm_driver.cc |
diff --git a/components/gcm_driver/gcm_driver.cc b/components/gcm_driver/gcm_driver.cc |
index 4e17801f33539a8a781a0a444656b10e2f3dd7f6..5aa25c8f146f56bede043320b7bfa11e46b3bdbf 100644 |
--- a/components/gcm_driver/gcm_driver.cc |
+++ b/components/gcm_driver/gcm_driver.cc |
@@ -252,6 +252,30 @@ bool GCMDriver::HasRegisterCallback(const std::string& app_id) { |
return register_callbacks_.find(app_id) != register_callbacks_.end(); |
} |
+void GCMDriver::DispatchMessage(const std::string& app_id, |
+ const IncomingMessage& message) { |
+ if (!encryption_provider_.IsEncryptedMessage(message)) { |
+ GetAppHandler(app_id)->OnMessage(app_id, message); |
+ return; |
+ } |
+ |
+ encryption_provider_.DecryptMessage( |
+ app_id, message, base::Bind(&GCMDriver::DispatchDecryptedMessage, |
+ weak_ptr_factory_.GetWeakPtr(), app_id)); |
+} |
+ |
+void GCMDriver::DispatchDecryptedMessage(const std::string& app_id, |
+ const IncomingMessage& message, |
+ bool decryption_successful) { |
+ if (!decryption_successful) { |
+ // TODO(peter): Introduce a new event on app handlers for this scenario. |
+ LOG(ERROR) << "Unable to decrypt message for " << app_id; |
+ return; |
+ } |
+ |
+ GetAppHandler(app_id)->OnMessage(app_id, message); |
+} |
+ |
void GCMDriver::ClearCallbacks() { |
register_callbacks_.clear(); |
unregister_callbacks_.clear(); |