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#include "config.h"
262bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebFullScreenManager.h"
272bde8e466a4451c7319e3a072d118917957d6554Steve Block
282bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(FULLSCREEN_API)
292bde8e466a4451c7319e3a072d118917957d6554Steve Block
302bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "Connection.h"
312bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "MessageID.h"
322bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebCoreArgumentCoders.h"
332bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebFullScreenManagerProxyMessages.h"
342bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebPage.h"
352bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebProcess.h"
362bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/Color.h>
372bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/Page.h>
382bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <WebCore/Settings.h>
392bde8e466a4451c7319e3a072d118917957d6554Steve Block
402bde8e466a4451c7319e3a072d118917957d6554Steve Blockusing namespace WebCore;
412bde8e466a4451c7319e3a072d118917957d6554Steve Block
422bde8e466a4451c7319e3a072d118917957d6554Steve Blocknamespace WebKit {
432bde8e466a4451c7319e3a072d118917957d6554Steve Block
442bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebFullScreenManager::WebFullScreenManager(WebPage* page)
452bde8e466a4451c7319e3a072d118917957d6554Steve Block    : m_page(page)
462bde8e466a4451c7319e3a072d118917957d6554Steve Block{
472bde8e466a4451c7319e3a072d118917957d6554Steve Block}
482bde8e466a4451c7319e3a072d118917957d6554Steve Block
492bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebFullScreenManager::~WebFullScreenManager()
502bde8e466a4451c7319e3a072d118917957d6554Steve Block{
512bde8e466a4451c7319e3a072d118917957d6554Steve Block
522bde8e466a4451c7319e3a072d118917957d6554Steve Block}
532bde8e466a4451c7319e3a072d118917957d6554Steve Block
542bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebCore::Element* WebFullScreenManager::element()
552bde8e466a4451c7319e3a072d118917957d6554Steve Block{
562bde8e466a4451c7319e3a072d118917957d6554Steve Block    return m_element.get();
572bde8e466a4451c7319e3a072d118917957d6554Steve Block}
582bde8e466a4451c7319e3a072d118917957d6554Steve Block
592bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
602bde8e466a4451c7319e3a072d118917957d6554Steve Block{
612bde8e466a4451c7319e3a072d118917957d6554Steve Block    didReceiveWebFullScreenManagerMessage(connection, messageID, arguments);
622bde8e466a4451c7319e3a072d118917957d6554Steve Block}
632bde8e466a4451c7319e3a072d118917957d6554Steve Block
642bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebFullScreenManager::supportsFullScreen(bool withKeyboard)
652bde8e466a4451c7319e3a072d118917957d6554Steve Block{
662bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!m_page->corePage()->settings()->fullScreenEnabled())
672bde8e466a4451c7319e3a072d118917957d6554Steve Block        return false;
682bde8e466a4451c7319e3a072d118917957d6554Steve Block
692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return m_page->injectedBundleFullScreenClient().supportsFullScreen(m_page.get(), withKeyboard);
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
712bde8e466a4451c7319e3a072d118917957d6554Steve Block}
722bde8e466a4451c7319e3a072d118917957d6554Steve Block
732bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::enterFullScreenForElement(WebCore::Element* element)
742bde8e466a4451c7319e3a072d118917957d6554Steve Block{
752bde8e466a4451c7319e3a072d118917957d6554Steve Block    ASSERT(element);
762bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element = element;
772bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_initialFrame = m_element->screenRect();
782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->injectedBundleFullScreenClient().enterFullScreenForElement(m_page.get(), element);
792bde8e466a4451c7319e3a072d118917957d6554Steve Block}
802bde8e466a4451c7319e3a072d118917957d6554Steve Block
812bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::exitFullScreenForElement(WebCore::Element* element)
822bde8e466a4451c7319e3a072d118917957d6554Steve Block{
832bde8e466a4451c7319e3a072d118917957d6554Steve Block    ASSERT(element);
842bde8e466a4451c7319e3a072d118917957d6554Steve Block    ASSERT(m_element == element);
852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_page->injectedBundleFullScreenClient().exitFullScreenForElement(m_page.get(), element);
862bde8e466a4451c7319e3a072d118917957d6554Steve Block}
872bde8e466a4451c7319e3a072d118917957d6554Steve Block
882bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::beganEnterFullScreenAnimation()
892bde8e466a4451c7319e3a072d118917957d6554Steve Block{
902bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_page->send(Messages::WebFullScreenManagerProxy::BeganEnterFullScreenAnimation());
912bde8e466a4451c7319e3a072d118917957d6554Steve Block}
922bde8e466a4451c7319e3a072d118917957d6554Steve Block
932bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::finishedEnterFullScreenAnimation(bool completed)
942bde8e466a4451c7319e3a072d118917957d6554Steve Block{
952bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_page->send(Messages::WebFullScreenManagerProxy::FinishedEnterFullScreenAnimation(completed));
962bde8e466a4451c7319e3a072d118917957d6554Steve Block}
972bde8e466a4451c7319e3a072d118917957d6554Steve Block
982bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::beganExitFullScreenAnimation()
992bde8e466a4451c7319e3a072d118917957d6554Steve Block{
1002bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_page->send(Messages::WebFullScreenManagerProxy::BeganExitFullScreenAnimation());
1012bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1022bde8e466a4451c7319e3a072d118917957d6554Steve Block
1032bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::finishedExitFullScreenAnimation(bool completed)
1042bde8e466a4451c7319e3a072d118917957d6554Steve Block{
1052bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_page->send(Messages::WebFullScreenManagerProxy::FinishedExitFullScreenAnimation(completed));
1062bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1072bde8e466a4451c7319e3a072d118917957d6554Steve Block
1082bde8e466a4451c7319e3a072d118917957d6554Steve BlockIntRect WebFullScreenManager::getFullScreenRect()
1092bde8e466a4451c7319e3a072d118917957d6554Steve Block{
1102bde8e466a4451c7319e3a072d118917957d6554Steve Block    IntRect rect;
1112bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_page->sendSync(Messages::WebFullScreenManagerProxy::GetFullScreenRect(), Messages::WebFullScreenManagerProxy::GetFullScreenRect::Reply(rect));
1122bde8e466a4451c7319e3a072d118917957d6554Steve Block    return rect;
1132bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1142bde8e466a4451c7319e3a072d118917957d6554Steve Block
1152bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::willEnterFullScreen()
1162bde8e466a4451c7319e3a072d118917957d6554Steve Block{
1172bde8e466a4451c7319e3a072d118917957d6554Steve Block    ASSERT(m_element);
1182bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element->document()->webkitWillEnterFullScreenForElement(m_element.get());
1192bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element->document()->setFullScreenRendererBackgroundColor(Color::transparent);
1202bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1212bde8e466a4451c7319e3a072d118917957d6554Steve Block
1222bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::didEnterFullScreen()
1232bde8e466a4451c7319e3a072d118917957d6554Steve Block{
1242bde8e466a4451c7319e3a072d118917957d6554Steve Block    ASSERT(m_element);
1252bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element->document()->webkitDidEnterFullScreenForElement(m_element.get());
1262bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element->document()->setFullScreenRendererBackgroundColor(Color::black);
1272bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1282bde8e466a4451c7319e3a072d118917957d6554Steve Block
1292bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::willExitFullScreen()
1302bde8e466a4451c7319e3a072d118917957d6554Steve Block{
1312bde8e466a4451c7319e3a072d118917957d6554Steve Block    ASSERT(m_element);
1322bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element->document()->webkitWillExitFullScreenForElement(m_element.get());
1332bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element->document()->setFullScreenRendererBackgroundColor(Color::transparent);
1342bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1352bde8e466a4451c7319e3a072d118917957d6554Steve Block
1362bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebFullScreenManager::didExitFullScreen()
1372bde8e466a4451c7319e3a072d118917957d6554Steve Block{
1382bde8e466a4451c7319e3a072d118917957d6554Steve Block    ASSERT(m_element);
1392bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element->document()->webkitDidExitFullScreenForElement(m_element.get());
1402bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_element->document()->setFullScreenRendererBackgroundColor(Color::black);
1412bde8e466a4451c7319e3a072d118917957d6554Steve Block}
1422bde8e466a4451c7319e3a072d118917957d6554Steve Block
1432bde8e466a4451c7319e3a072d118917957d6554Steve Block
1442bde8e466a4451c7319e3a072d118917957d6554Steve Block} // namespace WebKit
1452bde8e466a4451c7319e3a072d118917957d6554Steve Block
1462bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif // ENABLE(FULLSCREEN_API)
147