12bde8e466a4451c7319e3a072d118917957d6554Steve Block/*
22bde8e466a4451c7319e3a072d118917957d6554Steve Block * Copyright (C) 2011 Apple Inc. All rights reserved.
32bde8e466a4451c7319e3a072d118917957d6554Steve Block *
42bde8e466a4451c7319e3a072d118917957d6554Steve Block * Redistribution and use in source and binary forms, with or without
52bde8e466a4451c7319e3a072d118917957d6554Steve Block * modification, are permitted provided that the following conditions
62bde8e466a4451c7319e3a072d118917957d6554Steve Block * are met:
72bde8e466a4451c7319e3a072d118917957d6554Steve Block * 1. Redistributions of source code must retain the above copyright
82bde8e466a4451c7319e3a072d118917957d6554Steve Block *    notice, this list of conditions and the following disclaimer.
92bde8e466a4451c7319e3a072d118917957d6554Steve Block * 2. Redistributions in binary form must reproduce the above copyright
102bde8e466a4451c7319e3a072d118917957d6554Steve Block *    notice, this list of conditions and the following disclaimer in the
112bde8e466a4451c7319e3a072d118917957d6554Steve Block *    documentation and/or other materials provided with the distribution.
122bde8e466a4451c7319e3a072d118917957d6554Steve Block *
132bde8e466a4451c7319e3a072d118917957d6554Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
142bde8e466a4451c7319e3a072d118917957d6554Steve Block * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
152bde8e466a4451c7319e3a072d118917957d6554Steve Block * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
162bde8e466a4451c7319e3a072d118917957d6554Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
172bde8e466a4451c7319e3a072d118917957d6554Steve Block * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
182bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
192bde8e466a4451c7319e3a072d118917957d6554Steve Block * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
202bde8e466a4451c7319e3a072d118917957d6554Steve Block * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
212bde8e466a4451c7319e3a072d118917957d6554Steve Block * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
222bde8e466a4451c7319e3a072d118917957d6554Steve Block * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
232bde8e466a4451c7319e3a072d118917957d6554Steve Block * THE POSSIBILITY OF SUCH DAMAGE.
242bde8e466a4451c7319e3a072d118917957d6554Steve Block */
252bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifndef WebFullScreenManager_h
262bde8e466a4451c7319e3a072d118917957d6554Steve Block#define WebFullScreenManager_h
272bde8e466a4451c7319e3a072d118917957d6554Steve Block
282bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(FULLSCREEN_API)
292bde8e466a4451c7319e3a072d118917957d6554Steve Block
302bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/IntRect.h>
312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/RefCounted.h>
322bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <wtf/RefPtr.h>
332bde8e466a4451c7319e3a072d118917957d6554Steve Block
342bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace CoreIPC {
352bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass ArgumentDecoder;
362bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass Connection;
372bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass MessageID;
382bde8e466a4451c7319e3a072d118917957d6554Steve Block}
392bde8e466a4451c7319e3a072d118917957d6554Steve Block
402bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebCore {
412bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass IntRect;
422bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass Element;
432bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass GraphicsLayer;
442bde8e466a4451c7319e3a072d118917957d6554Steve Block}
452bde8e466a4451c7319e3a072d118917957d6554Steve Block
462bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebKit {
472bde8e466a4451c7319e3a072d118917957d6554Steve Block
482bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebPage;
492bde8e466a4451c7319e3a072d118917957d6554Steve Block
502bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebFullScreenManager : public RefCounted<WebFullScreenManager> {
512bde8e466a4451c7319e3a072d118917957d6554Steve Blockpublic:
522bde8e466a4451c7319e3a072d118917957d6554Steve Block    static PassRefPtr<WebFullScreenManager> create(WebPage*);
532bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual ~WebFullScreenManager();
542bde8e466a4451c7319e3a072d118917957d6554Steve Block
552bde8e466a4451c7319e3a072d118917957d6554Steve Block    void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
562bde8e466a4451c7319e3a072d118917957d6554Steve Block
572bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool supportsFullScreen(bool withKeyboard);
582bde8e466a4451c7319e3a072d118917957d6554Steve Block    void enterFullScreenForElement(WebCore::Element*);
592bde8e466a4451c7319e3a072d118917957d6554Steve Block    void exitFullScreenForElement(WebCore::Element*);
602bde8e466a4451c7319e3a072d118917957d6554Steve Block    void beganEnterFullScreenAnimation();
612bde8e466a4451c7319e3a072d118917957d6554Steve Block    void finishedEnterFullScreenAnimation(bool completed);
622bde8e466a4451c7319e3a072d118917957d6554Steve Block    void beganExitFullScreenAnimation();
632bde8e466a4451c7319e3a072d118917957d6554Steve Block    void finishedExitFullScreenAnimation(bool completed);
642bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void setRootFullScreenLayer(WebCore::GraphicsLayer*) = 0;
652bde8e466a4451c7319e3a072d118917957d6554Steve Block
662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void willEnterFullScreen();
672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void didEnterFullScreen();
682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void willExitFullScreen();
692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void didExitFullScreen();
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
712bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebCore::Element* element();
722bde8e466a4451c7319e3a072d118917957d6554Steve Block
732bde8e466a4451c7319e3a072d118917957d6554Steve Blockprotected:
742bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebFullScreenManager(WebPage*);
752bde8e466a4451c7319e3a072d118917957d6554Steve Block
762bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void beginEnterFullScreenAnimation(float duration) = 0;
772bde8e466a4451c7319e3a072d118917957d6554Steve Block    virtual void beginExitFullScreenAnimation(float duration) = 0;
782bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebCore::IntRect getFullScreenRect();
792bde8e466a4451c7319e3a072d118917957d6554Steve Block
802bde8e466a4451c7319e3a072d118917957d6554Steve Block    void didReceiveWebFullScreenManagerMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
812bde8e466a4451c7319e3a072d118917957d6554Steve Block
822bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebCore::IntRect m_initialFrame;
832bde8e466a4451c7319e3a072d118917957d6554Steve Block    RefPtr<WebPage> m_page;
842bde8e466a4451c7319e3a072d118917957d6554Steve Block    RefPtr<WebCore::Element> m_element;
852bde8e466a4451c7319e3a072d118917957d6554Steve Block};
862bde8e466a4451c7319e3a072d118917957d6554Steve Block
872bde8e466a4451c7319e3a072d118917957d6554Steve Block} // namespace WebKit
882bde8e466a4451c7319e3a072d118917957d6554Steve Block
892bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif // ENABLE(FULLSCREEN_API)
902bde8e466a4451c7319e3a072d118917957d6554Steve Block
912bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif // WebFullScreenManager_h
92