Home | History | Annotate | Download | only in FullScreen
      1 /*
      2  * Copyright (C) 2011 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
     14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
     17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     23  * THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 #include "config.h"
     26 #include "WebFullScreenManager.h"
     27 
     28 #if ENABLE(FULLSCREEN_API)
     29 
     30 #include "Connection.h"
     31 #include "MessageID.h"
     32 #include "WebCoreArgumentCoders.h"
     33 #include "WebFullScreenManagerProxyMessages.h"
     34 #include "WebPage.h"
     35 #include "WebProcess.h"
     36 #include <WebCore/Color.h>
     37 #include <WebCore/Page.h>
     38 #include <WebCore/Settings.h>
     39 
     40 using namespace WebCore;
     41 
     42 namespace WebKit {
     43 
     44 WebFullScreenManager::WebFullScreenManager(WebPage* page)
     45     : m_page(page)
     46 {
     47 }
     48 
     49 WebFullScreenManager::~WebFullScreenManager()
     50 {
     51 
     52 }
     53 
     54 WebCore::Element* WebFullScreenManager::element()
     55 {
     56     return m_element.get();
     57 }
     58 
     59 void WebFullScreenManager::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
     60 {
     61     didReceiveWebFullScreenManagerMessage(connection, messageID, arguments);
     62 }
     63 
     64 bool WebFullScreenManager::supportsFullScreen(bool withKeyboard)
     65 {
     66     if (!m_page->corePage()->settings()->fullScreenEnabled())
     67         return false;
     68 
     69     return m_page->injectedBundleFullScreenClient().supportsFullScreen(m_page.get(), withKeyboard);
     70 
     71 }
     72 
     73 void WebFullScreenManager::enterFullScreenForElement(WebCore::Element* element)
     74 {
     75     ASSERT(element);
     76     m_element = element;
     77     m_initialFrame = m_element->screenRect();
     78     m_page->injectedBundleFullScreenClient().enterFullScreenForElement(m_page.get(), element);
     79 }
     80 
     81 void WebFullScreenManager::exitFullScreenForElement(WebCore::Element* element)
     82 {
     83     ASSERT(element);
     84     ASSERT(m_element == element);
     85     m_page->injectedBundleFullScreenClient().exitFullScreenForElement(m_page.get(), element);
     86 }
     87 
     88 void WebFullScreenManager::beganEnterFullScreenAnimation()
     89 {
     90     m_page->send(Messages::WebFullScreenManagerProxy::BeganEnterFullScreenAnimation());
     91 }
     92 
     93 void WebFullScreenManager::finishedEnterFullScreenAnimation(bool completed)
     94 {
     95     m_page->send(Messages::WebFullScreenManagerProxy::FinishedEnterFullScreenAnimation(completed));
     96 }
     97 
     98 void WebFullScreenManager::beganExitFullScreenAnimation()
     99 {
    100     m_page->send(Messages::WebFullScreenManagerProxy::BeganExitFullScreenAnimation());
    101 }
    102 
    103 void WebFullScreenManager::finishedExitFullScreenAnimation(bool completed)
    104 {
    105     m_page->send(Messages::WebFullScreenManagerProxy::FinishedExitFullScreenAnimation(completed));
    106 }
    107 
    108 IntRect WebFullScreenManager::getFullScreenRect()
    109 {
    110     IntRect rect;
    111     m_page->sendSync(Messages::WebFullScreenManagerProxy::GetFullScreenRect(), Messages::WebFullScreenManagerProxy::GetFullScreenRect::Reply(rect));
    112     return rect;
    113 }
    114 
    115 void WebFullScreenManager::willEnterFullScreen()
    116 {
    117     ASSERT(m_element);
    118     m_element->document()->webkitWillEnterFullScreenForElement(m_element.get());
    119     m_element->document()->setFullScreenRendererBackgroundColor(Color::transparent);
    120 }
    121 
    122 void WebFullScreenManager::didEnterFullScreen()
    123 {
    124     ASSERT(m_element);
    125     m_element->document()->webkitDidEnterFullScreenForElement(m_element.get());
    126     m_element->document()->setFullScreenRendererBackgroundColor(Color::black);
    127 }
    128 
    129 void WebFullScreenManager::willExitFullScreen()
    130 {
    131     ASSERT(m_element);
    132     m_element->document()->webkitWillExitFullScreenForElement(m_element.get());
    133     m_element->document()->setFullScreenRendererBackgroundColor(Color::transparent);
    134 }
    135 
    136 void WebFullScreenManager::didExitFullScreen()
    137 {
    138     ASSERT(m_element);
    139     m_element->document()->webkitDidExitFullScreenForElement(m_element.get());
    140     m_element->document()->setFullScreenRendererBackgroundColor(Color::black);
    141 }
    142 
    143 
    144 } // namespace WebKit
    145 
    146 #endif // ENABLE(FULLSCREEN_API)
    147