Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Unified Diff: sync/internal_api/non_blocking_type_processor.cc

Issue 272323002: sync: Implement disabling of non blocking types (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698