Home | History | Annotate | Download | only in quic
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "net/quic/quic_alarm.h"
      6 
      7 #include "base/logging.h"
      8 
      9 namespace net {
     10 
     11 QuicAlarm::QuicAlarm(Delegate* delegate)
     12     : delegate_(delegate),
     13       deadline_(QuicTime::Zero()) {
     14 }
     15 
     16 QuicAlarm::~QuicAlarm() {}
     17 
     18 void QuicAlarm::Set(QuicTime deadline) {
     19   DCHECK(!IsSet());
     20   DCHECK(deadline.IsInitialized());
     21   deadline_ = deadline;
     22   SetImpl();
     23 }
     24 
     25 void QuicAlarm::Cancel() {
     26   deadline_ = QuicTime::Zero();
     27   CancelImpl();
     28 }
     29 
     30 bool QuicAlarm::IsSet() const {
     31   return deadline_.IsInitialized();
     32 }
     33 
     34 void QuicAlarm::Fire() {
     35   if (!deadline_.IsInitialized()) {
     36     return;
     37   }
     38 
     39   deadline_ = QuicTime::Zero();
     40   QuicTime deadline = delegate_->OnAlarm();
     41   // delegate_->OnAlarm() might call Set(), in which case  deadline_ will
     42   // already contain the new value, so don't overwrite it.
     43   if (!deadline_.IsInitialized() && deadline.IsInitialized()) {
     44     Set(deadline);
     45   }
     46 }
     47 
     48 }  // namespace net
     49