mock_ack_handler.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file.
41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "sync/notifier/mock_ack_handler.h"
61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "sync/internal_api/public/base/ack_handle.h"
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "sync/internal_api/public/base/invalidation.h"
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace syncer {
111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace {
131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)struct AckHandleMatcher {
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  AckHandleMatcher(const AckHandle& handle);
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  bool operator()(const syncer::Invalidation& invalidation) const;
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  syncer::AckHandle handle_;
191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)};
201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)AckHandleMatcher::AckHandleMatcher(const AckHandle& handle)
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  : handle_(handle) {}
231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool AckHandleMatcher::operator()(
251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const syncer::Invalidation& invalidation) const {
261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return handle_.Equals(invalidation.ack_handle());
271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}  // namespace
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)MockAckHandler::MockAckHandler() {}
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)MockAckHandler::~MockAckHandler() {}
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MockAckHandler::RegisterInvalidation(Invalidation* invalidation) {
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  unacked_invalidations_.push_back(*invalidation);
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  invalidation->set_ack_handler(WeakHandleThis());
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MockAckHandler::RegisterUnsentInvalidation(Invalidation* invalidation) {
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  unsent_invalidations_.push_back(*invalidation);
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool MockAckHandler::IsUnacked(const Invalidation& invalidation) const {
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  AckHandleMatcher matcher(invalidation.ack_handle());
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  InvalidationVector::const_iterator it = std::find_if(
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      unacked_invalidations_.begin(),
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      unacked_invalidations_.end(),
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      matcher);
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return it != unacked_invalidations_.end();
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool MockAckHandler::IsUnsent(const Invalidation& invalidation) const {
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  AckHandleMatcher matcher(invalidation.ack_handle());
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  InvalidationVector::const_iterator it1 = std::find_if(
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      unsent_invalidations_.begin(),
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      unsent_invalidations_.end(),
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      matcher);
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return it1 != unsent_invalidations_.end();
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MockAckHandler::Acknowledge(
631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const invalidation::ObjectId& id,
641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const AckHandle& handle) {
651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  AckHandleMatcher matcher(handle);
661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  InvalidationVector::iterator it = std::find_if(
671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      unacked_invalidations_.begin(),
681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      unacked_invalidations_.end(),
691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      matcher);
701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (it != unacked_invalidations_.end()) {
711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    acked_invalidations_.push_back(*it);
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    unacked_invalidations_.erase(it);
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MockAckHandler::Drop(
771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const invalidation::ObjectId& id,
781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const AckHandle& handle) {
791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WeakHandle<AckHandler> MockAckHandler::WeakHandleThis() {
821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return WeakHandle<AckHandler>(AsWeakPtr());
831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}  // namespace syncer
86