18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
25af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke * Copyright (C) 2008 Apple Inc. All Rights Reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
135af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
235af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke *
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
275af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#ifndef SuspendableTimer_h
285af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#define SuspendableTimer_h
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
305af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include "ActiveDOMObject.h"
315af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include "Timer.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
355af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeclass SuspendableTimer : public TimerBase, public ActiveDOMObject {
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    explicit SuspendableTimer(ScriptExecutionContext*);
385af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual ~SuspendableTimer();
395af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
405af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    // ActiveDOMObject
415af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool hasPendingActivity() const;
425af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void stop();
435af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual bool canSuspend() const;
4468513a70bcd92384395513322f1b801e7bf9c729Steve Block    virtual void suspend(ReasonForSuspension);
455af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void resume();
465af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
475af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeprivate:
485af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    virtual void fired() = 0;
495af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
505af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    double m_nextFireInterval;
515af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    double m_repeatInterval;
522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool m_active;
535af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#if !ASSERT_DISABLED
545af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    bool m_suspended;
555af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#endif
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
585af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke} // namespace WebCore
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
605af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#endif // SuspendableTimer_h
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
62