Commit 4f72758c authored by Marc Treib's avatar Marc Treib Committed by Commit Bot

Various small invalidations cleanups

Making a few things private that should be private, renaming "ids" to
"topics", updating comments etc. No functional changes.

Bug: 1029698
Change-Id: If95081e1b68277bc0beb1e17b23dde0b4791a010
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1948438
Commit-Queue: Marc Treib <treib@chromium.org>
Reviewed-by: default avatarMikel Astiz <mastiz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#721504}
parent 574ecd4b
...@@ -21,7 +21,7 @@ FCMInvalidationListener::Delegate::~Delegate() {} ...@@ -21,7 +21,7 @@ FCMInvalidationListener::Delegate::~Delegate() {}
FCMInvalidationListener::FCMInvalidationListener( FCMInvalidationListener::FCMInvalidationListener(
std::unique_ptr<FCMSyncNetworkChannel> network_channel) std::unique_ptr<FCMSyncNetworkChannel> network_channel)
: network_channel_(std::move(network_channel)), delegate_(nullptr) { : network_channel_(std::move(network_channel)) {
network_channel_->AddObserver(this); network_channel_->AddObserver(this);
} }
...@@ -55,7 +55,7 @@ void FCMInvalidationListener::Start( ...@@ -55,7 +55,7 @@ void FCMInvalidationListener::Start(
} }
void FCMInvalidationListener::UpdateRegisteredTopics(const Topics& topics) { void FCMInvalidationListener::UpdateRegisteredTopics(const Topics& topics) {
ids_update_requested_ = true; topics_update_requested_ = true;
registered_topics_ = topics; registered_topics_ = topics;
DoRegistrationUpdate(); DoRegistrationUpdate();
} }
...@@ -85,7 +85,8 @@ void FCMInvalidationListener::Invalidate(const std::string& payload, ...@@ -85,7 +85,8 @@ void FCMInvalidationListener::Invalidate(const std::string& payload,
TopicInvalidationMap invalidations; TopicInvalidationMap invalidations;
Invalidation inv = Invalidation inv =
Invalidation::Init(ConvertTopicToId(*expected_public_topic), v, payload); Invalidation::Init(ConvertTopicToId(*expected_public_topic), v, payload);
inv.SetAckHandler(AsWeakPtr(), base::ThreadTaskRunnerHandle::Get()); inv.SetAckHandler(weak_factory_.GetWeakPtr(),
base::ThreadTaskRunnerHandle::Get());
DVLOG(1) << "Received invalidation with version " << inv.version() << " for " DVLOG(1) << "Received invalidation with version " << inv.version() << " for "
<< *expected_public_topic; << *expected_public_topic;
...@@ -106,14 +107,14 @@ void FCMInvalidationListener::DispatchInvalidations( ...@@ -106,14 +107,14 @@ void FCMInvalidationListener::DispatchInvalidations(
void FCMInvalidationListener::SaveInvalidations( void FCMInvalidationListener::SaveInvalidations(
const TopicInvalidationMap& to_save) { const TopicInvalidationMap& to_save) {
ObjectIdSet objects_to_save = ConvertTopicsToIds(to_save.GetTopics()); ObjectIdSet objects_to_save = ConvertTopicsToIds(to_save.GetTopics());
for (auto it = objects_to_save.begin(); it != objects_to_save.end(); ++it) { for (const invalidation::ObjectId& id : objects_to_save) {
auto lookup = unacked_invalidations_map_.find(*it); auto lookup = unacked_invalidations_map_.find(id);
if (lookup == unacked_invalidations_map_.end()) { if (lookup == unacked_invalidations_map_.end()) {
lookup = unacked_invalidations_map_ lookup =
.insert(std::make_pair(*it, UnackedInvalidationSet(*it))) unacked_invalidations_map_.emplace(id, UnackedInvalidationSet(id))
.first; .first;
} }
lookup->second.AddSet(to_save.ForTopic((*it).name())); lookup->second.AddSet(to_save.ForTopic(id.name()));
} }
} }
...@@ -123,7 +124,7 @@ void FCMInvalidationListener::EmitSavedInvalidations( ...@@ -123,7 +124,7 @@ void FCMInvalidationListener::EmitSavedInvalidations(
} }
void FCMInvalidationListener::InformTokenReceived(const std::string& token) { void FCMInvalidationListener::InformTokenReceived(const std::string& token) {
token_ = token; instance_id_token_ = token;
DoRegistrationUpdate(); DoRegistrationUpdate();
} }
...@@ -148,12 +149,12 @@ void FCMInvalidationListener::Drop(const invalidation::ObjectId& id, ...@@ -148,12 +149,12 @@ void FCMInvalidationListener::Drop(const invalidation::ObjectId& id,
} }
void FCMInvalidationListener::DoRegistrationUpdate() { void FCMInvalidationListener::DoRegistrationUpdate() {
if (!per_user_topic_registration_manager_ || token_.empty() || if (!per_user_topic_registration_manager_ || instance_id_token_.empty() ||
!ids_update_requested_) { !topics_update_requested_) {
return; return;
} }
per_user_topic_registration_manager_->UpdateRegisteredTopics( per_user_topic_registration_manager_->UpdateRegisteredTopics(
registered_topics_, token_); registered_topics_, instance_id_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;
...@@ -163,7 +164,7 @@ void FCMInvalidationListener::DoRegistrationUpdate() { ...@@ -163,7 +164,7 @@ void FCMInvalidationListener::DoRegistrationUpdate() {
continue; continue;
} }
unacked.second.ExportInvalidations(AsWeakPtr(), unacked.second.ExportInvalidations(weak_factory_.GetWeakPtr(),
base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(),
&object_id_invalidation_map); &object_id_invalidation_map);
} }
...@@ -199,14 +200,10 @@ void FCMInvalidationListener::EmitSavedInvalidationsForTest( ...@@ -199,14 +200,10 @@ void FCMInvalidationListener::EmitSavedInvalidationsForTest(
EmitSavedInvalidations(to_emit); EmitSavedInvalidations(to_emit);
} }
Topics FCMInvalidationListener::GetRegisteredIdsForTest() const { Topics FCMInvalidationListener::GetRegisteredTopicsForTest() const {
return registered_topics_; return registered_topics_;
} }
base::WeakPtr<FCMInvalidationListener> FCMInvalidationListener::AsWeakPtr() {
return weak_factory_.GetWeakPtr();
}
void FCMInvalidationListener::Stop() { void FCMInvalidationListener::Stop() {
delegate_ = nullptr; delegate_ = nullptr;
......
...@@ -51,7 +51,7 @@ class FCMInvalidationListener : public InvalidationListener, ...@@ -51,7 +51,7 @@ class FCMInvalidationListener : public InvalidationListener,
std::unique_ptr<PerUserTopicRegistrationManager> std::unique_ptr<PerUserTopicRegistrationManager>
per_user_topic_registration_manager); per_user_topic_registration_manager);
// Update the set of object IDs that we're interested in getting // Update the set of topics that we're interested in getting
// notifications for. May be called at any time. // notifications for. May be called at any time.
void UpdateRegisteredTopics(const Topics& topics); void UpdateRegisteredTopics(const Topics& topics);
...@@ -75,8 +75,6 @@ class FCMInvalidationListener : public InvalidationListener, ...@@ -75,8 +75,6 @@ class FCMInvalidationListener : public InvalidationListener,
void OnSubscriptionChannelStateChanged( void OnSubscriptionChannelStateChanged(
SubscriptionChannelState state) override; SubscriptionChannelState state) override;
void DoRegistrationUpdate();
virtual void RequestDetailedStatus( virtual void RequestDetailedStatus(
const base::RepeatingCallback<void(const base::DictionaryValue&)>& const base::RepeatingCallback<void(const base::DictionaryValue&)>&
callback) const; callback) const;
...@@ -86,11 +84,11 @@ class FCMInvalidationListener : public InvalidationListener, ...@@ -86,11 +84,11 @@ class FCMInvalidationListener : public InvalidationListener,
void EmitStateChangeForTest(InvalidatorState state); void EmitStateChangeForTest(InvalidatorState state);
void EmitSavedInvalidationsForTest(const TopicInvalidationMap& to_emit); void EmitSavedInvalidationsForTest(const TopicInvalidationMap& to_emit);
Topics GetRegisteredIdsForTest() const; Topics GetRegisteredTopicsForTest() const;
base::WeakPtr<FCMInvalidationListener> AsWeakPtr();
private: private:
void DoRegistrationUpdate();
void Stop(); void Stop();
InvalidatorState GetState() const; InvalidatorState GetState() const;
...@@ -120,7 +118,7 @@ class FCMInvalidationListener : public InvalidationListener, ...@@ -120,7 +118,7 @@ class FCMInvalidationListener : public InvalidationListener,
std::unique_ptr<FCMSyncNetworkChannel> network_channel_; std::unique_ptr<FCMSyncNetworkChannel> network_channel_;
UnackedInvalidationsMap unacked_invalidations_map_; UnackedInvalidationsMap unacked_invalidations_map_;
Delegate* delegate_; Delegate* delegate_ = nullptr;
// Stores all topics which are registered (or subscribed?). // Stores all topics which are registered (or subscribed?).
// TODO(crbug.com/1029698,crbug.com/1020117): We should get this information // TODO(crbug.com/1029698,crbug.com/1020117): We should get this information
...@@ -137,12 +135,12 @@ class FCMInvalidationListener : public InvalidationListener, ...@@ -137,12 +135,12 @@ class FCMInvalidationListener : public InvalidationListener,
std::unique_ptr<PerUserTopicRegistrationManager> std::unique_ptr<PerUserTopicRegistrationManager>
per_user_topic_registration_manager_; per_user_topic_registration_manager_;
std::string token_; std::string instance_id_token_;
// Prevents call to DoRegistrationUpdate in cases when // Prevents call to DoRegistrationUpdate in cases when
// UpdateRegisteredTopics wasn't called. For example, InformTokenReceived // UpdateRegisteredTopics wasn't called. For example, InformTokenReceived
// can trigger DoRegistrationUpdate before any invalidation handler has // can trigger DoRegistrationUpdate before any invalidation handler has
// requested registration for topics. // requested registration for topics.
bool ids_update_requested_ = false; bool topics_update_requested_ = false;
base::WeakPtrFactory<FCMInvalidationListener> weak_factory_{this}; base::WeakPtrFactory<FCMInvalidationListener> weak_factory_{this};
......
...@@ -41,6 +41,12 @@ class TestFCMSyncNetworkChannel : public FCMSyncNetworkChannel { ...@@ -41,6 +41,12 @@ class TestFCMSyncNetworkChannel : public FCMSyncNetworkChannel {
public: public:
void StartListening() override {} void StartListening() override {}
void StopListening() override {} void StopListening() override {}
void RequestDetailedStatus(
const base::RepeatingCallback<void(const base::DictionaryValue&)>&
callback) override {}
using FCMSyncNetworkChannel::NotifyChannelStateChange;
}; };
// Fake delegate that keeps track of invalidation counts, payloads, // Fake delegate that keeps track of invalidation counts, payloads,
...@@ -249,7 +255,7 @@ class FCMInvalidationListenerTest : public testing::Test { ...@@ -249,7 +255,7 @@ class FCMInvalidationListenerTest : public testing::Test {
} }
Topics GetRegisteredTopics() const { Topics GetRegisteredTopics() const {
return listener_.GetRegisteredIdsForTest(); return listener_.GetRegisteredTopicsForTest();
} }
void RegisterAndFireInvalidate(const Topic& topic, void RegisterAndFireInvalidate(const Topic& topic,
...@@ -284,7 +290,7 @@ class FCMInvalidationListenerTest : public testing::Test { ...@@ -284,7 +290,7 @@ class FCMInvalidationListenerTest : public testing::Test {
private: private:
base::test::SingleThreadTaskEnvironment task_environment_; base::test::SingleThreadTaskEnvironment task_environment_;
data_decoder::test::InProcessDataDecoder in_process_data_decoder_; data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
FCMSyncNetworkChannel* fcm_sync_network_channel_; TestFCMSyncNetworkChannel* fcm_sync_network_channel_;
MockRegistrationManager* registration_manager_; MockRegistrationManager* registration_manager_;
protected: protected:
......
...@@ -49,6 +49,10 @@ class TestFCMSyncNetworkChannel : public syncer::FCMSyncNetworkChannel { ...@@ -49,6 +49,10 @@ class TestFCMSyncNetworkChannel : public syncer::FCMSyncNetworkChannel {
public: public:
void StartListening() override {} void StartListening() override {}
void StopListening() override {} void StopListening() override {}
void RequestDetailedStatus(
const base::RepeatingCallback<void(const base::DictionaryValue&)>&
callback) override {}
}; };
// TODO: Make FCMInvalidationListener class abstract and explicitly make all the // TODO: Make FCMInvalidationListener class abstract and explicitly make all the
......
...@@ -275,13 +275,15 @@ void FCMNetworkHandler::SetTokenValidationTimerForTesting( ...@@ -275,13 +275,15 @@ void FCMNetworkHandler::SetTokenValidationTimerForTesting(
} }
void FCMNetworkHandler::RequestDetailedStatus( void FCMNetworkHandler::RequestDetailedStatus(
base::Callback<void(const base::DictionaryValue&)> callback) { const base::RepeatingCallback<void(const base::DictionaryValue&)>&
callback) {
callback.Run(diagnostic_info_.CollectDebugData()); callback.Run(diagnostic_info_.CollectDebugData());
} }
FCMNetworkHandlerDiagnostic::FCMNetworkHandlerDiagnostic() {} FCMNetworkHandler::FCMNetworkHandlerDiagnostic::FCMNetworkHandlerDiagnostic() {}
base::DictionaryValue FCMNetworkHandlerDiagnostic::CollectDebugData() const { base::DictionaryValue
FCMNetworkHandler::FCMNetworkHandlerDiagnostic::CollectDebugData() const {
base::DictionaryValue status; base::DictionaryValue status;
status.SetString("NetworkHandler.Registration-result-code", status.SetString("NetworkHandler.Registration-result-code",
RegistrationResultToString(registration_result)); RegistrationResultToString(registration_result));
...@@ -307,7 +309,8 @@ base::DictionaryValue FCMNetworkHandlerDiagnostic::CollectDebugData() const { ...@@ -307,7 +309,8 @@ base::DictionaryValue FCMNetworkHandlerDiagnostic::CollectDebugData() const {
return status; return status;
} }
std::string FCMNetworkHandlerDiagnostic::RegistrationResultToString( std::string
FCMNetworkHandler::FCMNetworkHandlerDiagnostic::RegistrationResultToString(
const instance_id::InstanceID::Result result) const { const instance_id::InstanceID::Result result) const {
switch (registration_result) { switch (registration_result) {
case instance_id::InstanceID::SUCCESS: case instance_id::InstanceID::SUCCESS:
......
...@@ -25,29 +25,6 @@ class InstanceIDDriver; ...@@ -25,29 +25,6 @@ class InstanceIDDriver;
namespace syncer { namespace syncer {
struct FCMNetworkHandlerDiagnostic {
FCMNetworkHandlerDiagnostic();
// Collect all the internal variables in a single readable dictionary.
base::DictionaryValue CollectDebugData() const;
std::string RegistrationResultToString(
const instance_id::InstanceID::Result result) const;
std::string token;
instance_id::InstanceID::Result registration_result =
instance_id::InstanceID::UNKNOWN_ERROR;
instance_id::InstanceID::Result token_verification_result =
instance_id::InstanceID::UNKNOWN_ERROR;
bool token_changed = false;
base::Time instance_id_token_requested;
base::Time instance_id_token_was_received;
base::Time instance_id_token_verification_requested;
base::Time instance_id_token_verified;
int token_validation_requested_num = 0;
};
/* /*
* The class responsible for communication via GCM channel: * The class responsible for communication via GCM channel:
* - It retrieves the token required for the subscription * - It retrieves the token required for the subscription
...@@ -95,10 +72,33 @@ class FCMNetworkHandler : public gcm::GCMAppHandler, ...@@ -95,10 +72,33 @@ class FCMNetworkHandler : public gcm::GCMAppHandler,
std::unique_ptr<base::OneShotTimer> token_validation_timer); std::unique_ptr<base::OneShotTimer> token_validation_timer);
void RequestDetailedStatus( void RequestDetailedStatus(
base::RepeatingCallback<void(const base::DictionaryValue&)> callback) const base::RepeatingCallback<void(const base::DictionaryValue&)>&
override; callback) override;
private: private:
struct FCMNetworkHandlerDiagnostic {
FCMNetworkHandlerDiagnostic();
// Collect all the internal variables in a single readable dictionary.
base::DictionaryValue CollectDebugData() const;
std::string RegistrationResultToString(
const instance_id::InstanceID::Result result) const;
std::string token;
instance_id::InstanceID::Result registration_result =
instance_id::InstanceID::UNKNOWN_ERROR;
instance_id::InstanceID::Result token_verification_result =
instance_id::InstanceID::UNKNOWN_ERROR;
bool token_changed = false;
base::Time instance_id_token_requested;
base::Time instance_id_token_was_received;
base::Time instance_id_token_verification_requested;
base::Time instance_id_token_verified;
int token_validation_requested_num = 0;
};
// Called when a subscription token is obtained from the GCM server. // Called when a subscription token is obtained from the GCM server.
void DidRetrieveToken(const std::string& subscription_token, void DidRetrieveToken(const std::string& subscription_token,
instance_id::InstanceID::Result result); instance_id::InstanceID::Result result);
......
...@@ -58,11 +58,4 @@ bool FCMSyncNetworkChannel::DeliverToken(const std::string& token) { ...@@ -58,11 +58,4 @@ bool FCMSyncNetworkChannel::DeliverToken(const std::string& token) {
return true; return true;
} }
int FCMSyncNetworkChannel::GetReceivedMessagesCount() const {
return received_messages_count_;
}
void FCMSyncNetworkChannel::RequestDetailedStatus(
base::Callback<void(const base::DictionaryValue&)> callback) {}
} // namespace syncer } // namespace syncer
// Copyright 2018 The Chromium Authors. All rights reserved. // Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
//
// Simple system resources class that uses the current thread for scheduling.
// Assumes the current thread is already running tasks.
#ifndef COMPONENTS_INVALIDATION_IMPL_FCM_SYNC_NETWORK_CHANNEL_H_ #ifndef COMPONENTS_INVALIDATION_IMPL_FCM_SYNC_NETWORK_CHANNEL_H_
#define COMPONENTS_INVALIDATION_IMPL_FCM_SYNC_NETWORK_CHANNEL_H_ #define COMPONENTS_INVALIDATION_IMPL_FCM_SYNC_NETWORK_CHANNEL_H_
...@@ -42,9 +39,13 @@ class FCMSyncNetworkChannel : public NetworkChannel { ...@@ -42,9 +39,13 @@ class FCMSyncNetworkChannel : public NetworkChannel {
void AddObserver(Observer* observer); void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer); void RemoveObserver(Observer* observer);
// Get the count of how many valid received messages were received. // Subclass should implement RequestDetailedStatus to provide debugging
int GetReceivedMessagesCount() const; // information.
virtual void RequestDetailedStatus(
const base::RepeatingCallback<void(const base::DictionaryValue&)>&
callback) = 0;
protected:
// Subclass should call NotifyNetworkStatusChange to notify about network // Subclass should call NotifyNetworkStatusChange to notify about network
// changes. This triggers cacheinvalidation to try resending failed message // changes. This triggers cacheinvalidation to try resending failed message
// ahead of schedule when client comes online or IP address changes. // ahead of schedule when client comes online or IP address changes.
...@@ -67,11 +68,6 @@ class FCMSyncNetworkChannel : public NetworkChannel { ...@@ -67,11 +68,6 @@ class FCMSyncNetworkChannel : public NetworkChannel {
// manager. // manager.
bool DeliverToken(const std::string& token); bool DeliverToken(const std::string& token);
// Subclass should implement RequestDetailedStatus to provide debugging
// information.
virtual void RequestDetailedStatus(
base::Callback<void(const base::DictionaryValue&)> callback);
private: private:
// Callbacks into invalidation library // Callbacks into invalidation library
MessageCallback incoming_receiver_; MessageCallback incoming_receiver_;
......
...@@ -41,7 +41,7 @@ class INVALIDATION_EXPORT UnackedInvalidationSet { ...@@ -41,7 +41,7 @@ class INVALIDATION_EXPORT UnackedInvalidationSet {
public: public:
static const size_t kMaxBufferedInvalidations; static const size_t kMaxBufferedInvalidations;
UnackedInvalidationSet(invalidation::ObjectId id); explicit UnackedInvalidationSet(invalidation::ObjectId id);
UnackedInvalidationSet(const UnackedInvalidationSet& other); UnackedInvalidationSet(const UnackedInvalidationSet& other);
~UnackedInvalidationSet(); ~UnackedInvalidationSet();
......
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