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_TEST_TRACKABLE_MOCK_INVALIDATION_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define SYNC_TEST_TRACKABLE_MOCK_INVALIDATION_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "sync/test/mock_invalidation.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace syncer {
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass MockInvalidationTracker;
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A variant of MockInvalidation that supports acknowledgements.
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch//
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// With the help of a MockInvalidationTracker, this can be used to test
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// sync's use of the Drop() and Acknowledge() methods.
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TrackableMockInvalidation : public MockInvalidation {
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  TrackableMockInvalidation(bool is_unknown_version,
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            int64 version,
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            const std::string& payload,
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            MockInvalidationTracker* tracker,
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            int tracking_id);
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~TrackableMockInvalidation();
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Forwards notice of the acknowledgement of this invalidation to the
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |tracker_|.
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Acknowledge() OVERRIDE;
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Forwards notice of the drop of this invalidation to the |tracker_|.
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void Drop() OVERRIDE;
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns the integer used to identify this object with the |tracker_|.
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int GetTrackingId();
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The MockInvalidationTracker that initialized this object, and which keeps
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // track of its acknowledgement status.  It is expected to outlive the
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // invalidations.  The data required for unit test assertions lives there.
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MockInvalidationTracker* tracker_;
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // An identifier that uniquely identifies this invalidation to its
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // |tracker_|.
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  //
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // This is necessary in part because invalidations may be short lived; the
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // invalidation may be deleted by the time we want to make assertions about
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // its state.
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  int tracking_id_;
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace syncer
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // SYNC_TEST_TRACKABLE_MOCK_INVALIDATION_H_
55