Index: chrome/browser/sync/glue/change_processor.h |
diff --git a/chrome/browser/sync/glue/change_processor.h b/chrome/browser/sync/glue/change_processor.h |
index 92fcfff16525f2df423afd88266cd37284cfa4f7..fba83016c1677687e6846ec62122cff4542e245c 100644 |
--- a/chrome/browser/sync/glue/change_processor.h |
+++ b/chrome/browser/sync/glue/change_processor.h |
@@ -52,6 +52,24 @@ class ChangeProcessor { |
// 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. |