Changeset 223169 in webkit


Ignore:
Timestamp:
Oct 11, 2017 12:54:37 AM (6 years ago)
Author:
fred.wang@free.fr
Message:

[iOS] Do not flatten frames when async frame scrolling is enabled
https://bugs.webkit.org/show_bug.cgi?id=173704

Patch by Frederic Wang <fwang@igalia.com> on 2017-09-27
Reviewed by Simon Fraser.

Source/WebCore:

This patch disables frame flattening when async frame scrolling is enabled on iOS, as
otherwise you can not scroll them. Once iframe scrolling is implemented in iOS (bug 149264),
developers and beta testers will be able to check it by enabling "Async Frame Scrolling"
in the "Experimental WebKit Features" menu of Safari iOS.

Test: platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling.html

  • page/FrameView.cpp:

(WebCore::FrameView::frameFlatteningEnabled): Use effectiveFrameFlattening()

  • page/Settings.cpp:

(WebCore::Settings::effectiveFrameFlattening): New function to return frameFlattening() or do
some exceptions on iOS.

  • page/Settings.h: Declare effectiveFrameFlattening.
  • rendering/RenderFrameSet.cpp:

(WebCore::RenderFrameSet::flattenFrameSet): Use effectiveFrameFlattening()

  • rendering/RenderIFrame.cpp:

(WebCore::RenderIFrame::flattenFrame): Ditto.

  • rendering/RenderView.cpp:

(WebCore::FrameFlatteningLayoutDisallower::FrameFlatteningLayoutDisallower): Ditto.

Source/WebKit:

This patch disables frame flattening when async frame scrolling is enabled on iOS, as
otherwise you can not scroll them. Once iframe scrolling is implemented in iOS (bug 149264),
developers and beta testers will be able to check it by enabling "Async Frame Scrolling"
in the "Experimental WebKit Features" menu of Safari iOS.

Test: platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling.html

  • WebProcess/WebCoreSupport/WebChromeClient.cpp:

(WebKit::WebChromeClient::contentsSizeChanged): Use effectiveFrameFlattening() introduced in
Source/WebCore.

LayoutTests:

Add an iOS test to verify that frame flattening is disabled when async frame scrolling is enabled.

  • platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling-expected.txt: Added.
  • platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling.html: Added.
