summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2012-11-30 16:58:06 +0100
committerSimon Hausmann <simon.hausmann@digia.com>2012-11-30 17:03:09 +0100
commit32ea33253afbbdefd2680aa95ab5f57455272ae7 (patch)
tree2389569585b666c310fbb36d3fb8e6ab94462967 /Source/WebKit2/WebProcess/WebPage/WebPage.cpp
parent41c25f231cbca1babc445187283524cc6c751c71 (diff)
downloadqtwebkit-32ea33253afbbdefd2680aa95ab5f57455272ae7.tar.gz
Imported WebKit commit 6a4a1d32e1d779548c726c4826cba9d69eb87601 (http://svn.webkit.org/repository/webkit/trunk@136242)
Final import for the Qt 5.x series that implements the QtWebKit / QtWebKitWidgets split Extra fixes will be cherry-picked. Change-Id: I844f1ebb99c6d6b75db31d6538c2acd628e79681 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'Source/WebKit2/WebProcess/WebPage/WebPage.cpp')
-rw-r--r--Source/WebKit2/WebProcess/WebPage/WebPage.cpp74
1 files changed, 55 insertions, 19 deletions
diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
index 83c0ae7fd..3e20c830d 100644
--- a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
@@ -114,6 +114,7 @@
#include <WebCore/ResourceRequest.h>
#include <WebCore/ResourceResponse.h>
#include <WebCore/RunLoop.h>
+#include <WebCore/RuntimeEnabledFeatures.h>
#include <WebCore/SchemeRegistry.h>
#include <WebCore/ScriptValue.h>
#include <WebCore/SerializedScriptValue.h>
@@ -535,7 +536,8 @@ PassRefPtr<Plugin> WebPage::createPlugin(WebFrame* frame, HTMLPlugInElement* plu
}
#if ENABLE(PLUGIN_PROCESS)
- return PluginProxy::create(pluginPath);
+ PluginProcess::Type processType = (pluginElement->displayState() == HTMLPlugInElement::WaitingForSnapshot ? PluginProcess::TypeSnapshotProcess : PluginProcess::TypeRegularProcess);
+ return PluginProxy::create(pluginPath, processType);
#else
NetscapePlugin::setSetExceptionFunction(NPRuntimeObjectMap::setGlobalException);
return NetscapePlugin::create(NetscapePluginModule::getOrCreate(pluginPath));
@@ -1025,8 +1027,21 @@ void WebPage::sendViewportAttributesChanged()
ViewportAttributes attr = computeViewportAttributes(m_page->viewportArguments(), minimumLayoutFallbackWidth, deviceWidth, deviceHeight, m_page->deviceScaleFactor(), m_viewportSize);
attr.initialScale = m_page->viewportArguments().zoom; // Resets auto (-1) if no value was set by user.
+ // Keep the current position, update size only.
+ // For the new loads position is already reset to (0,0).
+ FrameView* view = m_page->mainFrame()->view();
+ IntPoint contentFixedOrigin = view->fixedVisibleContentRect().location();
+
+ // Put the width and height to the viewport width and height. In css units however.
+ // FIXME: This should be in scaled units but this currently affects viewport attributes calculation.
+ IntSize contentFixedSize = m_viewportSize;
+ contentFixedSize.scale(1 / m_page->deviceScaleFactor());
+
+ setFixedVisibleContentRect(IntRect(contentFixedOrigin, contentFixedSize));
+
// This also takes care of the relayout.
- setFixedLayoutSize(IntSize(static_cast<int>(attr.layoutSize.width()), static_cast<int>(attr.layoutSize.height())));
+ setFixedLayoutSize(roundedIntSize(attr.layoutSize));
+
send(Messages::WebPageProxy::DidChangeViewportProperties(attr));
}
@@ -1506,20 +1521,18 @@ void WebPage::mouseEvent(const WebMouseEvent& mouseEvent)
return;
}
#endif
-
bool handled = false;
-
if (m_pageOverlay) {
// Let the page overlay handle the event.
handled = m_pageOverlay->mouseEvent(mouseEvent);
}
- if (!handled) {
+ if (!handled && canHandleUserEvents()) {
CurrentEvent currentEvent(mouseEvent);
// We need to do a full, normal hit test during this mouse event if the page is active or if a mouse
- // button is currently pressed. It is possible that neither of those things will be true since on
- // Lion when legacy scrollbars are enabled, WebKit receives mouse events all the time. If it is one
+ // button is currently pressed. It is possible that neither of those things will be true since on
+ // Lion when legacy scrollbars are enabled, WebKit receives mouse events all the time. If it is one
// of those cases where the page is not active and the mouse is not pressed, then we can fire a more
// efficient scrollbars-only version of the event.
bool onlyUpdateScrollbars = !(m_page->focusController()->isActive() || (mouseEvent.button() != WebMouseEvent::NoButton));
@@ -1558,9 +1571,13 @@ static bool handleWheelEvent(const WebWheelEvent& wheelEvent, Page* page)
void WebPage::wheelEvent(const WebWheelEvent& wheelEvent)
{
- CurrentEvent currentEvent(wheelEvent);
+ bool handled = false;
- bool handled = handleWheelEvent(wheelEvent, m_page.get());
+ if (canHandleUserEvents()) {
+ CurrentEvent currentEvent(wheelEvent);
+
+ handled = handleWheelEvent(wheelEvent, m_page.get());
+ }
send(Messages::WebPageProxy::DidReceiveEvent(static_cast<uint32_t>(wheelEvent.type()), handled));
}
@@ -1583,13 +1600,16 @@ static bool handleKeyEvent(const WebKeyboardEvent& keyboardEvent, Page* page)
void WebPage::keyEvent(const WebKeyboardEvent& keyboardEvent)
{
- CurrentEvent currentEvent(keyboardEvent);
+ bool handled = false;
- bool handled = handleKeyEvent(keyboardEvent, m_page.get());
- // FIXME: Platform default behaviors should be performed during normal DOM event dispatch (in most cases, in default keydown event handler).
- if (!handled)
- handled = performDefaultBehaviorForKeyEvent(keyboardEvent);
+ if (canHandleUserEvents()) {
+ CurrentEvent currentEvent(keyboardEvent);
+ handled = handleKeyEvent(keyboardEvent, m_page.get());
+ // FIXME: Platform default behaviors should be performed during normal DOM event dispatch (in most cases, in default keydown event handler).
+ if (!handled)
+ handled = performDefaultBehaviorForKeyEvent(keyboardEvent);
+ }
send(Messages::WebPageProxy::DidReceiveEvent(static_cast<uint32_t>(keyboardEvent.type()), handled));
}
@@ -1615,9 +1635,13 @@ static bool handleGestureEvent(const WebGestureEvent& gestureEvent, Page* page)
void WebPage::gestureEvent(const WebGestureEvent& gestureEvent)
{
- CurrentEvent currentEvent(gestureEvent);
+ bool handled = false;
+
+ if (canHandleUserEvents()) {
+ CurrentEvent currentEvent(gestureEvent);
- bool handled = handleGestureEvent(gestureEvent, m_page.get());
+ handled = handleGestureEvent(gestureEvent, m_page.get());
+ }
send(Messages::WebPageProxy::DidReceiveEvent(static_cast<uint32_t>(gestureEvent.type()), handled));
}
#endif
@@ -1733,10 +1757,13 @@ static bool handleTouchEvent(const WebTouchEvent& touchEvent, Page* page)
void WebPage::touchEvent(const WebTouchEvent& touchEvent)
{
- CurrentEvent currentEvent(touchEvent);
+ bool handled = false;
- bool handled = handleTouchEvent(touchEvent, m_page.get());
+ if (canHandleUserEvents()) {
+ CurrentEvent currentEvent(touchEvent);
+ handled = handleTouchEvent(touchEvent, m_page.get());
+ }
send(Messages::WebPageProxy::DidReceiveEvent(static_cast<uint32_t>(touchEvent.type()), handled));
}
@@ -1883,6 +1910,15 @@ void WebPage::setCanStartMediaTimerFired()
m_page->setCanStartMedia(true);
}
+inline bool WebPage::canHandleUserEvents() const
+{
+#if USE(TILED_BACKING_STORE)
+ // Should apply only if the area was frozen by didStartPageTransition().
+ return !m_drawingArea->layerTreeStateIsFrozen();
+#endif
+ return true;
+}
+
void WebPage::setIsInWindow(bool isInWindow)
{
if (!isInWindow) {
@@ -2236,7 +2272,7 @@ void WebPage::updatePreferences(const WebPreferencesStore& store)
settings->setShowDebugBorders(store.getBoolValueForKey(WebPreferencesKey::compositingBordersVisibleKey()));
settings->setShowRepaintCounter(store.getBoolValueForKey(WebPreferencesKey::compositingRepaintCountersVisibleKey()));
settings->setCSSCustomFilterEnabled(store.getBoolValueForKey(WebPreferencesKey::cssCustomFilterEnabledKey()));
- settings->setCSSRegionsEnabled(store.getBoolValueForKey(WebPreferencesKey::cssRegionsEnabledKey()));
+ RuntimeEnabledFeatures::setCSSRegionsEnabled(store.getBoolValueForKey(WebPreferencesKey::cssRegionsEnabledKey()));
settings->setCSSGridLayoutEnabled(store.getBoolValueForKey(WebPreferencesKey::cssGridLayoutEnabledKey()));
settings->setRegionBasedColumnsEnabled(store.getBoolValueForKey(WebPreferencesKey::regionBasedColumnsEnabledKey()));
settings->setWebGLEnabled(store.getBoolValueForKey(WebPreferencesKey::webGLEnabledKey()));