// 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.

#ifndef SYNC_NOTIFIER_MOCK_ACK_HANDLER_H_
#define SYNC_NOTIFIER_MOCK_ACK_HANDLER_H_

#include <map>
#include <vector>

#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
#include "sync/base/sync_export.h"
#include "sync/internal_api/public/util/weak_handle.h"
#include "sync/notifier/ack_handler.h"
#include "sync/notifier/invalidation_util.h"

namespace syncer {

class Invalidation;

// This AckHandler implementation colaborates with the FakeInvalidationService
// to enable unit tests to assert that invalidations are being acked properly.
class SYNC_EXPORT MockAckHandler
  : public AckHandler,
    public base::SupportsWeakPtr<MockAckHandler> {
 public:
  MockAckHandler();
  virtual ~MockAckHandler();

  // Sets up some internal state to track this invalidation, and modifies it so
  // that its Acknowledge() and Drop() methods will route back to us.
  void RegisterInvalidation(Invalidation* invalidation);

  // No one was listening for this invalidation, so no one will receive it or
  // ack it.  We keep track of it anyway to let tests make assertions about it.
  void RegisterUnsentInvalidation(Invalidation* invalidation);

  // Returns true if the specified invalidaition has been delivered, but has not
  // been acknowledged yet.
  bool IsUnacked(const Invalidation& invalidation) const;

  // Returns true if the specified invalidation has been delivered and
  // acknowledged.
  bool IsAcknowledged(const Invalidation& invalidation) const;

  // Returns true if the specified invalidation has been delivered and
  // dropped.
  bool IsDropped(const Invalidation& invalidation) const;

  // Returns true if the specified invalidation was never delivered.
  bool IsUnsent(const Invalidation& invalidation) const;

  // Retruns true if all invalidations have been acked and all drops recovered.
  bool AllInvalidationsAccountedFor() const;

  // Implementation of AckHandler.
  virtual void Acknowledge(
      const invalidation::ObjectId& id,
      const AckHandle& handle) OVERRIDE;
  virtual void Drop(
      const invalidation::ObjectId& id,
      const AckHandle& handle) OVERRIDE;

 private:
  typedef std::vector<syncer::Invalidation> InvalidationVector;
  typedef std::map<invalidation::ObjectId,
                   AckHandle,
                   ObjectIdLessThan> IdHandleMap;

  WeakHandle<AckHandler> WeakHandleThis();

  InvalidationVector unsent_invalidations_;
  InvalidationVector unacked_invalidations_;
  InvalidationVector acked_invalidations_;
  InvalidationVector dropped_invalidations_;

  IdHandleMap unrecovered_drop_events_;
};

}  // namespace syncer

#endif  // SYNC_NOTIFIER_MOCK_ACK_HANDLER_H_
