| Index: components/invalidation/sync_invalidation_listener.cc
|
| diff --git a/components/invalidation/sync_invalidation_listener.cc b/components/invalidation/sync_invalidation_listener.cc
|
| index a6566be297d3165b68a943b8272c3adc77a27578..21abd527fd746d98f74f2c5b3767f2c3af467305 100644
|
| --- a/components/invalidation/sync_invalidation_listener.cc
|
| +++ b/components/invalidation/sync_invalidation_listener.cc
|
| @@ -48,12 +48,14 @@ SyncInvalidationListener::~SyncInvalidationListener() {
|
| }
|
|
|
| void SyncInvalidationListener::Start(
|
| - const CreateInvalidationClientCallback&
|
| - create_invalidation_client_callback,
|
| - const std::string& client_id, const std::string& client_info,
|
| + const CreateInvalidationClientCallback& create_invalidation_client_callback,
|
| + const std::string& client_id,
|
| + const std::string& client_info,
|
| const std::string& invalidation_bootstrap_data,
|
| const UnackedInvalidationsMap& initial_unacked_invalidations,
|
| - const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker,
|
| + const base::WeakPtr<InvalidationStateTracker>& invalidation_state_tracker,
|
| + const scoped_refptr<base::SequencedTaskRunner>&
|
| + invalidation_state_tracker_task_runner,
|
| Delegate* delegate) {
|
| DCHECK(CalledOnValidThread());
|
| Stop();
|
| @@ -69,7 +71,9 @@ void SyncInvalidationListener::Start(
|
|
|
| unacked_invalidations_map_ = initial_unacked_invalidations;
|
| invalidation_state_tracker_ = invalidation_state_tracker;
|
| - DCHECK(invalidation_state_tracker_.IsInitialized());
|
| + invalidation_state_tracker_task_runner_ =
|
| + invalidation_state_tracker_task_runner;
|
| + DCHECK(invalidation_state_tracker_task_runner_);
|
|
|
| DCHECK(!delegate_);
|
| DCHECK(delegate);
|
| @@ -133,7 +137,7 @@ void SyncInvalidationListener::Invalidate(
|
|
|
| ObjectIdInvalidationMap invalidations;
|
| Invalidation inv = Invalidation::Init(id, invalidation.version(), payload);
|
| - inv.set_ack_handler(GetThisAsAckHandler());
|
| + inv.SetAckHandler(AsWeakPtr(), base::MessageLoopProxy::current());
|
| invalidations.Insert(inv);
|
|
|
| DispatchInvalidations(invalidations);
|
| @@ -150,7 +154,7 @@ void SyncInvalidationListener::InvalidateUnknownVersion(
|
|
|
| ObjectIdInvalidationMap invalidations;
|
| Invalidation unknown_version = Invalidation::InitUnknownVersion(object_id);
|
| - unknown_version.set_ack_handler(GetThisAsAckHandler());
|
| + unknown_version.SetAckHandler(AsWeakPtr(), base::MessageLoopProxy::current());
|
| invalidations.Insert(unknown_version);
|
|
|
| DispatchInvalidations(invalidations);
|
| @@ -170,7 +174,8 @@ void SyncInvalidationListener::InvalidateAll(
|
| for (ObjectIdSet::iterator it = registered_ids_.begin();
|
| it != registered_ids_.end(); ++it) {
|
| Invalidation unknown_version = Invalidation::InitUnknownVersion(*it);
|
| - unknown_version.set_ack_handler(GetThisAsAckHandler());
|
| + unknown_version.SetAckHandler(AsWeakPtr(),
|
| + base::MessageLoopProxy::current());
|
| invalidations.Insert(unknown_version);
|
| }
|
|
|
| @@ -204,10 +209,11 @@ void SyncInvalidationListener::SaveInvalidations(
|
| lookup->second.AddSet(to_save.ForObject(*it));
|
| }
|
|
|
| - invalidation_state_tracker_.Call(
|
| + invalidation_state_tracker_task_runner_->PostTask(
|
| FROM_HERE,
|
| - &InvalidationStateTracker::SetSavedInvalidations,
|
| - unacked_invalidations_map_);
|
| + base::Bind(&InvalidationStateTracker::SetSavedInvalidations,
|
| + invalidation_state_tracker_,
|
| + unacked_invalidations_map_));
|
| }
|
|
|
| void SyncInvalidationListener::EmitSavedInvalidations(
|
| @@ -296,10 +302,11 @@ void SyncInvalidationListener::Acknowledge(
|
| return;
|
| }
|
| lookup->second.Acknowledge(handle);
|
| - invalidation_state_tracker_.Call(
|
| + invalidation_state_tracker_task_runner_->PostTask(
|
| FROM_HERE,
|
| - &InvalidationStateTracker::SetSavedInvalidations,
|
| - unacked_invalidations_map_);
|
| + base::Bind(&InvalidationStateTracker::SetSavedInvalidations,
|
| + invalidation_state_tracker_,
|
| + unacked_invalidations_map_));
|
| }
|
|
|
| void SyncInvalidationListener::Drop(
|
| @@ -312,17 +319,21 @@ void SyncInvalidationListener::Drop(
|
| return;
|
| }
|
| lookup->second.Drop(handle);
|
| - invalidation_state_tracker_.Call(
|
| + invalidation_state_tracker_task_runner_->PostTask(
|
| FROM_HERE,
|
| - &InvalidationStateTracker::SetSavedInvalidations,
|
| - unacked_invalidations_map_);
|
| + base::Bind(&InvalidationStateTracker::SetSavedInvalidations,
|
| + invalidation_state_tracker_,
|
| + unacked_invalidations_map_));
|
| }
|
|
|
| void SyncInvalidationListener::WriteState(const std::string& state) {
|
| DCHECK(CalledOnValidThread());
|
| DVLOG(1) << "WriteState";
|
| - invalidation_state_tracker_.Call(
|
| - FROM_HERE, &InvalidationStateTracker::SetBootstrapData, state);
|
| + invalidation_state_tracker_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&InvalidationStateTracker::SetBootstrapData,
|
| + invalidation_state_tracker_,
|
| + state));
|
| }
|
|
|
| void SyncInvalidationListener::DoRegistrationUpdate() {
|
| @@ -333,10 +344,11 @@ void SyncInvalidationListener::DoRegistrationUpdate() {
|
| it != unregistered_ids.end(); ++it) {
|
| unacked_invalidations_map_.erase(*it);
|
| }
|
| - invalidation_state_tracker_.Call(
|
| + invalidation_state_tracker_task_runner_->PostTask(
|
| FROM_HERE,
|
| - &InvalidationStateTracker::SetSavedInvalidations,
|
| - unacked_invalidations_map_);
|
| + base::Bind(&InvalidationStateTracker::SetSavedInvalidations,
|
| + invalidation_state_tracker_,
|
| + unacked_invalidations_map_));
|
|
|
| ObjectIdInvalidationMap object_id_invalidation_map;
|
| for (UnackedInvalidationsMap::iterator map_it =
|
| @@ -345,9 +357,9 @@ void SyncInvalidationListener::DoRegistrationUpdate() {
|
| if (registered_ids_.find(map_it->first) == registered_ids_.end()) {
|
| continue;
|
| }
|
| - map_it->second.ExportInvalidations(
|
| - GetThisAsAckHandler(),
|
| - &object_id_invalidation_map);
|
| + map_it->second.ExportInvalidations(AsWeakPtr(),
|
| + base::MessageLoopProxy::current(),
|
| + &object_id_invalidation_map);
|
| }
|
|
|
| // There's no need to run these through DispatchInvalidations(); they've
|
| @@ -428,9 +440,11 @@ void SyncInvalidationListener::EmitStateChange() {
|
| delegate_->OnInvalidatorStateChange(GetState());
|
| }
|
|
|
| -WeakHandle<AckHandler> SyncInvalidationListener::GetThisAsAckHandler() {
|
| +base::WeakPtr<AckHandler> SyncInvalidationListener::AsWeakPtr() {
|
| DCHECK(CalledOnValidThread());
|
| - return WeakHandle<AckHandler>(weak_ptr_factory_.GetWeakPtr());
|
| + base::WeakPtr<AckHandler> weak_ptr = weak_ptr_factory_.GetWeakPtr();
|
| + weak_ptr.get(); // Binds the pointer to this thread.
|
| + return weak_ptr;
|
| }
|
|
|
| void SyncInvalidationListener::OnNetworkChannelStateChanged(
|
|
|