diff options
author | tim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-17 19:26:53 +0000 |
---|---|---|
committer | tim@chromium.org <tim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-17 19:26:53 +0000 |
commit | f472deb562e611475b87740224e91304d0030d64 (patch) | |
tree | b4524819b47a318b1995a90ecbebcf52b1ff4c10 /components/sync_driver/change_processor.h | |
parent | ce67da1b61fc3fb14778dc55c1a9a011b0eac20a (diff) | |
download | chromium_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.h | 88 |
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_ |