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