• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 "components/invalidation/mock_ack_handler.h"
6 
7 #include "base/message_loop/message_loop_proxy.h"
8 #include "components/invalidation/ack_handle.h"
9 #include "components/invalidation/invalidation.h"
10 
11 namespace syncer {
12 
13 namespace {
14 
15 struct AckHandleMatcher {
16   AckHandleMatcher(const AckHandle& handle);
17   bool operator()(const syncer::Invalidation& invalidation) const;
18 
19   syncer::AckHandle handle_;
20 };
21 
AckHandleMatcher(const AckHandle & handle)22 AckHandleMatcher::AckHandleMatcher(const AckHandle& handle)
23   : handle_(handle) {}
24 
operator ()(const syncer::Invalidation & invalidation) const25 bool AckHandleMatcher::operator()(
26     const syncer::Invalidation& invalidation) const {
27   return handle_.Equals(invalidation.ack_handle());
28 }
29 
30 }  // namespace
31 
MockAckHandler()32 MockAckHandler::MockAckHandler() {}
33 
~MockAckHandler()34 MockAckHandler::~MockAckHandler() {}
35 
RegisterInvalidation(Invalidation * invalidation)36 void MockAckHandler::RegisterInvalidation(Invalidation* invalidation) {
37   unacked_invalidations_.push_back(*invalidation);
38   invalidation->SetAckHandler(AsWeakPtr(), base::MessageLoopProxy::current());
39 }
40 
RegisterUnsentInvalidation(Invalidation * invalidation)41 void MockAckHandler::RegisterUnsentInvalidation(Invalidation* invalidation) {
42   unsent_invalidations_.push_back(*invalidation);
43 }
44 
IsUnacked(const Invalidation & invalidation) const45 bool MockAckHandler::IsUnacked(const Invalidation& invalidation) const {
46   AckHandleMatcher matcher(invalidation.ack_handle());
47   InvalidationVector::const_iterator it = std::find_if(
48       unacked_invalidations_.begin(),
49       unacked_invalidations_.end(),
50       matcher);
51   return it != unacked_invalidations_.end();
52 }
53 
IsAcknowledged(const Invalidation & invalidation) const54 bool MockAckHandler::IsAcknowledged(const Invalidation& invalidation) const {
55   AckHandleMatcher matcher(invalidation.ack_handle());
56   InvalidationVector::const_iterator it = std::find_if(
57       acked_invalidations_.begin(),
58       acked_invalidations_.end(),
59       matcher);
60   return it != acked_invalidations_.end();
61 }
62 
IsDropped(const Invalidation & invalidation) const63 bool MockAckHandler::IsDropped(const Invalidation& invalidation) const {
64   AckHandleMatcher matcher(invalidation.ack_handle());
65   InvalidationVector::const_iterator it = std::find_if(
66       dropped_invalidations_.begin(),
67       dropped_invalidations_.end(),
68       matcher);
69   return it != dropped_invalidations_.end();
70 }
71 
IsUnsent(const Invalidation & invalidation) const72 bool MockAckHandler::IsUnsent(const Invalidation& invalidation) const {
73   AckHandleMatcher matcher(invalidation.ack_handle());
74   InvalidationVector::const_iterator it1 = std::find_if(
75       unsent_invalidations_.begin(),
76       unsent_invalidations_.end(),
77       matcher);
78   return it1 != unsent_invalidations_.end();
79 }
80 
AllInvalidationsAccountedFor() const81 bool MockAckHandler::AllInvalidationsAccountedFor() const {
82   return unacked_invalidations_.empty() && unrecovered_drop_events_.empty();
83 }
84 
Acknowledge(const invalidation::ObjectId & id,const AckHandle & handle)85 void MockAckHandler::Acknowledge(
86     const invalidation::ObjectId& id,
87     const AckHandle& handle) {
88   AckHandleMatcher matcher(handle);
89   InvalidationVector::iterator it = std::find_if(
90       unacked_invalidations_.begin(),
91       unacked_invalidations_.end(),
92       matcher);
93   if (it != unacked_invalidations_.end()) {
94     acked_invalidations_.push_back(*it);
95     unacked_invalidations_.erase(it);
96   }
97 
98   IdHandleMap::iterator it2 = unrecovered_drop_events_.find(id);
99   if (it2 != unrecovered_drop_events_.end() && it2->second.Equals(handle)) {
100     unrecovered_drop_events_.erase(it2);
101   }
102 }
103 
Drop(const invalidation::ObjectId & id,const AckHandle & handle)104 void MockAckHandler::Drop(
105     const invalidation::ObjectId& id,
106     const AckHandle& handle) {
107   AckHandleMatcher matcher(handle);
108   InvalidationVector::iterator it = std::find_if(
109       unacked_invalidations_.begin(),
110       unacked_invalidations_.end(),
111       matcher);
112   if (it != unacked_invalidations_.end()) {
113     dropped_invalidations_.push_back(*it);
114     unacked_invalidations_.erase(it);
115   }
116   unrecovered_drop_events_.erase(id);
117   unrecovered_drop_events_.insert(std::make_pair(id, handle));
118 }
119 
120 }  // namespace syncer
121