| // Copyright 2012 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef COMPONENTS_SYNC_ENGINE_COMMIT_H_ | |
| #define COMPONENTS_SYNC_ENGINE_COMMIT_H_ | |
| #include <stddef.h> | |
| #include <map> | |
| #include <memory> | |
| #include <string> | |
| #include "components/sync/base/data_type.h" | |
| #include "components/sync/base/extensions_activity.h" | |
| #include "components/sync/engine/commit_contribution.h" | |
| #include "components/sync/engine/cycle/nudge_tracker.h" | |
| #include "components/sync/engine/syncer_error.h" | |
| #include "components/sync/protocol/sync.pb.h" | |
| namespace syncer { | |
| class ActiveDevicesInvalidationInfo; | |
| class CommitProcessor; | |
| class StatusController; | |
| class SyncCycle; | |
| // This class wraps the actions related to building and executing a single | |
| // commit operation. | |
| // | |
| // This class' most important responsibility is to manage the ContributionsMap. | |
| // This class serves as a container for those objects. Although it would have | |
| // been acceptable to let this class be a dumb container object, it turns out | |
| // that there was no other convenient place to put the Init() and | |
| // PostAndProcessCommitResponse() functions. So they ended up here. | |
| class Commit { | |
| public: | |
| using ContributionMap = | |
| std::map<DataType, std::unique_ptr<CommitContribution>>; | |
| Commit(ContributionMap contributions, | |
| const sync_pb::ClientToServerMessage& message, | |
| ExtensionsActivity::Records extensions_activity_buffer); | |
| Commit(const Commit&) = delete; | |
| Commit& operator=(const Commit&) = delete; | |
| ~Commit(); | |
| // `extensions_activity` may be null. | |
| static std::unique_ptr<Commit> Init( | |
| DataTypeSet enabled_types, | |
| size_t max_entries, | |
| const std::string& account_name, | |
| const std::string& cache_guid, | |
| bool cookie_jar_mismatch, | |
| const ActiveDevicesInvalidationInfo& active_devices_invalidation_info, | |
| CommitProcessor* commit_processor, | |
| ExtensionsActivity* extensions_activity); | |
| // `extensions_activity` may be null. | |
| SyncerError PostAndProcessResponse(NudgeTracker* nudge_tracker, | |
| SyncCycle* cycle, | |
| StatusController* status, | |
| ExtensionsActivity* extensions_activity); | |
| DataTypeSet GetContributingDataTypes() const; | |
| private: | |
| // Report commit failure to each contribution. | |
| void ReportFullCommitFailure(SyncerError syncer_error); | |
| ContributionMap contributions_; | |
| sync_pb::ClientToServerMessage message_; | |
| ExtensionsActivity::Records extensions_activity_buffer_; | |
| }; | |
| } // namespace syncer | |
| #endif // COMPONENTS_SYNC_ENGINE_COMMIT_H_ |