summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/FullScreen
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/WebProcess/FullScreen')
-rw-r--r--Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.cpp23
-rw-r--r--Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.h8
-rw-r--r--Source/WebKit2/WebProcess/FullScreen/WebFullScreenManager.messages.in4
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