diff options
Diffstat (limited to 'Source/WebKit2/WebProcess/FullScreen')
3 files changed, 26 insertions, 9 deletions
diff --git a/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.cpp b/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.cpp index 0323698ce..0becc77eb 100644 --- a/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.cpp +++ b/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.cpp @@ -28,13 +28,14 @@ #if ENABLE(FULLSCREEN_API) #include "Connection.h" -#include "MessageID.h" #include "WebCoreArgumentCoders.h" +#include "WebFrame.h" #include "WebFullScreenManagerProxyMessages.h" #include "WebPage.h" -#include "WebProcess.h" #include <WebCore/Color.h> #include <WebCore/Element.h> +#include <WebCore/Frame.h> +#include <WebCore/FrameView.h> #include <WebCore/Page.h> #include <WebCore/RenderLayer.h> #include <WebCore/RenderLayerBacking.h> @@ -52,7 +53,7 @@ static IntRect screenRectOfContents(Element* element) #if USE(ACCELERATED_COMPOSITING) if (element->renderer() && element->renderer()->hasLayer() && element->renderer()->enclosingLayer()->isComposited()) { FloatQuad contentsBox = static_cast<FloatRect>(element->renderer()->enclosingLayer()->backing()->contentsBox()); - contentsBox = element->renderer()->localToAbsoluteQuad(contentsBox, SnapOffsetForTransforms); + contentsBox = element->renderer()->localToAbsoluteQuad(contentsBox); return element->renderer()->view()->frameView()->contentsToScreen(contentsBox.enclosingBoundingBox()); } #endif @@ -78,9 +79,9 @@ WebCore::Element* WebFullScreenManager::element() return m_element.get(); } -void WebFullScreenManager::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder) +void WebFullScreenManager::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageDecoder& decoder) { - didReceiveWebFullScreenManagerMessage(connection, messageID, decoder); + didReceiveWebFullScreenManagerMessage(connection, decoder); } bool WebFullScreenManager::supportsFullScreen(bool withKeyboard) @@ -108,6 +109,7 @@ void WebFullScreenManager::willEnterFullScreen() { ASSERT(m_element); m_element->document()->webkitWillEnterFullScreenForElement(m_element.get()); + m_page->hidePageBanners(); m_element->document()->updateLayout(); m_page->forceRepaintWithoutCallback(); m_finalFrame = screenRectOfContents(m_element.get()); @@ -125,6 +127,7 @@ void WebFullScreenManager::willExitFullScreen() ASSERT(m_element); m_finalFrame = screenRectOfContents(m_element.get()); m_element->document()->webkitWillExitFullScreenForElement(m_element.get()); + m_page->showPageBanners(); m_page->injectedBundleFullScreenClient().beganExitFullScreen(m_page.get(), m_finalFrame, m_initialFrame); } @@ -151,6 +154,16 @@ void WebFullScreenManager::close() m_page->injectedBundleFullScreenClient().closeFullScreen(m_page.get()); } +void WebFullScreenManager::saveScrollPosition() +{ + m_scrollPosition = m_page->corePage()->mainFrame()->view()->scrollPosition(); +} + +void WebFullScreenManager::restoreScrollPosition() +{ + m_page->corePage()->mainFrame()->view()->setScrollPosition(m_scrollPosition); +} + } // namespace WebKit #endif // ENABLE(FULLSCREEN_API) diff --git a/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.h b/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.h index 8c049225b..5618b2a68 100644 --- a/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.h +++ b/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.h @@ -34,7 +34,6 @@ namespace CoreIPC { class Connection; class MessageDecoder; -class MessageID; } namespace WebCore { @@ -52,7 +51,7 @@ public: static PassRefPtr<WebFullScreenManager> create(WebPage*); virtual ~WebFullScreenManager(); - void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&); + void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder&); bool supportsFullScreen(bool withKeyboard); void enterFullScreenForElement(WebCore::Element*); @@ -72,11 +71,14 @@ protected: void setAnimatingFullScreen(bool); void requestExitFullScreen(); + void saveScrollPosition(); + void restoreScrollPosition(); - void didReceiveWebFullScreenManagerMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&); + void didReceiveWebFullScreenManagerMessage(CoreIPC::Connection*, CoreIPC::MessageDecoder&); WebCore::IntRect m_initialFrame; WebCore::IntRect m_finalFrame; + WebCore::IntPoint m_scrollPosition; RefPtr<WebPage> m_page; RefPtr<WebCore::Element> m_element; }; diff --git a/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.messages.in b/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.messages.in index 239d33cbb..2b7c28561 100644 --- a/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.messages.in +++ b/Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.messages.in @@ -21,12 +21,14 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #if ENABLE(FULLSCREEN_API) -messages -> WebFullScreenManager { +messages -> WebFullScreenManager LegacyReceiver { RequestExitFullScreen() WillEnterFullScreen() DidEnterFullScreen() WillExitFullScreen() DidExitFullScreen() SetAnimatingFullScreen(bool animating) + SaveScrollPosition() + RestoreScrollPosition() } #endif |