summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/glue/change_processor.h
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2010-07-29 17:14:53 +0100
committerBen Murdoch <benm@google.com>2010-08-04 14:29:45 +0100
commitc407dc5cd9bdc5668497f21b26b09d988ab439de (patch)
tree7eaf8707c0309516bdb042ad976feedaf72b0bb1 /chrome/browser/sync/glue/change_processor.h
parent0998b1cdac5733f299c12d88bc31ef9c8035b8fa (diff)
downloadexternal_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.zip
external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.tar.gz
external_chromium-c407dc5cd9bdc5668497f21b26b09d988ab439de.tar.bz2
Merge Chromium src@r53293
Change-Id: Ia79acf8670f385cee48c45b0a75371d8e950af34
Diffstat (limited to 'chrome/browser/sync/glue/change_processor.h')
-rw-r--r--chrome/browser/sync/glue/change_processor.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/chrome/browser/sync/glue/change_processor.h b/chrome/browser/sync/glue/change_processor.h
new file mode 100644
index 0000000..7e020e6
--- /dev/null
+++ b/chrome/browser/sync/glue/change_processor.h
@@ -0,0 +1,69 @@
+// Copyright (c) 2006-2009 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 CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_H_
+#define CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_H_
+
+#include "chrome/browser/sync/engine/syncapi.h"
+#include "chrome/browser/sync/glue/sync_backend_host.h"
+
+class Profile;
+
+namespace browser_sync {
+
+class ModelAssociator;
+class UnrecoverableErrorHandler;
+
+// 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(UnrecoverableErrorHandler* error_handler)
+ : running_(false), error_handler_(error_handler), share_handle_(NULL) {}
+ virtual ~ChangeProcessor();
+
+ // Call when the processor should accept changes from either provided model
+ // and apply them to the other. Both the chrome 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.
+ // It is safe to call Start again after previously Stop()ing the processor.
+ // Subclasses can extract their associated chrome model from |profile| in
+ // |StartImpl|.
+ void Start(Profile* profile, sync_api::UserShare* share_handle);
+ void Stop();
+ virtual bool IsRunning() const { return running_; }
+
+ // Changes have been applied to the backend model and are ready to be
+ // applied to the frontend model. See syncapi.h for detailed instructions on
+ // how to interpret and process |changes|.
+ virtual void ApplyChangesFromSyncModel(
+ const sync_api::BaseTransaction* trans,
+ const sync_api::SyncManager::ChangeRecord* changes,
+ int change_count) = 0;
+
+ protected:
+ // These methods are invoked by Start() and Stop() to do
+ // implementation-specific work.
+ virtual void StartImpl(Profile* profile) = 0;
+ virtual void StopImpl() = 0;
+
+ bool running() { return running_; }
+ UnrecoverableErrorHandler* error_handler() { return error_handler_; }
+ sync_api::UserShare* share_handle() { return share_handle_; }
+
+ private:
+ bool running_; // True if we have been told it is safe to process changes.
+ UnrecoverableErrorHandler* error_handler_; // Guaranteed to outlive us.
+
+ // The sync model we are processing changes from. Non-NULL when |running_| is
+ // true.
+ sync_api::UserShare* share_handle_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChangeProcessor);
+};
+
+} // namespace browser_sync
+
+#endif // CHROME_BROWSER_SYNC_GLUE_CHANGE_PROCESSOR_H_