Title: [148508] trunk/Source/WebCore
Revision
148508
Author
[email protected]
Date
2013-04-16 03:05:29 -0700 (Tue, 16 Apr 2013)

Log Message

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):

Modified Paths

Diff

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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to