1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_INVALIDATION_ACK_HANDLE_H_
6#define COMPONENTS_INVALIDATION_ACK_HANDLE_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/memory/scoped_ptr.h"
12#include "base/time/time.h"
13#include "components/invalidation/invalidation_export.h"
14
15namespace base {
16class DictionaryValue;
17}
18
19namespace syncer {
20
21// Opaque class that represents a local ack handle. We don't reuse the
22// invalidation ack handles to avoid unnecessary dependencies.
23class INVALIDATION_EXPORT AckHandle {
24 public:
25  static AckHandle CreateUnique();
26  static AckHandle InvalidAckHandle();
27
28  bool Equals(const AckHandle& other) const;
29
30  scoped_ptr<base::DictionaryValue> ToValue() const;
31  bool ResetFromValue(const base::DictionaryValue& value);
32
33  bool IsValid() const;
34
35  ~AckHandle();
36
37 private:
38  // Explicitly copyable and assignable for STL containers.
39  AckHandle(const std::string& state, base::Time timestamp);
40
41  std::string state_;
42  base::Time timestamp_;
43};
44
45}  // namespace syncer
46
47#endif  // COMPONENTS_INVALIDATION_ACK_HANDLE_H_
48