Commit 366b7a56 authored by Tanja Gornak's avatar Tanja Gornak Committed by Commit Bot

[Tango->FCM] Part 1. Ditch the objectId from the new FCM-based architecture.

ObjectId is the representation of the subscription topic from the
outdated Tango protocol.

It's not relevant to the new architecture, since subscription is represented
by topic name (in case of sync topic name is for example "BOOKMARKS" or
"PASSWORDS").

After this CL all code related to the FCMInvalidationService won't use the
ObjectId. But in some places the term Id still used. This is the subject for
follow up refactoring.


Bug: 878446, 801985
Change-Id: Idcf5bb464fff8976b319bd4721bdca2e3be77751
Reviewed-on: https://chromium-review.googlesource.com/1194032
Commit-Queue: Tatiana Gornak <melandory@chromium.org>
Reviewed-by: default avatarPavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587904}
parent babed2b5
...@@ -212,6 +212,8 @@ static_library("test_support") { ...@@ -212,6 +212,8 @@ static_library("test_support") {
"fake_invalidator.h", "fake_invalidator.h",
"fake_system_resources.cc", "fake_system_resources.cc",
"fake_system_resources.h", "fake_system_resources.h",
"fcm_fake_invalidator.cc",
"fcm_fake_invalidator.h",
"invalidation_service_test_template.cc", "invalidation_service_test_template.cc",
"invalidation_service_test_template.h", "invalidation_service_test_template.h",
"invalidation_test_util.cc", "invalidation_test_util.cc",
......
...@@ -42,6 +42,11 @@ class DeprecatedRegistrarInvalidator : public Invalidator { ...@@ -42,6 +42,11 @@ class DeprecatedRegistrarInvalidator : public Invalidator {
registrar_.UnregisterHandler(handler); registrar_.UnregisterHandler(handler);
} }
bool UpdateRegisteredIds(InvalidationHandler*, const TopicSet&) override {
NOTREACHED();
return false;
}
InvalidatorState GetInvalidatorState() const override { InvalidatorState GetInvalidatorState() const override {
return registrar_.GetInvalidatorState(); return registrar_.GetInvalidatorState();
} }
......
...@@ -47,6 +47,12 @@ bool FakeInvalidator::UpdateRegisteredIds(InvalidationHandler* handler, ...@@ -47,6 +47,12 @@ bool FakeInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
return registrar_.UpdateRegisteredIds(handler, ids); return registrar_.UpdateRegisteredIds(handler, ids);
} }
bool FakeInvalidator::UpdateRegisteredIds(InvalidationHandler*,
const TopicSet&) {
NOTREACHED();
return false;
}
void FakeInvalidator::UnregisterHandler(InvalidationHandler* handler) { void FakeInvalidator::UnregisterHandler(InvalidationHandler* handler) {
registrar_.UnregisterHandler(handler); registrar_.UnregisterHandler(handler);
} }
......
...@@ -33,6 +33,8 @@ class FakeInvalidator : public Invalidator { ...@@ -33,6 +33,8 @@ class FakeInvalidator : public Invalidator {
void RegisterHandler(InvalidationHandler* handler) override; void RegisterHandler(InvalidationHandler* handler) override;
bool UpdateRegisteredIds(InvalidationHandler* handler, bool UpdateRegisteredIds(InvalidationHandler* handler,
const ObjectIdSet& ids) override; const ObjectIdSet& ids) override;
bool UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& topics) override;
void UnregisterHandler(InvalidationHandler* handler) override; void UnregisterHandler(InvalidationHandler* handler) override;
InvalidatorState GetInvalidatorState() const override; InvalidatorState GetInvalidatorState() const override;
void UpdateCredentials(const std::string& email, void UpdateCredentials(const std::string& email,
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/invalidation/impl/fcm_fake_invalidator.h"
#include "components/invalidation/public/invalidation_util.h"
#include "components/invalidation/public/object_id_invalidation_map.h"
#include "components/invalidation/public/topic_invalidation_map.h"
namespace syncer {
FCMFakeInvalidator::FCMFakeInvalidator() {}
FCMFakeInvalidator::~FCMFakeInvalidator() {}
bool FCMFakeInvalidator::IsHandlerRegistered(
InvalidationHandler* handler) const {
return registrar_.IsHandlerRegisteredForTest(handler);
}
ObjectIdSet FCMFakeInvalidator::GetRegisteredIds(
InvalidationHandler* handler) const {
return ConvertTopicsToIds(registrar_.GetRegisteredTopics(handler));
}
const std::string& FCMFakeInvalidator::GetCredentialsEmail() const {
return email_;
}
const std::string& FCMFakeInvalidator::GetCredentialsToken() const {
return token_;
}
void FCMFakeInvalidator::EmitOnInvalidatorStateChange(InvalidatorState state) {
registrar_.UpdateInvalidatorState(state);
}
void FCMFakeInvalidator::EmitOnIncomingInvalidation(
const ObjectIdInvalidationMap& invalidation_map) {
registrar_.DispatchInvalidationsToHandlers(
ConvertObjectIdInvalidationMapToTopicInvalidationMap(invalidation_map));
}
void FCMFakeInvalidator::RegisterHandler(InvalidationHandler* handler) {
registrar_.RegisterHandler(handler);
}
bool FCMFakeInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
const ObjectIdSet& ids) {
return false;
NOTREACHED();
}
bool FCMFakeInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& topics) {
return registrar_.UpdateRegisteredTopics(handler, topics);
}
void FCMFakeInvalidator::UnregisterHandler(InvalidationHandler* handler) {
registrar_.UnregisterHandler(handler);
}
InvalidatorState FCMFakeInvalidator::GetInvalidatorState() const {
return registrar_.GetInvalidatorState();
}
void FCMFakeInvalidator::UpdateCredentials(const std::string& email,
const std::string& token) {
email_ = email;
token_ = token;
}
void FCMFakeInvalidator::RequestDetailedStatus(
base::Callback<void(const base::DictionaryValue&)> callback) const {
base::DictionaryValue value;
callback.Run(value);
}
} // namespace syncer
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_INVALIDATION_IMPL_FCM_FAKE_INVALIDATOR_H_
#define COMPONENTS_INVALIDATION_IMPL_FCM_FAKE_INVALIDATOR_H_
#include <string>
#include "base/callback_forward.h"
#include "base/compiler_specific.h"
#include "components/invalidation/impl/invalidator.h"
#include "components/invalidation/impl/invalidator_registrar.h"
#include "components/invalidation/public/invalidation_util.h"
namespace syncer {
class FCMFakeInvalidator : public Invalidator {
public:
FCMFakeInvalidator();
~FCMFakeInvalidator() override;
bool IsHandlerRegistered(InvalidationHandler* handler) const;
ObjectIdSet GetRegisteredIds(InvalidationHandler* handler) const;
const std::string& GetUniqueId() const;
const std::string& GetCredentialsEmail() const;
const std::string& GetCredentialsToken() const;
void EmitOnInvalidatorStateChange(InvalidatorState state);
void EmitOnIncomingInvalidation(
const ObjectIdInvalidationMap& invalidation_map);
void RegisterHandler(InvalidationHandler* handler) override;
bool UpdateRegisteredIds(InvalidationHandler* handler,
const ObjectIdSet& ids) override;
bool UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& topics) override;
void UnregisterHandler(InvalidationHandler* handler) override;
InvalidatorState GetInvalidatorState() const override;
void UpdateCredentials(const std::string& email,
const std::string& token) override;
void RequestDetailedStatus(base::Callback<void(const base::DictionaryValue&)>
callback) const override;
private:
InvalidatorRegistrar registrar_;
std::string state_;
std::string email_;
std::string token_;
};
} // namespace syncer
#endif // COMPONENTS_INVALIDATION_IMPL_FCM_FAKE_INVALIDATOR_H_
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "components/invalidation/public/invalidation_util.h" #include "components/invalidation/public/invalidation_util.h"
#include "components/invalidation/public/invalidator_state.h" #include "components/invalidation/public/invalidator_state.h"
#include "components/invalidation/public/object_id_invalidation_map.h" #include "components/invalidation/public/object_id_invalidation_map.h"
#include "components/invalidation/public/topic_invalidation_map.h"
#include "google_apis/gaia/gaia_constants.h" #include "google_apis/gaia/gaia_constants.h"
namespace invalidation { namespace invalidation {
...@@ -71,13 +72,14 @@ bool FCMInvalidationService::UpdateRegisteredInvalidationIds( ...@@ -71,13 +72,14 @@ bool FCMInvalidationService::UpdateRegisteredInvalidationIds(
const syncer::ObjectIdSet& ids) { const syncer::ObjectIdSet& ids) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DVLOG(2) << "Registering ids: " << ids.size(); DVLOG(2) << "Registering ids: " << ids.size();
if (!invalidator_registrar_.UpdateRegisteredIds(handler, ids)) syncer::TopicSet topics = ConvertIdsToTopics(ids);
if (!invalidator_registrar_.UpdateRegisteredTopics(handler, topics))
return false; return false;
if (invalidator_) { if (invalidator_) {
CHECK(invalidator_->UpdateRegisteredIds( CHECK(invalidator_->UpdateRegisteredIds(
this, invalidator_registrar_.GetAllRegisteredIds())); this, invalidator_registrar_.GetAllRegisteredIds()));
} }
logger_.OnUpdateIds(invalidator_registrar_.GetSanitizedHandlersIdsMap()); logger_.OnUpdateTopics(invalidator_registrar_.GetSanitizedHandlersIdsMap());
return true; return true;
} }
...@@ -144,7 +146,8 @@ void FCMInvalidationService::OnInvalidatorStateChange( ...@@ -144,7 +146,8 @@ void FCMInvalidationService::OnInvalidatorStateChange(
void FCMInvalidationService::OnIncomingInvalidation( void FCMInvalidationService::OnIncomingInvalidation(
const syncer::ObjectIdInvalidationMap& invalidation_map) { const syncer::ObjectIdInvalidationMap& invalidation_map) {
invalidator_registrar_.DispatchInvalidationsToHandlers(invalidation_map); invalidator_registrar_.DispatchInvalidationsToHandlers(
ConvertObjectIdInvalidationMapToTopicInvalidationMap(invalidation_map));
logger_.OnInvalidation(invalidation_map); logger_.OnInvalidation(invalidation_map);
} }
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "components/invalidation/impl/deprecated_invalidator_registrar.h"
#include "components/invalidation/impl/invalidation_logger.h" #include "components/invalidation/impl/invalidation_logger.h"
#include "components/invalidation/impl/invalidator_registrar.h"
#include "components/invalidation/public/identity_provider.h" #include "components/invalidation/public/identity_provider.h"
#include "components/invalidation/public/invalidation_handler.h" #include "components/invalidation/public/invalidation_handler.h"
#include "components/invalidation/public/invalidation_service.h" #include "components/invalidation/public/invalidation_service.h"
...@@ -87,7 +87,7 @@ class FCMInvalidationService : public InvalidationService, ...@@ -87,7 +87,7 @@ class FCMInvalidationService : public InvalidationService,
void StartInvalidator(); void StartInvalidator();
void StopInvalidator(); void StopInvalidator();
syncer::DeprecatedInvalidatorRegistrar invalidator_registrar_; syncer::InvalidatorRegistrar invalidator_registrar_;
std::unique_ptr<syncer::Invalidator> invalidator_; std::unique_ptr<syncer::Invalidator> invalidator_;
// The invalidation logger object we use to record state changes // The invalidation logger object we use to record state changes
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "components/gcm_driver/fake_gcm_driver.h" #include "components/gcm_driver/fake_gcm_driver.h"
#include "components/gcm_driver/gcm_driver.h" #include "components/gcm_driver/gcm_driver.h"
#include "components/invalidation/impl/fake_invalidator.h" #include "components/invalidation/impl/fcm_fake_invalidator.h"
#include "components/invalidation/impl/gcm_invalidation_bridge.h" #include "components/invalidation/impl/gcm_invalidation_bridge.h"
#include "components/invalidation/impl/invalidation_service_test_template.h" #include "components/invalidation/impl/invalidation_service_test_template.h"
#include "components/invalidation/impl/invalidation_state_tracker.h" #include "components/invalidation/impl/invalidation_state_tracker.h"
...@@ -50,7 +50,7 @@ class FCMInvalidationServiceTestDelegate { ...@@ -50,7 +50,7 @@ class FCMInvalidationServiceTestDelegate {
} }
void InitializeInvalidationService() { void InitializeInvalidationService() {
fake_invalidator_ = new syncer::FakeInvalidator(); fake_invalidator_ = new syncer::FCMFakeInvalidator();
invalidation_service_->InitForTest(fake_invalidator_); invalidation_service_->InitForTest(fake_invalidator_);
} }
...@@ -71,7 +71,7 @@ class FCMInvalidationServiceTestDelegate { ...@@ -71,7 +71,7 @@ class FCMInvalidationServiceTestDelegate {
identity::IdentityTestEnvironment identity_test_env_; identity::IdentityTestEnvironment identity_test_env_;
std::unique_ptr<gcm::GCMDriver> gcm_driver_; std::unique_ptr<gcm::GCMDriver> gcm_driver_;
syncer::FakeInvalidator* fake_invalidator_; // Owned by the service. syncer::FCMFakeInvalidator* fake_invalidator_; // Owned by the service.
network::TestURLLoaderFactory url_loader_factory_; network::TestURLLoaderFactory url_loader_factory_;
std::unique_ptr<FCMInvalidationService> invalidation_service_; std::unique_ptr<FCMInvalidationService> invalidation_service_;
......
...@@ -36,10 +36,16 @@ void FCMInvalidator::RegisterHandler(InvalidationHandler* handler) { ...@@ -36,10 +36,16 @@ void FCMInvalidator::RegisterHandler(InvalidationHandler* handler) {
bool FCMInvalidator::UpdateRegisteredIds(InvalidationHandler* handler, bool FCMInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
const ObjectIdSet& ids) { const ObjectIdSet& ids) {
if (!registrar_.UpdateRegisteredIds(handler, ids)) return UpdateRegisteredIds(handler, ConvertIdsToTopics(ids));
}
bool FCMInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& topics) {
if (!registrar_.UpdateRegisteredTopics(handler, topics))
return false; return false;
invalidation_listener_.UpdateRegisteredIds(registrar_.GetAllRegisteredIds()); invalidation_listener_.UpdateRegisteredTopics(
registrar_.GetAllRegisteredIds());
return true; return true;
} }
...@@ -57,7 +63,7 @@ InvalidatorState FCMInvalidator::GetInvalidatorState() const { ...@@ -57,7 +63,7 @@ InvalidatorState FCMInvalidator::GetInvalidatorState() const {
} }
void FCMInvalidator::OnInvalidate( void FCMInvalidator::OnInvalidate(
const ObjectIdInvalidationMap& invalidation_map) { const TopicInvalidationMap& invalidation_map) {
registrar_.DispatchInvalidationsToHandlers(invalidation_map); registrar_.DispatchInvalidationsToHandlers(invalidation_map);
} }
......
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "components/invalidation/impl/deprecated_invalidator_registrar.h"
#include "components/invalidation/impl/fcm_sync_invalidation_listener.h" #include "components/invalidation/impl/fcm_sync_invalidation_listener.h"
#include "components/invalidation/impl/invalidator.h" #include "components/invalidation/impl/invalidator.h"
#include "components/invalidation/impl/invalidator_registrar.h"
#include "components/invalidation/public/invalidator_state.h" #include "components/invalidation/public/invalidator_state.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h"
...@@ -40,6 +40,9 @@ class FCMInvalidator : public Invalidator, ...@@ -40,6 +40,9 @@ class FCMInvalidator : public Invalidator,
void RegisterHandler(InvalidationHandler* handler) override; void RegisterHandler(InvalidationHandler* handler) override;
bool UpdateRegisteredIds(InvalidationHandler* handler, bool UpdateRegisteredIds(InvalidationHandler* handler,
const ObjectIdSet& ids) override; const ObjectIdSet& ids) override;
bool UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& topics) override;
void UnregisterHandler(InvalidationHandler* handler) override; void UnregisterHandler(InvalidationHandler* handler) override;
InvalidatorState GetInvalidatorState() const override; InvalidatorState GetInvalidatorState() const override;
void UpdateCredentials(const std::string& email, void UpdateCredentials(const std::string& email,
...@@ -49,14 +52,14 @@ class FCMInvalidator : public Invalidator, ...@@ -49,14 +52,14 @@ class FCMInvalidator : public Invalidator,
const override; const override;
// SyncInvalidationListener::Delegate implementation. // SyncInvalidationListener::Delegate implementation.
void OnInvalidate(const ObjectIdInvalidationMap& invalidation_map) override; void OnInvalidate(const TopicInvalidationMap& invalidation_map) override;
void OnInvalidatorStateChange(InvalidatorState state) override; void OnInvalidatorStateChange(InvalidatorState state) override;
private: private:
friend class FCMInvalidatorTestDelegate; friend class FCMInvalidatorTestDelegate;
bool is_started_ = false; bool is_started_ = false;
DeprecatedInvalidatorRegistrar registrar_; InvalidatorRegistrar registrar_;
// The invalidation listener. // The invalidation listener.
FCMSyncInvalidationListener invalidation_listener_; FCMSyncInvalidationListener invalidation_listener_;
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "components/invalidation/impl/per_user_topic_registration_manager.h" #include "components/invalidation/impl/per_user_topic_registration_manager.h"
#include "components/invalidation/impl/profile_identity_provider.h" #include "components/invalidation/impl/profile_identity_provider.h"
#include "components/invalidation/impl/push_client_channel.h" #include "components/invalidation/impl/push_client_channel.h"
#include "components/invalidation/public/topic_invalidation_map.h"
#include "components/prefs/testing_pref_service.h" #include "components/prefs/testing_pref_service.h"
#include "net/url_request/url_request_test_util.h" #include "net/url_request/url_request_test_util.h"
#include "services/identity/public/cpp/identity_test_environment.h" #include "services/identity/public/cpp/identity_test_environment.h"
...@@ -64,7 +65,8 @@ class FCMInvalidatorTestDelegate { ...@@ -64,7 +65,8 @@ class FCMInvalidatorTestDelegate {
void TriggerOnIncomingInvalidation( void TriggerOnIncomingInvalidation(
const ObjectIdInvalidationMap& invalidation_map) { const ObjectIdInvalidationMap& invalidation_map) {
invalidator_->OnInvalidate(invalidation_map); invalidator_->OnInvalidate(
ConvertObjectIdInvalidationMapToTopicInvalidationMap(invalidation_map));
} }
private: private:
......
...@@ -11,42 +11,12 @@ ...@@ -11,42 +11,12 @@
#include "components/invalidation/impl/per_user_topic_invalidation_client.h" #include "components/invalidation/impl/per_user_topic_invalidation_client.h"
#include "components/invalidation/public/invalidation_util.h" #include "components/invalidation/public/invalidation_util.h"
#include "components/invalidation/public/object_id_invalidation_map.h" #include "components/invalidation/public/object_id_invalidation_map.h"
#include "components/invalidation/public/topic_invalidation_map.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "google/cacheinvalidation/include/types.h" #include "google/cacheinvalidation/include/types.h"
namespace syncer { namespace syncer {
namespace {
invalidation::ObjectId ConvertToObjectId(
const invalidation::InvalidationObjectId& invalidation_object_id) {
return invalidation::ObjectId(invalidation_object_id.source(),
invalidation_object_id.name());
}
invalidation::InvalidationObjectId ConvertToInvalidationObjectId(
const invalidation::ObjectId& object_id) {
return invalidation::InvalidationObjectId(object_id.source(),
object_id.name());
}
ObjectIdSet ConvertToObjectIdSet(const InvalidationObjectIdSet& ids) {
ObjectIdSet object_ids;
for (const auto& id : ids)
object_ids.insert(ConvertToObjectId(id));
return object_ids;
}
InvalidationObjectIdSet ConvertToInvalidationObjectIdSet(
const ObjectIdSet& ids) {
InvalidationObjectIdSet invalidation_object_ids;
for (const auto& id : ids)
invalidation_object_ids.insert(ConvertToInvalidationObjectId(id));
return invalidation_object_ids;
}
} // namespace
FCMSyncInvalidationListener::Delegate::~Delegate() {} FCMSyncInvalidationListener::Delegate::~Delegate() {}
FCMSyncInvalidationListener::FCMSyncInvalidationListener( FCMSyncInvalidationListener::FCMSyncInvalidationListener(
...@@ -81,8 +51,9 @@ void FCMSyncInvalidationListener::Start( ...@@ -81,8 +51,9 @@ void FCMSyncInvalidationListener::Start(
invalidation_client_->Start(); invalidation_client_->Start();
} }
void FCMSyncInvalidationListener::UpdateRegisteredIds(const ObjectIdSet& ids) { void FCMSyncInvalidationListener::UpdateRegisteredTopics(
registered_ids_ = ConvertToInvalidationObjectIdSet(ids); const TopicSet& topics) {
registered_topics_ = topics;
if (ticl_state_ == INVALIDATIONS_ENABLED && if (ticl_state_ == INVALIDATIONS_ENABLED &&
per_user_topic_registration_manager_ && !token_.empty()) per_user_topic_registration_manager_ && !token_.empty())
DoRegistrationUpdate(); DoRegistrationUpdate();
...@@ -110,7 +81,7 @@ void FCMSyncInvalidationListener::Invalidate( ...@@ -110,7 +81,7 @@ void FCMSyncInvalidationListener::Invalidate(
DVLOG(2) << "Received invalidation with version " << invalidation.version() DVLOG(2) << "Received invalidation with version " << invalidation.version()
<< " for " << ObjectIdToString(id); << " for " << ObjectIdToString(id);
ObjectIdInvalidationMap invalidations; TopicInvalidationMap invalidations;
Invalidation inv = Invalidation::Init(id, invalidation.version(), payload); Invalidation inv = Invalidation::Init(id, invalidation.version(), payload);
inv.SetAckHandler(AsWeakPtr(), base::ThreadTaskRunnerHandle::Get()); inv.SetAckHandler(AsWeakPtr(), base::ThreadTaskRunnerHandle::Get());
invalidations.Insert(inv); invalidations.Insert(inv);
...@@ -124,7 +95,7 @@ void FCMSyncInvalidationListener::InvalidateUnknownVersion( ...@@ -124,7 +95,7 @@ void FCMSyncInvalidationListener::InvalidateUnknownVersion(
DCHECK_EQ(client, invalidation_client_.get()); DCHECK_EQ(client, invalidation_client_.get());
DVLOG(1) << "InvalidateUnknownVersion"; DVLOG(1) << "InvalidateUnknownVersion";
ObjectIdInvalidationMap invalidations; TopicInvalidationMap invalidations;
Invalidation unknown_version = Invalidation::InitUnknownVersion(object_id); Invalidation unknown_version = Invalidation::InitUnknownVersion(object_id);
unknown_version.SetAckHandler(AsWeakPtr(), unknown_version.SetAckHandler(AsWeakPtr(),
base::ThreadTaskRunnerHandle::Get()); base::ThreadTaskRunnerHandle::Get());
...@@ -139,10 +110,10 @@ void FCMSyncInvalidationListener::InvalidateAll(InvalidationClient* client) { ...@@ -139,10 +110,10 @@ void FCMSyncInvalidationListener::InvalidateAll(InvalidationClient* client) {
DCHECK_EQ(client, invalidation_client_.get()); DCHECK_EQ(client, invalidation_client_.get());
DVLOG(1) << "InvalidateAll"; DVLOG(1) << "InvalidateAll";
ObjectIdInvalidationMap invalidations; TopicInvalidationMap invalidations;
for (const auto& registered_id : registered_ids_) { for (const auto& registered_topic : registered_topics_) {
Invalidation unknown_version = invalidation::ObjectId id(ConvertTopicToId(registered_topic));
Invalidation::InitUnknownVersion(ConvertToObjectId(registered_id)); Invalidation unknown_version = Invalidation::InitUnknownVersion(id);
unknown_version.SetAckHandler(AsWeakPtr(), unknown_version.SetAckHandler(AsWeakPtr(),
base::ThreadTaskRunnerHandle::Get()); base::ThreadTaskRunnerHandle::Get());
invalidations.Insert(unknown_version); invalidations.Insert(unknown_version);
...@@ -151,18 +122,18 @@ void FCMSyncInvalidationListener::InvalidateAll(InvalidationClient* client) { ...@@ -151,18 +122,18 @@ void FCMSyncInvalidationListener::InvalidateAll(InvalidationClient* client) {
} }
void FCMSyncInvalidationListener::DispatchInvalidations( void FCMSyncInvalidationListener::DispatchInvalidations(
const ObjectIdInvalidationMap& invalidations) { const TopicInvalidationMap& invalidations) {
ObjectIdInvalidationMap to_save = invalidations; TopicInvalidationMap to_save = invalidations;
ObjectIdInvalidationMap to_emit = invalidations.GetSubsetWithObjectIds( TopicInvalidationMap to_emit =
ConvertToObjectIdSet(registered_ids_)); invalidations.GetSubsetWithTopics(registered_topics_);
SaveInvalidations(to_save); SaveInvalidations(to_save);
EmitSavedInvalidations(to_emit); EmitSavedInvalidations(to_emit);
} }
void FCMSyncInvalidationListener::SaveInvalidations( void FCMSyncInvalidationListener::SaveInvalidations(
const ObjectIdInvalidationMap& to_save) { const TopicInvalidationMap& to_save) {
ObjectIdSet objects_to_save = to_save.GetObjectIds(); ObjectIdSet objects_to_save = ConvertTopicsToIds(to_save.GetTopics());
for (ObjectIdSet::const_iterator it = objects_to_save.begin(); for (ObjectIdSet::const_iterator it = objects_to_save.begin();
it != objects_to_save.end(); ++it) { it != objects_to_save.end(); ++it) {
UnackedInvalidationsMap::iterator lookup = UnackedInvalidationsMap::iterator lookup =
...@@ -172,12 +143,12 @@ void FCMSyncInvalidationListener::SaveInvalidations( ...@@ -172,12 +143,12 @@ void FCMSyncInvalidationListener::SaveInvalidations(
.insert(std::make_pair(*it, UnackedInvalidationSet(*it))) .insert(std::make_pair(*it, UnackedInvalidationSet(*it)))
.first; .first;
} }
lookup->second.AddSet(to_save.ForObject(*it)); lookup->second.AddSet(to_save.ForTopic((*it).name()));
} }
} }
void FCMSyncInvalidationListener::EmitSavedInvalidations( void FCMSyncInvalidationListener::EmitSavedInvalidations(
const ObjectIdInvalidationMap& to_emit) { const TopicInvalidationMap& to_emit) {
DVLOG(2) << "Emitting invalidations: " << to_emit.ToString(); DVLOG(2) << "Emitting invalidations: " << to_emit.ToString();
delegate_->OnInvalidate(to_emit); delegate_->OnInvalidate(to_emit);
} }
...@@ -217,16 +188,17 @@ void FCMSyncInvalidationListener::Drop(const invalidation::ObjectId& id, ...@@ -217,16 +188,17 @@ void FCMSyncInvalidationListener::Drop(const invalidation::ObjectId& id,
} }
void FCMSyncInvalidationListener::DoRegistrationUpdate() { void FCMSyncInvalidationListener::DoRegistrationUpdate() {
per_user_topic_registration_manager_->UpdateRegisteredIds(registered_ids_, per_user_topic_registration_manager_->UpdateRegisteredTopics(
token_); registered_topics_, token_);
// TODO(melandory): remove unacked invalidations for unregistered objects. // TODO(melandory): remove unacked invalidations for unregistered objects.
ObjectIdInvalidationMap object_id_invalidation_map; ObjectIdInvalidationMap object_id_invalidation_map;
for (auto& unacked : unacked_invalidations_map_) { for (auto& unacked : unacked_invalidations_map_) {
if (registered_ids_.find(ConvertToInvalidationObjectId(unacked.first)) == if (registered_topics_.find(unacked.first.name()) ==
registered_ids_.end()) { registered_topics_.end()) {
continue; continue;
} }
unacked.second.ExportInvalidations(AsWeakPtr(), unacked.second.ExportInvalidations(AsWeakPtr(),
base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
&object_id_invalidation_map); &object_id_invalidation_map);
...@@ -235,15 +207,16 @@ void FCMSyncInvalidationListener::DoRegistrationUpdate() { ...@@ -235,15 +207,16 @@ void FCMSyncInvalidationListener::DoRegistrationUpdate() {
// There's no need to run these through DispatchInvalidations(); they've // There's no need to run these through DispatchInvalidations(); they've
// already been saved to storage (that's where we found them) so all we need // already been saved to storage (that's where we found them) so all we need
// to do now is emit them. // to do now is emit them.
EmitSavedInvalidations(object_id_invalidation_map); EmitSavedInvalidations(ConvertObjectIdInvalidationMapToTopicInvalidationMap(
object_id_invalidation_map));
} }
void FCMSyncInvalidationListener::StopForTest() { void FCMSyncInvalidationListener::StopForTest() {
Stop(); Stop();
} }
ObjectIdSet FCMSyncInvalidationListener::GetRegisteredIdsForTest() const { TopicSet FCMSyncInvalidationListener::GetRegisteredIdsForTest() const {
return ConvertToObjectIdSet(registered_ids_); return registered_topics_;
} }
base::WeakPtr<FCMSyncInvalidationListener> base::WeakPtr<FCMSyncInvalidationListener>
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
namespace syncer { namespace syncer {
class ObjectIdInvalidationMap; class TopicInvalidationMap;
// A simple wrapper around PerUserTopicInvalidationClient that // A simple wrapper around PerUserTopicInvalidationClient that
// handles all the startup/shutdown details and hookups. // handles all the startup/shutdown details and hookups.
...@@ -44,7 +44,7 @@ class FCMSyncInvalidationListener : public InvalidationListener, ...@@ -44,7 +44,7 @@ class FCMSyncInvalidationListener : public InvalidationListener,
public: public:
virtual ~Delegate(); virtual ~Delegate();
virtual void OnInvalidate(const ObjectIdInvalidationMap& invalidations) = 0; virtual void OnInvalidate(const TopicInvalidationMap& invalidations) = 0;
virtual void OnInvalidatorStateChange(InvalidatorState state) = 0; virtual void OnInvalidatorStateChange(InvalidatorState state) = 0;
}; };
...@@ -62,7 +62,7 @@ class FCMSyncInvalidationListener : public InvalidationListener, ...@@ -62,7 +62,7 @@ class FCMSyncInvalidationListener : public InvalidationListener,
// Update the set of object IDs that we're interested in getting // Update the set of object IDs that we're interested in getting
// notifications for. May be called at any time. // notifications for. May be called at any time.
void UpdateRegisteredIds(const ObjectIdSet& ids); void UpdateRegisteredTopics(const TopicSet& topics);
// InvalidationListener implementation. // InvalidationListener implementation.
void Ready(InvalidationClient* client) override; void Ready(InvalidationClient* client) override;
...@@ -91,7 +91,7 @@ class FCMSyncInvalidationListener : public InvalidationListener, ...@@ -91,7 +91,7 @@ class FCMSyncInvalidationListener : public InvalidationListener,
void StopForTest(); void StopForTest();
ObjectIdSet GetRegisteredIdsForTest() const; TopicSet GetRegisteredIdsForTest() const;
base::WeakPtr<FCMSyncInvalidationListener> AsWeakPtr(); base::WeakPtr<FCMSyncInvalidationListener> AsWeakPtr();
...@@ -109,16 +109,16 @@ class FCMSyncInvalidationListener : public InvalidationListener, ...@@ -109,16 +109,16 @@ class FCMSyncInvalidationListener : public InvalidationListener,
// //
// If there are observers registered, they will be saved (to make sure we // If there are observers registered, they will be saved (to make sure we
// don't drop them until they've been acted on) and emitted to the observers. // don't drop them until they've been acted on) and emitted to the observers.
void DispatchInvalidations(const ObjectIdInvalidationMap& invalidations); void DispatchInvalidations(const TopicInvalidationMap& invalidations);
// Saves invalidations. // Saves invalidations.
// //
// This call isn't synchronous so we can't guarantee these invalidations will // This call isn't synchronous so we can't guarantee these invalidations will
// be safely on disk by the end of the call, but it should ensure that the // be safely on disk by the end of the call, but it should ensure that the
// data makes it to disk eventually. // data makes it to disk eventually.
void SaveInvalidations(const ObjectIdInvalidationMap& to_save); void SaveInvalidations(const TopicInvalidationMap& to_save);
// Emits previously saved invalidations to their registered observers. // Emits previously saved invalidations to their registered observers.
void EmitSavedInvalidations(const ObjectIdInvalidationMap& to_emit); void EmitSavedInvalidations(const TopicInvalidationMap& to_emit);
// Generate a Dictionary with all the debugging information. // Generate a Dictionary with all the debugging information.
std::unique_ptr<base::DictionaryValue> CollectDebugData() const; std::unique_ptr<base::DictionaryValue> CollectDebugData() const;
...@@ -130,7 +130,7 @@ class FCMSyncInvalidationListener : public InvalidationListener, ...@@ -130,7 +130,7 @@ class FCMSyncInvalidationListener : public InvalidationListener,
std::unique_ptr<InvalidationClient> invalidation_client_; std::unique_ptr<InvalidationClient> invalidation_client_;
// Stored to pass to |per_user_topic_registration_manager_| on start. // Stored to pass to |per_user_topic_registration_manager_| on start.
InvalidationObjectIdSet registered_ids_; TopicSet registered_topics_;
// The states of the ticl and FCN channel. // The states of the ticl and FCN channel.
InvalidatorState ticl_state_; InvalidatorState ticl_state_;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "base/values.h" #include "base/values.h"
#include "components/invalidation/impl/invalidation_logger_observer.h" #include "components/invalidation/impl/invalidation_logger_observer.h"
#include "components/invalidation/public/invalidation_handler.h" #include "components/invalidation/public/invalidation_handler.h"
#include "components/invalidation/public/invalidation_util.h"
namespace invalidation { namespace invalidation {
class InvalidationLoggerObserver; class InvalidationLoggerObserver;
...@@ -53,6 +54,15 @@ void InvalidationLogger::EmitState() { ...@@ -53,6 +54,15 @@ void InvalidationLogger::EmitState() {
} }
} }
void InvalidationLogger::OnUpdateTopics(
std::map<std::string, syncer::TopicSet> updated_topics) {
for (const auto& updated_topic : updated_topics) {
latest_ids_[updated_topic.first] =
syncer::ConvertTopicsToIds(updated_topic.second);
}
EmitUpdatedIds();
}
void InvalidationLogger::OnUpdateIds( void InvalidationLogger::OnUpdateIds(
std::map<std::string, syncer::ObjectIdSet> updated_ids) { std::map<std::string, syncer::ObjectIdSet> updated_ids) {
for (std::map<std::string, syncer::ObjectIdSet>::const_iterator it = for (std::map<std::string, syncer::ObjectIdSet>::const_iterator it =
......
...@@ -49,6 +49,7 @@ class InvalidationLogger { ...@@ -49,6 +49,7 @@ class InvalidationLogger {
void OnUnregistration(const std::string& details); void OnUnregistration(const std::string& details);
void OnStateChange(const syncer::InvalidatorState& new_state); void OnStateChange(const syncer::InvalidatorState& new_state);
void OnUpdateIds(std::map<std::string, syncer::ObjectIdSet> updated_ids); void OnUpdateIds(std::map<std::string, syncer::ObjectIdSet> updated_ids);
void OnUpdateTopics(std::map<std::string, syncer::TopicSet> updated_topics);
void OnDebugMessage(const base::DictionaryValue& details); void OnDebugMessage(const base::DictionaryValue& details);
void OnInvalidation(const syncer::ObjectIdInvalidationMap& details); void OnInvalidation(const syncer::ObjectIdInvalidationMap& details);
......
...@@ -53,6 +53,12 @@ bool InvalidationNotifier::UpdateRegisteredIds(InvalidationHandler* handler, ...@@ -53,6 +53,12 @@ bool InvalidationNotifier::UpdateRegisteredIds(InvalidationHandler* handler,
return true; return true;
} }
bool InvalidationNotifier::UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& ids) {
NOTREACHED();
return false;
}
void InvalidationNotifier::UnregisterHandler(InvalidationHandler* handler) { void InvalidationNotifier::UnregisterHandler(InvalidationHandler* handler) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
registrar_.UnregisterHandler(handler); registrar_.UnregisterHandler(handler);
......
...@@ -52,6 +52,8 @@ class INVALIDATION_EXPORT InvalidationNotifier ...@@ -52,6 +52,8 @@ class INVALIDATION_EXPORT InvalidationNotifier
void RegisterHandler(InvalidationHandler* handler) override; void RegisterHandler(InvalidationHandler* handler) override;
bool UpdateRegisteredIds(InvalidationHandler* handler, bool UpdateRegisteredIds(InvalidationHandler* handler,
const ObjectIdSet& ids) override; const ObjectIdSet& ids) override;
bool UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& ids) override;
void UnregisterHandler(InvalidationHandler* handler) override; void UnregisterHandler(InvalidationHandler* handler) override;
InvalidatorState GetInvalidatorState() const override; InvalidatorState GetInvalidatorState() const override;
void UpdateCredentials(const std::string& email, void UpdateCredentials(const std::string& email,
......
...@@ -64,6 +64,12 @@ class INVALIDATION_EXPORT Invalidator { ...@@ -64,6 +64,12 @@ class INVALIDATION_EXPORT Invalidator {
const ObjectIdSet& ids) const ObjectIdSet& ids)
WARN_UNUSED_RESULT = 0; WARN_UNUSED_RESULT = 0;
// Updates the set of ObjectIds associated with |handler|. |handler| must
// not be NULL, and must already be registered. An ID must be registered for
// at most one handler. If ID is already registered function returns false.
virtual bool UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& ids) WARN_UNUSED_RESULT = 0;
// Stops sending notifications to |handler|. |handler| must not be NULL, and // Stops sending notifications to |handler|. |handler| must not be NULL, and
// it must already be registered. Note that this doesn't unregister the IDs // it must already be registered. Note that this doesn't unregister the IDs
// associated with |handler|. // associated with |handler|.
......
...@@ -42,6 +42,12 @@ class RegistrarInvalidator : public Invalidator { ...@@ -42,6 +42,12 @@ class RegistrarInvalidator : public Invalidator {
return registrar_.UpdateRegisteredTopics(handler, topics); return registrar_.UpdateRegisteredTopics(handler, topics);
} }
bool UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& ids) override {
NOTREACHED();
return false;
}
void UnregisterHandler(InvalidationHandler* handler) override { void UnregisterHandler(InvalidationHandler* handler) override {
registrar_.UnregisterHandler(handler); registrar_.UnregisterHandler(handler);
} }
......
...@@ -273,6 +273,12 @@ bool NonBlockingInvalidator::UpdateRegisteredIds(InvalidationHandler* handler, ...@@ -273,6 +273,12 @@ bool NonBlockingInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
return true; return true;
} }
bool NonBlockingInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& ids) {
NOTREACHED();
return false;
}
void NonBlockingInvalidator::UnregisterHandler(InvalidationHandler* handler) { void NonBlockingInvalidator::UnregisterHandler(InvalidationHandler* handler) {
DCHECK(parent_task_runner_->BelongsToCurrentThread()); DCHECK(parent_task_runner_->BelongsToCurrentThread());
registrar_.UnregisterHandler(handler); registrar_.UnregisterHandler(handler);
......
...@@ -62,6 +62,8 @@ class INVALIDATION_EXPORT NonBlockingInvalidator ...@@ -62,6 +62,8 @@ class INVALIDATION_EXPORT NonBlockingInvalidator
void RegisterHandler(InvalidationHandler* handler) override; void RegisterHandler(InvalidationHandler* handler) override;
bool UpdateRegisteredIds(InvalidationHandler* handler, bool UpdateRegisteredIds(InvalidationHandler* handler,
const ObjectIdSet& ids) override; const ObjectIdSet& ids) override;
bool UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& ids) override;
void UnregisterHandler(InvalidationHandler* handler) override; void UnregisterHandler(InvalidationHandler* handler) override;
InvalidatorState GetInvalidatorState() const override; InvalidatorState GetInvalidatorState() const override;
void UpdateCredentials(const std::string& email, void UpdateCredentials(const std::string& email,
......
...@@ -180,6 +180,12 @@ bool P2PInvalidator::UpdateRegisteredIds(InvalidationHandler* handler, ...@@ -180,6 +180,12 @@ bool P2PInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
return true; return true;
} }
bool P2PInvalidator::UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& ids) {
NOTREACHED();
return false;
}
void P2PInvalidator::UnregisterHandler(InvalidationHandler* handler) { void P2PInvalidator::UnregisterHandler(InvalidationHandler* handler) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
registrar_.UnregisterHandler(handler); registrar_.UnregisterHandler(handler);
......
...@@ -104,6 +104,8 @@ class INVALIDATION_EXPORT P2PInvalidator : public Invalidator, ...@@ -104,6 +104,8 @@ class INVALIDATION_EXPORT P2PInvalidator : public Invalidator,
void RegisterHandler(InvalidationHandler* handler) override; void RegisterHandler(InvalidationHandler* handler) override;
bool UpdateRegisteredIds(InvalidationHandler* handler, bool UpdateRegisteredIds(InvalidationHandler* handler,
const ObjectIdSet& ids) override; const ObjectIdSet& ids) override;
bool UpdateRegisteredIds(InvalidationHandler* handler,
const TopicSet& ids) override;
void UnregisterHandler(InvalidationHandler* handler) override; void UnregisterHandler(InvalidationHandler* handler) override;
InvalidatorState GetInvalidatorState() const override; InvalidatorState GetInvalidatorState() const override;
void UpdateCredentials(const std::string& email, void UpdateCredentials(const std::string& email,
......
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "components/gcm_driver/instance_id/instance_id_driver.h" #include "components/gcm_driver/instance_id/instance_id_driver.h"
#include "components/invalidation/public/identity_provider.h" #include "components/invalidation/public/identity_provider.h"
#include "components/invalidation/public/invalidation_object_id.h"
#include "components/invalidation/public/invalidation_util.h" #include "components/invalidation/public/invalidation_util.h"
#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
...@@ -40,7 +39,7 @@ const char kFCMOAuthScope[] = ...@@ -40,7 +39,7 @@ const char kFCMOAuthScope[] =
"https://www.googleapis.com/auth/firebase.messaging"; "https://www.googleapis.com/auth/firebase.messaging";
using SubscriptionFinishedCallback = using SubscriptionFinishedCallback =
base::OnceCallback<void(invalidation::InvalidationObjectId id, base::OnceCallback<void(Topic id,
const Status& code, const Status& code,
const std::string& private_topic_name, const std::string& private_topic_name,
PerUserTopicRegistrationRequest::RequestType type)>; PerUserTopicRegistrationRequest::RequestType type)>;
...@@ -80,7 +79,7 @@ void PerUserTopicRegistrationManager::RegisterProfilePrefs( ...@@ -80,7 +79,7 @@ void PerUserTopicRegistrationManager::RegisterProfilePrefs(
} }
struct PerUserTopicRegistrationManager::RegistrationEntry { struct PerUserTopicRegistrationManager::RegistrationEntry {
RegistrationEntry(const invalidation::InvalidationObjectId& id, RegistrationEntry(const Topic& id,
SubscriptionFinishedCallback completion_callback, SubscriptionFinishedCallback completion_callback,
PerUserTopicRegistrationRequest::RequestType type); PerUserTopicRegistrationRequest::RequestType type);
~RegistrationEntry(); ~RegistrationEntry();
...@@ -91,7 +90,7 @@ struct PerUserTopicRegistrationManager::RegistrationEntry { ...@@ -91,7 +90,7 @@ struct PerUserTopicRegistrationManager::RegistrationEntry {
void DoRegister(); void DoRegister();
// The object for which this is the status. // The object for which this is the status.
const invalidation::InvalidationObjectId id; const Topic id;
SubscriptionFinishedCallback completion_callback; SubscriptionFinishedCallback completion_callback;
PerUserTopicRegistrationRequest::RequestType type; PerUserTopicRegistrationRequest::RequestType type;
...@@ -101,7 +100,7 @@ struct PerUserTopicRegistrationManager::RegistrationEntry { ...@@ -101,7 +100,7 @@ struct PerUserTopicRegistrationManager::RegistrationEntry {
}; };
PerUserTopicRegistrationManager::RegistrationEntry::RegistrationEntry( PerUserTopicRegistrationManager::RegistrationEntry::RegistrationEntry(
const invalidation::InvalidationObjectId& id, const Topic& id,
SubscriptionFinishedCallback completion_callback, SubscriptionFinishedCallback completion_callback,
PerUserTopicRegistrationRequest::RequestType type) PerUserTopicRegistrationRequest::RequestType type)
: id(id), completion_callback(std::move(completion_callback)), type(type) {} : id(id), completion_callback(std::move(completion_callback)), type(type) {}
...@@ -134,18 +133,15 @@ void PerUserTopicRegistrationManager::Init() { ...@@ -134,18 +133,15 @@ void PerUserTopicRegistrationManager::Init() {
std::vector<std::string> keys_to_remove; std::vector<std::string> keys_to_remove;
// Load registered ids from prefs. // Load registered ids from prefs.
for (const auto& it : pref_data->DictItems()) { for (const auto& it : pref_data->DictItems()) {
std::string serialized_object_id = it.first; Topic topic = it.first;
invalidation::InvalidationObjectId object_id; std::string private_topic_name;
if (DeserializeInvalidationObjectId(serialized_object_id, &object_id)) { if (it.second.GetAsString(&private_topic_name) &&
std::string private_topic_name; !private_topic_name.empty()) {
if (it.second.GetAsString(&private_topic_name) && topic_to_private_topic_[topic] = private_topic_name;
!private_topic_name.empty()) { continue;
registered_ids_[object_id] = private_topic_name;
continue;
} }
}
// Remove saved pref. // Remove saved pref.
keys_to_remove.push_back(serialized_object_id); keys_to_remove.push_back(topic);
} }
// Delete prefs, which weren't decoded successfully. // Delete prefs, which weren't decoded successfully.
...@@ -156,8 +152,8 @@ void PerUserTopicRegistrationManager::Init() { ...@@ -156,8 +152,8 @@ void PerUserTopicRegistrationManager::Init() {
} }
} }
void PerUserTopicRegistrationManager::UpdateRegisteredIds( void PerUserTopicRegistrationManager::UpdateRegisteredTopics(
const InvalidationObjectIdSet& ids, const TopicSet& ids,
const std::string& instance_id_token) { const std::string& instance_id_token) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
token_ = instance_id_token; token_ = instance_id_token;
...@@ -165,7 +161,7 @@ void PerUserTopicRegistrationManager::UpdateRegisteredIds( ...@@ -165,7 +161,7 @@ void PerUserTopicRegistrationManager::UpdateRegisteredIds(
// should be re-requested. // should be re-requested.
for (const auto& id : ids) { for (const auto& id : ids) {
// If id isn't registered, schedule the registration. // If id isn't registered, schedule the registration.
if (registered_ids_.find(id) == registered_ids_.end()) { if (topic_to_private_topic_.find(id) == topic_to_private_topic_.end()) {
registration_statuses_[id] = std::make_unique<RegistrationEntry>( registration_statuses_[id] = std::make_unique<RegistrationEntry>(
id, id,
base::BindOnce( base::BindOnce(
...@@ -177,8 +173,9 @@ void PerUserTopicRegistrationManager::UpdateRegisteredIds( ...@@ -177,8 +173,9 @@ void PerUserTopicRegistrationManager::UpdateRegisteredIds(
// There is registered id, which need to be unregistered. // There is registered id, which need to be unregistered.
// Schedule unregistration and immediately remove from // Schedule unregistration and immediately remove from
// |registered_ids_| // |topic_to_private_topic_|
for (auto it = registered_ids_.begin(); it != registered_ids_.end();) { for (auto it = topic_to_private_topic_.begin();
it != topic_to_private_topic_.end();) {
auto id = it->first; auto id = it->first;
if (ids.find(id) == ids.end()) { if (ids.find(id) == ids.end()) {
registration_statuses_[id] = std::make_unique<RegistrationEntry>( registration_statuses_[id] = std::make_unique<RegistrationEntry>(
...@@ -187,7 +184,7 @@ void PerUserTopicRegistrationManager::UpdateRegisteredIds( ...@@ -187,7 +184,7 @@ void PerUserTopicRegistrationManager::UpdateRegisteredIds(
&PerUserTopicRegistrationManager::RegistrationFinishedForId, &PerUserTopicRegistrationManager::RegistrationFinishedForId,
base::Unretained(this)), base::Unretained(this)),
PerUserTopicRegistrationRequest::UNSUBSCRIBE); PerUserTopicRegistrationRequest::UNSUBSCRIBE);
it = registered_ids_.erase(it); it = topic_to_private_topic_.erase(it);
} else { } else {
++it; ++it;
} }
...@@ -202,11 +199,10 @@ void PerUserTopicRegistrationManager::DoRegistrationUpdate() { ...@@ -202,11 +199,10 @@ void PerUserTopicRegistrationManager::DoRegistrationUpdate() {
} }
void PerUserTopicRegistrationManager::StartRegistrationRequest( void PerUserTopicRegistrationManager::StartRegistrationRequest(
const invalidation::InvalidationObjectId& id) { const Topic& topic) {
auto it = registration_statuses_.find(id); auto it = registration_statuses_.find(topic);
if (it == registration_statuses_.end()) { if (it == registration_statuses_.end()) {
NOTREACHED() << "StartRegistrationRequest called on " NOTREACHED() << "StartRegistrationRequest called on " << topic
<< InvalidationObjectIdToString(id)
<< " which is not in the registration map"; << " which is not in the registration map";
return; return;
} }
...@@ -214,7 +210,7 @@ void PerUserTopicRegistrationManager::StartRegistrationRequest( ...@@ -214,7 +210,7 @@ void PerUserTopicRegistrationManager::StartRegistrationRequest(
it->second->request = builder.SetToken(token_) it->second->request = builder.SetToken(token_)
.SetScope(kInvalidationRegistrationScope) .SetScope(kInvalidationRegistrationScope)
.SetPublicTopicName(id.name()) .SetPublicTopicName(topic)
.SetAuthenticationHeader(base::StringPrintf( .SetAuthenticationHeader(base::StringPrintf(
"Bearer %s", access_token_.c_str())) "Bearer %s", access_token_.c_str()))
.SetProjectId(kProjectId) .SetProjectId(kProjectId)
...@@ -228,7 +224,7 @@ void PerUserTopicRegistrationManager::StartRegistrationRequest( ...@@ -228,7 +224,7 @@ void PerUserTopicRegistrationManager::StartRegistrationRequest(
} }
void PerUserTopicRegistrationManager::RegistrationFinishedForId( void PerUserTopicRegistrationManager::RegistrationFinishedForId(
invalidation::InvalidationObjectId id, Topic id,
const Status& code, const Status& code,
const std::string& private_topic_name, const std::string& private_topic_name,
PerUserTopicRegistrationRequest::RequestType type) { PerUserTopicRegistrationRequest::RequestType type) {
...@@ -236,16 +232,14 @@ void PerUserTopicRegistrationManager::RegistrationFinishedForId( ...@@ -236,16 +232,14 @@ void PerUserTopicRegistrationManager::RegistrationFinishedForId(
auto it = registration_statuses_.find(id); auto it = registration_statuses_.find(id);
registration_statuses_.erase(it); registration_statuses_.erase(it);
DictionaryPrefUpdate update(local_state_, kTypeRegisteredForInvalidation); DictionaryPrefUpdate update(local_state_, kTypeRegisteredForInvalidation);
std::string serialized_object_id = SerializeInvalidationObjectId(id);
switch (type) { switch (type) {
case PerUserTopicRegistrationRequest::SUBSCRIBE: { case PerUserTopicRegistrationRequest::SUBSCRIBE: {
auto serialized_object_id = SerializeInvalidationObjectId(id); update->SetKey(id, base::Value(private_topic_name));
update->SetKey(serialized_object_id, base::Value(private_topic_name)); topic_to_private_topic_[id] = private_topic_name;
registered_ids_[id] = private_topic_name;
break; break;
} }
case PerUserTopicRegistrationRequest::UNSUBSCRIBE: { case PerUserTopicRegistrationRequest::UNSUBSCRIBE: {
update->RemoveKey(serialized_object_id); update->RemoveKey(id);
break; break;
} }
} }
...@@ -256,13 +250,12 @@ void PerUserTopicRegistrationManager::RegistrationFinishedForId( ...@@ -256,13 +250,12 @@ void PerUserTopicRegistrationManager::RegistrationFinishedForId(
// in case of failure. // in case of failure.
} }
InvalidationObjectIdSet PerUserTopicRegistrationManager::GetRegisteredIds() TopicSet PerUserTopicRegistrationManager::GetRegisteredIds() const {
const { TopicSet topics;
InvalidationObjectIdSet ids; for (const auto& t : topic_to_private_topic_)
for (const auto& id : registered_ids_) topics.insert(t.first);
ids.insert(id.first);
return ids; return topics;
} }
void PerUserTopicRegistrationManager::RequestAccessToken() { void PerUserTopicRegistrationManager::RequestAccessToken() {
......
...@@ -51,12 +51,12 @@ class INVALIDATION_EXPORT PerUserTopicRegistrationManager { ...@@ -51,12 +51,12 @@ class INVALIDATION_EXPORT PerUserTopicRegistrationManager {
static void RegisterProfilePrefs(PrefRegistrySimple* registry); static void RegisterProfilePrefs(PrefRegistrySimple* registry);
virtual void UpdateRegisteredIds(const InvalidationObjectIdSet& ids, virtual void UpdateRegisteredTopics(const TopicSet& ids,
const std::string& token); const std::string& token);
virtual void Init(); virtual void Init();
InvalidationObjectIdSet GetRegisteredIds() const; TopicSet GetRegisteredIds() const;
private: private:
struct RegistrationEntry; struct RegistrationEntry;
...@@ -64,10 +64,10 @@ class INVALIDATION_EXPORT PerUserTopicRegistrationManager { ...@@ -64,10 +64,10 @@ class INVALIDATION_EXPORT PerUserTopicRegistrationManager {
void DoRegistrationUpdate(); void DoRegistrationUpdate();
// Tries to register |id|. No retry in case of failure. // Tries to register |id|. No retry in case of failure.
void StartRegistrationRequest(const invalidation::InvalidationObjectId& id); void StartRegistrationRequest(const Topic& id);
void RegistrationFinishedForId( void RegistrationFinishedForId(
invalidation::InvalidationObjectId id, Topic id,
const Status& code, const Status& code,
const std::string& private_topic_name, const std::string& private_topic_name,
PerUserTopicRegistrationRequest::RequestType type); PerUserTopicRegistrationRequest::RequestType type);
...@@ -79,16 +79,10 @@ class INVALIDATION_EXPORT PerUserTopicRegistrationManager { ...@@ -79,16 +79,10 @@ class INVALIDATION_EXPORT PerUserTopicRegistrationManager {
void OnAccessTokenRequestSucceeded(std::string access_token); void OnAccessTokenRequestSucceeded(std::string access_token);
void OnAccessTokenRequestFailed(GoogleServiceAuthError error); void OnAccessTokenRequestFailed(GoogleServiceAuthError error);
std::map<invalidation::InvalidationObjectId, std::map<Topic, std::unique_ptr<RegistrationEntry>> registration_statuses_;
std::unique_ptr<RegistrationEntry>,
InvalidationObjectIdLessThan>
registration_statuses_;
// For registered ids it maps the id value to the topic value. // For registered ids it maps the id value to the topic value.
std::map<invalidation::InvalidationObjectId, std::map<Topic, std::string> topic_to_private_topic_;
std::string,
InvalidationObjectIdLessThan>
registered_ids_;
// Token derrived from GCM IID. // Token derrived from GCM IID.
std::string token_; std::string token_;
......
...@@ -34,21 +34,21 @@ const char kTypeRegisteredForInvalidation[] = ...@@ -34,21 +34,21 @@ const char kTypeRegisteredForInvalidation[] =
const char kFakeInstanceIdToken[] = "fake_instance_id_token"; const char kFakeInstanceIdToken[] = "fake_instance_id_token";
invalidation::InvalidationObjectId GetIdForIndex(size_t index) { std::string IndexToName(size_t index) {
char name[2] = "a"; char name[2] = "a";
name[0] += static_cast<char>(index); name[0] += static_cast<char>(index);
return invalidation::InvalidationObjectId(1 + index, name); return name;
} }
InvalidationObjectIdSet GetSequenceOfIdsStartingAt(size_t start, size_t count) { TopicSet GetSequenceOfTopicsStartingAt(size_t start, size_t count) {
InvalidationObjectIdSet ids; TopicSet ids;
for (size_t i = start; i < start + count; ++i) for (size_t i = start; i < start + count; ++i)
ids.insert(GetIdForIndex(i)); ids.insert(IndexToName(i));
return ids; return ids;
} }
InvalidationObjectIdSet GetSequenceOfIds(size_t count) { TopicSet GetSequenceOfTopics(size_t count) {
return GetSequenceOfIdsStartingAt(0, count); return GetSequenceOfTopicsStartingAt(0, count);
} }
network::ResourceResponseHead CreateHeadersForTest(int responce_code) { network::ResourceResponseHead CreateHeadersForTest(int responce_code) {
...@@ -142,8 +142,8 @@ class PerUserTopicRegistrationManagerTest : public testing::Test { ...@@ -142,8 +142,8 @@ class PerUserTopicRegistrationManagerTest : public testing::Test {
}; };
TEST_F(PerUserTopicRegistrationManagerTest, TEST_F(PerUserTopicRegistrationManagerTest,
EmptyPrivateTopicShouldNotUpdateRegisteredIds) { EmptyPrivateTopicShouldNotUpdateRegisteredTopics) {
InvalidationObjectIdSet ids = GetSequenceOfIds(kInvalidationObjectIdsCount); TopicSet ids = GetSequenceOfTopics(kInvalidationObjectIdsCount);
auto per_user_topic_registration_manager = BuildRegistrationManager(); auto per_user_topic_registration_manager = BuildRegistrationManager();
...@@ -156,7 +156,7 @@ TEST_F(PerUserTopicRegistrationManagerTest, ...@@ -156,7 +156,7 @@ TEST_F(PerUserTopicRegistrationManagerTest,
FullSubscriptionUrl(), CreateHeadersForTest(net::HTTP_OK), response_body, FullSubscriptionUrl(), CreateHeadersForTest(net::HTTP_OK), response_body,
CreateStatusForTest(net::OK, response_body)); CreateStatusForTest(net::OK, response_body));
per_user_topic_registration_manager->UpdateRegisteredIds( per_user_topic_registration_manager->UpdateRegisteredTopics(
ids, kFakeInstanceIdToken); ids, kFakeInstanceIdToken);
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
...@@ -165,8 +165,8 @@ TEST_F(PerUserTopicRegistrationManagerTest, ...@@ -165,8 +165,8 @@ TEST_F(PerUserTopicRegistrationManagerTest,
EXPECT_TRUE(per_user_topic_registration_manager->GetRegisteredIds().empty()); EXPECT_TRUE(per_user_topic_registration_manager->GetRegisteredIds().empty());
} }
TEST_F(PerUserTopicRegistrationManagerTest, ShouldUpdateRegisteredIds) { TEST_F(PerUserTopicRegistrationManagerTest, ShouldUpdateRegisteredTopics) {
InvalidationObjectIdSet ids = GetSequenceOfIds(kInvalidationObjectIdsCount); TopicSet ids = GetSequenceOfTopics(kInvalidationObjectIdsCount);
auto per_user_topic_registration_manager = BuildRegistrationManager(); auto per_user_topic_registration_manager = BuildRegistrationManager();
...@@ -174,7 +174,7 @@ TEST_F(PerUserTopicRegistrationManagerTest, ShouldUpdateRegisteredIds) { ...@@ -174,7 +174,7 @@ TEST_F(PerUserTopicRegistrationManagerTest, ShouldUpdateRegisteredIds) {
AddCorrectSubscriptionResponce(); AddCorrectSubscriptionResponce();
per_user_topic_registration_manager->UpdateRegisteredIds( per_user_topic_registration_manager->UpdateRegisteredTopics(
ids, kFakeInstanceIdToken); ids, kFakeInstanceIdToken);
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
...@@ -183,34 +183,34 @@ TEST_F(PerUserTopicRegistrationManagerTest, ShouldUpdateRegisteredIds) { ...@@ -183,34 +183,34 @@ TEST_F(PerUserTopicRegistrationManagerTest, ShouldUpdateRegisteredIds) {
for (const auto& id : ids) { for (const auto& id : ids) {
const base::DictionaryValue* topics = const base::DictionaryValue* topics =
pref_service()->GetDictionary(kTypeRegisteredForInvalidation); pref_service()->GetDictionary(kTypeRegisteredForInvalidation);
const base::Value* private_topic_value = topics->FindKeyOfType( const base::Value* private_topic_value =
SerializeInvalidationObjectId(id), base::Value::Type::STRING); topics->FindKeyOfType(id, base::Value::Type::STRING);
ASSERT_NE(private_topic_value, nullptr); ASSERT_NE(private_topic_value, nullptr);
} }
} }
TEST_F(PerUserTopicRegistrationManagerTest, TEST_F(PerUserTopicRegistrationManagerTest,
ShouldDisableIdsAndDeleteFromPrefs) { ShouldDisableIdsAndDeleteFromPrefs) {
InvalidationObjectIdSet ids = GetSequenceOfIds(kInvalidationObjectIdsCount); TopicSet ids = GetSequenceOfTopics(kInvalidationObjectIdsCount);
AddCorrectSubscriptionResponce(); AddCorrectSubscriptionResponce();
auto per_user_topic_registration_manager = BuildRegistrationManager(); auto per_user_topic_registration_manager = BuildRegistrationManager();
EXPECT_TRUE(per_user_topic_registration_manager->GetRegisteredIds().empty()); EXPECT_TRUE(per_user_topic_registration_manager->GetRegisteredIds().empty());
per_user_topic_registration_manager->UpdateRegisteredIds( per_user_topic_registration_manager->UpdateRegisteredTopics(
ids, kFakeInstanceIdToken); ids, kFakeInstanceIdToken);
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
EXPECT_EQ(ids, per_user_topic_registration_manager->GetRegisteredIds()); EXPECT_EQ(ids, per_user_topic_registration_manager->GetRegisteredIds());
// Disable some ids. // Disable some ids.
InvalidationObjectIdSet disabled_ids = GetSequenceOfIds(3); TopicSet disabled_ids = GetSequenceOfTopics(3);
InvalidationObjectIdSet enabled_ids = TopicSet enabled_ids =
GetSequenceOfIdsStartingAt(3, kInvalidationObjectIdsCount - 3); GetSequenceOfTopicsStartingAt(3, kInvalidationObjectIdsCount - 3);
for (const auto& id : disabled_ids) for (const auto& id : disabled_ids)
AddCorrectUnSubscriptionResponceForTopic(id.name()); AddCorrectUnSubscriptionResponceForTopic(id);
per_user_topic_registration_manager->UpdateRegisteredIds( per_user_topic_registration_manager->UpdateRegisteredTopics(
enabled_ids, kFakeInstanceIdToken); enabled_ids, kFakeInstanceIdToken);
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
...@@ -218,8 +218,7 @@ TEST_F(PerUserTopicRegistrationManagerTest, ...@@ -218,8 +218,7 @@ TEST_F(PerUserTopicRegistrationManagerTest,
for (const auto& id : disabled_ids) { for (const auto& id : disabled_ids) {
const base::DictionaryValue* topics = const base::DictionaryValue* topics =
pref_service()->GetDictionary(kTypeRegisteredForInvalidation); pref_service()->GetDictionary(kTypeRegisteredForInvalidation);
const base::Value* private_topic_value = const base::Value* private_topic_value = topics->FindKey(id);
topics->FindKey(SerializeInvalidationObjectId(id));
ASSERT_EQ(private_topic_value, nullptr); ASSERT_EQ(private_topic_value, nullptr);
} }
...@@ -227,8 +226,8 @@ TEST_F(PerUserTopicRegistrationManagerTest, ...@@ -227,8 +226,8 @@ TEST_F(PerUserTopicRegistrationManagerTest,
for (const auto& id : enabled_ids) { for (const auto& id : enabled_ids) {
const base::DictionaryValue* topics = const base::DictionaryValue* topics =
pref_service()->GetDictionary(kTypeRegisteredForInvalidation); pref_service()->GetDictionary(kTypeRegisteredForInvalidation);
const base::Value* private_topic_value = topics->FindKeyOfType( const base::Value* private_topic_value =
SerializeInvalidationObjectId(id), base::Value::Type::STRING); topics->FindKeyOfType(id, base::Value::Type::STRING);
ASSERT_NE(private_topic_value, nullptr); ASSERT_NE(private_topic_value, nullptr);
} }
} }
......
...@@ -21,6 +21,8 @@ namespace { ...@@ -21,6 +21,8 @@ namespace {
const char kSourceKey[] = "source"; const char kSourceKey[] = "source";
const char kNameKey[] = "name"; const char kNameKey[] = "name";
const int kDeprecatedSource = 2000;
} // namespace } // namespace
namespace syncer { namespace syncer {
...@@ -136,4 +138,22 @@ std::string InvalidationObjectIdToString( ...@@ -136,4 +138,22 @@ std::string InvalidationObjectIdToString(
return str; return str;
} }
TopicSet ConvertIdsToTopics(ObjectIdSet ids) {
TopicSet topics;
for (const auto& id : ids)
topics.insert(id.name());
return topics;
}
ObjectIdSet ConvertTopicsToIds(TopicSet topics) {
ObjectIdSet ids;
for (const auto& topic : topics)
ids.insert(invalidation::ObjectId(kDeprecatedSource, topic));
return ids;
}
invalidation::ObjectId ConvertTopicToId(const Topic& topic) {
return invalidation::ObjectId(kDeprecatedSource, topic);
}
} // namespace syncer } // namespace syncer
...@@ -91,6 +91,10 @@ bool DeserializeInvalidationObjectId(const std::string& serialized, ...@@ -91,6 +91,10 @@ bool DeserializeInvalidationObjectId(const std::string& serialized,
INVALIDATION_EXPORT std::string InvalidationObjectIdToString( INVALIDATION_EXPORT std::string InvalidationObjectIdToString(
const invalidation::InvalidationObjectId& object_id); const invalidation::InvalidationObjectId& object_id);
TopicSet ConvertIdsToTopics(ObjectIdSet ids);
ObjectIdSet ConvertTopicsToIds(TopicSet topics);
invalidation::ObjectId ConvertTopicToId(const Topic& topic);
} // namespace syncer } // namespace syncer
#endif // COMPONENTS_INVALIDATION_PUBLIC_INVALIDATION_UTIL_H_ #endif // COMPONENTS_INVALIDATION_PUBLIC_INVALIDATION_UTIL_H_
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <stddef.h> #include <stddef.h>
#include "base/json/json_string_value_serializer.h" #include "base/json/json_string_value_serializer.h"
#include "components/invalidation/public/object_id_invalidation_map.h"
namespace syncer { namespace syncer {
...@@ -114,4 +115,15 @@ std::string TopicInvalidationMap::ToString() const { ...@@ -114,4 +115,15 @@ std::string TopicInvalidationMap::ToString() const {
TopicInvalidationMap::TopicInvalidationMap(const TopicToListMap& map) TopicInvalidationMap::TopicInvalidationMap(const TopicToListMap& map)
: map_(map) {} : map_(map) {}
TopicInvalidationMap ConvertObjectIdInvalidationMapToTopicInvalidationMap(
ObjectIdInvalidationMap object_ids_map) {
TopicInvalidationMap topics_map;
std::vector<Invalidation> invalidations;
object_ids_map.GetAllInvalidations(&invalidations);
for (const auto& invalidation : invalidations) {
topics_map.Insert(invalidation);
}
return topics_map;
}
} // namespace syncer } // namespace syncer
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "components/invalidation/public/single_object_invalidation_set.h" #include "components/invalidation/public/single_object_invalidation_set.h"
namespace syncer { namespace syncer {
class ObjectIdInvalidationMap;
// A set of notifications with some helper methods to organize them by object ID // A set of notifications with some helper methods to organize them by object ID
// and version number. // and version number.
...@@ -66,6 +67,9 @@ class INVALIDATION_EXPORT TopicInvalidationMap { ...@@ -66,6 +67,9 @@ class INVALIDATION_EXPORT TopicInvalidationMap {
TopicToListMap map_; TopicToListMap map_;
}; };
TopicInvalidationMap ConvertObjectIdInvalidationMapToTopicInvalidationMap(
ObjectIdInvalidationMap object_ids_map);
} // namespace syncer } // namespace syncer
#endif // COMPONENTS_INVALIDATION_PUBLIC_TOPIC_INVALIDATION_MAP_H_ #endif // COMPONENTS_INVALIDATION_PUBLIC_TOPIC_INVALIDATION_MAP_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment