Changeset 148508 in webkit


Ignore:
Timestamp:
Apr 16, 2013 3:05:29 AM (11 years ago)
Author:
akling@apple.com
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):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r148507 r148508  
     12013-04-13  Andreas Kling  <akling@apple.com>
     2
     3        REGRESSION(r148128): window.resizeTo doesn't work from Safari address bar.
     4        <rdar://problem/13635894>
     5        <http://webkit.org/b/114561>
     6
     7        Reviewed by Sam Weinig.
     8
     9        Suppressing window geometry changes while any user gesture is active was a bit too restrictive,
     10        and broke legitimate use-cases. Narrow it down to checking EventHandler::mousePressed().
     11
     12        No test yet, adding one is tracked by <http://webkit.org/b/114561>.
     13
     14        * page/DOMWindow.cpp:
     15        (WebCore::DOMWindow::allowedToChangeWindowGeometry):
     16
     17            Added to share code between all DOMWindow functions that alter window geometry.
     18
     19        (WebCore::DOMWindow::moveBy):
     20        (WebCore::DOMWindow::moveTo):
     21        (WebCore::DOMWindow::resizeBy):
     22        (WebCore::DOMWindow::resizeTo):
     23
    1242013-04-16  Manuel Rego Casasnovas  <rego@igalia.com>
    225
  • trunk/Source/WebCore/page/DOMWindow.cpp

    r148467 r148508  
    11/*
    2  * Copyright (C) 2006, 2007, 2008, 2010 Apple Inc. All rights reserved.
     2 * Copyright (C) 2006, 2007, 2008, 2010, 2013 Apple Inc. All rights reserved.
    33 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
    44 *
     
    14511451}
    14521452
     1453bool DOMWindow::allowedToChangeWindowGeometry() const
     1454{
     1455    if (!m_frame)
     1456        return false;
     1457    const Page* page = m_frame->page();
     1458    if (!page)
     1459        return false;
     1460    if (m_frame != page->mainFrame())
     1461        return false;
     1462    // Prevent web content from tricking the user into initiating a drag.
     1463    if (m_frame->eventHandler()->mousePressed())
     1464        return false;
     1465    return true;
     1466}
     1467
    14531468void DOMWindow::moveBy(float x, float y) const
    14541469{
    1455     if (UserGestureIndicator::processingUserGesture())
    1456         return;
    1457 
    1458     if (!m_frame)
     1470    if (!allowedToChangeWindowGeometry())
    14591471        return;
    14601472
    14611473    Page* page = m_frame->page();
    1462     if (!page)
    1463         return;
    1464 
    1465     if (m_frame != page->mainFrame())
    1466         return;
    1467 
    14681474    FloatRect fr = page->chrome()->windowRect();
    14691475    FloatRect update = fr;
     
    14751481void DOMWindow::moveTo(float x, float y) const
    14761482{
    1477     if (UserGestureIndicator::processingUserGesture())
    1478         return;
    1479 
    1480     if (!m_frame)
     1483    if (!allowedToChangeWindowGeometry())
    14811484        return;
    14821485
    14831486    Page* page = m_frame->page();
    1484     if (!page)
    1485         return;
    1486 
    1487     if (m_frame != page->mainFrame())
    1488         return;
    1489 
    14901487    FloatRect fr = page->chrome()->windowRect();
    14911488    FloatRect sr = screenAvailableRect(page->mainFrame()->view());
     
    14991496void DOMWindow::resizeBy(float x, float y) const
    15001497{
    1501     if (UserGestureIndicator::processingUserGesture())
    1502         return;
    1503 
    1504     if (!m_frame)
     1498    if (!allowedToChangeWindowGeometry())
    15051499        return;
    15061500
    15071501    Page* page = m_frame->page();
    1508     if (!page)
    1509         return;
    1510 
    1511     if (m_frame != page->mainFrame())
    1512         return;
    1513 
    15141502    FloatRect fr = page->chrome()->windowRect();
    15151503    FloatSize dest = fr.size() + FloatSize(x, y);
     
    15201508void DOMWindow::resizeTo(float width, float height) const
    15211509{
    1522     if (UserGestureIndicator::processingUserGesture())
    1523         return;
    1524 
    1525     if (!m_frame)
     1510    if (!allowedToChangeWindowGeometry())
    15261511        return;
    15271512
    15281513    Page* page = m_frame->page();
    1529     if (!page)
    1530         return;
    1531 
    1532     if (m_frame != page->mainFrame())
    1533         return;
    1534 
    15351514    FloatRect fr = page->chrome()->windowRect();
    15361515    FloatSize dest = FloatSize(width, height);
  • trunk/Source/WebCore/page/DOMWindow.h

    r146208 r148508  
    415415
    416416        Page* page();
     417        bool allowedToChangeWindowGeometry() const;
    417418
    418419        virtual void frameDestroyed() OVERRIDE;
Note: See TracChangeset for help on using the changeset viewer.