| // Copyright 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/invalidation/fake_invalidation_service.h" |
| |
| #include "chrome/browser/invalidation/invalidation_service_util.h" |
| |
| namespace invalidation { |
| |
| FakeInvalidationService::FakeInvalidationService() |
| : client_id_(GenerateInvalidatorClientId()), |
| received_invalid_acknowledgement_(false) { |
| invalidator_registrar_.UpdateInvalidatorState(syncer::INVALIDATIONS_ENABLED); |
| } |
| |
| FakeInvalidationService::~FakeInvalidationService() { |
| } |
| |
| void FakeInvalidationService::RegisterInvalidationHandler( |
| syncer::InvalidationHandler* handler) { |
| invalidator_registrar_.RegisterHandler(handler); |
| } |
| |
| void FakeInvalidationService::UpdateRegisteredInvalidationIds( |
| syncer::InvalidationHandler* handler, |
| const syncer::ObjectIdSet& ids) { |
| invalidator_registrar_.UpdateRegisteredIds(handler, ids); |
| } |
| |
| void FakeInvalidationService::UnregisterInvalidationHandler( |
| syncer::InvalidationHandler* handler) { |
| invalidator_registrar_.UnregisterHandler(handler); |
| } |
| |
| void FakeInvalidationService::AcknowledgeInvalidation( |
| const invalidation::ObjectId& id, |
| const syncer::AckHandle& ack_handle) { |
| // Try to find the given handle and object id in the unacknowledged list. |
| AckHandleList::iterator handle; |
| AckHandleList::iterator begin = unacknowledged_handles_.begin(); |
| AckHandleList::iterator end = unacknowledged_handles_.end(); |
| for (handle = begin; handle != end; ++handle) |
| if (handle->first.Equals(ack_handle) && handle->second == id) |
| break; |
| if (handle == end) |
| received_invalid_acknowledgement_ = false; |
| else |
| unacknowledged_handles_.erase(handle); |
| |
| // Add to the acknowledged list. |
| acknowledged_handles_.push_back(AckHandleList::value_type(ack_handle, id)); |
| } |
| |
| syncer::InvalidatorState FakeInvalidationService::GetInvalidatorState() const { |
| return invalidator_registrar_.GetInvalidatorState(); |
| } |
| |
| std::string FakeInvalidationService::GetInvalidatorClientId() const { |
| return client_id_; |
| } |
| |
| void FakeInvalidationService::SetInvalidatorState( |
| syncer::InvalidatorState state) { |
| invalidator_registrar_.UpdateInvalidatorState(state); |
| } |
| |
| syncer::AckHandle FakeInvalidationService::EmitInvalidationForTest( |
| const invalidation::ObjectId& object_id, |
| int64 version, |
| const std::string& payload) { |
| syncer::ObjectIdInvalidationMap invalidation_map; |
| |
| syncer::Invalidation inv; |
| inv.version = version; |
| inv.payload = payload; |
| inv.ack_handle = syncer::AckHandle::CreateUnique(); |
| |
| invalidation_map.insert(std::make_pair(object_id, inv)); |
| unacknowledged_handles_.push_back( |
| AckHandleList::value_type(inv.ack_handle, object_id)); |
| |
| invalidator_registrar_.DispatchInvalidationsToHandlers(invalidation_map); |
| |
| return inv.ack_handle; |
| } |
| |
| bool FakeInvalidationService::IsInvalidationAcknowledged( |
| const syncer::AckHandle& ack_handle) const { |
| // Try to find the given handle in the acknowledged list. |
| AckHandleList::const_iterator begin = acknowledged_handles_.begin(); |
| AckHandleList::const_iterator end = acknowledged_handles_.end(); |
| for (AckHandleList::const_iterator handle = begin; handle != end; ++handle) |
| if (handle->first.Equals(ack_handle)) |
| return true; |
| return false; |
| } |
| |
| } // namespace invalidation |