1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef SYNC_INTERNAL_API_PUBLIC_BASE_INVALIDATION_INTERFACE_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define SYNC_INTERNAL_API_PUBLIC_BASE_INVALIDATION_INTERFACE_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <string>
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/basictypes.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "sync/base/sync_export.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace syncer {
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// An interface that wraps sync's interactions with the component that provides
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// it with invalidations.
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SYNC_EXPORT InvalidationInterface {
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Orders invalidations based on version number and IsUnknownVersion().
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static bool LessThanByVersion(const InvalidationInterface& a,
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                const InvalidationInterface& b);
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  InvalidationInterface();
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~InvalidationInterface();
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns true if this is an 'unknown version' invalidation.
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Such invalidations have no valid payload or version number.
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool IsUnknownVersion() const = 0;
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns the payload of this item.
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // DCHECKs if this is an unknown version invalidation.
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual const std::string& GetPayload() const = 0;
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Retursn the version of this item.
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // DCHECKs if this is an unknown version invalidation.
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  //
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // It is preferable to use the LessThan() function, which handles unknown
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // versions properly, rather than this function.
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual int64 GetVersion() const = 0;
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // This function will be called when the invalidation has been handled
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // successfully.
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Acknowledge() = 0;
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // This function should be called if a lack of buffer space required that we
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // drop this invalidation.
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  //
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // To indicate recovery from a drop event, the receiver of this invalidation
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // will call Acknowledge() on the most recently dropped invalidation.
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Drop() = 0;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace syncer
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
56