18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2009, The Android Open Source Project
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Google Inc. All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
83298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *  * Redistributions of source code must retain the above copyright
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
103298a7d84b96ade73c6b170671711a8f2792ae59Steve Block *  * Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
143298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
173298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
243298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
273d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#ifndef PluginTimer_h
283d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#define PluginTimer_h
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
300cae2b1e7dd111cf7081b49cf7411c0066b33cc6Ben Murdoch#include "FastAllocBase.h"
317e336d32d9c3465ff9792faa8ccc8613b7849e4cDerek Sollenberger#include "RefCounted.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Timer.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npapi.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class PluginTimerList;
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
397e336d32d9c3465ff9792faa8ccc8613b7849e4cDerek Sollenberger    class PluginTimer : public TimerBase, public RefCounted<PluginTimer> {
400cae2b1e7dd111cf7081b49cf7411c0066b33cc6Ben Murdoch        WTF_MAKE_FAST_ALLOCATED;
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PluginTimer(PluginTimer** list, NPP instance, bool repeat,
43c02eba192362e2ea83fdfbe0be51a08429ec4123Ben Murdoch                    void (*proc)(NPP npp, uint32_t timerID));
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual ~PluginTimer();
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
46c02eba192362e2ea83fdfbe0be51a08429ec4123Ben Murdoch        uint32_t timerID() const { return m_timerID; }
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4881b3dad72dd3fbc96e1128fc3d011272c4c27b91Nicolas Roard        void unschedule() { m_unscheduled = true; }
4981b3dad72dd3fbc96e1128fc3d011272c4c27b91Nicolas Roard
50c02eba192362e2ea83fdfbe0be51a08429ec4123Ben Murdoch        static PluginTimer* Find(PluginTimer* list, uint32_t timerID);
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // override from TimerBase
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void fired();
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PluginTimer* next() const { return m_next; }
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        friend class PluginTimerList;
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PluginTimer**   m_list;
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PluginTimer*    m_prev;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PluginTimer*    m_next;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        NPP             m_instance;
63c02eba192362e2ea83fdfbe0be51a08429ec4123Ben Murdoch        void            (*m_timerFunc)(NPP, uint32_t);
64c02eba192362e2ea83fdfbe0be51a08429ec4123Ben Murdoch        uint32_t          m_timerID;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool            m_repeat;
6681b3dad72dd3fbc96e1128fc3d011272c4c27b91Nicolas Roard        bool            m_unscheduled;
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class PluginTimerList {
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PluginTimerList() : m_list(0) {}
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        ~PluginTimerList();
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
74c02eba192362e2ea83fdfbe0be51a08429ec4123Ben Murdoch        uint32_t schedule(NPP instance, uint32_t interval, bool repeat,
75c02eba192362e2ea83fdfbe0be51a08429ec4123Ben Murdoch                        void (*proc)(NPP npp, uint32_t timerID));
76c02eba192362e2ea83fdfbe0be51a08429ec4123Ben Murdoch        void unschedule(NPP instance, uint32_t timerID);
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        PluginTimer* m_list;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
85