Index: chrome/browser/android_invalidation_service.cc |
diff --git a/chrome/browser/android_invalidation_service.cc b/chrome/browser/android_invalidation_service.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0bfcb73a1a850bc4fc5c9a89470c4c017c52b34e |
--- /dev/null |
+++ b/chrome/browser/android_invalidation_service.cc |
@@ -0,0 +1,85 @@ |
+// 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/android_invalidation_service.h" |
+ |
+#include "chrome/common/chrome_notification_types.h" |
+#include "content/public/browser/notification_service.h" |
+ |
+AndroidInvalidationService::AndroidInvalidationService() { } |
+ |
+AndroidInvalidationService::~AndroidInvalidationService() { } |
+ |
+void AndroidInvalidationService::Init(Profile* profile) { |
+ DCHECK(CalledOnValidThread()); |
+ registrar_.Add(this, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE, |
+ content::Source<Profile>(profile)); |
+} |
+ |
+void AndroidInvalidationService::RegisterInvalidationHandler( |
+ syncer::InvalidationHandler* handler) { |
+ DCHECK(CalledOnValidThread()); |
+ invalidator_registrar_.RegisterHandler(handler); |
+} |
+ |
+void AndroidInvalidationService::UpdateRegisteredInvalidationIds( |
+ syncer::InvalidationHandler* handler, |
+ const syncer::ObjectIdSet& ids) { |
+ DCHECK(CalledOnValidThread()); |
+ invalidator_registrar_.UpdateRegisteredIds(handler, ids); |
+} |
+ |
+void AndroidInvalidationService::UnregisterInvalidationHandler( |
+ syncer::InvalidationHandler* handler) { |
+ DCHECK(CalledOnValidThread()); |
+ invalidator_registrar_.UnregisterHandler(handler); |
+} |
+ |
+void AndroidInvalidationService::AcknowledgeInvalidation( |
+ const invalidation::ObjectId& id, |
+ const syncer::AckHandle& ack_handle) { |
+ DCHECK(CalledOnValidThread()); |
+ // Do nothing. The Android invalidator does not support ack tracking. |
+} |
+ |
+syncer::InvalidatorState |
+AndroidInvalidationService::GetInvalidatorState() const { |
+ DCHECK(CalledOnValidThread()); |
+ return syncer::INVALIDATIONS_ENABLED; |
+} |
+ |
+std::string AndroidInvalidationService::GetInvalidatorClientId() const { |
+ DCHECK(CalledOnValidThread()); |
+ // TODO: Return a valid ID here. See crbug.com/172391. |
+ return "BogusClientId"; |
+} |
+ |
+void AndroidInvalidationService::Observe( |
+ int type, |
+ const content::NotificationSource& source, |
+ const content::NotificationDetails& details) { |
+ DCHECK(CalledOnValidThread()); |
+ DCHECK_EQ(type, chrome::NOTIFICATION_SYNC_REFRESH_REMOTE); |
+ |
+ // TODO(akalin): Use ObjectIdInvalidationMap here instead. We'll have to |
+ // make sure all emitters of the relevant notifications also use |
+ // ObjectIdInvalidationMap. |
+ content::Details<const syncer::ModelTypeInvalidationMap> |
+ state_details(details); |
+ const syncer::ModelTypeInvalidationMap& model_type_invalidation_map = |
+ *(state_details.ptr()); |
+ syncer::ObjectIdInvalidationMap object_invalidation_map = |
+ ModelTypeInvalidationMapToObjectIdInvalidationMap( |
+ model_type_invalidation_map); |
+ |
+ // An empty map implies that we should invalidate all. |
+ const syncer::ObjectIdInvalidationMap& effective_invalidation_map = |
+ object_invalidation_map.empty() ? |
+ ObjectIdSetToInvalidationMap( |
+ invalidator_registrar_.GetAllRegisteredIds(), std::string()) : |
+ object_invalidation_map; |
+ |
+ invalidator_registrar_.DispatchInvalidationsToHandlers( |
+ effective_invalidation_map); |
+} |