Index: sync/internal_api/non_blocking_type_processor.cc |
diff --git a/sync/internal_api/non_blocking_type_processor.cc b/sync/internal_api/non_blocking_type_processor.cc |
index d426443a03c961d3824a18a4873e1b7c2ec66a93..870c2963619898ab1d8baa75d6517b8730050f14 100644 |
--- a/sync/internal_api/non_blocking_type_processor.cc |
+++ b/sync/internal_api/non_blocking_type_processor.cc |
@@ -11,10 +11,12 @@ |
namespace syncer { |
NonBlockingTypeProcessor::NonBlockingTypeProcessor(ModelType type) |
- : type_(type), |
- is_preferred_(false), |
- is_connected_(false), |
- weak_ptr_factory_(this) {} |
+ : type_(type), |
+ is_preferred_(false), |
+ is_connected_(false), |
+ weak_ptr_factory_for_ui_(this), |
+ weak_ptr_factory_for_sync_(this) { |
+} |
NonBlockingTypeProcessor::~NonBlockingTypeProcessor() { |
} |
@@ -34,10 +36,14 @@ ModelType NonBlockingTypeProcessor::GetModelType() const { |
return type_; |
} |
-void NonBlockingTypeProcessor::Enable(SyncCoreProxy* core_proxy) { |
+void NonBlockingTypeProcessor::Enable( |
+ scoped_ptr<SyncCoreProxy> sync_core_proxy) { |
DCHECK(CalledOnValidThread()); |
+ DVLOG(1) << "Asked to enable " << ModelTypeToString(type_); |
is_preferred_ = true; |
- core_proxy->ConnectTypeToCore(GetModelType(), AsWeakPtr()); |
+ sync_core_proxy_ = sync_core_proxy.Pass(); |
+ sync_core_proxy_->ConnectTypeToCore(GetModelType(), |
+ weak_ptr_factory_for_sync_.GetWeakPtr()); |
} |
void NonBlockingTypeProcessor::Disable() { |
@@ -48,20 +54,30 @@ void NonBlockingTypeProcessor::Disable() { |
void NonBlockingTypeProcessor::Disconnect() { |
DCHECK(CalledOnValidThread()); |
+ DVLOG(1) << "Asked to disconnect " << ModelTypeToString(type_); |
is_connected_ = false; |
+ |
+ if (sync_core_proxy_) { |
+ sync_core_proxy_->Disconnect(GetModelType()); |
+ sync_core_proxy_.reset(); |
+ } |
+ |
+ weak_ptr_factory_for_sync_.InvalidateWeakPtrs(); |
core_ = base::WeakPtr<NonBlockingTypeProcessorCore>(); |
sync_thread_ = scoped_refptr<base::SequencedTaskRunner>(); |
} |
-base::WeakPtr<NonBlockingTypeProcessor> NonBlockingTypeProcessor::AsWeakPtr() { |
+base::WeakPtr<NonBlockingTypeProcessor> |
+NonBlockingTypeProcessor::AsWeakPtrForUI() { |
DCHECK(CalledOnValidThread()); |
- return weak_ptr_factory_.GetWeakPtr(); |
+ return weak_ptr_factory_for_ui_.GetWeakPtr(); |
} |
void NonBlockingTypeProcessor::OnConnect( |
base::WeakPtr<NonBlockingTypeProcessorCore> core, |
scoped_refptr<base::SequencedTaskRunner> sync_thread) { |
DCHECK(CalledOnValidThread()); |
+ DVLOG(1) << "Successfully connected " << ModelTypeToString(type_); |
is_connected_ = true; |
core_ = core; |
sync_thread_ = sync_thread; |