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 "chrome/browser/chrome_notification_types.h" 8 #include "content/public/browser/notification_service.h" 9 10 namespace invalidation { 11 12 InvalidationServiceAndroid::InvalidationServiceAndroid(Profile* profile) 13 : invalidator_state_(syncer::INVALIDATIONS_ENABLED) { 14 DCHECK(CalledOnValidThread()); 15 registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE, 16 content::Source<Profile>(profile)); 17 } 18 19 InvalidationServiceAndroid::~InvalidationServiceAndroid() { } 20 21 void InvalidationServiceAndroid::RegisterInvalidationHandler( 22 syncer::InvalidationHandler* handler) { 23 DCHECK(CalledOnValidThread()); 24 invalidator_registrar_.RegisterHandler(handler); 25 } 26 27 void InvalidationServiceAndroid::UpdateRegisteredInvalidationIds( 28 syncer::InvalidationHandler* handler, 29 const syncer::ObjectIdSet& ids) { 30 DCHECK(CalledOnValidThread()); 31 invalidator_registrar_.UpdateRegisteredIds(handler, ids); 32 } 33 34 void InvalidationServiceAndroid::UnregisterInvalidationHandler( 35 syncer::InvalidationHandler* handler) { 36 DCHECK(CalledOnValidThread()); 37 invalidator_registrar_.UnregisterHandler(handler); 38 } 39 40 void InvalidationServiceAndroid::AcknowledgeInvalidation( 41 const invalidation::ObjectId& id, 42 const syncer::AckHandle& ack_handle) { 43 DCHECK(CalledOnValidThread()); 44 // Do nothing. The Android invalidator does not support ack tracking. 45 } 46 47 syncer::InvalidatorState 48 InvalidationServiceAndroid::GetInvalidatorState() const { 49 DCHECK(CalledOnValidThread()); 50 return invalidator_state_; 51 } 52 53 std::string InvalidationServiceAndroid::GetInvalidatorClientId() const { 54 DCHECK(CalledOnValidThread()); 55 // TODO: Return a valid ID here. See crbug.com/172391. 56 return "Bogus"; 57 } 58 59 void InvalidationServiceAndroid::Observe( 60 int type, 61 const content::NotificationSource& source, 62 const content::NotificationDetails& details) { 63 DCHECK(CalledOnValidThread()); 64 DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE); 65 66 content::Details<const syncer::ObjectIdInvalidationMap> 67 state_details(details); 68 const syncer::ObjectIdInvalidationMap object_invalidation_map = 69 *(state_details.ptr()); 70 71 // An empty map implies that we should invalidate all. 72 const syncer::ObjectIdInvalidationMap& effective_invalidation_map = 73 object_invalidation_map.empty() ? 74 ObjectIdSetToInvalidationMap( 75 invalidator_registrar_.GetAllRegisteredIds(), 76 syncer::Invalidation::kUnknownVersion, 77 std::string()) : 78 object_invalidation_map; 79 80 invalidator_registrar_.DispatchInvalidationsToHandlers( 81 effective_invalidation_map); 82 } 83 84 void InvalidationServiceAndroid::TriggerStateChangeForTest( 85 syncer::InvalidatorState state) { 86 DCHECK(CalledOnValidThread()); 87 invalidator_state_ = state; 88 invalidator_registrar_.UpdateInvalidatorState(invalidator_state_); 89 } 90 91 } // namespace invalidation 92