libweave: Remove base::Timer from PullChannel base::Timer needs base::TaskRunner, but we remove this dependency. BUG=brillo:1256 TEST=`FEATURES=test emerge-gizmo libweave` Change-Id: I2a0ef093a4ac90bf66df64cdb29d1037761a52b8 Reviewed-on: https://chromium-review.googlesource.com/292977 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Trybot-Ready: Vitaly Buka <vitalybuka@chromium.org> Tested-by: Vitaly Buka <vitalybuka@chromium.org> Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/libweave/src/notification/pull_channel.cc b/libweave/src/notification/pull_channel.cc index 2f954e5..38ac0b1 100644 --- a/libweave/src/notification/pull_channel.cc +++ b/libweave/src/notification/pull_channel.cc
@@ -13,9 +13,7 @@ PullChannel::PullChannel( base::TimeDelta pull_interval, const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) - : pull_interval_{pull_interval}, timer_{true, true} { - timer_.SetTaskRunner(task_runner); -} + : pull_interval_{pull_interval}, task_runner_{task_runner} {} std::string PullChannel::GetName() const { return "pull"; @@ -32,23 +30,32 @@ void PullChannel::Start(NotificationDelegate* delegate) { CHECK(delegate); delegate_ = delegate; - timer_.Start( - FROM_HERE, pull_interval_, - base::Bind(&PullChannel::OnTimer, weak_ptr_factory_.GetWeakPtr())); + RePost(); +} + +void PullChannel::RePost() { + CHECK(delegate_); + weak_ptr_factory_.InvalidateWeakPtrs(); + task_runner_->PostDelayedTask( + FROM_HERE, + base::Bind(&PullChannel::OnTimer, weak_ptr_factory_.GetWeakPtr()), + pull_interval_); } void PullChannel::Stop() { weak_ptr_factory_.InvalidateWeakPtrs(); - timer_.Stop(); + delegate_ = nullptr; } void PullChannel::UpdatePullInterval(base::TimeDelta pull_interval) { - timer_.Stop(); pull_interval_ = pull_interval; - Start(delegate_); + if (delegate_) + RePost(); } void PullChannel::OnTimer() { + // Repost before delegate notification to give it a chance to stop channel. + RePost(); base::DictionaryValue empty_dict; delegate_->OnCommandCreated(empty_dict); }
diff --git a/libweave/src/notification/pull_channel.h b/libweave/src/notification/pull_channel.h index 79955d0..fef6d56 100644 --- a/libweave/src/notification/pull_channel.h +++ b/libweave/src/notification/pull_channel.h
@@ -34,10 +34,11 @@ private: void OnTimer(); + void RePost(); - NotificationDelegate* delegate_{nullptr}; base::TimeDelta pull_interval_; - base::Timer timer_; + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; + NotificationDelegate* delegate_{nullptr}; base::WeakPtrFactory<PullChannel> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(PullChannel);