diff --git a/chrome/browser/ui/webui/invalidations_message_handler.cc b/chrome/browser/ui/webui/invalidations_message_handler.cc index b05bcaf08cc80e..7b21427b89f730 100644 --- a/chrome/browser/ui/webui/invalidations_message_handler.cc +++ b/chrome/browser/ui/webui/invalidations_message_handler.cc @@ -25,6 +25,21 @@ namespace syncer { class ObjectIdInvalidationMap; } // namespace syncer +namespace { + +invalidation::ProfileInvalidationProvider* GetInvalidationProvider( + Profile* profile) { + if (base::FeatureList::IsEnabled(invalidation::switches::kFCMInvalidations)) { + return invalidation::ProfileInvalidationProviderFactory::GetForProfile( + profile); + } else { + return invalidation::DeprecatedProfileInvalidationProviderFactory:: + GetForProfile(profile); + } +} + +} // namespace + InvalidationsMessageHandler::InvalidationsMessageHandler() : logger_(NULL), weak_ptr_factory_(this) {} @@ -45,16 +60,8 @@ void InvalidationsMessageHandler::RegisterMessages() { } void InvalidationsMessageHandler::UIReady(const base::ListValue* args) { - invalidation::ProfileInvalidationProvider* invalidation_provider; - Profile* profile = Profile::FromWebUI(web_ui()); - if (base::FeatureList::IsEnabled(invalidation::switches::kFCMInvalidations)) { - invalidation_provider = - invalidation::ProfileInvalidationProviderFactory::GetForProfile( - profile); - } else { - invalidation_provider = invalidation:: - DeprecatedProfileInvalidationProviderFactory::GetForProfile(profile); - } + invalidation::ProfileInvalidationProvider* invalidation_provider = + GetInvalidationProvider(Profile::FromWebUI(web_ui())); if (invalidation_provider) { logger_ = invalidation_provider->GetInvalidationService()-> GetInvalidationLogger(); @@ -67,8 +74,7 @@ void InvalidationsMessageHandler::UIReady(const base::ListValue* args) { void InvalidationsMessageHandler::HandleRequestDetailedStatus( const base::ListValue* args) { invalidation::ProfileInvalidationProvider* invalidation_provider = - invalidation::DeprecatedProfileInvalidationProviderFactory::GetForProfile( - Profile::FromWebUI(web_ui())); + GetInvalidationProvider(Profile::FromWebUI(web_ui())); if (invalidation_provider) { invalidation_provider->GetInvalidationService()->RequestDetailedStatus( base::Bind(&InvalidationsMessageHandler::OnDetailedStatus, diff --git a/components/invalidation/impl/fcm_invalidation_listener.cc b/components/invalidation/impl/fcm_invalidation_listener.cc index be1cafe34c9cfd..ec97cb8ecad061 100644 --- a/components/invalidation/impl/fcm_invalidation_listener.cc +++ b/components/invalidation/impl/fcm_invalidation_listener.cc @@ -167,6 +167,11 @@ void FCMInvalidationListener::DoRegistrationUpdate() { object_id_invalidation_map)); } +void FCMInvalidationListener::RequestDetailedStatus( + base::Callback callback) const { + callback.Run(*CollectDebugData()); +} + void FCMInvalidationListener::StopForTest() { Stop(); } @@ -231,4 +236,20 @@ void FCMInvalidationListener::OnSubscriptionChannelStateChanged( EmitStateChange(); } +std::unique_ptr +FCMInvalidationListener::CollectDebugData() const { + std::unique_ptr return_value( + new base::DictionaryValue()); + // For each topic record if the subscription was successful. + TopicSet active_topics = + per_user_topic_registration_manager_->GetRegisteredIds(); + for (const Topic& topic : registered_topics_) { + std::string status = "Registered"; + if (active_topics.count(topic) == 0) + status = "Unregistered"; + return_value->SetString(topic, status); + } + return return_value; +} + } // namespace syncer diff --git a/components/invalidation/impl/fcm_invalidation_listener.h b/components/invalidation/impl/fcm_invalidation_listener.h index 4bc1b6b9606904..66e57e990659c8 100644 --- a/components/invalidation/impl/fcm_invalidation_listener.h +++ b/components/invalidation/impl/fcm_invalidation_listener.h @@ -91,6 +91,9 @@ class FCMInvalidationListener : public InvalidationListener, void DoRegistrationUpdate(); + void RequestDetailedStatus( + base::Callback callback) const; + void StopForTest(); TopicSet GetRegisteredIdsForTest() const; diff --git a/components/invalidation/impl/fcm_invalidator.cc b/components/invalidation/impl/fcm_invalidator.cc index 8a646fb160b238..3c0f7e4936d411 100644 --- a/components/invalidation/impl/fcm_invalidator.cc +++ b/components/invalidation/impl/fcm_invalidator.cc @@ -69,7 +69,9 @@ void FCMInvalidator::OnInvalidate( void FCMInvalidator::RequestDetailedStatus( base::RepeatingCallback callback) - const {} + const { + invalidation_listener_.RequestDetailedStatus(callback); +} void FCMInvalidator::OnInvalidatorStateChange(InvalidatorState state) { registrar_.UpdateInvalidatorState(state);