Changeset 118263 in webkit


Ignore:
Timestamp:
May 23, 2012 4:14:13 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

Add a Setting to make position:fixed form a new stacking context
https://bugs.webkit.org/show_bug.cgi?id=87186

Patch by James Robinson <jamesr@chromium.org> on 2012-05-23
Reviewed by Adam Barth.

Source/WebCore:

position:fixed elements form a new stacking context in several mobile WebKit ports and in the Qt port always. To
be consistent across devices, we want to try turning it on everywhere. This will likely cause compatibility
issues, so we need a runtime setting in order to stage the change carefully.

Tests: fast/block/positioning/fixed-position-stacking-context.html

fast/block/positioning/fixed-position-stacking-context2.html

  • css/StyleResolver.cpp:

(WebCore::StyleResolver::collectMatchingRulesForList):

  • page/Settings.cpp:

(WebCore::Settings::Settings):

  • page/Settings.h:

(WebCore::Settings::setFixedPositionCreatesStackingContext):
(WebCore::Settings::fixedPositionCreatesStackingContext):
(Settings):

  • testing/InternalSettings.cpp:

(WebCore::InternalSettings::InternalSettings):
(WebCore::InternalSettings::restoreTo):
(WebCore::InternalSettings::setFixedPositionCreatesStackingContext):
(WebCore):

  • testing/InternalSettings.h:

(InternalSettings):

  • testing/InternalSettings.idl:

Source/WebKit/chromium:

  • public/WebSettings.h:
  • src/WebSettingsImpl.cpp:

(WebKit::WebSettingsImpl::setFixedPositionCreatesStackingContext):
(WebKit):

  • src/WebSettingsImpl.h:

(WebSettingsImpl):

LayoutTests:

Adds layout tests that confirm we don't creates stacking contexts for position:fixed by default, but we do when
the fixedPositionCreatesStackingContext Setting is true.

Qt and Blackberry will need different expectations since they set this via an #ifdef

  • fast/block/positioning/fixed-position-stacking-context-expected.png: Added.
  • fast/block/positioning/fixed-position-stacking-context-expected.txt: Added.
  • fast/block/positioning/fixed-position-stacking-context.html: Added.
  • fast/block/positioning/fixed-position-stacking-context2-expected.png: Added.
  • fast/block/positioning/fixed-position-stacking-context2-expected.txt: Added.
  • fast/block/positioning/fixed-position-stacking-context2.html: Added.
