Changeset 218480 in webkit


Ignore:
Timestamp:
Jun 19, 2017 12:41:11 AM (7 years ago)
Author:
commit-queue@webkit.org
Message:

Add heuristic to avoid flattening "fullscreen" iframes
https://bugs.webkit.org/show_bug.cgi?id=171914

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

Source/WebCore:

Some authors implement fullscreen popups as out-of-flow iframes with size set to full viewport (using vw/vh CSS units).
When iframe flattening is enabled, such iframes may unexpectedly become larger than the viewport.
This commit adds a simple heuristic to avoid frame flattening in that case.
It is experimented by introducing a "enable for non-fullscreen iframes" state for the frame
flattening setting.
The default frame flattening is still either disabled or (fully) enabled on all platforms.
InternalSettings is also adjusted so that the tests can still set the frame flattening setting.

Test: fast/frames/flattening/iframe-flattening-fullscreen.html

  • page/FrameView.cpp:

(WebCore::FrameView::frameFlatteningEnabled): Use the frame flattening enum setting.

  • page/Settings.h: Define a frame flattening enum that includes a "enable for non-fullscreen

iframes" state.

  • page/Settings.in: Redefine frame flattening using that enum.
  • rendering/RenderFrameSet.cpp:

(WebCore::RenderFrameSet::flattenFrameSet): Use the frame flattening enum setting.

  • rendering/RenderIFrame.cpp:

(WebCore::RenderIFrame::isFullScreenIFrame): Add a heuristic when partial frame flattening
is enabled setting is enabled.
There is not a strict comparison against the viewport size since authors may not exactly use
100vw/100vh.
Anyway, it is hard to do such comparison using the resolved width & height on RenderStyle.
(WebCore::RenderIFrame::flattenFrame): Add a comment for the existing "zero size" heuristic.
Use isFullScreenIFrame heuristic.

  • rendering/RenderView.cpp:

(WebCore::FrameFlatteningLayoutDisallower::FrameFlatteningLayoutDisallower): Use the frame flattening enum setting.

  • testing/InternalSettings.cpp:

(WebCore::InternalSettings::Backup::Backup): Add backup for frame flattening.
(WebCore::InternalSettings::Backup::restoreTo): Ditto.
(WebCore::internalSettingsToWebCoreValue): Helper function to cast the frame flattening values.
(WebCore::InternalSettings::setFrameFlattening): Redefine setFrameFlattening to accept an enum.

  • testing/InternalSettings.h: Define new enum & setter for frame flattening as well as a backup value.
  • testing/InternalSettings.idl: Define new enum & setter for frame flattening.

Source/WebKit/mac:

This commit adjusts the mac/ios preference interface to treat frame flattening as an enum.

  • WebView/WebPreferenceKeysPrivate.h: Rename the key.
  • WebView/WebPreferences.mm:

(+[WebPreferences initialize]): Handle frame flattening as an enum.
(-[WebPreferences isFrameFlatteningEnabled]): Ditto.
(-[WebPreferences setFrameFlatteningEnabled:]): Ditto.
(-[WebPreferences frameFlattening]): New function to get frame flattening as an enum.
(-[WebPreferences setFrameFlattening:]): New function to set frame flattening as an enum.

  • WebView/WebPreferencesPrivate.h: Ditto.
  • WebView/WebView.mm:

(-[WebView _preferencesChanged:]): Ditto.

  • WebView/WebPreferencesPrivate.h: Add new enum definition.

Source/WebKit/win:

This commit ajusts the window port to internally use the new preference type for frame flattening.
However, the "partial frame flattening" value is not exposed yet.

  • WebView.cpp:

(WebView::notifyPreferencesChanged): Use the new type for frame flattening.

Source/WebKit2:

This commit ajusts the preference API to internally treat frame flattening as an enum.
However, the "partial frame flattening" value is not exposed to GTK, C or InjectedBundle APIs yet.

  • Shared/WebPreferencesDefinitions.h: Define frame flattening as an enum.
  • UIProcess/API/C/WKPreferences.cpp:

(WKPreferencesSetFrameFlatteningEnabled): Treat frame flattening as an enum.
(WKPreferencesGetFrameFlatteningEnabled): Ditto.

  • UIProcess/API/gtk/WebKitSettings.cpp:

(webkit_settings_get_enable_frame_flattening): Ditto.
(webkit_settings_set_enable_frame_flattening): Ditto.

  • WebProcess/InjectedBundle/InjectedBundle.cpp:

(WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Do not handle frame flattening since it is an enum.
For now, this breaks one test checking preference overriding because of bug 128594.
(WebKit::InjectedBundle::setFrameFlatteningEnabled): Treat frame flattening as an enum.

  • WebProcess/WebCoreSupport/WebChromeClient.cpp:

(WebKit::WebChromeClient::contentsSizeChanged): Use enum value.

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::updatePreferences): Ditto.

Tools:

  • DumpRenderTree/mac/DumpRenderTree.mm:

(resetWebPreferencesToConsistentValues): Use WebKitFrameFlatteningDisabled.

LayoutTests:

This commit adjusts tests to work when frame flattening is an enum.
It also adds a test to check the new heuristic when "frame flattening for non-fullscreen
iframes" is enabled.
set-preference.html is disabled for now, as the test suite does not support overridePreference()
for non-boolean values (bug 128594).

  • fast/forms/ios/delete-in-input-in-iframe.html: Use enum value "FullyEnabled".
  • fast/forms/ios/focus-input-in-iframe.html: Ditto.
  • fast/forms/ios/programmatic-focus-input-in-iframe.html: Ditto.
  • fast/forms/ios/typing-in-input-in-iframe.html: Ditto.
  • fast/frames/flattening/crash-remove-iframe-during-object-beforeload.html: Ditto.
  • fast/frames/flattening/crash-svg-document.html: Ditto.
  • fast/frames/flattening/crash-when-sibling-iframe-is-destroyed-with-subtree-layoutroot.html: Ditto.
  • fast/frames/flattening/frameset-flattening-advanced.html: Ditto.
  • fast/frames/flattening/frameset-flattening-grid.html: Ditto.
  • fast/frames/flattening/frameset-flattening-simple.html: Ditto.
  • fast/frames/flattening/frameset-flattening-subframe-resize.html: Ditto.
  • fast/frames/flattening/frameset-flattening-subframesets.html: Ditto.
  • fast/frames/flattening/hittest-iframe-while-style-changes-crash.html: Ditto.

