Index: chrome/browser/sync/engine/syncapi.h |
diff --git a/chrome/browser/sync/engine/syncapi.h b/chrome/browser/sync/engine/syncapi.h |
index 9a3da9b3e5ebd0861f16a746f821960ac78a01ab..cbaa670827d90d30d132bc43a5bae6706c755300 100644 |
--- a/chrome/browser/sync/engine/syncapi.h |
+++ b/chrome/browser/sync/engine/syncapi.h |
@@ -81,6 +81,7 @@ class WriteTransaction; |
namespace sync_pb { |
class AppSpecifics; |
class AutofillSpecifics; |
+class AutofillProfile2Specifics; |
class BookmarkSpecifics; |
class EntitySpecifics; |
class ExtensionSpecifics; |
@@ -127,6 +128,9 @@ struct SyncCredentials { |
// A valid BaseNode will never have an ID of zero. |
static const int64 kInvalidId = 0; |
+// Alias this to fit in the 80 character width. |
+using sync_pb::AutofillProfile2Specifics; |
+ |
// BaseNode wraps syncable::Entry, and corresponds to a single object's state. |
// This, like syncable::Entry, is intended for use on the stack. A valid |
// transaction is necessary to create a BaseNode or any of its children. |
@@ -149,7 +153,7 @@ class BaseNode { |
// metahandle). These ids are strictly local handles. They will persist |
// on this client, but the same object on a different client may have a |
// different ID value. |
- int64 GetId() const; |
+ virtual int64 GetId() const; |
// Nodes are hierarchically arranged into a single-rooted tree. |
// InitByRootLookup on ReadNode allows access to the root. GetParentId is |
@@ -195,6 +199,8 @@ class BaseNode { |
// data. Can only be called if GetModelType() == AUTOFILL. |
const sync_pb::AutofillSpecifics& GetAutofillSpecifics() const; |
+ virtual const AutofillProfile2Specifics& GetAutofillProfileSpecifics() const; |
+ |
// Getter specific to the NIGORI datatype. Returns protobuf |
// data. Can only be called if GetModelType() == NIGORI. |
const sync_pb::NigoriSpecifics& GetNigoriSpecifics() const; |
@@ -232,11 +238,11 @@ class BaseNode { |
// Return the ID of the node immediately after this in the sibling order. |
// For the last node in the ordering, return 0. |
- int64 GetSuccessorId() const; |
+ virtual int64 GetSuccessorId() const; |
// Return the ID of the first child of this node. If this node has no |
// children, return 0. |
- int64 GetFirstChildId() const; |
+ virtual int64 GetFirstChildId() const; |
// These virtual accessors provide access to data members of derived classes. |
virtual const syncable::Entry* GetEntry() const = 0; |
@@ -245,6 +251,14 @@ class BaseNode { |
protected: |
BaseNode(); |
virtual ~BaseNode(); |
+ |
+ // BaseNode object is used to read nodes continuously |
+ // from the db. In case of items like autofill entries |
+ // Potentially there could be thousands of entries. Instead |
+ // of deleting and recreating the entry each time make sure |
+ // provide a way to reset it. |
+ void Reset(); |
+ |
// The server has a size limit on client tags, so we generate a fixed length |
// hash locally. This also ensures that ModelTypes have unique namespaces. |
static std::string GenerateSyncableHash(syncable::ModelType model_type, |
@@ -256,9 +270,6 @@ class BaseNode { |
bool DecryptIfNecessary(syncable::Entry* entry); |
private: |
- // Node is meant for stack use only. |
- void* operator new(size_t size); |
- |
// If this node represents a password, this field will hold the actual |
// decrypted password data. |
scoped_ptr<sync_pb::PasswordSpecificsData> password_data_; |
@@ -436,6 +447,13 @@ class ReadNode : public BaseNode { |
explicit ReadNode(const BaseTransaction* transaction); |
virtual ~ReadNode(); |
+ // ReadNode object is used to read nodes continuously |
+ // from the db. In case of items like autofill entries |
+ // Potentially there could be thousands of entries. Instead |
+ // of deleting and recreating the entry each time make sure |
+ // provide a way to reset it. |
+ void Reset(); |
+ |
// A client must use one (and only one) of the following Init variants to |
// populate the node. |
@@ -457,9 +475,10 @@ class ReadNode : public BaseNode { |
virtual const syncable::Entry* GetEntry() const; |
virtual const BaseTransaction* GetTransaction() const; |
- private: |
- void* operator new(size_t size); // Node is meant for stack use only. |
+ protected: |
+ ReadNode(); |
+ private: |
// The underlying syncable object which this class wraps. |
syncable::Entry* entry_; |
@@ -492,6 +511,10 @@ class BaseTransaction { |
explicit BaseTransaction(UserShare* share); |
virtual ~BaseTransaction(); |
+ // For unit testing purpose. The entire class would be mocked. |
+ // So there is not point initializing anything here. |
+ BaseTransaction(); |
+ |
private: |
// A syncable ScopedDirLookup, which is the parent of syncable transactions. |
syncable::ScopedDirLookup* lookup_; |
@@ -537,12 +560,16 @@ class WriteTransaction : public BaseTransaction { |
virtual syncable::BaseTransaction* GetWrappedTrans() const; |
syncable::WriteTransaction* GetWrappedWriteTrans() { return transaction_; } |
- private: |
- void* operator new(size_t size); // Transaction is meant for stack use only. |
+protected: |
+ // Empty constructor for unit tests |
+ WriteTransaction() {} |
// The underlying syncable object which this class wraps. |
syncable::WriteTransaction* transaction_; |
+ private: |
+ void* operator new(size_t size); // Transaction is meant for stack use only. |
+ |
DISALLOW_COPY_AND_ASSIGN(WriteTransaction); |
}; |