initial import
[vuplus_webkit] / Source / WebKit2 / WebProcess / FullScreen / win / WebFullScreenManagerWin.cpp
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
26 #include "config.h"
27 #include "WebFullScreenManagerWin.h"
28
29 #if ENABLE(FULLSCREEN_API)
30
31 #include "MessageID.h"
32 #include "WebFullScreenManagerProxyMessages.h"
33 #include "WebPage.h"
34 #include "WebProcess.h"
35 #include <WebCore/Frame.h>
36 #include <WebCore/FrameView.h>
37 #include <WebCore/GraphicsLayer.h>
38 #include <WebCore/Page.h>
39 #include <WebKitSystemInterface/WebKitSystemInterface.h>
40
41 using namespace WebCore;
42
43 namespace WebKit {
44
45 PassRefPtr<WebFullScreenManager> WebFullScreenManager::create(WebPage* page)
46 {
47     return WebFullScreenManagerWin::create(page);
48 }
49
50 PassRefPtr<WebFullScreenManagerWin> WebFullScreenManagerWin::create(WebPage* page)
51 {
52     return adoptRef(new WebFullScreenManagerWin(page));
53 }
54
55 WebFullScreenManagerWin::WebFullScreenManagerWin(WebPage* page)
56     : WebFullScreenManager(page)
57 {
58 }
59
60 WebFullScreenManagerWin::~WebFullScreenManagerWin()
61 {
62     m_page->send(Messages::WebFullScreenManagerProxy::ExitAcceleratedCompositingMode());
63 }
64
65 void WebFullScreenManagerWin::setRootFullScreenLayer(WebCore::GraphicsLayer* layer)
66 {
67     // Host the full screen layer if its given to us; otherwise it will be disconnected 
68     // from the layer heirarchy and cause an ASSERT during resync.
69     // FIXME: Disable setting RenderLayer::setAnimating() to make this unnecessary.
70     if (m_fullScreenRootLayer == layer)
71         return;
72     m_fullScreenRootLayer = layer;
73
74     if (!m_fullScreenRootLayer) {
75         m_page->send(Messages::WebFullScreenManagerProxy::ExitAcceleratedCompositingMode());
76         if (m_rootLayer) {
77             m_rootLayer->removeAllChildren();
78             m_rootLayer = nullptr;
79         }
80         return;
81     }
82
83     if (!m_rootLayer) {
84         m_rootLayer = GraphicsLayer::create(0);
85 #ifndef NDEBUG
86         m_rootLayer->setName("Full screen root layer");
87 #endif
88         m_rootLayer->setDrawsContent(false);
89         m_rootLayer->setSize(getFullScreenRect().size());
90     }
91
92     m_rootLayer->removeAllChildren();
93
94     if (m_fullScreenRootLayer)
95         m_rootLayer->addChild(m_fullScreenRootLayer);
96
97     m_rootLayer->syncCompositingStateForThisLayerOnly();
98     m_page->corePage()->mainFrame()->view()->syncCompositingStateIncludingSubframes();
99 }
100
101 void WebFullScreenManagerWin::beginEnterFullScreenAnimation(float)
102 {
103     // FIXME: Add support for animating the content into full screen.
104 }
105
106 void WebFullScreenManagerWin::beginExitFullScreenAnimation(float)
107 {
108     // FIXME: Add support for animating the content into full screen.
109 }
110
111 } // namespace WebKit
112
113 #endif // ENABLE(FULLSCREEN_API)