181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch/*
281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Copyright (C) 2011 Google Inc. All Rights Reserved.
381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *
481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * Redistribution and use in source and binary forms, with or without
581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * modification, are permitted provided that the following conditions
681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * are met:
781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 1. Redistributions of source code must retain the above copyright
881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    notice, this list of conditions and the following disclaimer.
981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    notice, this list of conditions and the following disclaimer in the
1181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *    documentation and/or other materials provided with the distribution.
1281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *
1381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
1481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
1581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
1781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
1881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
1981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
2081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
2281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch *
2481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch */
2581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#ifndef ScriptedAnimationController_h
2781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#define ScriptedAnimationController_h
2881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
2981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if ENABLE(REQUEST_ANIMATION_FRAME)
3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "DOMTimeStamp.h"
3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/Noncopyable.h>
3281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/PassOwnPtr.h>
3381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/RefPtr.h>
3481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/Vector.h>
3581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochnamespace WebCore {
3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass Document;
3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass Element;
4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass RequestAnimationFrameCallback;
4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochclass ScriptedAnimationController {
4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWTF_MAKE_NONCOPYABLE(ScriptedAnimationController);
4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochpublic:
4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    static PassOwnPtr<ScriptedAnimationController> create(Document* document)
4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    {
4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return adoptPtr(new ScriptedAnimationController(document));
4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    typedef int CallbackId;
5181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    CallbackId registerCallback(PassRefPtr<RequestAnimationFrameCallback>, Element*);
5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void cancelCallback(CallbackId);
5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void serviceScriptedAnimations(DOMTimeStamp);
5581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void suspend();
5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    void resume();
5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochprivate:
6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    explicit ScriptedAnimationController(Document*);
6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    typedef Vector<RefPtr<RequestAnimationFrameCallback> > CallbackList;
6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    CallbackList m_callbacks;
6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    Document* m_document;
6581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    CallbackId m_nextCallbackId;
6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    int m_suspendCount;
6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch};
6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif // ENABLE(REQUEST_ANIMATION_FRAME)
7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif // ScriptedAnimationController_h
7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
75