Location:
trunk
Files:
2 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r223167 r223169  
     12017-09-27  Frederic Wang  <fwang@igalia.com>
     2
     3        [iOS] Do not flatten frames when async frame scrolling is enabled
     4        https://bugs.webkit.org/show_bug.cgi?id=173704
     5
     6        Reviewed by Simon Fraser.
     7
     8        Add an iOS test to verify that frame flattening is disabled when async frame scrolling is enabled.
     9
     10        * platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling-expected.txt: Added.
     11        * platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling.html: Added.
     12
    1132017-10-10  Ryosuke Niwa  <rniwa@webkit.org>
    214
  • trunk/Source/WebCore/ChangeLog

    r223168 r223169  
     12017-09-27  Frederic Wang  <fwang@igalia.com>
     2
     3        [iOS] Do not flatten frames when async frame scrolling is enabled
     4        https://bugs.webkit.org/show_bug.cgi?id=173704
     5
     6        Reviewed by Simon Fraser.
     7
     8        This patch disables frame flattening when async frame scrolling is enabled on iOS, as
     9        otherwise you can not scroll them. Once iframe scrolling is implemented in iOS (bug 149264),
     10        developers and beta testers will be able to check it by enabling "Async Frame Scrolling"
     11        in the "Experimental WebKit Features" menu of Safari iOS.
     12
     13        Test: platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling.html
     14
     15        * page/FrameView.cpp:
     16        (WebCore::FrameView::frameFlatteningEnabled): Use effectiveFrameFlattening()
     17        * page/Settings.cpp:
     18        (WebCore::Settings::effectiveFrameFlattening): New function to return frameFlattening() or do
     19        some exceptions on iOS.
     20        * page/Settings.h: Declare effectiveFrameFlattening.
     21        * rendering/RenderFrameSet.cpp:
     22        (WebCore::RenderFrameSet::flattenFrameSet): Use effectiveFrameFlattening()
     23        * rendering/RenderIFrame.cpp:
     24        (WebCore::RenderIFrame::flattenFrame): Ditto.
     25        * rendering/RenderView.cpp:
     26        (WebCore::FrameFlatteningLayoutDisallower::FrameFlatteningLayoutDisallower): Ditto.
     27
    1282017-10-10  Xabier Rodriguez Calvar  <calvaris@igalia.com>
    229
  • trunk/Source/WebCore/page/FrameView.cpp

    r222857 r223169  
    569569bool FrameView::frameFlatteningEnabled() const
    570570{
    571     return frame().settings().frameFlattening() != FrameFlatteningDisabled;
     571    return frame().settings().effectiveFrameFlattening() != FrameFlatteningDisabled;
    572572}
    573573
  • trunk/Source/WebCore/page/Settings.cpp

    r223167 r223169  
    442442}
    443443
     444FrameFlattening Settings::effectiveFrameFlattening()
     445{
     446#if PLATFORM(IOS)
     447    // On iOS when async frame scrolling is enabled, it does not make sense to use full frame flattening.
     448    // In that case, we just consider that frame flattening is disabled. This allows people to test
     449    // frame scrolling on iOS by enabling "Async Frame Scrolling" via the Safari menu.
     450    if (asyncFrameScrollingEnabled() && frameFlattening() == FrameFlatteningFullyEnabled)
     451        return FrameFlatteningDisabled;
     452#endif
     453    return frameFlattening();
     454}
     455
    444456void Settings::setPluginsEnabled(bool arePluginsEnabled)
    445457{
  • trunk/Source/WebCore/page/Settings.h

    r223167 r223169  
    335335    bool isForcePendingWebGLPolicy() const { return m_forcePendingWebGLPolicy; }
    336336
     337    WEBCORE_EXPORT FrameFlattening effectiveFrameFlattening();
     338
    337339    WEBCORE_EXPORT static void setAllowsAnySSLCertificate(bool);
    338340    static bool allowsAnySSLCertificate();
  • trunk/Source/WebCore/rendering/RenderFrameSet.cpp

    r218480 r223169  
    652652bool RenderFrameSet::flattenFrameSet() const
    653653{
    654     return settings().frameFlattening() != FrameFlatteningDisabled;
     654    return settings().effectiveFrameFlattening() != FrameFlatteningDisabled;
    655655}
    656656
  • trunk/Source/WebCore/rendering/RenderIFrame.cpp

    r218480 r223169  
    7979bool RenderIFrame::flattenFrame() const
    8080{
    81     if (settings().frameFlattening() == FrameFlatteningDisabled)
     81    if (settings().effectiveFrameFlattening() == FrameFlatteningDisabled)
    8282        return false;
    8383
     
    9090            return false;
    9191        // Do not flatten "fullscreen" iframes or they could become larger than the viewport.
    92         if (settings().frameFlattening() <= FrameFlatteningEnabledForNonFullScreenIFrames && isFullScreenIFrame())
     92        if (settings().effectiveFrameFlattening() <= FrameFlatteningEnabledForNonFullScreenIFrames && isFullScreenIFrame())
    9393            return false;
    9494    }
  • trunk/Source/WebCore/rendering/RenderView.cpp

    r222867 r223169  
    6060    FrameFlatteningLayoutDisallower(FrameView& frameView)
    6161        : m_frameView(frameView)
    62         , m_disallowLayout(frameView.frame().settings().frameFlattening() != FrameFlatteningDisabled)
     62        , m_disallowLayout(frameView.frame().settings().effectiveFrameFlattening() != FrameFlatteningDisabled)
    6363    {
    6464        if (m_disallowLayout)
  • trunk/Source/WebKit/ChangeLog

    r223167 r223169  
     12017-09-27  Frederic Wang  <fwang@igalia.com>
     2
     3        [iOS] Do not flatten frames when async frame scrolling is enabled
     4        https://bugs.webkit.org/show_bug.cgi?id=173704
     5
     6        Reviewed by Simon Fraser.
     7
     8        This patch disables frame flattening when async frame scrolling is enabled on iOS, as
     9        otherwise you can not scroll them. Once iframe scrolling is implemented in iOS (bug 149264),
     10        developers and beta testers will be able to check it by enabling "Async Frame Scrolling"
     11        in the "Experimental WebKit Features" menu of Safari iOS.
     12
     13        Test: platform/ios/fast/frames/flattening/iframe-flattening-with-async-frame-scrolling.html
     14
     15        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     16        (WebKit::WebChromeClient::contentsSizeChanged): Use effectiveFrameFlattening() introduced in
     17        Source/WebCore.
     18
    1192017-10-10  Ryosuke Niwa  <rniwa@webkit.org>
    220
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r222941 r223169  
    567567void WebChromeClient::contentsSizeChanged(Frame& frame, const IntSize& size) const
    568568{
    569     if (m_page.corePage()->settings().frameFlattening() == FrameFlatteningDisabled) {
     569    if (m_page.corePage()->settings().effectiveFrameFlattening() == FrameFlatteningDisabled) {
    570570        WebFrame* largestFrame = findLargestFrameInFrameSet(m_page);
    571571        if (largestFrame != m_cachedFrameSetLargestFrame.get()) {
Note: See TracChangeset for help on using the changeset viewer.