// Copyright (c) 2013 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 "chrome/browser/invalidation/invalidation_service_android.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/invalidation/invalidation_controller_android.h" #include "content/public/browser/notification_service.h" #include "sync/notifier/object_id_invalidation_map.h" namespace invalidation { InvalidationServiceAndroid::InvalidationServiceAndroid( Profile* profile, InvalidationControllerAndroid* invalidation_controller) : invalidator_state_(syncer::INVALIDATIONS_ENABLED), invalidation_controller_(invalidation_controller), logger_() { DCHECK(CalledOnValidThread()); DCHECK(invalidation_controller); registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE, content::Source<Profile>(profile)); } InvalidationServiceAndroid::~InvalidationServiceAndroid() { } void InvalidationServiceAndroid::RegisterInvalidationHandler( syncer::InvalidationHandler* handler) { DCHECK(CalledOnValidThread()); invalidator_registrar_.RegisterHandler(handler); logger_.OnRegistration(handler->GetOwnerName()); } void InvalidationServiceAndroid::UpdateRegisteredInvalidationIds( syncer::InvalidationHandler* handler, const syncer::ObjectIdSet& ids) { DCHECK(CalledOnValidThread()); invalidator_registrar_.UpdateRegisteredIds(handler, ids); invalidation_controller_->SetRegisteredObjectIds( invalidator_registrar_.GetAllRegisteredIds()); logger_.OnUpdateIds(invalidator_registrar_.GetSanitizedHandlersIdsMap()); } void InvalidationServiceAndroid::UnregisterInvalidationHandler( syncer::InvalidationHandler* handler) { DCHECK(CalledOnValidThread()); invalidator_registrar_.UnregisterHandler(handler); logger_.OnUnregistration(handler->GetOwnerName()); } syncer::InvalidatorState InvalidationServiceAndroid::GetInvalidatorState() const { DCHECK(CalledOnValidThread()); return invalidator_state_; } std::string InvalidationServiceAndroid::GetInvalidatorClientId() const { DCHECK(CalledOnValidThread()); return invalidation_controller_->GetInvalidatorClientId(); } InvalidationLogger* InvalidationServiceAndroid::GetInvalidationLogger() { return &logger_; } void InvalidationServiceAndroid::RequestDetailedStatus( base::Callback<void(const base::DictionaryValue&)> return_callback) const { } IdentityProvider* InvalidationServiceAndroid::GetIdentityProvider() { return NULL; } void InvalidationServiceAndroid::Observe( int type, const content::NotificationSource& source, const content::NotificationDetails& details) { DCHECK(CalledOnValidThread()); DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE); content::Details<const syncer::ObjectIdInvalidationMap> state_details(details); const syncer::ObjectIdInvalidationMap object_invalidation_map = *(state_details.ptr()); // An empty map implies that we should invalidate all. const syncer::ObjectIdInvalidationMap& effective_invalidation_map = object_invalidation_map.Empty() ? syncer::ObjectIdInvalidationMap::InvalidateAll( invalidator_registrar_.GetAllRegisteredIds()) : object_invalidation_map; invalidator_registrar_.DispatchInvalidationsToHandlers( effective_invalidation_map); logger_.OnInvalidation(effective_invalidation_map); } void InvalidationServiceAndroid::TriggerStateChangeForTest( syncer::InvalidatorState state) { DCHECK(CalledOnValidThread()); invalidator_state_ = state; invalidator_registrar_.UpdateInvalidatorState(invalidator_state_); } } // namespace invalidation