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