1 // Copyright 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef SYNC_INTERNAL_API_JS_MUTATION_EVENT_OBSERVER_H_ 6 #define SYNC_INTERNAL_API_JS_MUTATION_EVENT_OBSERVER_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 #include "base/memory/weak_ptr.h" 13 #include "base/threading/non_thread_safe.h" 14 #include "sync/base/sync_export.h" 15 #include "sync/internal_api/public/sync_manager.h" 16 #include "sync/internal_api/public/util/weak_handle.h" 17 #include "sync/syncable/transaction_observer.h" 18 19 namespace tracked_objects { 20 class Location; 21 } // namespace tracked_objects 22 23 namespace syncer { 24 25 class JsEventDetails; 26 class JsEventHandler; 27 28 // Observes all change- and transaction-related events and routes a 29 // summarized version to a JsEventHandler. 30 class SYNC_EXPORT_PRIVATE JsMutationEventObserver 31 : public SyncManager::ChangeObserver, 32 public syncable::TransactionObserver, 33 public base::NonThreadSafe { 34 public: 35 JsMutationEventObserver(); 36 37 virtual ~JsMutationEventObserver(); 38 39 base::WeakPtr<JsMutationEventObserver> AsWeakPtr(); 40 41 void InvalidateWeakPtrs(); 42 43 void SetJsEventHandler(const WeakHandle<JsEventHandler>& event_handler); 44 45 // SyncManager::ChangeObserver implementation. 46 virtual void OnChangesApplied( 47 ModelType model_type, 48 int64 write_transaction_id, 49 const ImmutableChangeRecordList& changes) OVERRIDE; 50 virtual void OnChangesComplete(ModelType model_type) OVERRIDE; 51 52 // syncable::TransactionObserver implementation. 53 virtual void OnTransactionWrite( 54 const syncable::ImmutableWriteTransactionInfo& write_transaction_info, 55 ModelTypeSet models_with_changes) OVERRIDE; 56 57 private: 58 WeakHandle<JsEventHandler> event_handler_; 59 60 void HandleJsEvent( 61 const tracked_objects::Location& from_here, 62 const std::string& name, const JsEventDetails& details); 63 64 base::WeakPtrFactory<JsMutationEventObserver> weak_ptr_factory_; 65 66 DISALLOW_COPY_AND_ASSIGN(JsMutationEventObserver); 67 }; 68 69 } // namespace syncer 70 71 #endif // SYNC_INTERNAL_API_JS_MUTATION_EVENT_OBSERVER_H_ 72