| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/quic/quic_alarm.h" |
| |
| #include "base/logging.h" |
| |
| namespace net { |
| |
| QuicAlarm::QuicAlarm(Delegate* delegate) |
| : delegate_(delegate), |
| deadline_(QuicTime::Zero()) { |
| } |
| |
| QuicAlarm::~QuicAlarm() {} |
| |
| void QuicAlarm::Set(QuicTime deadline) { |
| DCHECK(!IsSet()); |
| DCHECK(deadline.IsInitialized()); |
| deadline_ = deadline; |
| SetImpl(); |
| } |
| |
| void QuicAlarm::Cancel() { |
| deadline_ = QuicTime::Zero(); |
| CancelImpl(); |
| } |
| |
| bool QuicAlarm::IsSet() const { |
| return deadline_.IsInitialized(); |
| } |
| |
| void QuicAlarm::Fire() { |
| if (!deadline_.IsInitialized()) { |
| return; |
| } |
| |
| deadline_ = QuicTime::Zero(); |
| QuicTime deadline = delegate_->OnAlarm(); |
| // delegate_->OnAlarm() might call Set(), in which case deadline_ will |
| // already contain the new value, so don't overwrite it. |
| if (!deadline_.IsInitialized() && deadline.IsInitialized()) { |
| Set(deadline); |
| } |
| } |
| |
| } // namespace net |