#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