146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef SYNC_ENGINE_NON_BLOCKING_TYPE_COMMIT_CONTRIBUTION_H_ 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define SYNC_ENGINE_NON_BLOCKING_TYPE_COMMIT_CONTRIBUTION_H_ 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <vector> 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/basictypes.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "sync/engine/commit_contribution.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "sync/protocol/sync.pb.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace syncer { 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ModelTypeSyncWorkerImpl; 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// A non-blocking sync type's contribution to an outgoing commit message. 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Helps build a commit message and process its response. It collaborates 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// closely with the ModelTypeSyncWorkerImpl. 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class NonBlockingTypeCommitContribution : public CommitContribution { 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NonBlockingTypeCommitContribution( 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const sync_pb::DataTypeContext& context, 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>& entities, 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::vector<int64>& sequence_numbers, 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ModelTypeSyncWorkerImpl* worker); 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~NonBlockingTypeCommitContribution(); 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Implementation of CommitContribution 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void AddToCommitMessage(sync_pb::ClientToServerMessage* msg) OVERRIDE; 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual SyncerError ProcessCommitResponse( 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const sync_pb::ClientToServerResponse& response, 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) sessions::StatusController* status) OVERRIDE; 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void CleanUp() OVERRIDE; 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual size_t GetNumEntries() const OVERRIDE; 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // A non-owned pointer back to the object that created this contribution. 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ModelTypeSyncWorkerImpl* const worker_; 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The type-global context information. 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const sync_pb::DataTypeContext context_; 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The set of entities to be committed, serialized as SyncEntities. 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const google::protobuf::RepeatedPtrField<sync_pb::SyncEntity> entities_; 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The sequence numbers associated with the pending commits. These match up 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // with the entities_ vector. 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::vector<int64> sequence_numbers_; 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // The index in the commit message where this contribution's entities are 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // added. Used to correlate per-item requests with per-item responses. 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) size_t entries_start_index_; 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // A flag used to ensure this object's contract is respected. Helps to check 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // that CleanUp() is called before the object is destructed. 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool cleaned_up_; 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NonBlockingTypeCommitContribution); 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace syncer 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif // SYNC_ENGINE_NON_BLOCKING_TYPE_COMMIT_CONTRIBUTION_H_ 67