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 17 namespace base { 18 class DictionaryValue; 19 } // namespace base 20 21 namespace syncer { 22 23 // TODO(zea): One day get passwords playing nicely with the rest of encryption 24 // and get rid of this. 25 class 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. 44 struct 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 62 typedef std::vector<ChangeRecord> ChangeRecordList; 63 64 typedef Immutable<ChangeRecordList> ImmutableChangeRecordList; 65 66 } // namespace syncer 67 68 #endif // SYNC_INTERNAL_API_PUBLIC_CHANGE_RECORD_H_ 69