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..eed7244e730b400fac06691adc1d0fb2c9865442 100644 |
--- a/components/gcm_driver/gcm_driver.cc |
+++ b/components/gcm_driver/gcm_driver.cc |
@@ -13,8 +13,17 @@ |
namespace gcm { |
+namespace { |
+ |
const size_t kMaxSenders = 100; |
+// TODO(peter): Implement an event for GCMAppHandlers that should be called |
+// when decryption of an incoming message has failed. |
+void DecryptionFailedCallback( |
+ GCMEncryptionProvider::DecryptionFailure reason) {} |
+ |
+} // namespace |
+ |
InstanceIDHandler::InstanceIDHandler() { |
} |
@@ -258,6 +267,20 @@ void GCMDriver::ClearCallbacks() { |
send_callbacks_.clear(); |
} |
+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::DispatchMessage, |
+ weak_ptr_factory_.GetWeakPtr(), app_id), |
+ base::Bind(&DecryptionFailedCallback)); |
+} |
+ |
void GCMDriver::RegisterAfterUnregister( |
const std::string& app_id, |
const std::vector<std::string>& normalized_sender_ids, |