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 19namespace tracked_objects { 20class Location; 21} // namespace tracked_objects 22 23namespace syncer { 24 25class JsEventDetails; 26class JsEventHandler; 27 28// Observes all change- and transaction-related events and routes a 29// summarized version to a JsEventHandler. 30class 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