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

Side by Side Diff: sync/notifier/sync_invalidation_listener.cc

Issue 23441042: Refactor common invalidation framework types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move DEPS rule Created 7 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "sync/notifier/sync_invalidation_listener.h" 5 #include "sync/notifier/sync_invalidation_listener.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/tracked_objects.h" 13 #include "base/tracked_objects.h"
14 #include "google/cacheinvalidation/include/invalidation-client.h" 14 #include "google/cacheinvalidation/include/invalidation-client.h"
15 #include "google/cacheinvalidation/include/types.h" 15 #include "google/cacheinvalidation/include/types.h"
16 #include "google/cacheinvalidation/types.pb.h" 16 #include "google/cacheinvalidation/types.pb.h"
17 #include "jingle/notifier/listener/push_client.h" 17 #include "jingle/notifier/listener/push_client.h"
18 #include "sync/notifier/invalidation_util.h" 18 #include "sync/notifier/invalidation_util.h"
19 #include "sync/notifier/registration_manager.h" 19 #include "sync/notifier/registration_manager.h"
20 20
21 namespace { 21 namespace {
22 22
23 const char kApplicationName[] = "chrome-sync"; 23 const char kApplicationName[] = "chrome-sync";
24 24
25 static const int64 kUnknownVersion = -1;
26
25 } // namespace 27 } // namespace
26 28
27 namespace syncer { 29 namespace syncer {
28 30
29 SyncInvalidationListener::Delegate::~Delegate() {} 31 SyncInvalidationListener::Delegate::~Delegate() {}
30 32
31 SyncInvalidationListener::SyncInvalidationListener( 33 SyncInvalidationListener::SyncInvalidationListener(
32 base::TickClock* tick_clock, 34 base::TickClock* tick_clock,
33 scoped_ptr<notifier::PushClient> push_client) 35 scoped_ptr<notifier::PushClient> push_client)
34 : weak_ptr_factory_(this), 36 : weak_ptr_factory_(this),
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 const invalidation::ObjectId& object_id, 215 const invalidation::ObjectId& object_id,
214 const invalidation::AckHandle& ack_handle) { 216 const invalidation::AckHandle& ack_handle) {
215 DCHECK(CalledOnValidThread()); 217 DCHECK(CalledOnValidThread());
216 DCHECK_EQ(client, invalidation_client_.get()); 218 DCHECK_EQ(client, invalidation_client_.get());
217 DVLOG(1) << "InvalidateUnknownVersion"; 219 DVLOG(1) << "InvalidateUnknownVersion";
218 220
219 ObjectIdSet ids; 221 ObjectIdSet ids;
220 ids.insert(object_id); 222 ids.insert(object_id);
221 PrepareInvalidation( 223 PrepareInvalidation(
222 ids, 224 ids,
223 Invalidation::kUnknownVersion, 225 kUnknownVersion,
224 std::string(), 226 std::string(),
225 client, 227 client,
226 ack_handle); 228 ack_handle);
227 } 229 }
228 230
229 // This should behave as if we got an invalidation with version 231 // This should behave as if we got an invalidation with version
230 // UNKNOWN_OBJECT_VERSION for all known data types. 232 // UNKNOWN_OBJECT_VERSION for all known data types.
231 void SyncInvalidationListener::InvalidateAll( 233 void SyncInvalidationListener::InvalidateAll(
232 invalidation::InvalidationClient* client, 234 invalidation::InvalidationClient* client,
233 const invalidation::AckHandle& ack_handle) { 235 const invalidation::AckHandle& ack_handle) {
234 DCHECK(CalledOnValidThread()); 236 DCHECK(CalledOnValidThread());
235 DCHECK_EQ(client, invalidation_client_.get()); 237 DCHECK_EQ(client, invalidation_client_.get());
236 DVLOG(1) << "InvalidateAll"; 238 DVLOG(1) << "InvalidateAll";
237 239
238 PrepareInvalidation( 240 PrepareInvalidation(
239 registered_ids_, 241 registered_ids_,
240 Invalidation::kUnknownVersion, 242 kUnknownVersion,
241 std::string(), 243 std::string(),
242 client, 244 client,
243 ack_handle); 245 ack_handle);
244 } 246 }
245 247
246 void SyncInvalidationListener::PrepareInvalidation( 248 void SyncInvalidationListener::PrepareInvalidation(
247 const ObjectIdSet& ids, 249 const ObjectIdSet& ids,
248 int64 version, 250 int64 version,
249 const std::string& payload, 251 const std::string& payload,
250 invalidation::InvalidationClient* client, 252 invalidation::InvalidationClient* client,
(...skipping 17 matching lines...) Expand all
268 } 270 }
269 271
270 void SyncInvalidationListener::EmitInvalidation( 272 void SyncInvalidationListener::EmitInvalidation(
271 const ObjectIdSet& ids, 273 const ObjectIdSet& ids,
272 int64 version, 274 int64 version,
273 const std::string& payload, 275 const std::string& payload,
274 invalidation::InvalidationClient* client, 276 invalidation::InvalidationClient* client,
275 const invalidation::AckHandle& ack_handle, 277 const invalidation::AckHandle& ack_handle,
276 const AckHandleMap& local_ack_handles) { 278 const AckHandleMap& local_ack_handles) {
277 DCHECK(CalledOnValidThread()); 279 DCHECK(CalledOnValidThread());
278 ObjectIdInvalidationMap invalidation_map = 280
279 ObjectIdSetToInvalidationMap(ids, version, payload); 281 ObjectIdInvalidationMap invalidation_map;
280 for (AckHandleMap::const_iterator it = local_ack_handles.begin(); 282 for (AckHandleMap::const_iterator it = local_ack_handles.begin();
281 it != local_ack_handles.end(); ++it) { 283 it != local_ack_handles.end(); ++it) {
282 // Update in-memory copy of the invalidation state. 284 // Update in-memory copy of the invalidation state.
283 invalidation_state_map_[it->first].expected = it->second; 285 invalidation_state_map_[it->first].expected = it->second;
284 invalidation_map[it->first].ack_handle = it->second; 286
287 if (version == kUnknownVersion) {
288 Invalidation inv = Invalidation::InitUnknownVersion(it->first);
289 inv.set_ack_handle(it->second);
290 invalidation_map.Insert(inv);
291 } else {
292 Invalidation inv = Invalidation::Init(it->first, version, payload);
293 inv.set_ack_handle(it->second);
294 invalidation_map.Insert(inv);
295 }
285 } 296 }
286 ack_tracker_.Track(ids); 297 ack_tracker_.Track(ids);
287 delegate_->OnInvalidate(invalidation_map); 298 delegate_->OnInvalidate(invalidation_map);
288 client->Acknowledge(ack_handle); 299 client->Acknowledge(ack_handle);
289 } 300 }
290 301
291 void SyncInvalidationListener::OnTimeout(const ObjectIdSet& ids) { 302 void SyncInvalidationListener::OnTimeout(const ObjectIdSet& ids) {
292 ObjectIdInvalidationMap invalidation_map; 303 ObjectIdInvalidationMap invalidation_map;
293 for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) { 304 for (ObjectIdSet::const_iterator it = ids.begin(); it != ids.end(); ++it) {
294 Invalidation invalidation; 305 if (invalidation_state_map_[*it].version == kUnknownVersion) {
295 invalidation.ack_handle = invalidation_state_map_[*it].expected; 306 Invalidation inv = Invalidation::InitUnknownVersion(*it);
296 invalidation.version = invalidation_state_map_[*it].version; 307 inv.set_ack_handle(invalidation_state_map_[*it].expected);
297 invalidation.payload = invalidation_state_map_[*it].payload; 308 invalidation_map.Insert(inv);
298 invalidation_map.insert(std::make_pair(*it, invalidation)); 309 } else {
310 Invalidation inv = Invalidation::Init(
311 *it,
312 invalidation_state_map_[*it].version,
313 invalidation_state_map_[*it].payload);
314 inv.set_ack_handle(invalidation_state_map_[*it].expected);
315 invalidation_map.Insert(inv);
316 }
299 } 317 }
300
301 delegate_->OnInvalidate(invalidation_map); 318 delegate_->OnInvalidate(invalidation_map);
302 } 319 }
303 320
304 void SyncInvalidationListener::InformRegistrationStatus( 321 void SyncInvalidationListener::InformRegistrationStatus(
305 invalidation::InvalidationClient* client, 322 invalidation::InvalidationClient* client,
306 const invalidation::ObjectId& object_id, 323 const invalidation::ObjectId& object_id,
307 InvalidationListener::RegistrationState new_state) { 324 InvalidationListener::RegistrationState new_state) {
308 DCHECK(CalledOnValidThread()); 325 DCHECK(CalledOnValidThread());
309 DCHECK_EQ(client, invalidation_client_.get()); 326 DCHECK_EQ(client, invalidation_client_.get());
310 DVLOG(1) << "InformRegistrationStatus: " 327 DVLOG(1) << "InformRegistrationStatus: "
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 EmitStateChange(); 479 EmitStateChange();
463 } 480 }
464 481
465 void SyncInvalidationListener::OnIncomingNotification( 482 void SyncInvalidationListener::OnIncomingNotification(
466 const notifier::Notification& notification) { 483 const notifier::Notification& notification) {
467 DCHECK(CalledOnValidThread()); 484 DCHECK(CalledOnValidThread());
468 // Do nothing, since this is already handled by |invalidation_client_|. 485 // Do nothing, since this is already handled by |invalidation_client_|.
469 } 486 }
470 487
471 } // namespace syncer 488 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/notifier/single_object_invalidation_set_unittest.cc ('k') | sync/notifier/sync_invalidation_listener_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698