Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3946)

Unified Diff: chrome/browser/android_invalidation_service.cc

Issue 13197004: Draft: InvalidationService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Passes tests Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+}

Powered by Google App Engine
This is Rietveld 408576698