Home | History | Annotate | Download | only in invalidation
      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