summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorskym <skym@chromium.org>2016-02-10 08:13:21 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-10 16:14:36 +0000
commitfe95d93a38c040091a6d8bcc55e2c66f29d4ce27 (patch)
tree1febe365eada682ae3dfef6805465cc77102dc31
parentcfe52d9360013f0078ad6aa7ae7317e6b524b72c (diff)
downloadchromium_src-fe95d93a38c040091a6d8bcc55e2c66f29d4ce27.zip
chromium_src-fe95d93a38c040091a6d8bcc55e2c66f29d4ce27.tar.gz
chromium_src-fe95d93a38c040091a6d8bcc55e2c66f29d4ce27.tar.bz2
[Sync] Moving DataTypeState to be a proto so that it can easily be
serialized to storage by model types. BUG=543405 Review URL: https://codereview.chromium.org/1678343002 Cr-Commit-Position: refs/heads/master@{#374667}
-rw-r--r--sync/api/metadata_batch.cc4
-rw-r--r--sync/api/metadata_batch.h9
-rw-r--r--sync/api/metadata_change_list.h5
-rw-r--r--sync/engine/model_type_worker.cc30
-rw-r--r--sync/engine/model_type_worker.h5
-rw-r--r--sync/engine/model_type_worker_unittest.cc36
-rw-r--r--sync/internal_api/public/activation_context.h3
-rw-r--r--sync/internal_api/public/model_type_processor.h5
-rw-r--r--sync/internal_api/public/non_blocking_sync_common.cc4
-rw-r--r--sync/internal_api/public/non_blocking_sync_common.h26
-rw-r--r--sync/internal_api/public/shared_model_type_processor.h9
-rw-r--r--sync/internal_api/public/simple_metadata_change_list.cc2
-rw-r--r--sync/internal_api/public/simple_metadata_change_list.h5
-rw-r--r--sync/internal_api/public/test/fake_metadata_change_list.h7
-rw-r--r--sync/internal_api/shared_model_type_processor.cc43
-rw-r--r--sync/internal_api/shared_model_type_processor_unittest.cc23
-rw-r--r--sync/internal_api/test/fake_metadata_change_list.cc2
-rw-r--r--sync/protocol/data_type_state.proto34
-rw-r--r--sync/protocol/protocol.gypi1
-rw-r--r--sync/sessions/model_type_registry_unittest.cc9
-rw-r--r--sync/test/engine/mock_model_type_processor.cc14
-rw-r--r--sync/test/engine/mock_model_type_processor.h19
22 files changed, 162 insertions, 133 deletions
diff --git a/sync/api/metadata_batch.cc b/sync/api/metadata_batch.cc
index 072ad5e..a172d1e 100644
--- a/sync/api/metadata_batch.cc
+++ b/sync/api/metadata_batch.cc
@@ -18,11 +18,11 @@ void MetadataBatch::AddMetadata(const std::string& client_tag,
metadata_map_.insert(std::make_pair(client_tag, metadata));
}
-const DataTypeState& MetadataBatch::GetDataTypeState() const {
+const sync_pb::DataTypeState& MetadataBatch::GetDataTypeState() const {
return state_;
}
-void MetadataBatch::SetDataTypeState(const DataTypeState& state) {
+void MetadataBatch::SetDataTypeState(const sync_pb::DataTypeState& state) {
state_ = state;
}
diff --git a/sync/api/metadata_batch.h b/sync/api/metadata_batch.h
index 56ab2a7..dd4b8d0 100644
--- a/sync/api/metadata_batch.h
+++ b/sync/api/metadata_batch.h
@@ -6,9 +6,10 @@
#define SYNC_API_METADATA_BATCH_H_
#include <map>
+#include <string>
#include "sync/base/sync_export.h"
-#include "sync/internal_api/public/non_blocking_sync_common.h"
+#include "sync/protocol/data_type_state.pb.h"
#include "sync/protocol/entity_metadata.pb.h"
namespace syncer_v2 {
@@ -32,14 +33,14 @@ class SYNC_EXPORT MetadataBatch {
const sync_pb::EntityMetadata& metadata);
// Get the DataTypeState for this batch.
- const DataTypeState& GetDataTypeState() const;
+ const sync_pb::DataTypeState& GetDataTypeState() const;
// Set the DataTypeState for this batch.
- void SetDataTypeState(const DataTypeState& state);
+ void SetDataTypeState(const sync_pb::DataTypeState& state);
private:
EntityMetadataMap metadata_map_;
- DataTypeState state_;
+ sync_pb::DataTypeState state_;
};
} // namespace syncer_v2
diff --git a/sync/api/metadata_change_list.h b/sync/api/metadata_change_list.h
index a8c0d95..53c8e24 100644
--- a/sync/api/metadata_change_list.h
+++ b/sync/api/metadata_change_list.h
@@ -10,11 +10,11 @@
#include "sync/base/sync_export.h"
namespace sync_pb {
+class DataTypeState;
class EntityMetadata;
} // namespace sync_pb
namespace syncer_v2 {
-struct DataTypeState;
// Interface used by the processor and service to communicate about metadata.
// The purpose of the interface is to record changes to data type global and
@@ -30,7 +30,8 @@ class SYNC_EXPORT MetadataChangeList {
virtual ~MetadataChangeList() {}
// Requests DataTypeState to be updated in the storage.
- virtual void UpdateDataTypeState(const DataTypeState& data_type_state) = 0;
+ virtual void UpdateDataTypeState(
+ const sync_pb::DataTypeState& data_type_state) = 0;
// Requests DataTypeState to be cleared from the storage.
virtual void ClearDataTypeState() = 0;
diff --git a/sync/engine/model_type_worker.cc b/sync/engine/model_type_worker.cc
index e661588..5b6e7eb 100644
--- a/sync/engine/model_type_worker.cc
+++ b/sync/engine/model_type_worker.cc
@@ -33,7 +33,7 @@ using syncer::SyncerError;
ModelTypeWorker::ModelTypeWorker(
ModelType type,
- const DataTypeState& initial_state,
+ const sync_pb::DataTypeState& initial_state,
const UpdateResponseDataList& saved_pending_updates,
scoped_ptr<Cryptographer> cryptographer,
NudgeHandler* nudge_handler,
@@ -45,7 +45,7 @@ ModelTypeWorker::ModelTypeWorker(
nudge_handler_(nudge_handler),
weak_ptr_factory_(this) {
// Request an initial sync if it hasn't been completed yet.
- if (!data_type_state_.initial_sync_done) {
+ if (!data_type_state_.initial_sync_done()) {
nudge_handler_->NudgeForInitialDownload(type_);
}
@@ -94,13 +94,13 @@ void ModelTypeWorker::UpdateCryptographer(
void ModelTypeWorker::GetDownloadProgress(
sync_pb::DataTypeProgressMarker* progress_marker) const {
DCHECK(CalledOnValidThread());
- progress_marker->CopyFrom(data_type_state_.progress_marker);
+ progress_marker->CopyFrom(data_type_state_.progress_marker());
}
void ModelTypeWorker::GetDataTypeContext(
sync_pb::DataTypeContext* context) const {
DCHECK(CalledOnValidThread());
- context->CopyFrom(data_type_state_.type_context);
+ context->CopyFrom(data_type_state_.type_context());
}
SyncerError ModelTypeWorker::ProcessGetUpdatesResponse(
@@ -111,8 +111,8 @@ SyncerError ModelTypeWorker::ProcessGetUpdatesResponse(
DCHECK(CalledOnValidThread());
// TODO(rlarocque): Handle data type context conflicts.
- data_type_state_.type_context = mutated_context;
- data_type_state_.progress_marker = progress_marker;
+ *data_type_state_.mutable_type_context() = mutated_context;
+ *data_type_state_.mutable_progress_marker() = progress_marker;
UpdateResponseDataList response_datas;
UpdateResponseDataList pending_updates;
@@ -206,10 +206,10 @@ void ModelTypeWorker::ApplyUpdates(syncer::sessions::StatusController* status) {
// got a response with changes_remaining == 0. If this is our first download
// cycle, we should update our state so the ModelTypeProcessor knows that
// it's safe to commit items now.
- if (!data_type_state_.initial_sync_done) {
+ if (!data_type_state_.initial_sync_done()) {
DVLOG(1) << "Delivering 'initial sync done' ping.";
- data_type_state_.initial_sync_done = true;
+ data_type_state_.set_initial_sync_done(true);
model_type_processor_->OnUpdateReceived(
data_type_state_, UpdateResponseDataList(), UpdateResponseDataList());
@@ -271,7 +271,8 @@ scoped_ptr<CommitContribution> ModelTypeWorker::GetContribution(
return scoped_ptr<CommitContribution>();
return scoped_ptr<CommitContribution>(new NonBlockingTypeCommitContribution(
- data_type_state_.type_context, commit_entities, sequence_numbers, this));
+ data_type_state_.type_context(), commit_entities, sequence_numbers,
+ this));
}
void ModelTypeWorker::StorePendingCommit(const CommitRequestData& request) {
@@ -327,8 +328,8 @@ base::WeakPtr<ModelTypeWorker> ModelTypeWorker::AsWeakPtr() {
}
bool ModelTypeWorker::IsTypeInitialized() const {
- return data_type_state_.initial_sync_done &&
- !data_type_state_.progress_marker.token().empty();
+ return data_type_state_.initial_sync_done() &&
+ !data_type_state_.progress_marker().token().empty();
}
bool ModelTypeWorker::CanCommitItems() const {
@@ -392,10 +393,11 @@ void ModelTypeWorker::OnCryptographerUpdated() {
const std::string& new_key_name = cryptographer_->GetDefaultNigoriKeyName();
// Handle a change in encryption key.
- if (data_type_state_.encryption_key_name != new_key_name) {
+ if (data_type_state_.encryption_key_name() != new_key_name) {
DVLOG(1) << ModelTypeToString(type_) << ": Updating encryption key "
- << data_type_state_.encryption_key_name << " -> " << new_key_name;
- data_type_state_.encryption_key_name = new_key_name;
+ << data_type_state_.encryption_key_name() << " -> "
+ << new_key_name;
+ data_type_state_.set_encryption_key_name(new_key_name);
new_encryption_key = true;
}
diff --git a/sync/engine/model_type_worker.h b/sync/engine/model_type_worker.h
index ee6e3dc..be0430f 100644
--- a/sync/engine/model_type_worker.h
+++ b/sync/engine/model_type_worker.h
@@ -21,6 +21,7 @@
#include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/non_blocking_sync_common.h"
#include "sync/internal_api/public/sync_encryption_handler.h"
+#include "sync/protocol/data_type_state.pb.h"
#include "sync/protocol/sync.pb.h"
#include "sync/util/cryptographer.h"
@@ -59,7 +60,7 @@ class SYNC_EXPORT ModelTypeWorker : public syncer::UpdateHandler,
public base::NonThreadSafe {
public:
ModelTypeWorker(syncer::ModelType type,
- const DataTypeState& initial_state,
+ const sync_pb::DataTypeState& initial_state,
const UpdateResponseDataList& saved_pending_updates,
scoped_ptr<syncer::Cryptographer> cryptographer,
syncer::NudgeHandler* nudge_handler,
@@ -139,7 +140,7 @@ class SYNC_EXPORT ModelTypeWorker : public syncer::UpdateHandler,
syncer::ModelType type_;
// State that applies to the entire model type.
- DataTypeState data_type_state_;
+ sync_pb::DataTypeState data_type_state_;
// Pointer to the ModelTypeProcessor associated with this worker.
// This is NULL when no proxy is connected..
diff --git a/sync/engine/model_type_worker_unittest.cc b/sync/engine/model_type_worker_unittest.cc
index cc452d8..cd19fc5 100644
--- a/sync/engine/model_type_worker_unittest.cc
+++ b/sync/engine/model_type_worker_unittest.cc
@@ -13,6 +13,7 @@
#include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/model_type_processor.h"
#include "sync/internal_api/public/non_blocking_sync_common.h"
+#include "sync/protocol/data_type_state.pb.h"
#include "sync/protocol/sync.pb.h"
#include "sync/sessions/status_controller.h"
#include "sync/syncable/syncable_util.h"
@@ -84,7 +85,7 @@ class ModelTypeWorkerTest : public ::testing::Test {
const UpdateResponseDataList& initial_pending_updates);
// Initialize with a custom initial DataTypeState and pending updates.
- void InitializeWithState(const DataTypeState& state,
+ void InitializeWithState(const sync_pb::DataTypeState& state,
const UpdateResponseDataList& pending_updates);
// Introduce a new key that the local cryptographer can't decrypt.
@@ -148,7 +149,7 @@ class ModelTypeWorkerTest : public ::testing::Test {
size_t GetNumModelThreadUpdateResponses() const;
UpdateResponseDataList GetNthModelThreadUpdateResponse(size_t n) const;
UpdateResponseDataList GetNthModelThreadPendingUpdates(size_t n) const;
- DataTypeState GetNthModelThreadUpdateState(size_t n) const;
+ sync_pb::DataTypeState GetNthModelThreadUpdateState(size_t n) const;
// Reads the latest update response datas on the model thread.
// Note that if the model thread is in non-blocking mode, this data will not
@@ -162,7 +163,7 @@ class ModelTypeWorkerTest : public ::testing::Test {
// be updated until the response is actually processed by the model thread.
size_t GetNumModelThreadCommitResponses() const;
CommitResponseDataList GetNthModelThreadCommitResponse(size_t n) const;
- DataTypeState GetNthModelThreadCommitState(size_t n) const;
+ sync_pb::DataTypeState GetNthModelThreadCommitState(size_t n) const;
// Reads the latest commit response datas on the model thread.
// Note that if the model thread is in non-blocking mode, this data will not
@@ -243,8 +244,8 @@ ModelTypeWorkerTest::ModelTypeWorkerTest()
ModelTypeWorkerTest::~ModelTypeWorkerTest() {}
void ModelTypeWorkerTest::FirstInitialize() {
- DataTypeState initial_state;
- initial_state.progress_marker.set_data_type_id(
+ sync_pb::DataTypeState initial_state;
+ initial_state.mutable_progress_marker()->set_data_type_id(
GetSpecificsFieldNumberFromModelType(kModelType));
InitializeWithState(initial_state, UpdateResponseDataList());
@@ -256,12 +257,13 @@ void ModelTypeWorkerTest::NormalInitialize() {
void ModelTypeWorkerTest::InitializeWithPendingUpdates(
const UpdateResponseDataList& initial_pending_updates) {
- DataTypeState initial_state;
- initial_state.progress_marker.set_data_type_id(
+ sync_pb::DataTypeState initial_state;
+ initial_state.mutable_progress_marker()->set_data_type_id(
GetSpecificsFieldNumberFromModelType(kModelType));
- initial_state.progress_marker.set_token("some_saved_progress_token");
+ initial_state.mutable_progress_marker()->set_token(
+ "some_saved_progress_token");
- initial_state.initial_sync_done = true;
+ initial_state.set_initial_sync_done(true);
InitializeWithState(initial_state, initial_pending_updates);
@@ -269,7 +271,7 @@ void ModelTypeWorkerTest::InitializeWithPendingUpdates(
}
void ModelTypeWorkerTest::InitializeWithState(
- const DataTypeState& state,
+ const sync_pb::DataTypeState& state,
const UpdateResponseDataList& initial_pending_updates) {
DCHECK(!worker_);
@@ -513,7 +515,7 @@ UpdateResponseDataList ModelTypeWorkerTest::GetNthModelThreadPendingUpdates(
return mock_type_processor_->GetNthPendingUpdates(n);
}
-DataTypeState ModelTypeWorkerTest::GetNthModelThreadUpdateState(
+sync_pb::DataTypeState ModelTypeWorkerTest::GetNthModelThreadUpdateState(
size_t n) const {
DCHECK_LT(n, GetNumModelThreadUpdateResponses());
return mock_type_processor_->GetNthTypeStateReceivedInUpdateResponse(n);
@@ -541,7 +543,7 @@ CommitResponseDataList ModelTypeWorkerTest::GetNthModelThreadCommitResponse(
return mock_type_processor_->GetNthCommitResponse(n);
}
-DataTypeState ModelTypeWorkerTest::GetNthModelThreadCommitState(
+sync_pb::DataTypeState ModelTypeWorkerTest::GetNthModelThreadCommitState(
size_t n) const {
DCHECK_LT(n, GetNumModelThreadCommitResponses());
return mock_type_processor_->GetNthTypeStateReceivedInCommitResponse(n);
@@ -768,9 +770,9 @@ TEST_F(ModelTypeWorkerTest, SendInitialSyncDone) {
EXPECT_EQ(0U, GetNthModelThreadUpdateResponse(0).size());
EXPECT_EQ(0U, GetNthModelThreadUpdateResponse(1).size());
- const DataTypeState& state = GetNthModelThreadUpdateState(1);
- EXPECT_FALSE(state.progress_marker.token().empty());
- EXPECT_TRUE(state.initial_sync_done);
+ const sync_pb::DataTypeState& state = GetNthModelThreadUpdateState(1);
+ EXPECT_FALSE(state.progress_marker().token().empty());
+ EXPECT_TRUE(state.initial_sync_done());
}
// Commit two new entities in two separate commit messages.
@@ -851,7 +853,7 @@ TEST_F(ModelTypeWorkerTest, EncryptedCommit) {
ASSERT_EQ(1U, GetNumModelThreadUpdateResponses());
EXPECT_EQ(GetLocalCryptographerKeyName(),
- GetNthModelThreadUpdateState(0).encryption_key_name);
+ GetNthModelThreadUpdateState(0).encryption_key_name());
// Normal commit request stuff.
CommitRequest("tag1", "value1");
@@ -952,7 +954,7 @@ TEST_F(ModelTypeWorkerTest, InitializeWithCryptographer) {
// necessary.
ASSERT_EQ(1U, GetNumModelThreadUpdateResponses());
EXPECT_EQ(GetLocalCryptographerKeyName(),
- GetNthModelThreadUpdateState(0).encryption_key_name);
+ GetNthModelThreadUpdateState(0).encryption_key_name());
}
// Receive updates that are initially undecryptable, then ensure they get
diff --git a/sync/internal_api/public/activation_context.h b/sync/internal_api/public/activation_context.h
index 798d851..48d9476 100644
--- a/sync/internal_api/public/activation_context.h
+++ b/sync/internal_api/public/activation_context.h
@@ -11,6 +11,7 @@
#include "sync/base/sync_export.h"
#include "sync/internal_api/public/model_type_processor.h"
#include "sync/internal_api/public/non_blocking_sync_common.h"
+#include "sync/protocol/data_type_state.pb.h"
namespace syncer_v2 {
@@ -21,7 +22,7 @@ struct SYNC_EXPORT ActivationContext {
~ActivationContext();
// Initial DataTypeState at the moment of activation.
- DataTypeState data_type_state;
+ sync_pb::DataTypeState data_type_state;
// Pending updates from the previous session.
// TODO(stanisc): crbug.com/529498: should remove pending updates.
diff --git a/sync/internal_api/public/model_type_processor.h b/sync/internal_api/public/model_type_processor.h
index 121055f..297b48f 100644
--- a/sync/internal_api/public/model_type_processor.h
+++ b/sync/internal_api/public/model_type_processor.h
@@ -8,6 +8,7 @@
#include "base/memory/scoped_ptr.h"
#include "sync/base/sync_export.h"
#include "sync/internal_api/public/non_blocking_sync_common.h"
+#include "sync/protocol/data_type_state.pb.h"
namespace syncer_v2 {
class CommitQueue;
@@ -24,13 +25,13 @@ class SYNC_EXPORT ModelTypeProcessor {
// Informs this object that some of its commit requests have been
// successfully serviced.
virtual void OnCommitCompleted(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list) = 0;
// Informs this object that there are some incoming updates is should
// handle.
virtual void OnUpdateReceived(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) = 0;
};
diff --git a/sync/internal_api/public/non_blocking_sync_common.cc b/sync/internal_api/public/non_blocking_sync_common.cc
index f76895c..a8ad64f 100644
--- a/sync/internal_api/public/non_blocking_sync_common.cc
+++ b/sync/internal_api/public/non_blocking_sync_common.cc
@@ -6,10 +6,6 @@
namespace syncer_v2 {
-DataTypeState::DataTypeState() {}
-
-DataTypeState::~DataTypeState() {}
-
CommitRequestData::CommitRequestData() {}
CommitRequestData::~CommitRequestData() {}
diff --git a/sync/internal_api/public/non_blocking_sync_common.h b/sync/internal_api/public/non_blocking_sync_common.h
index 799dfca..b12ff01 100644
--- a/sync/internal_api/public/non_blocking_sync_common.h
+++ b/sync/internal_api/public/non_blocking_sync_common.h
@@ -19,32 +19,6 @@ namespace syncer_v2 {
static const int64_t kUncommittedVersion = -1;
-// Data-type global state that must be accessed and updated on the sync thread,
-// but persisted on or through the model thread.
-struct SYNC_EXPORT DataTypeState {
- DataTypeState();
- ~DataTypeState();
-
- // The latest progress markers received from the server.
- sync_pb::DataTypeProgressMarker progress_marker;
-
- // A data type context. Sent to the server in every commit or update
- // request. May be updated by either by responses from the server or
- // requests made on the model thread. The interpretation of this value may
- // be data-type specific. Many data types ignore it.
- sync_pb::DataTypeContext type_context;
-
- // This value is set if this type's data should be encrypted on the server.
- // If this key changes, the client will need to re-commit all of its local
- // data to the server using the new encryption key.
- std::string encryption_key_name;
-
- // This flag is set to true when the first download cycle is complete. The
- // ModelTypeProcessor should not attempt to commit any items until this
- // flag is set.
- bool initial_sync_done = false;
-};
-
struct SYNC_EXPORT CommitRequestData {
CommitRequestData();
~CommitRequestData();
diff --git a/sync/internal_api/public/shared_model_type_processor.h b/sync/internal_api/public/shared_model_type_processor.h
index 855e964..0d8ba15 100644
--- a/sync/internal_api/public/shared_model_type_processor.h
+++ b/sync/internal_api/public/shared_model_type_processor.h
@@ -20,6 +20,7 @@
#include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/model_type_processor.h"
#include "sync/internal_api/public/non_blocking_sync_common.h"
+#include "sync/protocol/data_type_state.pb.h"
#include "sync/protocol/sync.pb.h"
namespace syncer_v2 {
@@ -85,9 +86,9 @@ class SYNC_EXPORT SharedModelTypeProcessor : public ModelTypeProcessor,
// ModelTypeProcessor implementation.
void OnConnect(scoped_ptr<CommitQueue> worker) override;
- void OnCommitCompleted(const DataTypeState& type_state,
+ void OnCommitCompleted(const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list) override;
- void OnUpdateReceived(const DataTypeState& type_state,
+ void OnUpdateReceived(const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) override;
@@ -101,7 +102,7 @@ class SYNC_EXPORT SharedModelTypeProcessor : public ModelTypeProcessor,
void FinishStart();
// Handle the first update received from the server after being enabled.
- void OnInitialUpdateReceived(const DataTypeState& type_state,
+ void OnInitialUpdateReceived(const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates);
@@ -114,7 +115,7 @@ class SYNC_EXPORT SharedModelTypeProcessor : public ModelTypeProcessor,
void ClearTransientSyncState();
syncer::ModelType type_;
- DataTypeState data_type_state_;
+ sync_pb::DataTypeState data_type_state_;
// Stores the start callback in between Start() and FinishStart().
StartCallback start_callback_;
diff --git a/sync/internal_api/public/simple_metadata_change_list.cc b/sync/internal_api/public/simple_metadata_change_list.cc
index c1bb25f..999eda6 100644
--- a/sync/internal_api/public/simple_metadata_change_list.cc
+++ b/sync/internal_api/public/simple_metadata_change_list.cc
@@ -11,7 +11,7 @@ SimpleMetadataChangeList::SimpleMetadataChangeList() {}
SimpleMetadataChangeList::~SimpleMetadataChangeList() {}
void SimpleMetadataChangeList::UpdateDataTypeState(
- const DataTypeState& data_type_state) {
+ const sync_pb::DataTypeState& data_type_state) {
// TODO(skym): Implementation.
}
diff --git a/sync/internal_api/public/simple_metadata_change_list.h b/sync/internal_api/public/simple_metadata_change_list.h
index aca0e69..f302b12 100644
--- a/sync/internal_api/public/simple_metadata_change_list.h
+++ b/sync/internal_api/public/simple_metadata_change_list.h
@@ -5,6 +5,8 @@
#ifndef SYNC_INTERNAL_API_PUBLIC_SIMPLE_METADATA_CHANGE_LIST_H_
#define SYNC_INTERNAL_API_PUBLIC_SIMPLE_METADATA_CHANGE_LIST_H_
+#include <string>
+
#include "sync/api/metadata_change_list.h"
#include "sync/api/model_type_store.h"
#include "sync/base/sync_export.h"
@@ -19,7 +21,8 @@ class SYNC_EXPORT SimpleMetadataChangeList : public MetadataChangeList {
SimpleMetadataChangeList();
~SimpleMetadataChangeList() override;
- void UpdateDataTypeState(const DataTypeState& data_type_state) override;
+ void UpdateDataTypeState(
+ const sync_pb::DataTypeState& data_type_state) override;
void ClearDataTypeState() override;
void UpdateMetadata(const std::string& client_tag,
const sync_pb::EntityMetadata& metadata) override;
diff --git a/sync/internal_api/public/test/fake_metadata_change_list.h b/sync/internal_api/public/test/fake_metadata_change_list.h
index 6359602..3941f0a 100644
--- a/sync/internal_api/public/test/fake_metadata_change_list.h
+++ b/sync/internal_api/public/test/fake_metadata_change_list.h
@@ -5,10 +5,12 @@
#ifndef SYNC_INTERNAL_API_PUBLIC_TEST_FAKE_METADATA_CHANGE_LIST_H_
#define SYNC_INTERNAL_API_PUBLIC_TEST_FAKE_METADATA_CHANGE_LIST_H_
+#include <string>
#include <vector>
#include "sync/api/metadata_change_list.h"
#include "sync/internal_api/public/non_blocking_sync_common.h"
+#include "sync/protocol/data_type_state.pb.h"
#include "sync/protocol/entity_metadata.pb.h"
namespace syncer_v2 {
@@ -22,7 +24,8 @@ class FakeMetadataChangeList : public MetadataChangeList {
FakeMetadataChangeList();
~FakeMetadataChangeList() override;
- void UpdateDataTypeState(const DataTypeState& data_type_state) override;
+ void UpdateDataTypeState(
+ const sync_pb::DataTypeState& data_type_state) override;
void ClearDataTypeState() override;
void UpdateMetadata(const std::string& client_tag,
const sync_pb::EntityMetadata& metadata) override;
@@ -41,7 +44,7 @@ class FakeMetadataChangeList : public MetadataChangeList {
Action action;
std::string tag;
- DataTypeState data_type_state;
+ sync_pb::DataTypeState data_type_state;
sync_pb::EntityMetadata metadata;
};
diff --git a/sync/internal_api/shared_model_type_processor.cc b/sync/internal_api/shared_model_type_processor.cc
index dbf7bf8..4b6b983 100644
--- a/sync/internal_api/shared_model_type_processor.cc
+++ b/sync/internal_api/shared_model_type_processor.cc
@@ -26,9 +26,9 @@ class ModelTypeProcessorProxy : public ModelTypeProcessor {
~ModelTypeProcessorProxy() override;
void OnConnect(scoped_ptr<CommitQueue> worker) override;
- void OnCommitCompleted(const DataTypeState& type_state,
+ void OnCommitCompleted(const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list) override;
- void OnUpdateReceived(const DataTypeState& type_state,
+ void OnUpdateReceived(const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) override;
@@ -51,7 +51,7 @@ void ModelTypeProcessorProxy::OnConnect(scoped_ptr<CommitQueue> worker) {
}
void ModelTypeProcessorProxy::OnCommitCompleted(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list) {
processor_task_runner_->PostTask(
FROM_HERE, base::Bind(&ModelTypeProcessor::OnCommitCompleted, processor_,
@@ -59,7 +59,7 @@ void ModelTypeProcessorProxy::OnCommitCompleted(
}
void ModelTypeProcessorProxy::OnUpdateReceived(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) {
processor_task_runner_->PostTask(
@@ -101,7 +101,7 @@ void SharedModelTypeProcessor::OnMetadataLoaded(
DCHECK(entities_.empty());
DCHECK(!IsConnected());
- if (batch->GetDataTypeState().initial_sync_done) {
+ if (batch->GetDataTypeState().initial_sync_done()) {
EntityMetadataMap metadata_map(batch->TakeAllMetadata());
for (auto it = metadata_map.begin(); it != metadata_map.end(); it++) {
entities_.insert(std::make_pair(
@@ -114,7 +114,7 @@ void SharedModelTypeProcessor::OnMetadataLoaded(
// we have data but no metadata?
} else {
// First time syncing; initialize metadata.
- data_type_state_.progress_marker.set_data_type_id(
+ data_type_state_.mutable_progress_marker()->set_data_type_id(
GetSpecificsFieldNumberFromModelType(type_));
}
@@ -274,7 +274,7 @@ void SharedModelTypeProcessor::FlushPendingCommitRequests() {
return;
// Don't send anything if the type is not ready to handle commits.
- if (!data_type_state_.initial_sync_done)
+ if (!data_type_state_.initial_sync_done())
return;
// TODO(rlarocque): Do something smarter than iterate here.
@@ -292,7 +292,7 @@ void SharedModelTypeProcessor::FlushPendingCommitRequests() {
}
void SharedModelTypeProcessor::OnCommitCompleted(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list) {
scoped_ptr<MetadataChangeList> change_list =
service_->CreateMetadataChangeList();
@@ -311,9 +311,10 @@ void SharedModelTypeProcessor::OnCommitCompleted(
<< " type: " << type_ << " client_tag: " << client_tag_hash;
return;
} else {
- it->second->ReceiveCommitResponse(
- response_data.id, response_data.sequence_number,
- response_data.response_version, data_type_state_.encryption_key_name);
+ it->second->ReceiveCommitResponse(response_data.id,
+ response_data.sequence_number,
+ response_data.response_version,
+ data_type_state_.encryption_key_name());
// TODO(stanisc): crbug.com/573333: Delete case.
// This might be the right place to clear a metadata entry that has
// been deleted locally and confirmed deleted by the server.
@@ -329,11 +330,10 @@ void SharedModelTypeProcessor::OnCommitCompleted(
}
void SharedModelTypeProcessor::OnUpdateReceived(
- const DataTypeState& data_type_state,
+ const sync_pb::DataTypeState& data_type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) {
-
- if (!data_type_state_.initial_sync_done) {
+ if (!data_type_state_.initial_sync_done()) {
OnInitialUpdateReceived(data_type_state, response_list, pending_updates);
}
@@ -342,8 +342,9 @@ void SharedModelTypeProcessor::OnUpdateReceived(
EntityChangeList entity_changes;
metadata_changes->UpdateDataTypeState(data_type_state);
- bool got_new_encryption_requirements = data_type_state_.encryption_key_name !=
- data_type_state.encryption_key_name;
+ bool got_new_encryption_requirements =
+ data_type_state_.encryption_key_name() !=
+ data_type_state.encryption_key_name();
data_type_state_ = data_type_state;
for (auto list_it = response_list.begin(); list_it != response_list.end();
@@ -401,14 +402,14 @@ void SharedModelTypeProcessor::OnUpdateReceived(
// If the received entity has out of date encryption, we schedule another
// commit to fix it.
- if (data_type_state_.encryption_key_name !=
+ if (data_type_state_.encryption_key_name() !=
response_data.encryption_key_name) {
DVLOG(2) << ModelTypeToString(type_) << ": Requesting re-encrypt commit "
<< response_data.encryption_key_name << " -> "
- << data_type_state_.encryption_key_name;
+ << data_type_state_.encryption_key_name();
auto it2 = entities_.find(client_tag_hash);
it2->second->UpdateDesiredEncryptionKey(
- data_type_state_.encryption_key_name);
+ data_type_state_.encryption_key_name());
}
}
@@ -435,7 +436,7 @@ void SharedModelTypeProcessor::OnUpdateReceived(
if (got_new_encryption_requirements) {
for (auto it = entities_.begin(); it != entities_.end(); ++it) {
it->second->UpdateDesiredEncryptionKey(
- data_type_state_.encryption_key_name);
+ data_type_state_.encryption_key_name());
}
}
@@ -448,7 +449,7 @@ void SharedModelTypeProcessor::OnUpdateReceived(
}
void SharedModelTypeProcessor::OnInitialUpdateReceived(
- const DataTypeState& data_type_state,
+ const sync_pb::DataTypeState& data_type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) {
// TODO(maxbogue): crbug.com/569675: Generate metadata for all entities.
diff --git a/sync/internal_api/shared_model_type_processor_unittest.cc b/sync/internal_api/shared_model_type_processor_unittest.cc
index 741cfda..776179a 100644
--- a/sync/internal_api/shared_model_type_processor_unittest.cc
+++ b/sync/internal_api/shared_model_type_processor_unittest.cc
@@ -16,6 +16,7 @@
#include "sync/internal_api/public/non_blocking_sync_common.h"
#include "sync/internal_api/public/test/fake_metadata_change_list.h"
#include "sync/internal_api/public/test/fake_model_type_service.h"
+#include "sync/protocol/data_type_state.pb.h"
#include "sync/protocol/sync.pb.h"
#include "sync/syncable/syncable_util.h"
#include "sync/test/engine/mock_commit_queue.h"
@@ -168,7 +169,7 @@ class SharedModelTypeProcessorTest : public ::testing::Test,
MockCommitQueue* mock_queue_;
scoped_ptr<MockCommitQueue> mock_queue_ptr_;
- DataTypeState data_type_state_;
+ sync_pb::DataTypeState data_type_state_;
// The last received EntityChangeList.
scoped_ptr<EntityChangeList> entity_change_list_;
@@ -188,7 +189,7 @@ SharedModelTypeProcessorTest::SharedModelTypeProcessorTest()
SharedModelTypeProcessorTest::~SharedModelTypeProcessorTest() {}
void SharedModelTypeProcessorTest::InitializeToReadyState() {
- data_type_state_.initial_sync_done = true;
+ data_type_state_.set_initial_sync_done(true);
OnMetadataLoaded();
Start();
// TODO(maxbogue): crbug.com/569642: Remove this once entity data is loaded
@@ -261,7 +262,7 @@ void SharedModelTypeProcessorTest::DeleteItem(const std::string& tag,
}
void SharedModelTypeProcessorTest::OnInitialSyncDone() {
- data_type_state_.initial_sync_done = true;
+ data_type_state_.set_initial_sync_done(true);
UpdateResponseDataList empty_update_list;
// TODO(stanisc): crbug/569645: replace this with loading the initial state
@@ -352,7 +353,7 @@ void SharedModelTypeProcessorTest::SuccessfulCommitResponse(
void SharedModelTypeProcessorTest::UpdateDesiredEncryptionKey(
const std::string& key_name) {
- data_type_state_.encryption_key_name = key_name;
+ data_type_state_.set_encryption_key_name(key_name);
type_processor()->OnUpdateReceived(data_type_state_, UpdateResponseDataList(),
UpdateResponseDataList());
}
@@ -561,7 +562,7 @@ TEST_F(SharedModelTypeProcessorTest, CreateAndModifyWithOverrides) {
entity_data->specifics.mutable_preference()->set_value("value2");
entity_data->non_unique_name = "name2";
entity_data->client_tag_hash = "hash";
- // TODO (skym): Consider removing this. The ID should never be changed by the
+ // TODO(skym): Consider removing this. The ID should never be changed by the
// client once established.
entity_data->id = "cid2";
@@ -588,7 +589,7 @@ TEST_F(SharedModelTypeProcessorTest, CreateAndModifyWithOverrides) {
const FakeMetadataChangeList::Record& record2 = change_list.GetNthRecord(1);
EXPECT_EQ(FakeMetadataChangeList::UPDATE_METADATA, record2.action);
EXPECT_EQ("tag1", record2.tag);
- // TODO (skym): Is this correct?
+ // TODO(skym): Is this correct?
EXPECT_EQ("cid1", record2.metadata.server_id());
EXPECT_EQ("hash", record2.metadata.client_tag_hash());
@@ -919,11 +920,11 @@ TEST_F(SharedModelTypeProcessorTest, DISABLED_Disable) {
// Once we're ready to commit, all three local items should consider
// themselves uncommitted and pending for commit.
// TODO(maxbogue): crbug.com/569645: Fix when data is loaded.
- EXPECT_EQ(1U, GetNumCommitRequestLists());
- EXPECT_EQ(3U, GetNthCommitRequestList(0).size());
- EXPECT_TRUE(HasCommitRequestForTag("tag1"));
- EXPECT_TRUE(HasCommitRequestForTag("tag2"));
- EXPECT_TRUE(HasCommitRequestForTag("tag3"));
+ EXPECT_EQ(1U, GetNumCommitRequestLists());
+ EXPECT_EQ(3U, GetNthCommitRequestList(0).size());
+ EXPECT_TRUE(HasCommitRequestForTag("tag1"));
+ EXPECT_TRUE(HasCommitRequestForTag("tag2"));
+ EXPECT_TRUE(HasCommitRequestForTag("tag3"));
}
// Test receipt of pending updates.
diff --git a/sync/internal_api/test/fake_metadata_change_list.cc b/sync/internal_api/test/fake_metadata_change_list.cc
index 407066d..ceba2cb 100644
--- a/sync/internal_api/test/fake_metadata_change_list.cc
+++ b/sync/internal_api/test/fake_metadata_change_list.cc
@@ -17,7 +17,7 @@ FakeMetadataChangeList::Record::Record() {}
FakeMetadataChangeList::Record::~Record() {}
void FakeMetadataChangeList::UpdateDataTypeState(
- const DataTypeState& data_type_state) {
+ const sync_pb::DataTypeState& data_type_state) {
Record record;
record.action = UPDATE_DATA_TYPE_STATE;
record.data_type_state = data_type_state;
diff --git a/sync/protocol/data_type_state.proto b/sync/protocol/data_type_state.proto
new file mode 100644
index 0000000..ffe9326
--- /dev/null
+++ b/sync/protocol/data_type_state.proto
@@ -0,0 +1,34 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+syntax = "proto2";
+
+option optimize_for = LITE_RUNTIME;
+option retain_unknown_fields = true;
+
+package sync_pb;
+
+import "sync.proto";
+
+// Sync proto to store data type global metadata in model type storage.
+message DataTypeState {
+ // The latest progress markers received from the server.
+ optional DataTypeProgressMarker progress_marker = 1;
+
+ // A data type context. Sent to the server in every commit or update
+ // request. May be updated by either responses from the server or requests
+ // made on the model thread. The interpretation of this value may be
+ // data-type specific. Many data types ignore it.
+ optional DataTypeContext type_context = 2;
+
+ // This value is set if this type's data should be encrypted on the server.
+ // If this key changes, the client will need to re-commit all of its local
+ // data to the server using the new encryption key.
+ optional string encryption_key_name = 3;
+
+ // This flag is set to true when the first download cycle is complete. The
+ // ModelTypeProcessor should not attempt to commit any items until this
+ // flag is set.
+ optional bool initial_sync_done = 4;
+}
diff --git a/sync/protocol/protocol.gypi b/sync/protocol/protocol.gypi
index 21aa65d..183b7db 100644
--- a/sync/protocol/protocol.gypi
+++ b/sync/protocol/protocol.gypi
@@ -21,6 +21,7 @@
'<(sync_proto_sources_dir)/bookmark_specifics.proto',
'<(sync_proto_sources_dir)/client_commands.proto',
'<(sync_proto_sources_dir)/client_debug_info.proto',
+ '<(sync_proto_sources_dir)/data_type_state.proto',
'<(sync_proto_sources_dir)/device_info_specifics.proto',
'<(sync_proto_sources_dir)/dictionary_specifics.proto',
'<(sync_proto_sources_dir)/encryption.proto',
diff --git a/sync/sessions/model_type_registry_unittest.cc b/sync/sessions/model_type_registry_unittest.cc
index d5b620e..079b37b 100644
--- a/sync/sessions/model_type_registry_unittest.cc
+++ b/sync/sessions/model_type_registry_unittest.cc
@@ -13,6 +13,7 @@
#include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/shared_model_type_processor.h"
#include "sync/internal_api/public/test/fake_model_type_service.h"
+#include "sync/protocol/data_type_state.pb.h"
#include "sync/test/engine/fake_model_worker.h"
#include "sync/test/engine/mock_nudge_handler.h"
#include "sync/test/engine/test_directory_setter_upper.h"
@@ -29,15 +30,15 @@ class ModelTypeRegistryTest : public ::testing::Test,
ModelTypeRegistry* registry();
- static syncer_v2::DataTypeState MakeInitialDataTypeState(ModelType type) {
- syncer_v2::DataTypeState state;
- state.progress_marker.set_data_type_id(
+ static sync_pb::DataTypeState MakeInitialDataTypeState(ModelType type) {
+ sync_pb::DataTypeState state;
+ state.mutable_progress_marker()->set_data_type_id(
GetSpecificsFieldNumberFromModelType(type));
return state;
}
static scoped_ptr<syncer_v2::ActivationContext> MakeActivationContext(
- const syncer_v2::DataTypeState& data_type_state,
+ const sync_pb::DataTypeState& data_type_state,
const syncer_v2::UpdateResponseDataList& saved_pending_updates,
scoped_ptr<syncer_v2::ModelTypeProcessor> type_processor) {
scoped_ptr<syncer_v2::ActivationContext> context =
diff --git a/sync/test/engine/mock_model_type_processor.cc b/sync/test/engine/mock_model_type_processor.cc
index d4249e2..c22a847 100644
--- a/sync/test/engine/mock_model_type_processor.cc
+++ b/sync/test/engine/mock_model_type_processor.cc
@@ -23,7 +23,7 @@ void MockModelTypeProcessor::OnConnect(scoped_ptr<CommitQueue> commit_queue) {
}
void MockModelTypeProcessor::OnCommitCompleted(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list) {
base::Closure task =
base::Bind(&MockModelTypeProcessor::OnCommitCompletedImpl,
@@ -36,7 +36,7 @@ void MockModelTypeProcessor::OnCommitCompleted(
}
void MockModelTypeProcessor::OnUpdateReceived(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) {
base::Closure task = base::Bind(&MockModelTypeProcessor::OnUpdateReceivedImpl,
@@ -135,7 +135,8 @@ UpdateResponseDataList MockModelTypeProcessor::GetNthPendingUpdates(
return received_pending_updates_[n];
}
-DataTypeState MockModelTypeProcessor::GetNthTypeStateReceivedInUpdateResponse(
+sync_pb::DataTypeState
+MockModelTypeProcessor::GetNthTypeStateReceivedInUpdateResponse(
size_t n) const {
DCHECK_LT(n, GetNumUpdateResponses());
return type_states_received_on_update_[n];
@@ -151,7 +152,8 @@ CommitResponseDataList MockModelTypeProcessor::GetNthCommitResponse(
return received_commit_responses_[n];
}
-DataTypeState MockModelTypeProcessor::GetNthTypeStateReceivedInCommitResponse(
+sync_pb::DataTypeState
+MockModelTypeProcessor::GetNthTypeStateReceivedInCommitResponse(
size_t n) const {
DCHECK_LT(n, GetNumCommitResponses());
return type_states_received_on_commit_[n];
@@ -188,7 +190,7 @@ CommitResponseData MockModelTypeProcessor::GetCommitResponse(
}
void MockModelTypeProcessor::OnCommitCompletedImpl(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list) {
received_commit_responses_.push_back(response_list);
type_states_received_on_commit_.push_back(type_state);
@@ -203,7 +205,7 @@ void MockModelTypeProcessor::OnCommitCompletedImpl(
}
void MockModelTypeProcessor::OnUpdateReceivedImpl(
- const DataTypeState& type_state,
+ const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) {
received_update_responses_.push_back(response_list);
diff --git a/sync/test/engine/mock_model_type_processor.h b/sync/test/engine/mock_model_type_processor.h
index 120dedc8..a5a168e 100644
--- a/sync/test/engine/mock_model_type_processor.h
+++ b/sync/test/engine/mock_model_type_processor.h
@@ -16,6 +16,7 @@
#include "base/macros.h"
#include "sync/internal_api/public/model_type_processor.h"
#include "sync/internal_api/public/non_blocking_sync_common.h"
+#include "sync/protocol/data_type_state.pb.h"
namespace syncer_v2 {
@@ -37,9 +38,9 @@ class MockModelTypeProcessor : public ModelTypeProcessor {
// Implementation of ModelTypeProcessor.
void OnConnect(scoped_ptr<CommitQueue> commit_queue) override;
- void OnCommitCompleted(const DataTypeState& type_state,
+ void OnCommitCompleted(const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list) override;
- void OnUpdateReceived(const DataTypeState& type_state,
+ void OnUpdateReceived(const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates) override;
@@ -71,14 +72,16 @@ class MockModelTypeProcessor : public ModelTypeProcessor {
size_t GetNumUpdateResponses() const;
UpdateResponseDataList GetNthUpdateResponse(size_t n) const;
UpdateResponseDataList GetNthPendingUpdates(size_t n) const;
- DataTypeState GetNthTypeStateReceivedInUpdateResponse(size_t n) const;
+ sync_pb::DataTypeState GetNthTypeStateReceivedInUpdateResponse(
+ size_t n) const;
// Getters to access the log of received commit responses.
//
// Does not includes repsonses that are in pending tasks.
size_t GetNumCommitResponses() const;
CommitResponseDataList GetNthCommitResponse(size_t n) const;
- DataTypeState GetNthTypeStateReceivedInCommitResponse(size_t n) const;
+ sync_pb::DataTypeState GetNthTypeStateReceivedInCommitResponse(
+ size_t n) const;
// Getters to access the lastest update response for a given tag_hash.
bool HasUpdateResponse(const std::string& tag_hash) const;
@@ -92,13 +95,13 @@ class MockModelTypeProcessor : public ModelTypeProcessor {
// Process a received commit response.
//
// Implemented as an Impl method so we can defer its execution in some cases.
- void OnCommitCompletedImpl(const DataTypeState& type_state,
+ void OnCommitCompletedImpl(const sync_pb::DataTypeState& type_state,
const CommitResponseDataList& response_list);
// Process a received update response.
//
// Implemented as an Impl method so we can defer its execution in some cases.
- void OnUpdateReceivedImpl(const DataTypeState& type_state,
+ void OnUpdateReceivedImpl(const sync_pb::DataTypeState& type_state,
const UpdateResponseDataList& response_list,
const UpdateResponseDataList& pending_updates);
@@ -125,8 +128,8 @@ class MockModelTypeProcessor : public ModelTypeProcessor {
std::vector<CommitResponseDataList> received_commit_responses_;
std::vector<UpdateResponseDataList> received_update_responses_;
std::vector<UpdateResponseDataList> received_pending_updates_;
- std::vector<DataTypeState> type_states_received_on_update_;
- std::vector<DataTypeState> type_states_received_on_commit_;
+ std::vector<sync_pb::DataTypeState> type_states_received_on_update_;
+ std::vector<sync_pb::DataTypeState> type_states_received_on_commit_;
// Latest responses received, indexed by tag_hash.
std::map<const std::string, CommitResponseData> commit_response_items_;