Index: chrome/browser/sync/notifier/chrome_invalidation_client.cc |
diff --git a/chrome/browser/sync/notifier/chrome_invalidation_client.cc b/chrome/browser/sync/notifier/chrome_invalidation_client.cc |
index 0b848991c608d5bd59001f38a9c88ff04d5b7a46..f183e618059ec90c5441015e186926f3ddb873cb 100644 |
--- a/chrome/browser/sync/notifier/chrome_invalidation_client.cc |
+++ b/chrome/browser/sync/notifier/chrome_invalidation_client.cc |
@@ -10,6 +10,7 @@ |
#include "base/logging.h" |
#include "chrome/browser/sync/notifier/cache_invalidation_packet_handler.h" |
#include "chrome/browser/sync/notifier/invalidation_util.h" |
+#include "chrome/browser/sync/notifier/registration_manager.h" |
#include "chrome/browser/sync/syncable/model_type.h" |
namespace sync_notifier { |
@@ -46,6 +47,8 @@ void ChromeInvalidationClient::Start( |
cache_invalidation_packet_handler_.reset( |
new CacheInvalidationPacketHandler(xmpp_client, |
invalidation_client_.get())); |
+ registration_manager_.reset( |
+ new RegistrationManager(invalidation_client_.get())); |
RegisterTypes(); |
} |
@@ -58,6 +61,7 @@ void ChromeInvalidationClient::Stop() { |
chrome_system_resources_.StopScheduler(); |
+ registration_manager_.reset(); |
cache_invalidation_packet_handler_.reset(); |
invalidation_client_.reset(); |
listener_ = NULL; |
@@ -70,35 +74,10 @@ void ChromeInvalidationClient::RegisterTypes() { |
// notifications for all possible types. |
for (int i = syncable::FIRST_REAL_MODEL_TYPE; |
i < syncable::MODEL_TYPE_COUNT; ++i) { |
- syncable::ModelType model_type = syncable::ModelTypeFromInt(i); |
- std::string notification_type; |
- if (!syncable::RealModelTypeToNotificationType( |
- model_type, ¬ification_type)) { |
- LOG(ERROR) << "Could not get notification type for model type " |
- << syncable::ModelTypeToString(model_type); |
- continue; |
- } |
- invalidation::ObjectId object_id; |
- object_id.mutable_name()->set_string_value(notification_type); |
- object_id.set_source(invalidation::ObjectId::CHROME_SYNC); |
- invalidation_client_->Register( |
- object_id, |
- invalidation::NewPermanentCallback( |
- this, &ChromeInvalidationClient::OnRegister)); |
+ registration_manager_->RegisterType(syncable::ModelTypeFromInt(i)); |
} |
} |
-namespace { |
- |
-bool GetInvalidationModelType(const invalidation::Invalidation& invalidation, |
- syncable::ModelType* model_type) { |
- return |
- syncable::NotificationTypeToRealModelType( |
- invalidation.object_id().name().string_value(), model_type); |
-} |
- |
-} // namespace |
- |
void ChromeInvalidationClient::Invalidate( |
const invalidation::Invalidation& invalidation, |
invalidation::Closure* callback) { |
@@ -106,7 +85,7 @@ void ChromeInvalidationClient::Invalidate( |
DCHECK(invalidation::IsCallbackRepeatable(callback)); |
LOG(INFO) << "Invalidate: " << InvalidationToString(invalidation); |
syncable::ModelType model_type; |
- if (GetInvalidationModelType(invalidation, &model_type)) { |
+ if (ObjectIdToRealModelType(invalidation.object_id(), &model_type)) { |
listener_->OnInvalidate(model_type); |
} else { |
LOG(WARNING) << "Could not get invalidation model type; " |
@@ -129,8 +108,8 @@ void ChromeInvalidationClient::AllRegistrationsLost( |
invalidation::Closure* callback) { |
DCHECK(non_thread_safe_.CalledOnValidThread()); |
DCHECK(invalidation::IsCallbackRepeatable(callback)); |
- LOG(INFO) << "AllRegistrationsLost; reregistering"; |
- RegisterTypes(); |
+ LOG(INFO) << "AllRegistrationsLost"; |
+ registration_manager_->MarkAllRegistrationsLost(); |
RunAndDeleteClosure(callback); |
} |
@@ -139,17 +118,14 @@ void ChromeInvalidationClient::RegistrationLost( |
invalidation::Closure* callback) { |
DCHECK(non_thread_safe_.CalledOnValidThread()); |
DCHECK(invalidation::IsCallbackRepeatable(callback)); |
- LOG(INFO) << "RegistrationLost; reregistering: " |
- << ObjectIdToString(object_id); |
- RegisterTypes(); |
+ LOG(INFO) << "RegistrationLost: " << ObjectIdToString(object_id); |
+ syncable::ModelType model_type; |
+ if (ObjectIdToRealModelType(object_id, &model_type)) { |
+ registration_manager_->MarkRegistrationLost(model_type); |
+ } else { |
+ LOG(WARNING) << "Could not get object id model type; ignoring"; |
+ } |
RunAndDeleteClosure(callback); |
} |
-void ChromeInvalidationClient::OnRegister( |
- const invalidation::RegistrationUpdateResult& result) { |
- DCHECK(non_thread_safe_.CalledOnValidThread()); |
- // TODO(akalin): Do something meaningful here. |
- LOG(INFO) << "Registered: " << RegistrationUpdateResultToString(result); |
-} |
- |
} // namespace sync_notifier |