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