15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SYNC_ENGINE_COMMIT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_ENGINE_COMMIT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <map> 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/stl_util.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "sync/base/sync_export.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "sync/engine/commit_contribution.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "sync/internal_api/public/base/model_type.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "sync/internal_api/public/engine/model_safe_worker.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/util/syncer_error.h" 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "sync/protocol/sync.pb.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "sync/util/extensions_activity.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace sessions { 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class StatusController; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SyncSession; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class CommitProcessor; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Syncer; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This class wraps the actions related to building and executing a single 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// commit operation. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This class' most important responsibility is to manage the ContributionsMap. 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This class serves as a container for those objects. Although it would have 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// been acceptable to let this class be a dumb container object, it turns out 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// that there was no other convenient place to put the Init() and 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// PostAndProcessCommitResponse() functions. So they ended up here. 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class SYNC_EXPORT_PRIVATE Commit { 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Commit( 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::map<ModelType, CommitContribution*>& 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) contributions, 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const sync_pb::ClientToServerMessage& message, 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionsActivity::Records extensions_activity_buffer); 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // This destructor will DCHECK if CleanUp() has not been called. 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ~Commit(); 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static Commit* Init( 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ModelTypeSet requested_types, 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ModelTypeSet enabled_types, 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) size_t max_entries, 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& account_name, 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& cache_guid, 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CommitProcessor* commit_processor, 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionsActivity* extensions_activity); 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SyncerError PostAndProcessResponse( 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sessions::SyncSession* session, 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sessions::StatusController* status, 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionsActivity* extensions_activity); 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Cleans up state associated with this commit. Must be called before the 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // destructor. 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void CleanUp(); 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) typedef std::map<ModelType, CommitContribution*> ContributionMap; 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ContributionMap contributions_; 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) STLValueDeleter<ContributionMap> deleter_; 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sync_pb::ClientToServerMessage message_; 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) sync_pb::ClientToServerResponse response_; 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ExtensionsActivity::Records extensions_activity_buffer_; 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Debug only flag used to indicate if it's safe to destruct the object. 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool cleaned_up_; 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SYNC_ENGINE_COMMIT_H_ 83