Be sure to use single quotes for the inline iframe page.

  • fast/frames/flattening/iframe-flattening-crash.html: Use enum value "FullyEnabled".
  • fast/frames/flattening/iframe-flattening-fixed-height.html: Ditto.
  • fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling-with-js-forced-layout.html: Ditto.
  • fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling.html: Ditto.
  • fast/frames/flattening/iframe-flattening-fixed-width-and-height-zero-size.html: Ditto.
  • fast/frames/flattening/iframe-flattening-fixed-width-and-height.html: Ditto.
  • fast/frames/flattening/iframe-flattening-fixed-width.html: Ditto.
  • fast/frames/flattening/iframe-flattening-fullscreen.html: Added. Check the new heuristic.
  • fast/frames/flattening/iframe-flattening-fullscreen-expected.txt: Added.
  • fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html: Use enum value "FullyEnabled".
  • fast/frames/flattening/iframe-flattening-nested.html: Ditto.
  • fast/frames/flattening/iframe-flattening-offscreen.html: Ditto.
  • fast/frames/flattening/iframe-flattening-out-of-view-and-scroll.html: Ditto.
  • fast/frames/flattening/iframe-flattening-out-of-view-scroll-and-relayout.html: Ditto.
  • fast/frames/flattening/iframe-flattening-out-of-view.html: Ditto.
  • fast/frames/flattening/iframe-flattening-resize-event-count.html: Ditto.
  • fast/frames/flattening/iframe-flattening-selection-crash.html: Ditto.
  • fast/frames/flattening/iframe-flattening-simple.html: Ditto.
  • fast/frames/flattening/iframe-tiny.html: Ditto.
  • fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-and-needs-full-repaint-crash.html: Ditto.
  • fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-assertion-failure.html: Ditto.
  • fast/frames/flattening/scrolling-in-object.html: Ditto.
  • fast/spatial-navigation/snav-iframe-flattening-simple.html: Ditto.
  • http/tests/misc/iframe-flattening-3level-nesting-with-blocking-resource.html: Ditto.
  • platform/mac/TestExpectations: Disable this due to limitation in the test infrastructure.
  • plugins/frameset-with-plugin-frame.html: Use enum value "FullyEnabled".
