1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/invalidation/invalidation_service_android.h" 6 7#include "base/callback.h" 8#include "chrome/browser/chrome_notification_types.h" 9#include "chrome/browser/invalidation/invalidation_controller_android.h" 10#include "components/invalidation/object_id_invalidation_map.h" 11#include "content/public/browser/notification_service.h" 12 13namespace invalidation { 14 15InvalidationServiceAndroid::InvalidationServiceAndroid( 16 Profile* profile, 17 InvalidationControllerAndroid* invalidation_controller) 18 : invalidator_state_(syncer::INVALIDATIONS_ENABLED), 19 invalidation_controller_(invalidation_controller), 20 logger_() { 21 DCHECK(CalledOnValidThread()); 22 DCHECK(invalidation_controller); 23 registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE, 24 content::Source<Profile>(profile)); 25} 26 27InvalidationServiceAndroid::~InvalidationServiceAndroid() { } 28 29void InvalidationServiceAndroid::RegisterInvalidationHandler( 30 syncer::InvalidationHandler* handler) { 31 DCHECK(CalledOnValidThread()); 32 invalidator_registrar_.RegisterHandler(handler); 33 logger_.OnRegistration(handler->GetOwnerName()); 34} 35 36void InvalidationServiceAndroid::UpdateRegisteredInvalidationIds( 37 syncer::InvalidationHandler* handler, 38 const syncer::ObjectIdSet& ids) { 39 DCHECK(CalledOnValidThread()); 40 invalidator_registrar_.UpdateRegisteredIds(handler, ids); 41 invalidation_controller_->SetRegisteredObjectIds( 42 invalidator_registrar_.GetAllRegisteredIds()); 43 logger_.OnUpdateIds(invalidator_registrar_.GetSanitizedHandlersIdsMap()); 44} 45 46void InvalidationServiceAndroid::UnregisterInvalidationHandler( 47 syncer::InvalidationHandler* handler) { 48 DCHECK(CalledOnValidThread()); 49 invalidator_registrar_.UnregisterHandler(handler); 50 logger_.OnUnregistration(handler->GetOwnerName()); 51} 52 53syncer::InvalidatorState 54InvalidationServiceAndroid::GetInvalidatorState() const { 55 DCHECK(CalledOnValidThread()); 56 return invalidator_state_; 57} 58 59std::string InvalidationServiceAndroid::GetInvalidatorClientId() const { 60 DCHECK(CalledOnValidThread()); 61 return invalidation_controller_->GetInvalidatorClientId(); 62} 63 64InvalidationLogger* InvalidationServiceAndroid::GetInvalidationLogger() { 65 return &logger_; 66} 67 68void InvalidationServiceAndroid::RequestDetailedStatus( 69 base::Callback<void(const base::DictionaryValue&)> return_callback) const { 70} 71 72IdentityProvider* InvalidationServiceAndroid::GetIdentityProvider() { 73 return NULL; 74} 75 76void InvalidationServiceAndroid::Observe( 77 int type, 78 const content::NotificationSource& source, 79 const content::NotificationDetails& details) { 80 DCHECK(CalledOnValidThread()); 81 DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE); 82 83 content::Details<const syncer::ObjectIdInvalidationMap> 84 state_details(details); 85 const syncer::ObjectIdInvalidationMap object_invalidation_map = 86 *(state_details.ptr()); 87 88 // An empty map implies that we should invalidate all. 89 const syncer::ObjectIdInvalidationMap& effective_invalidation_map = 90 object_invalidation_map.Empty() ? 91 syncer::ObjectIdInvalidationMap::InvalidateAll( 92 invalidator_registrar_.GetAllRegisteredIds()) : 93 object_invalidation_map; 94 95 invalidator_registrar_.DispatchInvalidationsToHandlers( 96 effective_invalidation_map); 97 logger_.OnInvalidation(effective_invalidation_map); 98} 99 100void InvalidationServiceAndroid::TriggerStateChangeForTest( 101 syncer::InvalidatorState state) { 102 DCHECK(CalledOnValidThread()); 103 invalidator_state_ = state; 104 invalidator_registrar_.UpdateInvalidatorState(invalidator_state_); 105} 106 107} // namespace invalidation 108