summaryrefslogtreecommitdiffstats
path: root/sync/engine/commit.h
diff options
context:
space:
mode:
authorrlarocque@chromium.org <rlarocque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-16 00:03:47 +0000
committerrlarocque@chromium.org <rlarocque@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-16 00:03:47 +0000
commit1ab2d7f5a751ad863e4e5eba7ecd7020559ff74a (patch)
treea80c59fe6bdd66aa1a576ca17d07d8a1a1040997 /sync/engine/commit.h
parent268d4089eb9ebc9cdd997a3998228fd848da8fc5 (diff)
downloadchromium_src-1ab2d7f5a751ad863e4e5eba7ecd7020559ff74a.zip
chromium_src-1ab2d7f5a751ad863e4e5eba7ecd7020559ff74a.tar.gz
chromium_src-1ab2d7f5a751ad863e4e5eba7ecd7020559ff74a.tar.bz2
sync: Implement per-type commit interface
Move most commit logic into per-type instances of SyncDirectoryCommitContributor and SyncDirectoryCommitContribution classes. Make GetCommitIdsCommand and ProcessCommitResponseCommand into container classes with only static methods. Remove OrderedCommitSet. The point of these changes is to make way for different kinds of entity committers. The SyncDirectoryCommitContributor and SyncDirectoryCommitContribution will eventually refactored into implementations of more generic "commit contributor" and "commit contribution" interfaces. This commit leaves us with some structures that might look a bit odd to someone unfamiliar with the history of this code. In particular, many of the old SyncerCommands look out of place. We plan to refactor them in future CLs. For now, it's more important to make sure this CL has an easy to read diff. BUG=278484 Review URL: https://codereview.chromium.org/25638003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228810 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/engine/commit.h')
-rw-r--r--sync/engine/commit.h73
1 files changed, 58 insertions, 15 deletions
diff --git a/sync/engine/commit.h b/sync/engine/commit.h
index 168d950..4750971 100644
--- a/sync/engine/commit.h
+++ b/sync/engine/commit.h
@@ -5,33 +5,76 @@
#ifndef SYNC_ENGINE_COMMIT_H_
#define SYNC_ENGINE_COMMIT_H_
+#include <map>
+
+#include "base/stl_util.h"
+#include "sync/base/sync_export.h"
+#include "sync/engine/sync_directory_commit_contribution.h"
+#include "sync/engine/sync_directory_commit_contributor.h"
#include "sync/internal_api/public/base/model_type.h"
+#include "sync/internal_api/public/engine/model_safe_worker.h"
#include "sync/internal_api/public/util/syncer_error.h"
+#include "sync/protocol/sync.pb.h"
+#include "sync/util/extensions_activity.h"
namespace syncer {
namespace sessions {
+class StatusController;
class SyncSession;
}
class Syncer;
-// This function will commit batches of unsynced items to the server until the
-// number of unsynced and ready to commit items reaches zero or an error is
-// encountered. A request to exit early will be treated as an error and will
-// abort any blocking operations.
-//
-// The Syncer parameter is provided only for access to its ExitRequested()
-// method. This is technically unnecessary since an early exit request should
-// be detected as we attempt to contact the sync server.
+// This class wraps the actions related to building and executing a single
+// commit operation.
//
-// The SyncSession parameter contains pointers to various bits of state,
-// including the syncable::Directory that contains all sync items and the
-// ServerConnectionManager used to contact the server.
-SyncerError BuildAndPostCommits(
- ModelTypeSet request_types,
- Syncer* syncer,
- sessions::SyncSession* session);
+// 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 SYNC_EXPORT_PRIVATE Commit {
+ public:
+ Commit(
+ const std::map<ModelType, SyncDirectoryCommitContribution*>&
+ contributions,
+ const sync_pb::ClientToServerMessage& message,
+ ExtensionsActivity::Records extensions_activity_buffer);
+
+ // This destructor will DCHECK if CleanUp() has not been called.
+ ~Commit();
+
+ static Commit* Init(
+ ModelTypeSet requested_types,
+ size_t max_entries,
+ const std::string& account_name,
+ const std::string& cache_guid,
+ CommitContributorMap* contributor_map,
+ ExtensionsActivity* extensions_activity);
+
+ SyncerError PostAndProcessResponse(
+ sessions::SyncSession* session,
+ sessions::StatusController* status,
+ ExtensionsActivity* extensions_activity);
+
+ // Cleans up state associated with this commit. Must be called before the
+ // destructor.
+ void CleanUp();
+
+ private:
+ typedef std::map<ModelType, SyncDirectoryCommitContribution*> ContributionMap;
+
+ ContributionMap contributions_;
+ STLValueDeleter<ContributionMap> deleter_;
+
+ sync_pb::ClientToServerMessage message_;
+ sync_pb::ClientToServerResponse response_;
+ ExtensionsActivity::Records extensions_activity_buffer_;
+
+ // Debug only flag used to indicate if it's safe to destruct the object.
+ bool cleaned_up_;
+};
} // namespace syncer