1// Copyright 2012 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 SYNC_INTERNAL_PUBLIC_API_CHANGE_RECORD_H_
6#define SYNC_INTERNAL_PUBLIC_API_CHANGE_RECORD_H_
7
8#include <vector>
9
10#include "base/basictypes.h"
11#include "base/memory/linked_ptr.h"
12#include "sync/base/sync_export.h"
13#include "sync/internal_api/public/util/immutable.h"
14#include "sync/protocol/password_specifics.pb.h"
15#include "sync/protocol/sync.pb.h"
16
17namespace base {
18class DictionaryValue;
19}  // namespace base
20
21namespace syncer {
22
23// TODO(zea): One day get passwords playing nicely with the rest of encryption
24// and get rid of this.
25class SYNC_EXPORT ExtraPasswordChangeRecordData {
26 public:
27  ExtraPasswordChangeRecordData();
28  explicit ExtraPasswordChangeRecordData(
29      const sync_pb::PasswordSpecificsData& data);
30  virtual ~ExtraPasswordChangeRecordData();
31
32  // Transfers ownership of the DictionaryValue to the caller.
33  virtual base::DictionaryValue* ToValue() const;
34
35  const sync_pb::PasswordSpecificsData& unencrypted() const;
36 private:
37  sync_pb::PasswordSpecificsData unencrypted_;
38};
39
40// ChangeRecord indicates a single item that changed as a result of a sync
41// operation.  This gives the sync id of the node that changed, and the type
42// of change.  To get the actual property values after an ADD or UPDATE, the
43// client should get the node with InitByIdLookup(), using the provided id.
44struct SYNC_EXPORT_PRIVATE ChangeRecord {
45  enum Action {
46    ACTION_ADD,
47    ACTION_DELETE,
48    ACTION_UPDATE,
49  };
50  ChangeRecord();
51  ~ChangeRecord();
52
53  // Transfers ownership of the DictionaryValue to the caller.
54  base::DictionaryValue* ToValue() const;
55
56  int64 id;
57  Action action;
58  sync_pb::EntitySpecifics specifics;
59  linked_ptr<ExtraPasswordChangeRecordData> extra;
60};
61
62typedef std::vector<ChangeRecord> ChangeRecordList;
63
64typedef Immutable<ChangeRecordList> ImmutableChangeRecordList;
65
66}  // namespace syncer
67
68#endif  // SYNC_INTERNAL_API_PUBLIC_CHANGE_RECORD_H_
69