Modified: trunk/Source/WebCore/ChangeLog (148507 => 148508)
--- trunk/Source/WebCore/ChangeLog 2013-04-16 09:40:15 UTC (rev 148507)
+++ trunk/Source/WebCore/ChangeLog 2013-04-16 10:05:29 UTC (rev 148508)
@@ -1,3 +1,26 @@
+2013-04-13 Andreas Kling <[email protected]>
+
+ REGRESSION(r148128): window.resizeTo doesn't work from Safari address bar.
+ <rdar://problem/13635894>
+ <http://webkit.org/b/114561>
+
+ Reviewed by Sam Weinig.
+
+ Suppressing window geometry changes while any user gesture is active was a bit too restrictive,
+ and broke legitimate use-cases. Narrow it down to checking EventHandler::mousePressed().
+
+ No test yet, adding one is tracked by <http://webkit.org/b/114561>.
+
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::allowedToChangeWindowGeometry):
+
+ Added to share code between all DOMWindow functions that alter window geometry.
+
+ (WebCore::DOMWindow::moveBy):
+ (WebCore::DOMWindow::moveTo):
+ (WebCore::DOMWindow::resizeBy):
+ (WebCore::DOMWindow::resizeTo):
+
2013-04-16 Manuel Rego Casasnovas <[email protected]>
[GTK][EFL] Remove deprecated libsoup API usage
Modified: trunk/Source/WebCore/page/DOMWindow.cpp (148507 => 148508)
--- trunk/Source/WebCore/page/DOMWindow.cpp 2013-04-16 09:40:15 UTC (rev 148507)
+++ trunk/Source/WebCore/page/DOMWindow.cpp 2013-04-16 10:05:29 UTC (rev 148508)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 2008, 2010, 2013 Apple Inc. All rights reserved.
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
*
* Redistribution and use in source and binary forms, with or without
@@ -1450,21 +1450,27 @@
view->setScrollPosition(layoutPos);
}
-void DOMWindow::moveBy(float x, float y) const
+bool DOMWindow::allowedToChangeWindowGeometry() const
{
- if (UserGestureIndicator::processingUserGesture())
- return;
-
if (!m_frame)
- return;
-
- Page* page = m_frame->page();
+ return false;
+ const Page* page = m_frame->page();
if (!page)
- return;
-
+ return false;
if (m_frame != page->mainFrame())
+ return false;
+ // Prevent web content from tricking the user into initiating a drag.
+ if (m_frame->eventHandler()->mousePressed())
+ return false;
+ return true;
+}
+
+void DOMWindow::moveBy(float x, float y) const
+{
+ if (!allowedToChangeWindowGeometry())
return;
+ Page* page = m_frame->page();
FloatRect fr = page->chrome()->windowRect();
FloatRect update = fr;
update.move(x, y);
@@ -1474,19 +1480,10 @@
void DOMWindow::moveTo(float x, float y) const
{
- if (UserGestureIndicator::processingUserGesture())
+ if (!allowedToChangeWindowGeometry())
return;
- if (!m_frame)
- return;
-
Page* page = m_frame->page();
- if (!page)
- return;
-
- if (m_frame != page->mainFrame())
- return;
-
FloatRect fr = page->chrome()->windowRect();
FloatRect sr = screenAvailableRect(page->mainFrame()->view());
fr.setLocation(sr.location());
@@ -1498,19 +1495,10 @@
void DOMWindow::resizeBy(float x, float y) const
{
- if (UserGestureIndicator::processingUserGesture())
+ if (!allowedToChangeWindowGeometry())
return;
- if (!m_frame)
- return;
-
Page* page = m_frame->page();
- if (!page)
- return;
-
- if (m_frame != page->mainFrame())
- return;
-
FloatRect fr = page->chrome()->windowRect();
FloatSize dest = fr.size() + FloatSize(x, y);
FloatRect update(fr.location(), dest);
@@ -1519,19 +1507,10 @@
void DOMWindow::resizeTo(float width, float height) const
{
- if (UserGestureIndicator::processingUserGesture())
+ if (!allowedToChangeWindowGeometry())
return;
- if (!m_frame)
- return;
-
Page* page = m_frame->page();
- if (!page)
- return;
-
- if (m_frame != page->mainFrame())
- return;
-
FloatRect fr = page->chrome()->windowRect();
FloatSize dest = FloatSize(width, height);
FloatRect update(fr.location(), dest);
Modified: trunk/Source/WebCore/page/DOMWindow.h (148507 => 148508)
--- trunk/Source/WebCore/page/DOMWindow.h 2013-04-16 09:40:15 UTC (rev 148507)
+++ trunk/Source/WebCore/page/DOMWindow.h 2013-04-16 10:05:29 UTC (rev 148508)
@@ -414,6 +414,7 @@
explicit DOMWindow(Document*);
Page* page();
+ bool allowedToChangeWindowGeometry() const;
virtual void frameDestroyed() OVERRIDE;
virtual void willDetachPage() OVERRIDE;