#ifndef SYNC_ENGINE_NON_BLOCKING_TYPE_PROCESSOR_H_
#define SYNC_ENGINE_NON_BLOCKING_TYPE_PROCESSOR_H_
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/sequenced_task_runner.h"
#include "base/threading/non_thread_safe.h"
#include "sync/base/sync_export.h"
#include "sync/internal_api/public/base/model_type.h"
#include "sync/internal_api/public/sync_core_proxy.h"
#include "sync/protocol/sync.pb.h"
namespace syncer {
class NonBlockingTypeProcessorCore;
class SYNC_EXPORT_PRIVATE NonBlockingTypeProcessor : base::NonThreadSafe {
 public:
  NonBlockingTypeProcessor(ModelType type);
  virtual ~NonBlockingTypeProcessor();
  
  bool IsEnabled() const;
  
  ModelType GetModelType() const;
  
  void Enable(SyncCoreProxy core_proxy_);
  
  
  void Disable();
  
  void OnConnect(base::WeakPtr<NonBlockingTypeProcessorCore> core,
                 scoped_refptr<base::SequencedTaskRunner> sync_thread);
  base::WeakPtr<NonBlockingTypeProcessor> AsWeakPtr();
 private:
  ModelType type_;
  sync_pb::DataTypeProgressMarker progress_marker_;
  bool enabled_;
  base::WeakPtr<NonBlockingTypeProcessorCore> core_;
  scoped_refptr<base::SequencedTaskRunner> sync_thread_;
  base::WeakPtrFactory<NonBlockingTypeProcessor> weak_ptr_factory_;
};
}  
#endif