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 13 namespace invalidation { 14 15 InvalidationServiceAndroid::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 27 InvalidationServiceAndroid::~InvalidationServiceAndroid() { } 28 29 void InvalidationServiceAndroid::RegisterInvalidationHandler( 30 syncer::InvalidationHandler* handler) { 31 DCHECK(CalledOnValidThread()); 32 invalidator_registrar_.RegisterHandler(handler); 33 logger_.OnRegistration(handler->GetOwnerName()); 34 } 35 36 void 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 46 void InvalidationServiceAndroid::UnregisterInvalidationHandler( 47 syncer::InvalidationHandler* handler) { 48 DCHECK(CalledOnValidThread()); 49 invalidator_registrar_.UnregisterHandler(handler); 50 logger_.OnUnregistration(handler->GetOwnerName()); 51 } 52 53 syncer::InvalidatorState 54 InvalidationServiceAndroid::GetInvalidatorState() const { 55 DCHECK(CalledOnValidThread()); 56 return invalidator_state_; 57 } 58 59 std::string InvalidationServiceAndroid::GetInvalidatorClientId() const { 60 DCHECK(CalledOnValidThread()); 61 return invalidation_controller_->GetInvalidatorClientId(); 62 } 63 64 InvalidationLogger* InvalidationServiceAndroid::GetInvalidationLogger() { 65 return &logger_; 66 } 67 68 void InvalidationServiceAndroid::RequestDetailedStatus( 69 base::Callback<void(const base::DictionaryValue&)> return_callback) const { 70 } 71 72 IdentityProvider* InvalidationServiceAndroid::GetIdentityProvider() { 73 return NULL; 74 } 75 76 void 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 100 void 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