Index: components/gcm_driver/gcm_driver.cc |
diff --git a/components/gcm_driver/gcm_driver.cc b/components/gcm_driver/gcm_driver.cc |
index 345fa97dce156622f51083e91f9a98277c68cf9d..d768206bdfd1e923205d2627cce62e4a390132d3 100644 |
--- a/components/gcm_driver/gcm_driver.cc |
+++ b/components/gcm_driver/gcm_driver.cc |
@@ -17,6 +17,11 @@ GCMDriver::GCMDriver() { |
GCMDriver::~GCMDriver() { |
} |
+void GCMDriver::SetLazyLoadAppHandlersClosure( |
+ const base::Closure& lazy_load_app_handlers) { |
+ lazy_load_app_handlers_ = lazy_load_app_handlers; |
+} |
+ |
void GCMDriver::Register(const std::string& app_id, |
const std::vector<std::string>& sender_ids, |
const RegisterCallback& callback) { |
@@ -148,7 +153,8 @@ void GCMDriver::AddAppHandler(const std::string& app_id, |
GCMAppHandler* handler) { |
DCHECK(!app_id.empty()); |
DCHECK(handler); |
- DCHECK(app_handlers_.find(app_id) == app_handlers_.end()); |
+ DCHECK(app_handlers_.find(app_id) == app_handlers_.end() || |
+ app_handlers_[app_id] == handler); |
app_handlers_[app_id] = handler; |
} |
@@ -158,6 +164,10 @@ void GCMDriver::RemoveAppHandler(const std::string& app_id) { |
} |
GCMAppHandler* GCMDriver::GetAppHandler(const std::string& app_id) { |
+ if (!lazy_load_app_handlers_.is_null()) { |
+ lazy_load_app_handlers_.Run(); |
+ lazy_load_app_handlers_.Reset(); |
+ } |
GCMAppHandlerMap::const_iterator iter = app_handlers_.find(app_id); |
return iter == app_handlers_.end() ? &default_app_handler_ : iter->second; |
} |