Index: chrome/browser/invalidation/fake_invalidation_service.cc |
diff --git a/chrome/browser/invalidation/fake_invalidation_service.cc b/chrome/browser/invalidation/fake_invalidation_service.cc |
index a19f4fb092b4b68777bd96cee070c8af6b61e2fb..dcf5c2f05aeb3aa0194cbdce820ce4cc604abcd9 100644 |
--- a/chrome/browser/invalidation/fake_invalidation_service.cc |
+++ b/chrome/browser/invalidation/fake_invalidation_service.cc |
@@ -9,7 +9,9 @@ |
namespace invalidation { |
FakeInvalidationService::FakeInvalidationService() |
- : client_id_(GenerateInvalidatorClientId()) { |
+ : client_id_(GenerateInvalidatorClientId()), |
+ received_invalid_acknowledgement_(false) { |
+ invalidator_registrar_.UpdateInvalidatorState(syncer::INVALIDATIONS_ENABLED); |
} |
FakeInvalidationService::~FakeInvalidationService() { |
@@ -34,18 +36,36 @@ void FakeInvalidationService::UnregisterInvalidationHandler( |
void FakeInvalidationService::AcknowledgeInvalidation( |
const invalidation::ObjectId& id, |
const syncer::AckHandle& ack_handle) { |
- // TODO(sync): Use assertions to ensure this function is invoked correctly. |
+ // 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 syncer::INVALIDATIONS_ENABLED; |
+ return invalidator_registrar_.GetInvalidatorState(); |
} |
std::string FakeInvalidationService::GetInvalidatorClientId() const { |
return client_id_; |
} |
-void FakeInvalidationService::EmitInvalidationForTest( |
+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) { |
@@ -57,8 +77,23 @@ void FakeInvalidationService::EmitInvalidationForTest( |
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 |