| 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
|
|
|