summaryrefslogtreecommitdiffstats
path: root/components/sync_driver/change_processor.h
diff options
context:
space:
mode:
authortim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-17 19:26:53 +0000
committertim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-17 19:26:53 +0000
commitf472deb562e611475b87740224e91304d0030d64 (patch)
treeb4524819b47a318b1995a90ecbebcf52b1ff4c10 /components/sync_driver/change_processor.h
parentce67da1b61fc3fb14778dc55c1a9a011b0eac20a (diff)
downloadchromium_src-f472deb562e611475b87740224e91304d0030d64.zip
chromium_src-f472deb562e611475b87740224e91304d0030d64.tar.gz
chromium_src-f472deb562e611475b87740224e91304d0030d64.tar.bz2
sync: move ChangeProcessor from glue/ to components/sync_driver
BUG=339726 Review URL: https://codereview.chromium.org/237303005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@264610 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/sync_driver/change_processor.h')
-rw-r--r--components/sync_driver/change_processor.h88
1 files changed, 88 insertions, 0 deletions
diff --git a/components/sync_driver/change_processor.h b/components/sync_driver/change_processor.h
new file mode 100644
index 0000000..efefea9
--- /dev/null
+++ b/components/sync_driver/change_processor.h
@@ -0,0 +1,88 @@
+// Copyright 2014 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.
+
+#ifndef COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_H_
+#define COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_H_
+
+#include "components/sync_driver/data_type_error_handler.h"
+#include "sync/internal_api/public/base_transaction.h"
+#include "sync/internal_api/public/change_record.h"
+#include "sync/internal_api/public/user_share.h"
+
+namespace syncer {
+class UnrecoverableErrorHandler;
+} // namespace syncer
+
+namespace browser_sync {
+
+class ModelAssociator;
+
+// An interface used to apply changes from the sync model to the browser's
+// native model. This does not currently distinguish between model data types.
+class ChangeProcessor {
+ public:
+ explicit ChangeProcessor(DataTypeErrorHandler* error_handler);
+ virtual ~ChangeProcessor();
+
+ // Call when the processor should accept changes from either provided model
+ // and apply them to the other. Both the native model and sync_api are
+ // expected to be initialized and loaded. You must have set a valid
+ // ModelAssociator and UnrecoverableErrorHandler before using this method, and
+ // the two models should be associated w.r.t the ModelAssociator provided.
+ void Start(syncer::UserShare* share_handle);
+
+ // Changes have been applied to the backend model and are ready to be
+ // applied to the frontend model.
+ virtual void ApplyChangesFromSyncModel(
+ const syncer::BaseTransaction* trans,
+ int64 model_version,
+ const syncer::ImmutableChangeRecordList& changes) = 0;
+
+ // The changes found in ApplyChangesFromSyncModel may be too slow to be
+ // performed while holding a [Read/Write]Transaction lock or may interact
+ // with another thread, which might itself be waiting on the transaction lock,
+ // putting us at risk of deadlock.
+ // This function is called once the transactional lock is released and it is
+ // safe to perform inter-thread or slow I/O operations. Note that not all
+ // datatypes need this, so we provide an empty default version.
+ virtual void CommitChangesFromSyncModel();
+
+ // This ensures that startobserving gets called after stopobserving even
+ // if there is an early return in the function.
+ template <class T>
+ class ScopedStopObserving {
+ public:
+ explicit ScopedStopObserving(T* processor)
+ : processor_(processor) {
+ processor_->StopObserving();
+ }
+ ~ScopedStopObserving() {
+ processor_->StartObserving();
+ }
+
+ private:
+ ScopedStopObserving() {}
+ T* processor_;
+ };
+
+ protected:
+ // These methods are invoked by Start() and Stop() to do
+ // implementation-specific work.
+ virtual void StartImpl() = 0;
+
+ DataTypeErrorHandler* error_handler() const;
+ virtual syncer::UserShare* share_handle() const;
+
+ private:
+ DataTypeErrorHandler* error_handler_; // Guaranteed to outlive us.
+
+ // The sync model we are processing changes from.
+ syncer::UserShare* share_handle_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChangeProcessor);
+};
+
+} // namespace browser_sync
+
+#endif // COMPONENTS_SYNC_DRIVER_CHANGE_PROCESSOR_H_