Location:
trunk
Files:
6 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r118261 r118263  
     12012-05-23  James Robinson  <jamesr@chromium.org>
     2
     3        Add a Setting to make position:fixed form a new stacking context
     4        https://bugs.webkit.org/show_bug.cgi?id=87186
     5
     6        Reviewed by Adam Barth.
     7
     8        Adds layout tests that confirm we don't creates stacking contexts for position:fixed by default, but we do when
     9        the fixedPositionCreatesStackingContext Setting is true.
     10
     11        Qt and Blackberry will need different expectations since they set this via an #ifdef
     12
     13        * fast/block/positioning/fixed-position-stacking-context-expected.png: Added.
     14        * fast/block/positioning/fixed-position-stacking-context-expected.txt: Added.
     15        * fast/block/positioning/fixed-position-stacking-context.html: Added.
     16        * fast/block/positioning/fixed-position-stacking-context2-expected.png: Added.
     17        * fast/block/positioning/fixed-position-stacking-context2-expected.txt: Added.
     18        * fast/block/positioning/fixed-position-stacking-context2.html: Added.
     19
    1202012-05-23  James Robinson  <jamesr@chromium.org>
    221
  • trunk/Source/WebCore/ChangeLog

    r118254 r118263  
     12012-05-23  James Robinson  <jamesr@chromium.org>
     2
     3        Add a Setting to make position:fixed form a new stacking context
     4        https://bugs.webkit.org/show_bug.cgi?id=87186
     5
     6        Reviewed by Adam Barth.
     7
     8        position:fixed elements form a new stacking context in several mobile WebKit ports and in the Qt port always. To
     9        be consistent across devices, we want to try turning it on everywhere. This will likely cause compatibility
     10        issues, so we need a runtime setting in order to stage the change carefully.
     11
     12        Tests: fast/block/positioning/fixed-position-stacking-context.html
     13               fast/block/positioning/fixed-position-stacking-context2.html
     14
     15        * css/StyleResolver.cpp:
     16        (WebCore::StyleResolver::collectMatchingRulesForList):
     17        * page/Settings.cpp:
     18        (WebCore::Settings::Settings):
     19        * page/Settings.h:
     20        (WebCore::Settings::setFixedPositionCreatesStackingContext):
     21        (WebCore::Settings::fixedPositionCreatesStackingContext):
     22        (Settings):
     23        * testing/InternalSettings.cpp:
     24        (WebCore::InternalSettings::InternalSettings):
     25        (WebCore::InternalSettings::restoreTo):
     26        (WebCore::InternalSettings::setFixedPositionCreatesStackingContext):
     27        (WebCore):
     28        * testing/InternalSettings.h:
     29        (InternalSettings):
     30        * testing/InternalSettings.idl:
     31
    1322012-05-23  Michael Nordman  <michaeln@google.com>
    233
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r118194 r118263  
    20482048#ifdef FIXED_POSITION_CREATES_STACKING_CONTEXT
    20492049        || style->position() == FixedPosition
     2050#else
     2051        || (style->position() == FixedPosition && e && e->document()->page()->settings()->fixedPositionCreatesStackingContext())
    20502052#endif
    20512053#if ENABLE(OVERFLOW_SCROLLING)
  • trunk/Source/WebCore/page/Settings.cpp

    r118116 r118263  
    269269    , m_requestAnimationFrameEnabled(true)
    270270    , m_needsDidFinishLoadOrderQuirk(false)
     271    , m_fixedPositionCreatesStackingContext(false)
    271272    , m_loadsImagesAutomaticallyTimer(this, &Settings::loadsImagesAutomaticallyTimerFired)
    272273    , m_incrementalRenderingSuppressionTimeoutInSeconds(defaultIncrementalRenderingSuppressionTimeoutInSeconds)
  • trunk/Source/WebCore/page/Settings.h

    r118116 r118263  
    570570        void setNeedsDidFinishLoadOrderQuirk(bool needsQuirk) { m_needsDidFinishLoadOrderQuirk = needsQuirk; }
    571571        bool needsDidFinishLoadOrderQuirk() const { return m_needsDidFinishLoadOrderQuirk; }
     572
     573        void setFixedPositionCreatesStackingContext(bool creates) { m_fixedPositionCreatesStackingContext = creates; }
     574        bool fixedPositionCreatesStackingContext() const { return m_fixedPositionCreatesStackingContext; }
    572575
    573576#if USE(JSC)
     
    739742        bool m_needsDidFinishLoadOrderQuirk : 1;
    740743
     744        bool m_fixedPositionCreatesStackingContext : 1;
     745
    741746        Timer<Settings> m_loadsImagesAutomaticallyTimer;
    742747        void loadsImagesAutomaticallyTimerFired(Timer<Settings>*);
  • trunk/Source/WebCore/testing/InternalSettings.cpp

    r118116 r118263  
    100100#endif
    101101    , m_originalEditingBehavior(settings()->editingBehaviorType())
     102    , m_originalFixedPositionCreatesStackingContext(settings()->fixedPositionCreatesStackingContext())
    102103{
    103104}
     
    112113#endif
    113114    settings->setEditingBehaviorType(m_originalEditingBehavior);
     115    settings->setFixedPositionCreatesStackingContext(m_originalFixedPositionCreatesStackingContext);
    114116}
    115117
     
    345347}
    346348
    347 }
     349void InternalSettings::setFixedPositionCreatesStackingContext(bool creates, ExceptionCode& ec)
     350{
     351    InternalSettingsGuardForFrameView();
     352    settings()->setFixedPositionCreatesStackingContext(creates);
     353}
     354
     355}
  • trunk/Source/WebCore/testing/InternalSettings.h

    r118116 r118263  
    7777    void setMediaPlaybackRequiresUserGesture(bool, ExceptionCode&);
    7878    void setEditingBehavior(const String&, ExceptionCode&);
     79    void setFixedPositionCreatesStackingContext(bool, ExceptionCode&);
    7980
    8081    void restoreTo(Settings*);
     
    9495#endif
    9596    EditingBehaviorType m_originalEditingBehavior;
     97    bool m_originalFixedPositionCreatesStackingContext;
    9698};
    9799
  • trunk/Source/WebCore/testing/InternalSettings.idl

    r118116 r118263  
    5555        void setMediaPlaybackRequiresUserGesture(in boolean enabled) raises(DOMException);
    5656        void setEditingBehavior(in DOMString behavior) raises(DOMException);
     57        void setFixedPositionCreatesStackingContext(in boolean creates) raises(DOMException);
    5758    };
    5859}
  • trunk/Source/WebKit/chromium/ChangeLog

    r118261 r118263  
     12012-05-23  James Robinson  <jamesr@chromium.org>
     2
     3        Add a Setting to make position:fixed form a new stacking context
     4        https://bugs.webkit.org/show_bug.cgi?id=87186
     5
     6        Reviewed by Adam Barth.
     7
     8        * public/WebSettings.h:
     9        * src/WebSettingsImpl.cpp:
     10        (WebKit::WebSettingsImpl::setFixedPositionCreatesStackingContext):
     11        (WebKit):
     12        * src/WebSettingsImpl.h:
     13        (WebSettingsImpl):
     14
    1152012-05-23  James Robinson  <jamesr@chromium.org>
    216
  • trunk/Source/WebKit/chromium/public/WebSettings.h

    r118116 r118263  
    152152    virtual void setDefaultTileSize(WebSize) = 0;
    153153    virtual void setMaxUntiledLayerSize(WebSize) = 0;
     154    virtual void setFixedPositionCreatesStackingContext(bool) = 0;
    154155
    155156
  • trunk/Source/WebKit/chromium/src/WebSettingsImpl.cpp

    r118116 r118263  
    587587}
    588588
     589void WebSettingsImpl::setFixedPositionCreatesStackingContext(bool creates)
     590{
     591    m_settings->setFixedPositionCreatesStackingContext(creates);
     592}
     593
    589594void WebSettingsImpl::setViewportEnabled(bool enabled)
    590595{
  • trunk/Source/WebKit/chromium/src/WebSettingsImpl.h

    r118116 r118263  
    143143    virtual void setPartialSwapEnabled(bool);
    144144    virtual void setThreadedAnimationEnabled(bool);
     145    virtual void setFixedPositionCreatesStackingContext(bool);
    145146    virtual void setViewportEnabled(bool);
    146147    virtual void setMediaPlaybackRequiresUserGesture(bool);
Note: See TracChangeset for help on using the changeset viewer.