Location:
trunk
Files:
2 added
65 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r218468 r218480  
     12017-05-14 Frederic Wang  <fwang@igalia.com>
     2
     3        Add heuristic to avoid flattening "fullscreen" iframes
     4        https://bugs.webkit.org/show_bug.cgi?id=171914
     5
     6        Reviewed by Simon Fraser.
     7
     8        This commit adjusts tests to work when frame flattening is an enum.
     9        It also adds a test to check the new heuristic when "frame flattening for non-fullscreen
     10        iframes" is enabled.
     11        set-preference.html is disabled for now, as the test suite does not support overridePreference()
     12        for non-boolean values (bug 128594).
     13
     14        * fast/forms/ios/delete-in-input-in-iframe.html: Use enum value "FullyEnabled".
     15        * fast/forms/ios/focus-input-in-iframe.html: Ditto.
     16        * fast/forms/ios/programmatic-focus-input-in-iframe.html: Ditto.
     17        * fast/forms/ios/typing-in-input-in-iframe.html: Ditto.
     18        * fast/frames/flattening/crash-remove-iframe-during-object-beforeload.html: Ditto.
     19        * fast/frames/flattening/crash-svg-document.html: Ditto.
     20        * fast/frames/flattening/crash-when-sibling-iframe-is-destroyed-with-subtree-layoutroot.html: Ditto.
     21        * fast/frames/flattening/frameset-flattening-advanced.html: Ditto.
     22        * fast/frames/flattening/frameset-flattening-grid.html: Ditto.
     23        * fast/frames/flattening/frameset-flattening-simple.html: Ditto.
     24        * fast/frames/flattening/frameset-flattening-subframe-resize.html: Ditto.
     25        * fast/frames/flattening/frameset-flattening-subframesets.html: Ditto.
     26        * fast/frames/flattening/hittest-iframe-while-style-changes-crash.html: Ditto.
     27        Be sure to use single quotes for the inline iframe page.
     28        * fast/frames/flattening/iframe-flattening-crash.html: Use enum value "FullyEnabled".
     29        * fast/frames/flattening/iframe-flattening-fixed-height.html: Ditto.
     30        * fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling-with-js-forced-layout.html: Ditto.
     31        * fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling.html: Ditto.
     32        * fast/frames/flattening/iframe-flattening-fixed-width-and-height-zero-size.html: Ditto.
     33        * fast/frames/flattening/iframe-flattening-fixed-width-and-height.html: Ditto.
     34        * fast/frames/flattening/iframe-flattening-fixed-width.html: Ditto.
     35        * fast/frames/flattening/iframe-flattening-fullscreen.html: Added. Check the new heuristic.
     36        * fast/frames/flattening/iframe-flattening-fullscreen-expected.txt: Added.
     37        * fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html: Use enum value "FullyEnabled".
     38        * fast/frames/flattening/iframe-flattening-nested.html: Ditto.
     39        * fast/frames/flattening/iframe-flattening-offscreen.html: Ditto.
     40        * fast/frames/flattening/iframe-flattening-out-of-view-and-scroll.html: Ditto.
     41        * fast/frames/flattening/iframe-flattening-out-of-view-scroll-and-relayout.html: Ditto.
     42        * fast/frames/flattening/iframe-flattening-out-of-view.html: Ditto.
     43        * fast/frames/flattening/iframe-flattening-resize-event-count.html: Ditto.
     44        * fast/frames/flattening/iframe-flattening-selection-crash.html: Ditto.
     45        * fast/frames/flattening/iframe-flattening-simple.html: Ditto.
     46        * fast/frames/flattening/iframe-tiny.html: Ditto.
     47        * fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-and-needs-full-repaint-crash.html: Ditto.
     48        * fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-assertion-failure.html: Ditto.
     49        * fast/frames/flattening/scrolling-in-object.html: Ditto.
     50        * fast/spatial-navigation/snav-iframe-flattening-simple.html: Ditto.
     51        * http/tests/misc/iframe-flattening-3level-nesting-with-blocking-resource.html: Ditto.
     52        * platform/mac/TestExpectations: Disable this due to limitation in the test infrastructure.
     53        * plugins/frameset-with-plugin-frame.html: Use enum value "FullyEnabled".
     54
    1552017-06-18  Ryosuke Niwa  <rniwa@webkit.org>
    256
  • trunk/LayoutTests/fast/forms/ios/delete-in-input-in-iframe.html

    r203097 r218480  
    2121
    2222    if (window.internals)
    23         internals.settings.setFrameFlatteningEnabled(true);
     23        internals.settings.setFrameFlattening("FullyEnabled")
    2424
    2525    function getTypingUIScript()
  • trunk/LayoutTests/fast/forms/ios/focus-input-in-iframe.html

    r202292 r218480  
    2121
    2222    if (window.internals)
    23         internals.settings.setFrameFlatteningEnabled(true);
     23        internals.settings.setFrameFlattening("FullyEnabled")
    2424   
    2525    function buttonClicked()
  • trunk/LayoutTests/fast/forms/ios/programmatic-focus-input-in-iframe.html

    r202292 r218480  
    2020   
    2121    if (window.internals)
    22         internals.settings.setFrameFlatteningEnabled(true);
     22        internals.settings.setFrameFlattening("FullyEnabled")
    2323   
    2424    function pageDidScroll()
  • trunk/LayoutTests/fast/forms/ios/typing-in-input-in-iframe.html

    r202295 r218480  
    2121
    2222    if (window.internals)
    23         internals.settings.setFrameFlatteningEnabled(true);
     23        internals.settings.setFrameFlattening("FullyEnabled")
    2424
    2525    function getTypingUIScript()
  • trunk/LayoutTests/fast/frames/flattening/crash-remove-iframe-during-object-beforeload.html

    r151312 r218480  
    55    testRunner.dumpAsText();
    66    testRunner.waitUntilDone();
    7     window.internals.settings.setFrameFlatteningEnabled(true);
     7    window.internals.settings.setFrameFlattening("FullyEnabled")
    88}
    99
  • trunk/LayoutTests/fast/frames/flattening/crash-svg-document.html

    r142499 r218480  
    33
    44if (window.testRunner && window.internals) {
    5     internals.settings.setFrameFlatteningEnabled(true);
     5    internals.settings.setFrameFlattening("FullyEnabled")
    66    testRunner.dumpAsText();
    77}
  • trunk/LayoutTests/fast/frames/flattening/crash-when-sibling-iframe-is-destroyed-with-subtree-layoutroot.html

    r188016 r218480  
    1010
    1111  if (window.internals)
    12     internals.settings.setFrameFlatteningEnabled(true);
     12    internals.settings.setFrameFlattening("FullyEnabled")
    1313
    1414  window.onload = function() {
  • trunk/LayoutTests/fast/frames/flattening/frameset-flattening-advanced.html

    r142499 r218480  
    55        {
    66            if (window.internals)
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            // Force synchronous layout.
    99            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/frameset-flattening-grid.html

    r142499 r218480  
    55    {
    66        if (window.internals)
    7             internals.settings.setFrameFlatteningEnabled(true);
     7            internals.settings.setFrameFlattening("FullyEnabled")
    88        // Force synchronous layout.
    99        document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/frameset-flattening-simple.html

    r142499 r218480  
    44        if (window.testRunner && window.internals) {
    55            testRunner.waitUntilDone();
    6             internals.settings.setFrameFlatteningEnabled(true);
     6            internals.settings.setFrameFlattening("FullyEnabled")
    77        }
    88
  • trunk/LayoutTests/fast/frames/flattening/frameset-flattening-subframe-resize.html

    r142499 r218480  
    44        if (window.testRunner && window.internals) {
    55            testRunner.waitUntilDone();
    6             internals.settings.setFrameFlatteningEnabled(true);
     6            internals.settings.setFrameFlattening("FullyEnabled")
    77        }
    88
  • trunk/LayoutTests/fast/frames/flattening/frameset-flattening-subframesets.html

    r142499 r218480  
    55        {
    66            if (window.internals)
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            // Force synchronous layout.
    99            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/hittest-iframe-while-style-changes-crash.html

    r186165 r218480  
    1010
    1111if (window.internals)
    12     internals.settings.setFrameFlatteningEnabled(true);
     12    internals.settings.setFrameFlattening("FullyEnabled")
    1313
    1414function runTest() {
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-crash.html

    r142499 r218480  
    55            testRunner.dumpAsText();
    66            testRunner.waitUntilDone();
    7             internals.settings.setFrameFlatteningEnabled(true);
     7            internals.settings.setFrameFlattening("FullyEnabled")
    88        }
    99    </script>
     
    2121                testRunner.notifyDone();
    2222            if (window.testRunner)
    23                 internals.settings.setFrameFlatteningEnabled(true);
     23                internals.settings.setFrameFlattening('FullyEnabled')
    2424        }
    2525    </script>
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-height.html

    r142499 r218480  
    55        {
    66            if (window.internals)
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            // Force synchronous layout.
    99            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling-with-js-forced-layout.html

    r142499 r218480  
    77            if (window.testRunner && window.internals) {
    88                testRunner.dumpAsText();
    9                 internals.settings.setFrameFlatteningEnabled(true);
     9                internals.settings.setFrameFlattening("FullyEnabled")
    1010            }
    1111        }
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling.html

    r142499 r218480  
    55        {
    66            if (window.internals)
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            // Force synchronous layout.
    99            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width-and-height-zero-size.html

    r142499 r218480  
    77            if (window.testRunner && window.internals) {
    88                testRunner.dumpAsText();
    9                 internals.settings.setFrameFlatteningEnabled(true);
     9                internals.settings.setFrameFlattening("FullyEnabled")
    1010            }
    1111
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width-and-height.html

    r142499 r218480  
    44        if (window.testRunner && window.internals) {
    55            testRunner.waitUntilDone();
    6             internals.settings.setFrameFlatteningEnabled(true);
     6            internals.settings.setFrameFlattening("FullyEnabled")
    77        }
    88
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width.html

    r142499 r218480  
    55        {
    66            if (window.internals)
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            // Force synchronous layout.
    99            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html

    r175965 r218480  
    1515
    1616if (window.internals)
    17     internals.settings.setFrameFlatteningEnabled(true);
     17    internals.settings.setFrameFlattening("FullyEnabled")
    1818
    1919function runTest()
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-nested.html

    r142499 r218480  
    1111        {
    1212            if (window.internals)
    13                 internals.settings.setFrameFlatteningEnabled(true);
     13                internals.settings.setFrameFlattening("FullyEnabled")
    1414            // Force synchronous layout.
    1515            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-offscreen.html

    r142499 r218480  
    55        {
    66            if (window.internals)
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            // Force synchronous layout.
    99            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-out-of-view-and-scroll.html

    r142499 r218480  
    44        if (window.testRunner && window.internals) {
    55            testRunner.waitUntilDone();
    6             internals.settings.setFrameFlatteningEnabled(true);
     6            internals.settings.setFrameFlattening("FullyEnabled")
    77        }
    88
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-out-of-view-scroll-and-relayout.html

    r142499 r218480  
    44        if (window.testRunner && window.internals) {
    55            testRunner.waitUntilDone();
    6             internals.settings.setFrameFlatteningEnabled(true);
     6            internals.settings.setFrameFlattening("FullyEnabled")
    77        }
    88
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-out-of-view.html

    r142499 r218480  
    55        {
    66            if (window.internals)
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            // Force synchronous layout.
    99            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-resize-event-count.html

    r183272 r218480  
    44<script>
    55if (window.internals)
    6     internals.settings.setFrameFlatteningEnabled(true);
     6    internals.settings.setFrameFlattening("FullyEnabled")
    77 
    88if (window.testRunner) {
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-selection-crash.html

    r142499 r218480  
    55            if (window.testRunner && window.internals) {
    66                testRunner.dumpAsText();
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            }
    99
  • trunk/LayoutTests/fast/frames/flattening/iframe-flattening-simple.html

    r142499 r218480  
    55        {
    66            if (window.internals)
    7                 internals.settings.setFrameFlatteningEnabled(true);
     7                internals.settings.setFrameFlattening("FullyEnabled")
    88            // Force synchronous layout.
    99            document.body.offsetHeight;
  • trunk/LayoutTests/fast/frames/flattening/iframe-tiny.html

    r155268 r218480  
    77
    88if (window.internals)
    9     internals.settings.setFrameFlatteningEnabled(true);
     9    internals.settings.setFrameFlattening("FullyEnabled")
    1010
    1111function checkResult(frameName, expectedWidth, expectedHeight)
  • trunk/LayoutTests/fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-and-needs-full-repaint-crash.html

    r169128 r218480  
    99
    1010if (window.internals)
    11     internals.settings.setFrameFlatteningEnabled(true);
     11    internals.settings.setFrameFlattening("FullyEnabled")
    1212
    1313function done()
  • trunk/LayoutTests/fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-assertion-failure.html

    r169128 r218480  
    99
    1010if (window.internals)
    11     internals.settings.setFrameFlatteningEnabled(true);
     11    internals.settings.setFrameFlattening("FullyEnabled")
    1212
    1313function done()
  • trunk/LayoutTests/fast/frames/flattening/scrolling-in-object.html

    r188793 r218480  
    44            if (window.testRunner && window.internals) {
    55                testRunner.waitUntilDone();
    6                 internals.settings.setFrameFlatteningEnabled(true);
     6                internals.settings.setFrameFlattening("FullyEnabled")
    77            }
    88
  • trunk/LayoutTests/fast/spatial-navigation/snav-iframe-flattening-simple.html

    r155272 r218480  
    3939    {
    4040      if (window.internals)
    41         internals.settings.setFrameFlatteningEnabled(true);
     41        internals.settings.setFrameFlattening("FullyEnabled")
    4242
    4343      // starting the test itself: get to a known place.
  • trunk/LayoutTests/http/tests/misc/iframe-flattening-3level-nesting-with-blocking-resource.html

    r142499 r218480  
    55            testRunner.waitUntilDone();
    66            testRunner.dumpAsText();
    7             internals.settings.setFrameFlatteningEnabled(true);
     7            internals.settings.setFrameFlattening("FullyEnabled")
    88        }
    99    </script>
  • trunk/LayoutTests/platform/mac/TestExpectations

    r218424 r218480  
    498498webkit.org/b/106185 fast/frames/flattening/iframe-flattening-fixed-height.html [ Failure Pass ]
    499499webkit.org/b/106185 fast/frames/flattening/frameset-flattening-grid.html [ Failure Pass ]
     500
     501# FrameFlattening enum preferences can not be overridden.
     502webkit.org/b/128594 platform/mac/fast/frames/flattening/set-preference.html [ Failure ]
    500503
    501504webkit.org/b/73766 css3/unicode-bidi-isolate-aharon-failing.html [ ImageOnlyFailure ]
  • trunk/LayoutTests/plugins/frameset-with-plugin-frame.html

    r180441 r218480  
    44        testRunner.dumpAsText();
    55        testRunner.waitUntilDone();
    6         internals.settings.setFrameFlatteningEnabled(true);
     6        internals.settings.setFrameFlattening("FullyEnabled")
    77        testRunner.overridePreference("WebKitUsesPageCachePreferenceKey", 1);
    88        testRunner.overridePreference("WebKitPageCacheSupportsPluginsPreferenceKey", 1);
  • trunk/Source/WebCore/ChangeLog

    r218472 r218480  
     12017-05-14 Frederic Wang  <fwang@igalia.com>
     2
     3        Add heuristic to avoid flattening "fullscreen" iframes
     4        https://bugs.webkit.org/show_bug.cgi?id=171914
     5
     6        Reviewed by Simon Fraser.
     7
     8        Some authors implement fullscreen popups as out-of-flow iframes with size set to full viewport (using vw/vh CSS units).
     9        When iframe flattening is enabled, such iframes may unexpectedly become larger than the viewport.
     10        This commit adds a simple heuristic to avoid frame flattening in that case.
     11        It is experimented by introducing a "enable for non-fullscreen iframes" state for the frame
     12        flattening setting.
     13        The default frame flattening is still either disabled or (fully) enabled on all platforms.
     14        InternalSettings is also adjusted so that the tests can still set the frame flattening setting.
     15
     16        Test: fast/frames/flattening/iframe-flattening-fullscreen.html
     17
     18        * page/FrameView.cpp:
     19        (WebCore::FrameView::frameFlatteningEnabled): Use the frame flattening enum setting.
     20        * page/Settings.h: Define a frame flattening enum that includes a "enable for non-fullscreen
     21        iframes" state.
     22        * page/Settings.in: Redefine frame flattening using that enum.
     23        * rendering/RenderFrameSet.cpp:
     24        (WebCore::RenderFrameSet::flattenFrameSet): Use the frame flattening enum setting.
     25        * rendering/RenderIFrame.cpp:
     26        (WebCore::RenderIFrame::isFullScreenIFrame): Add a heuristic when partial frame flattening
     27        is enabled setting is enabled.
     28        There is not a strict comparison against the viewport size since authors may not exactly use
     29        100vw/100vh.
     30        Anyway, it is hard to do such comparison using the resolved width & height on RenderStyle.
     31        (WebCore::RenderIFrame::flattenFrame): Add a comment for the existing "zero size" heuristic.
     32        Use isFullScreenIFrame heuristic.
     33        * rendering/RenderView.cpp:
     34        (WebCore::FrameFlatteningLayoutDisallower::FrameFlatteningLayoutDisallower): Use the frame flattening enum setting.
     35        * testing/InternalSettings.cpp:
     36        (WebCore::InternalSettings::Backup::Backup): Add backup for frame flattening.
     37        (WebCore::InternalSettings::Backup::restoreTo): Ditto.
     38        (WebCore::internalSettingsToWebCoreValue): Helper function to cast the frame flattening values.
     39        (WebCore::InternalSettings::setFrameFlattening): Redefine setFrameFlattening to accept an enum.
     40        * testing/InternalSettings.h: Define new enum & setter for frame flattening as well as a backup value.
     41        * testing/InternalSettings.idl: Define new enum & setter for frame flattening.
     42
    1432017-06-18  Carlos Garcia Campos  <cgarcia@igalia.com>
    244
  • trunk/Source/WebCore/page/FrameView.cpp

    r218228 r218480  
    568568bool FrameView::frameFlatteningEnabled() const
    569569{
    570     return frame().settings().frameFlatteningEnabled();
     570    return frame().settings().frameFlattening() != FrameFlatteningDisabled;
    571571}
    572572
  • trunk/Source/WebCore/page/Settings.h

    r217999 r218480  
    8989};
    9090
     91enum FrameFlattening {
     92    FrameFlatteningDisabled,
     93    FrameFlatteningEnabledForNonFullScreenIFrames,
     94    FrameFlatteningFullyEnabled
     95};
     96
    9197typedef unsigned DebugOverlayRegions;
    9298
  • trunk/Source/WebCore/page/Settings.in

    r218439 r218480  
    176176primaryPlugInSnapshotDetectionEnabled initial=true
    177177maximumPlugInSnapshotAttempts type=unsigned, initial=20
    178 frameFlatteningEnabled initial=false
     178frameFlattening type=FrameFlattening, initial=FrameFlatteningDisabled
    179179
    180180webSecurityEnabled initial=true
  • trunk/Source/WebCore/rendering/RenderFrameSet.cpp

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

    r210768 r218480  
    7070}
    7171
     72bool RenderIFrame::isFullScreenIFrame() const
     73{
     74    // Some authors implement fullscreen popups as out-of-flow iframes with size set to full viewport (using vw/vh units).
     75    // The size used may not perfectly match the viewport size so the following heuristic uses a relaxed constraint.
     76    return style().hasOutOfFlowPosition() && style().hasViewportUnits();
     77}
     78
    7279bool RenderIFrame::flattenFrame() const
    7380{
    74     if (!settings().frameFlatteningEnabled())
     81    if (settings().frameFlattening() == FrameFlatteningDisabled)
    7582        return false;
    7683
     
    7986        if (iframeElement().scrollingMode() == ScrollbarAlwaysOff)
    8087            return false;
     88        // Do not flatten iframes that have zero size, as flattening might make them visible.
    8189        if (style().width().value() <= 0 || style().height().value() <= 0)
     90            return false;
     91        // Do not flatten "fullscreen" iframes or they could become larger than the viewport.
     92        if (settings().frameFlattening() <= FrameFlatteningEnabledForNonFullScreenIFrames && isFullScreenIFrame())
    8293            return false;
    8394    }
  • trunk/Source/WebCore/rendering/RenderIFrame.h

    r208668 r218480  
    6060
    6161    RenderView* contentRootRenderer() const;
     62
     63    bool isFullScreenIFrame() const;
    6264};
    6365
  • trunk/Source/WebCore/rendering/RenderView.cpp

    r216001 r218480  
    6262    FrameFlatteningLayoutDisallower(FrameView& frameView)
    6363        : m_frameView(frameView)
    64         , m_disallowLayout(frameView.frame().settings().frameFlatteningEnabled())
     64        , m_disallowLayout(frameView.frame().settings().frameFlattening() != FrameFlatteningDisabled)
    6565    {
    6666        if (m_disallowLayout)
  • trunk/Source/WebCore/testing/InternalSettings.cpp

    r218351 r218480  
    101101    , m_forcedDisplayIsMonochromeAccessibilityValue(settings.forcedDisplayIsMonochromeAccessibilityValue())
    102102    , m_forcedPrefersReducedMotionAccessibilityValue(settings.forcedPrefersReducedMotionAccessibilityValue())
     103    , m_frameFlattening(settings.frameFlattening())
    103104#if ENABLE(INDEXED_DATABASE_IN_WORKERS)
    104105    , m_indexedDBWorkersEnabled(RuntimeEnabledFeatures::sharedFeatures().indexedDBWorkersEnabled())
     
    194195    RenderTheme::singleton().setShouldMockBoldSystemFontForAccessibility(m_shouldMockBoldSystemFontForAccessibility);
    195196    FontCache::singleton().setShouldMockBoldSystemFontForAccessibility(m_shouldMockBoldSystemFontForAccessibility);
     197    settings.setFrameFlattening(m_frameFlattening);
    196198
    197199#if ENABLE(INDEXED_DATABASE_IN_WORKERS)
     
    789791}
    790792
     793static FrameFlattening internalSettingsToWebCoreValue(InternalSettings::FrameFlatteningValue value)
     794{
     795    switch (value) {
     796    case InternalSettings::FrameFlatteningValue::Disabled:
     797        return FrameFlatteningDisabled;
     798    case InternalSettings::FrameFlatteningValue::EnabledForNonFullScreenIFrames:
     799        return FrameFlatteningEnabledForNonFullScreenIFrames;
     800    case InternalSettings::FrameFlatteningValue::FullyEnabled:
     801        return FrameFlatteningFullyEnabled;
     802    }
     803
     804    ASSERT_NOT_REACHED();
     805    return FrameFlatteningDisabled;
     806}
     807
     808ExceptionOr<void> InternalSettings::setFrameFlattening(const FrameFlatteningValue& frameFlattening)
     809{
     810    if (!m_page)
     811        return Exception { INVALID_ACCESS_ERR };
     812    settings().setFrameFlattening(internalSettingsToWebCoreValue(frameFlattening));
     813    return { };
     814}
     815
    791816void InternalSettings::setAllowsAnySSLCertificate(bool allowsAnyCertificate)
    792817{
  • trunk/Source/WebCore/testing/InternalSettings.h

    r218351 r218480  
    9898    ExceptionOr<void> setShouldMockBoldSystemFontForAccessibility(bool);
    9999    ExceptionOr<void> setShouldManageAudioSessionCategory(bool);
     100
     101    enum class FrameFlatteningValue { Disabled, EnabledForNonFullScreenIFrames, FullyEnabled };
     102    ExceptionOr<void> setFrameFlattening(const FrameFlatteningValue&);
    100103   
    101104    static void setAllowsAnySSLCertificate(bool);
     
    188191        Settings::ForcedAccessibilityValue m_forcedDisplayIsMonochromeAccessibilityValue;
    189192        Settings::ForcedAccessibilityValue m_forcedPrefersReducedMotionAccessibilityValue;
     193        FrameFlattening m_frameFlattening;
    190194
    191195        // Runtime enabled settings.
  • trunk/Source/WebCore/testing/InternalSettings.idl

    r218351 r218480  
    2626
    2727enum ForcedAccessibilityValue { "system", "on", "off" };
     28enum FrameFlatteningValue { "Disabled", "EnabledForNonFullScreenIFrames", "FullyEnabled" };
    2829
    2930[
     
    8283    [MayThrowException] void setAllowsInlineMediaPlaybackAfterFullscreen(boolean allows);
    8384    [MayThrowException] void setInlineMediaPlaybackRequiresPlaysInlineAttribute(boolean requires);
     85    [MayThrowException] void setFrameFlattening(FrameFlatteningValue frameFlattening);
    8486
    8587    // RuntimeEnabledFeatures.
  • trunk/Source/WebKit/mac/ChangeLog

    r218457 r218480  
     12017-05-14 Frederic Wang  <fwang@igalia.com>
     2
     3        Add heuristic to avoid flattening "fullscreen" iframes
     4        https://bugs.webkit.org/show_bug.cgi?id=171914
     5
     6        Reviewed by Simon Fraser.
     7
     8        This commit adjusts the mac/ios preference interface to treat frame flattening as an enum.
     9
     10        * WebView/WebPreferenceKeysPrivate.h: Rename the key.
     11        * WebView/WebPreferences.mm:
     12        (+[WebPreferences initialize]): Handle frame flattening as an enum.
     13        (-[WebPreferences isFrameFlatteningEnabled]): Ditto.
     14        (-[WebPreferences setFrameFlatteningEnabled:]): Ditto.
     15        (-[WebPreferences frameFlattening]): New function to get frame flattening as an enum.
     16        (-[WebPreferences setFrameFlattening:]): New function to set frame flattening as an enum.
     17        * WebView/WebPreferencesPrivate.h: Ditto.
     18        * WebView/WebView.mm:
     19        (-[WebView _preferencesChanged:]): Ditto.
     20        * WebView/WebPreferencesPrivate.h: Add new enum definition.
     21
    1222017-06-17  Chris Dumez  <cdumez@apple.com>
    223
  • trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h

    r218196 r218480  
    117117#define WebKitForceWebGLUsesLowPowerPreferenceKey @"WebKitForceWebGLUsesLowPower"
    118118#define WebKitAccelerated2dCanvasEnabledPreferenceKey @"WebKitAccelerated2dCanvasEnabled"
    119 #define WebKitFrameFlatteningEnabledPreferenceKey @"WebKitFrameFlatteningEnabled"
     119#define WebKitFrameFlatteningPreferenceKey @"WebKitFrameFlattening"
    120120#define WebKitSpatialNavigationEnabledPreferenceKey @"WebKitSpatialNavigationEnabled"
    121121#define WebKitPaginateDuringLayoutEnabledPreferenceKey @"WebKitPaginateDuringLayoutEnabled"
  • trunk/Source/WebKit/mac/WebView/WebPreferences.mm

    r218196 r218480  
    521521        [NSNumber numberWithBool:YES],  WebKitAnimatedImageAsyncDecodingEnabledPreferenceKey,
    522522#if PLATFORM(IOS)
    523         [NSNumber numberWithBool:YES],  WebKitFrameFlatteningEnabledPreferenceKey,
     523        [NSNumber numberWithUnsignedInt:FrameFlatteningFullyEnabled], WebKitFrameFlatteningPreferenceKey,
    524524#else
    525         [NSNumber numberWithBool:NO],   WebKitFrameFlatteningEnabledPreferenceKey,
     525        [NSNumber numberWithUnsignedInt:FrameFlatteningDisabled], WebKitFrameFlatteningPreferenceKey,
    526526#endif
    527527        [NSNumber numberWithBool:NO],   WebKitSpatialNavigationEnabledPreferenceKey,
     
    21092109- (BOOL)isFrameFlatteningEnabled
    21102110{
    2111     return [self _boolValueForKey:WebKitFrameFlatteningEnabledPreferenceKey];
    2112 }
    2113 
    2114 - (void)setFrameFlatteningEnabled:(BOOL)flag
    2115 {
    2116     [self _setBoolValue:flag forKey:WebKitFrameFlatteningEnabledPreferenceKey];
     2111    return [self _unsignedIntValueForKey:WebKitFrameFlatteningPreferenceKey] != WebKitFrameFlatteningDisabled;
     2112}
     2113
     2114- (void)setFrameFlatteningEnabled:(BOOL)flattening
     2115{
     2116    WebKitFrameFlattening value = flattening ? WebKitFrameFlatteningFullyEnabled : WebKitFrameFlatteningDisabled;
     2117    [self _setUnsignedIntValue:value forKey:WebKitFrameFlatteningPreferenceKey];
     2118}
     2119
     2120- (WebKitFrameFlattening)frameFlattening
     2121{
     2122    return static_cast<WebKitFrameFlattening>([self _unsignedIntValueForKey:WebKitFrameFlatteningPreferenceKey]);
     2123}
     2124
     2125- (void)setFrameFlattening:(WebKitFrameFlattening)flattening
     2126{
     2127    [self _setUnsignedIntValue:flattening forKey:WebKitFrameFlatteningPreferenceKey];
    21172128}
    21182129
  • trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h

    r218196 r218480  
    5757} WebKitJavaScriptRuntimeFlags;
    5858
     59typedef enum {
     60    WebKitFrameFlatteningDisabled,
     61    WebKitFrameFlatteningEnabledForNonFullScreenIFrames,
     62    WebKitFrameFlatteningFullyEnabled
     63} WebKitFrameFlattening;
     64
    5965extern NSString *WebPreferencesChangedNotification;
    6066extern NSString *WebPreferencesRemovedNotification;
     
    156162- (BOOL)isFrameFlatteningEnabled;
    157163- (void)setFrameFlatteningEnabled:(BOOL)flag;
     164
     165- (WebKitFrameFlattening)frameFlattening;
     166- (void)setFrameFlattening:(WebKitFrameFlattening)flag;
    158167
    159168- (BOOL)isSpatialNavigationEnabled;
  • trunk/Source/WebKit/mac/WebView/WebView.mm

    r218433 r218480  
    28022802    settings.setLoadDeferringEnabled(shouldEnableLoadDeferring());
    28032803    settings.setWindowFocusRestricted(shouldRestrictWindowFocus());
    2804     settings.setFrameFlatteningEnabled([preferences isFrameFlatteningEnabled]);
     2804    settings.setFrameFlattening((const WebCore::FrameFlattening)[preferences frameFlattening]);
    28052805    settings.setSpatialNavigationEnabled([preferences isSpatialNavigationEnabled]);
    28062806    settings.setPaginateDuringLayoutEnabled([preferences paginateDuringLayoutEnabled]);
  • trunk/Source/WebKit/win/ChangeLog

    r218457 r218480  
     12017-05-14 Frederic Wang  <fwang@igalia.com>
     2
     3        Add heuristic to avoid flattening "fullscreen" iframes
     4        https://bugs.webkit.org/show_bug.cgi?id=171914
     5
     6        Reviewed by Simon Fraser.
     7
     8        This commit ajusts the window port to internally use the new preference type for frame flattening.
     9        However, the "partial frame flattening" value is not exposed yet.
     10
     11        * WebView.cpp:
     12        (WebView::notifyPreferencesChanged): Use the new type for frame flattening.
     13
    1142017-06-17  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/Source/WebKit/win/WebView.cpp

    r218196 r218480  
    54675467    if (FAILED(hr))
    54685468        return hr;
    5469     settings.setFrameFlatteningEnabled(enabled);
     5469    settings.setFrameFlattening(enabled ? FrameFlatteningFullyEnabled : FrameFlatteningDisabled);
    54705470
    54715471    hr = prefsPrivate->acceleratedCompositingEnabled(&enabled);
  • trunk/Source/WebKit2/ChangeLog

    r218478 r218480  
     12017-05-14 Frederic Wang  <fwang@igalia.com>
     2
     3        Add heuristic to avoid flattening "fullscreen" iframes
     4        https://bugs.webkit.org/show_bug.cgi?id=171914
     5
     6        Reviewed by Simon Fraser.
     7
     8        This commit ajusts the preference API to internally treat frame flattening as an enum.
     9        However, the "partial frame flattening" value is not exposed to GTK, C or InjectedBundle APIs yet.
     10
     11        * Shared/WebPreferencesDefinitions.h: Define frame flattening as an enum.
     12        * UIProcess/API/C/WKPreferences.cpp:
     13        (WKPreferencesSetFrameFlatteningEnabled): Treat frame flattening as an enum.
     14        (WKPreferencesGetFrameFlatteningEnabled): Ditto.
     15        * UIProcess/API/gtk/WebKitSettings.cpp:
     16        (webkit_settings_get_enable_frame_flattening): Ditto.
     17        (webkit_settings_set_enable_frame_flattening): Ditto.
     18        * WebProcess/InjectedBundle/InjectedBundle.cpp:
     19        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner): Do not handle frame flattening since it is an enum.
     20        For now, this breaks one test checking preference overriding because of bug 128594.
     21        (WebKit::InjectedBundle::setFrameFlatteningEnabled): Treat frame flattening as an enum.
     22        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     23        (WebKit::WebChromeClient::contentsSizeChanged): Use enum value.
     24        * WebProcess/WebPage/WebPage.cpp:
     25        (WebKit::WebPage::updatePreferences): Ditto.
     26
    1272017-06-18  Carlos Garcia Campos  <cgarcia@igalia.com>
    228
  • trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h

    r218439 r218480  
    6161#define DEFAULT_ALLOWS_PICTURE_IN_PICTURE_MEDIA_PLAYBACK true
    6262#define DEFAULT_BACKSPACE_KEY_NAVIGATION_ENABLED false
    63 #define DEFAULT_FRAME_FLATTENING_ENABLED true
     63#define DEFAULT_FRAME_FLATTENING FrameFlatteningFullyEnabled
    6464#define DEFAULT_SHOULD_PRINT_BACKGROUNDS true
    6565#define DEFAULT_TEXT_AREAS_ARE_RESIZABLE false
     
    7878#define DEFAULT_ALLOWS_PICTURE_IN_PICTURE_MEDIA_PLAYBACK false
    7979#define DEFAULT_BACKSPACE_KEY_NAVIGATION_ENABLED true
    80 #define DEFAULT_FRAME_FLATTENING_ENABLED false
     80#define DEFAULT_FRAME_FLATTENING FrameFlatteningDisabled
    8181#define DEFAULT_SHOULD_PRINT_BACKGROUNDS false
    8282#define DEFAULT_TEXT_AREAS_ARE_RESIZABLE true
     
    141141    macro(DatabasesEnabled, databasesEnabled, Bool, bool, true, "", "") \
    142142    macro(XSSAuditorEnabled, xssAuditorEnabled, Bool, bool, true, "", "") \
    143     macro(FrameFlatteningEnabled, frameFlatteningEnabled, Bool, bool, DEFAULT_FRAME_FLATTENING_ENABLED, "", "") \
    144143    macro(PrivateBrowsingEnabled, privateBrowsingEnabled, Bool, bool, false, "", "") \
    145144    macro(TextAreasAreResizable, textAreasAreResizable, Bool, bool, DEFAULT_TEXT_AREAS_ARE_RESIZABLE, "", "") \
     
    316315    macro(UserInterfaceDirectionPolicy, userInterfaceDirectionPolicy, UInt32, uint32_t, 0, "", "") \
    317316    macro(SystemLayoutDirection, systemLayoutDirection, UInt32, uint32_t, 0, "", "") \
     317    macro(FrameFlattening, frameFlattening, UInt32, uint32_t, DEFAULT_FRAME_FLATTENING, "", "") \
    318318    \
    319319
  • trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp

    r218196 r218480  
    145145void WKPreferencesSetFrameFlatteningEnabled(WKPreferencesRef preferencesRef, bool frameFlatteningEnabled)
    146146{
    147     toImpl(preferencesRef)->setFrameFlatteningEnabled(frameFlatteningEnabled);
     147    // FIXME: Expose more frame flattening values.
     148    toImpl(preferencesRef)->setFrameFlattening(frameFlatteningEnabled ? WebCore::FrameFlatteningFullyEnabled : WebCore::FrameFlatteningDisabled);
    148149}
    149150
    150151bool WKPreferencesGetFrameFlatteningEnabled(WKPreferencesRef preferencesRef)
    151152{
    152     return toImpl(preferencesRef)->frameFlatteningEnabled();
     153    // FIXME: Expose more frame flattening values.
     154    return toImpl(preferencesRef)->frameFlattening() != WebCore::FrameFlatteningDisabled;
    153155}
    154156
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp

    r218332 r218480  
    16091609    g_return_val_if_fail(WEBKIT_IS_SETTINGS(settings), FALSE);
    16101610
    1611     return settings->priv->preferences->frameFlatteningEnabled();
     1611    // FIXME: Expose more frame flattening values.
     1612    return settings->priv->preferences->frameFlattening() != WebCore::FrameFlatteningDisabled;
    16121613}
    16131614
     
    16241625
    16251626    WebKitSettingsPrivate* priv = settings->priv;
    1626     bool currentValue = priv->preferences->frameFlatteningEnabled();
     1627    bool currentValue = priv->preferences->frameFlattening() != WebCore::FrameFlatteningDisabled;
    16271628    if (currentValue == enabled)
    16281629        return;
    16291630
    1630     priv->preferences->setFrameFlatteningEnabled(enabled);
     1631    // FIXME: Expose more frame flattening values.
     1632    priv->preferences->setFrameFlattening(enabled ? WebCore::FrameFlatteningFullyEnabled : WebCore::FrameFlatteningDisabled);
    16311633    g_object_notify(G_OBJECT(settings), "enable-frame-flattening");
    16321634}
  • trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp

    r218319 r218480  
    236236    macro(WebKitAcceleratedCompositingEnabled, AcceleratedCompositingEnabled, acceleratedCompositingEnabled) \
    237237    macro(WebKitCanvasUsesAcceleratedDrawing, CanvasUsesAcceleratedDrawing, canvasUsesAcceleratedDrawing) \
    238     macro(WebKitFrameFlatteningEnabled, FrameFlatteningEnabled, frameFlatteningEnabled) \
    239238    macro(WebKitJavaEnabled, JavaEnabled, javaEnabled) \
    240239    macro(WebKitJavaScriptEnabled, ScriptEnabled, javaScriptEnabled) \
     
    304303    const HashSet<Page*>& pages = PageGroup::pageGroup(pageGroup->identifier())->pages();
    305304    for (HashSet<Page*>::iterator iter = pages.begin(); iter != pages.end(); ++iter)
    306         (*iter)->settings().setFrameFlatteningEnabled(enabled);
     305        (*iter)->settings().setFrameFlattening(enabled ? FrameFlatteningFullyEnabled : FrameFlatteningDisabled);
    307306}
    308307
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r217862 r218480  
    565565void WebChromeClient::contentsSizeChanged(Frame& frame, const IntSize& size) const
    566566{
    567     if (!m_page.corePage()->settings().frameFlatteningEnabled()) {
     567    if (m_page.corePage()->settings().frameFlattening() == FrameFlatteningDisabled) {
    568568        WebFrame* largestFrame = findLargestFrameInFrameSet(m_page);
    569569        if (largestFrame != m_cachedFrameSetLargestFrame.get()) {
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp

    r218470 r218480  
    30553055    settings.setLocalStorageEnabled(store.getBoolValueForKey(WebPreferencesKey::localStorageEnabledKey()));
    30563056    settings.setXSSAuditorEnabled(store.getBoolValueForKey(WebPreferencesKey::xssAuditorEnabledKey()));
    3057     settings.setFrameFlatteningEnabled(store.getBoolValueForKey(WebPreferencesKey::frameFlatteningEnabledKey()));
     3057    settings.setFrameFlattening(static_cast<WebCore::FrameFlattening>(store.getUInt32ValueForKey(WebPreferencesKey::frameFlatteningKey())));
    30583058    if (store.getBoolValueForKey(WebPreferencesKey::privateBrowsingEnabledKey()) && !usesEphemeralSession())
    30593059        setSessionID(SessionID::legacyPrivateSessionID());
  • trunk/Tools/ChangeLog

    r218465 r218480  
     12017-05-14 Frederic Wang  <fwang@igalia.com>
     2
     3        Add heuristic to avoid flattening "fullscreen" iframes
     4        https://bugs.webkit.org/show_bug.cgi?id=171914
     5
     6        Reviewed by Simon Fraser.
     7
     8        * DumpRenderTree/mac/DumpRenderTree.mm:
     9        (resetWebPreferencesToConsistentValues): Use WebKitFrameFlatteningDisabled.
     10
    1112017-06-18  Chris Dumez  <cdumez@apple.com>
    212
  • trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm

    r218406 r218480  
    904904    [preferences setLoadsImagesAutomatically:YES];
    905905    [preferences setLoadsSiteIconsIgnoringImageLoadingPreference:NO];
    906     [preferences setFrameFlatteningEnabled:NO];
     906    [preferences setFrameFlattening:WebKitFrameFlatteningDisabled];
    907907    [preferences setSpatialNavigationEnabled:NO];
    908908    [preferences setMetaRefreshEnabled:YES];
Note: See TracChangeset for help on using the changeset viewer.