Changeset 218480 in webkit
- Timestamp:
- Jun 19, 2017 12:41:11 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 65 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r218468 r218480 1 2017-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 1 55 2017-06-18 Ryosuke Niwa <rniwa@webkit.org> 2 56 -
trunk/LayoutTests/fast/forms/ios/delete-in-input-in-iframe.html
r203097 r218480 21 21 22 22 if (window.internals) 23 internals.settings.setFrameFlattening Enabled(true);23 internals.settings.setFrameFlattening("FullyEnabled") 24 24 25 25 function getTypingUIScript() -
trunk/LayoutTests/fast/forms/ios/focus-input-in-iframe.html
r202292 r218480 21 21 22 22 if (window.internals) 23 internals.settings.setFrameFlattening Enabled(true);23 internals.settings.setFrameFlattening("FullyEnabled") 24 24 25 25 function buttonClicked() -
trunk/LayoutTests/fast/forms/ios/programmatic-focus-input-in-iframe.html
r202292 r218480 20 20 21 21 if (window.internals) 22 internals.settings.setFrameFlattening Enabled(true);22 internals.settings.setFrameFlattening("FullyEnabled") 23 23 24 24 function pageDidScroll() -
trunk/LayoutTests/fast/forms/ios/typing-in-input-in-iframe.html
r202295 r218480 21 21 22 22 if (window.internals) 23 internals.settings.setFrameFlattening Enabled(true);23 internals.settings.setFrameFlattening("FullyEnabled") 24 24 25 25 function getTypingUIScript() -
trunk/LayoutTests/fast/frames/flattening/crash-remove-iframe-during-object-beforeload.html
r151312 r218480 5 5 testRunner.dumpAsText(); 6 6 testRunner.waitUntilDone(); 7 window.internals.settings.setFrameFlattening Enabled(true);7 window.internals.settings.setFrameFlattening("FullyEnabled") 8 8 } 9 9 -
trunk/LayoutTests/fast/frames/flattening/crash-svg-document.html
r142499 r218480 3 3 4 4 if (window.testRunner && window.internals) { 5 internals.settings.setFrameFlattening Enabled(true);5 internals.settings.setFrameFlattening("FullyEnabled") 6 6 testRunner.dumpAsText(); 7 7 } -
trunk/LayoutTests/fast/frames/flattening/crash-when-sibling-iframe-is-destroyed-with-subtree-layoutroot.html
r188016 r218480 10 10 11 11 if (window.internals) 12 internals.settings.setFrameFlattening Enabled(true);12 internals.settings.setFrameFlattening("FullyEnabled") 13 13 14 14 window.onload = function() { -
trunk/LayoutTests/fast/frames/flattening/frameset-flattening-advanced.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/frameset-flattening-grid.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/frameset-flattening-simple.html
r142499 r218480 4 4 if (window.testRunner && window.internals) { 5 5 testRunner.waitUntilDone(); 6 internals.settings.setFrameFlattening Enabled(true);6 internals.settings.setFrameFlattening("FullyEnabled") 7 7 } 8 8 -
trunk/LayoutTests/fast/frames/flattening/frameset-flattening-subframe-resize.html
r142499 r218480 4 4 if (window.testRunner && window.internals) { 5 5 testRunner.waitUntilDone(); 6 internals.settings.setFrameFlattening Enabled(true);6 internals.settings.setFrameFlattening("FullyEnabled") 7 7 } 8 8 -
trunk/LayoutTests/fast/frames/flattening/frameset-flattening-subframesets.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/hittest-iframe-while-style-changes-crash.html
r186165 r218480 10 10 11 11 if (window.internals) 12 internals.settings.setFrameFlattening Enabled(true);12 internals.settings.setFrameFlattening("FullyEnabled") 13 13 14 14 function runTest() { -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-crash.html
r142499 r218480 5 5 testRunner.dumpAsText(); 6 6 testRunner.waitUntilDone(); 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 } 9 9 </script> … … 21 21 testRunner.notifyDone(); 22 22 if (window.testRunner) 23 internals.settings.setFrameFlattening Enabled(true);23 internals.settings.setFrameFlattening('FullyEnabled') 24 24 } 25 25 </script> -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-height.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling-with-js-forced-layout.html
r142499 r218480 7 7 if (window.testRunner && window.internals) { 8 8 testRunner.dumpAsText(); 9 internals.settings.setFrameFlattening Enabled(true);9 internals.settings.setFrameFlattening("FullyEnabled") 10 10 } 11 11 } -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width-and-height-no-scrolling.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width-and-height-zero-size.html
r142499 r218480 7 7 if (window.testRunner && window.internals) { 8 8 testRunner.dumpAsText(); 9 internals.settings.setFrameFlattening Enabled(true);9 internals.settings.setFrameFlattening("FullyEnabled") 10 10 } 11 11 -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width-and-height.html
r142499 r218480 4 4 if (window.testRunner && window.internals) { 5 5 testRunner.waitUntilDone(); 6 internals.settings.setFrameFlattening Enabled(true);6 internals.settings.setFrameFlattening("FullyEnabled") 7 7 } 8 8 -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-fixed-width.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-inside-flexbox-with-delayed-scroll-update.html
r175965 r218480 15 15 16 16 if (window.internals) 17 internals.settings.setFrameFlattening Enabled(true);17 internals.settings.setFrameFlattening("FullyEnabled") 18 18 19 19 function runTest() -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-nested.html
r142499 r218480 11 11 { 12 12 if (window.internals) 13 internals.settings.setFrameFlattening Enabled(true);13 internals.settings.setFrameFlattening("FullyEnabled") 14 14 // Force synchronous layout. 15 15 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-offscreen.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-out-of-view-and-scroll.html
r142499 r218480 4 4 if (window.testRunner && window.internals) { 5 5 testRunner.waitUntilDone(); 6 internals.settings.setFrameFlattening Enabled(true);6 internals.settings.setFrameFlattening("FullyEnabled") 7 7 } 8 8 -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-out-of-view-scroll-and-relayout.html
r142499 r218480 4 4 if (window.testRunner && window.internals) { 5 5 testRunner.waitUntilDone(); 6 internals.settings.setFrameFlattening Enabled(true);6 internals.settings.setFrameFlattening("FullyEnabled") 7 7 } 8 8 -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-out-of-view.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-resize-event-count.html
r183272 r218480 4 4 <script> 5 5 if (window.internals) 6 internals.settings.setFrameFlattening Enabled(true);6 internals.settings.setFrameFlattening("FullyEnabled") 7 7 8 8 if (window.testRunner) { -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-selection-crash.html
r142499 r218480 5 5 if (window.testRunner && window.internals) { 6 6 testRunner.dumpAsText(); 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 } 9 9 -
trunk/LayoutTests/fast/frames/flattening/iframe-flattening-simple.html
r142499 r218480 5 5 { 6 6 if (window.internals) 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 // Force synchronous layout. 9 9 document.body.offsetHeight; -
trunk/LayoutTests/fast/frames/flattening/iframe-tiny.html
r155268 r218480 7 7 8 8 if (window.internals) 9 internals.settings.setFrameFlattening Enabled(true);9 internals.settings.setFrameFlattening("FullyEnabled") 10 10 11 11 function checkResult(frameName, expectedWidth, expectedHeight) -
trunk/LayoutTests/fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-and-needs-full-repaint-crash.html
r169128 r218480 9 9 10 10 if (window.internals) 11 internals.settings.setFrameFlattening Enabled(true);11 internals.settings.setFrameFlattening("FullyEnabled") 12 12 13 13 function done() -
trunk/LayoutTests/fast/frames/flattening/scrollable-flexbox-inside-iframe-with-zero-height-assertion-failure.html
r169128 r218480 9 9 10 10 if (window.internals) 11 internals.settings.setFrameFlattening Enabled(true);11 internals.settings.setFrameFlattening("FullyEnabled") 12 12 13 13 function done() -
trunk/LayoutTests/fast/frames/flattening/scrolling-in-object.html
r188793 r218480 4 4 if (window.testRunner && window.internals) { 5 5 testRunner.waitUntilDone(); 6 internals.settings.setFrameFlattening Enabled(true);6 internals.settings.setFrameFlattening("FullyEnabled") 7 7 } 8 8 -
trunk/LayoutTests/fast/spatial-navigation/snav-iframe-flattening-simple.html
r155272 r218480 39 39 { 40 40 if (window.internals) 41 internals.settings.setFrameFlattening Enabled(true);41 internals.settings.setFrameFlattening("FullyEnabled") 42 42 43 43 // starting the test itself: get to a known place. -
trunk/LayoutTests/http/tests/misc/iframe-flattening-3level-nesting-with-blocking-resource.html
r142499 r218480 5 5 testRunner.waitUntilDone(); 6 6 testRunner.dumpAsText(); 7 internals.settings.setFrameFlattening Enabled(true);7 internals.settings.setFrameFlattening("FullyEnabled") 8 8 } 9 9 </script> -
trunk/LayoutTests/platform/mac/TestExpectations
r218424 r218480 498 498 webkit.org/b/106185 fast/frames/flattening/iframe-flattening-fixed-height.html [ Failure Pass ] 499 499 webkit.org/b/106185 fast/frames/flattening/frameset-flattening-grid.html [ Failure Pass ] 500 501 # FrameFlattening enum preferences can not be overridden. 502 webkit.org/b/128594 platform/mac/fast/frames/flattening/set-preference.html [ Failure ] 500 503 501 504 webkit.org/b/73766 css3/unicode-bidi-isolate-aharon-failing.html [ ImageOnlyFailure ] -
trunk/LayoutTests/plugins/frameset-with-plugin-frame.html
r180441 r218480 4 4 testRunner.dumpAsText(); 5 5 testRunner.waitUntilDone(); 6 internals.settings.setFrameFlattening Enabled(true);6 internals.settings.setFrameFlattening("FullyEnabled") 7 7 testRunner.overridePreference("WebKitUsesPageCachePreferenceKey", 1); 8 8 testRunner.overridePreference("WebKitPageCacheSupportsPluginsPreferenceKey", 1); -
trunk/Source/WebCore/ChangeLog
r218472 r218480 1 2017-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 1 43 2017-06-18 Carlos Garcia Campos <cgarcia@igalia.com> 2 44 -
trunk/Source/WebCore/page/FrameView.cpp
r218228 r218480 568 568 bool FrameView::frameFlatteningEnabled() const 569 569 { 570 return frame().settings().frameFlattening Enabled();570 return frame().settings().frameFlattening() != FrameFlatteningDisabled; 571 571 } 572 572 -
trunk/Source/WebCore/page/Settings.h
r217999 r218480 89 89 }; 90 90 91 enum FrameFlattening { 92 FrameFlatteningDisabled, 93 FrameFlatteningEnabledForNonFullScreenIFrames, 94 FrameFlatteningFullyEnabled 95 }; 96 91 97 typedef unsigned DebugOverlayRegions; 92 98 -
trunk/Source/WebCore/page/Settings.in
r218439 r218480 176 176 primaryPlugInSnapshotDetectionEnabled initial=true 177 177 maximumPlugInSnapshotAttempts type=unsigned, initial=20 178 frameFlattening Enabled initial=false178 frameFlattening type=FrameFlattening, initial=FrameFlatteningDisabled 179 179 180 180 webSecurityEnabled initial=true -
trunk/Source/WebCore/rendering/RenderFrameSet.cpp
r210768 r218480 652 652 bool RenderFrameSet::flattenFrameSet() const 653 653 { 654 return settings().frameFlattening Enabled();654 return settings().frameFlattening() != FrameFlatteningDisabled; 655 655 } 656 656 -
trunk/Source/WebCore/rendering/RenderIFrame.cpp
r210768 r218480 70 70 } 71 71 72 bool 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 72 79 bool RenderIFrame::flattenFrame() const 73 80 { 74 if ( !settings().frameFlatteningEnabled())81 if (settings().frameFlattening() == FrameFlatteningDisabled) 75 82 return false; 76 83 … … 79 86 if (iframeElement().scrollingMode() == ScrollbarAlwaysOff) 80 87 return false; 88 // Do not flatten iframes that have zero size, as flattening might make them visible. 81 89 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()) 82 93 return false; 83 94 } -
trunk/Source/WebCore/rendering/RenderIFrame.h
r208668 r218480 60 60 61 61 RenderView* contentRootRenderer() const; 62 63 bool isFullScreenIFrame() const; 62 64 }; 63 65 -
trunk/Source/WebCore/rendering/RenderView.cpp
r216001 r218480 62 62 FrameFlatteningLayoutDisallower(FrameView& frameView) 63 63 : m_frameView(frameView) 64 , m_disallowLayout(frameView.frame().settings().frameFlattening Enabled())64 , m_disallowLayout(frameView.frame().settings().frameFlattening() != FrameFlatteningDisabled) 65 65 { 66 66 if (m_disallowLayout) -
trunk/Source/WebCore/testing/InternalSettings.cpp
r218351 r218480 101 101 , m_forcedDisplayIsMonochromeAccessibilityValue(settings.forcedDisplayIsMonochromeAccessibilityValue()) 102 102 , m_forcedPrefersReducedMotionAccessibilityValue(settings.forcedPrefersReducedMotionAccessibilityValue()) 103 , m_frameFlattening(settings.frameFlattening()) 103 104 #if ENABLE(INDEXED_DATABASE_IN_WORKERS) 104 105 , m_indexedDBWorkersEnabled(RuntimeEnabledFeatures::sharedFeatures().indexedDBWorkersEnabled()) … … 194 195 RenderTheme::singleton().setShouldMockBoldSystemFontForAccessibility(m_shouldMockBoldSystemFontForAccessibility); 195 196 FontCache::singleton().setShouldMockBoldSystemFontForAccessibility(m_shouldMockBoldSystemFontForAccessibility); 197 settings.setFrameFlattening(m_frameFlattening); 196 198 197 199 #if ENABLE(INDEXED_DATABASE_IN_WORKERS) … … 789 791 } 790 792 793 static 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 808 ExceptionOr<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 791 816 void InternalSettings::setAllowsAnySSLCertificate(bool allowsAnyCertificate) 792 817 { -
trunk/Source/WebCore/testing/InternalSettings.h
r218351 r218480 98 98 ExceptionOr<void> setShouldMockBoldSystemFontForAccessibility(bool); 99 99 ExceptionOr<void> setShouldManageAudioSessionCategory(bool); 100 101 enum class FrameFlatteningValue { Disabled, EnabledForNonFullScreenIFrames, FullyEnabled }; 102 ExceptionOr<void> setFrameFlattening(const FrameFlatteningValue&); 100 103 101 104 static void setAllowsAnySSLCertificate(bool); … … 188 191 Settings::ForcedAccessibilityValue m_forcedDisplayIsMonochromeAccessibilityValue; 189 192 Settings::ForcedAccessibilityValue m_forcedPrefersReducedMotionAccessibilityValue; 193 FrameFlattening m_frameFlattening; 190 194 191 195 // Runtime enabled settings. -
trunk/Source/WebCore/testing/InternalSettings.idl
r218351 r218480 26 26 27 27 enum ForcedAccessibilityValue { "system", "on", "off" }; 28 enum FrameFlatteningValue { "Disabled", "EnabledForNonFullScreenIFrames", "FullyEnabled" }; 28 29 29 30 [ … … 82 83 [MayThrowException] void setAllowsInlineMediaPlaybackAfterFullscreen(boolean allows); 83 84 [MayThrowException] void setInlineMediaPlaybackRequiresPlaysInlineAttribute(boolean requires); 85 [MayThrowException] void setFrameFlattening(FrameFlatteningValue frameFlattening); 84 86 85 87 // RuntimeEnabledFeatures. -
trunk/Source/WebKit/mac/ChangeLog
r218457 r218480 1 2017-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 1 22 2017-06-17 Chris Dumez <cdumez@apple.com> 2 23 -
trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
r218196 r218480 117 117 #define WebKitForceWebGLUsesLowPowerPreferenceKey @"WebKitForceWebGLUsesLowPower" 118 118 #define WebKitAccelerated2dCanvasEnabledPreferenceKey @"WebKitAccelerated2dCanvasEnabled" 119 #define WebKitFrameFlattening EnabledPreferenceKey @"WebKitFrameFlatteningEnabled"119 #define WebKitFrameFlatteningPreferenceKey @"WebKitFrameFlattening" 120 120 #define WebKitSpatialNavigationEnabledPreferenceKey @"WebKitSpatialNavigationEnabled" 121 121 #define WebKitPaginateDuringLayoutEnabledPreferenceKey @"WebKitPaginateDuringLayoutEnabled" -
trunk/Source/WebKit/mac/WebView/WebPreferences.mm
r218196 r218480 521 521 [NSNumber numberWithBool:YES], WebKitAnimatedImageAsyncDecodingEnabledPreferenceKey, 522 522 #if PLATFORM(IOS) 523 [NSNumber numberWith Bool:YES], WebKitFrameFlatteningEnabledPreferenceKey,523 [NSNumber numberWithUnsignedInt:FrameFlatteningFullyEnabled], WebKitFrameFlatteningPreferenceKey, 524 524 #else 525 [NSNumber numberWith Bool:NO], WebKitFrameFlatteningEnabledPreferenceKey,525 [NSNumber numberWithUnsignedInt:FrameFlatteningDisabled], WebKitFrameFlatteningPreferenceKey, 526 526 #endif 527 527 [NSNumber numberWithBool:NO], WebKitSpatialNavigationEnabledPreferenceKey, … … 2109 2109 - (BOOL)isFrameFlatteningEnabled 2110 2110 { 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]; 2117 2128 } 2118 2129 -
trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h
r218196 r218480 57 57 } WebKitJavaScriptRuntimeFlags; 58 58 59 typedef enum { 60 WebKitFrameFlatteningDisabled, 61 WebKitFrameFlatteningEnabledForNonFullScreenIFrames, 62 WebKitFrameFlatteningFullyEnabled 63 } WebKitFrameFlattening; 64 59 65 extern NSString *WebPreferencesChangedNotification; 60 66 extern NSString *WebPreferencesRemovedNotification; … … 156 162 - (BOOL)isFrameFlatteningEnabled; 157 163 - (void)setFrameFlatteningEnabled:(BOOL)flag; 164 165 - (WebKitFrameFlattening)frameFlattening; 166 - (void)setFrameFlattening:(WebKitFrameFlattening)flag; 158 167 159 168 - (BOOL)isSpatialNavigationEnabled; -
trunk/Source/WebKit/mac/WebView/WebView.mm
r218433 r218480 2802 2802 settings.setLoadDeferringEnabled(shouldEnableLoadDeferring()); 2803 2803 settings.setWindowFocusRestricted(shouldRestrictWindowFocus()); 2804 settings.setFrameFlattening Enabled([preferences isFrameFlatteningEnabled]);2804 settings.setFrameFlattening((const WebCore::FrameFlattening)[preferences frameFlattening]); 2805 2805 settings.setSpatialNavigationEnabled([preferences isSpatialNavigationEnabled]); 2806 2806 settings.setPaginateDuringLayoutEnabled([preferences paginateDuringLayoutEnabled]); -
trunk/Source/WebKit/win/ChangeLog
r218457 r218480 1 2017-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 1 14 2017-06-17 Chris Dumez <cdumez@apple.com> 2 15 -
trunk/Source/WebKit/win/WebView.cpp
r218196 r218480 5467 5467 if (FAILED(hr)) 5468 5468 return hr; 5469 settings.setFrameFlattening Enabled(enabled);5469 settings.setFrameFlattening(enabled ? FrameFlatteningFullyEnabled : FrameFlatteningDisabled); 5470 5470 5471 5471 hr = prefsPrivate->acceleratedCompositingEnabled(&enabled); -
trunk/Source/WebKit2/ChangeLog
r218478 r218480 1 2017-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 1 27 2017-06-18 Carlos Garcia Campos <cgarcia@igalia.com> 2 28 -
trunk/Source/WebKit2/Shared/WebPreferencesDefinitions.h
r218439 r218480 61 61 #define DEFAULT_ALLOWS_PICTURE_IN_PICTURE_MEDIA_PLAYBACK true 62 62 #define DEFAULT_BACKSPACE_KEY_NAVIGATION_ENABLED false 63 #define DEFAULT_FRAME_FLATTENING _ENABLED true63 #define DEFAULT_FRAME_FLATTENING FrameFlatteningFullyEnabled 64 64 #define DEFAULT_SHOULD_PRINT_BACKGROUNDS true 65 65 #define DEFAULT_TEXT_AREAS_ARE_RESIZABLE false … … 78 78 #define DEFAULT_ALLOWS_PICTURE_IN_PICTURE_MEDIA_PLAYBACK false 79 79 #define DEFAULT_BACKSPACE_KEY_NAVIGATION_ENABLED true 80 #define DEFAULT_FRAME_FLATTENING _ENABLED false80 #define DEFAULT_FRAME_FLATTENING FrameFlatteningDisabled 81 81 #define DEFAULT_SHOULD_PRINT_BACKGROUNDS false 82 82 #define DEFAULT_TEXT_AREAS_ARE_RESIZABLE true … … 141 141 macro(DatabasesEnabled, databasesEnabled, Bool, bool, true, "", "") \ 142 142 macro(XSSAuditorEnabled, xssAuditorEnabled, Bool, bool, true, "", "") \ 143 macro(FrameFlatteningEnabled, frameFlatteningEnabled, Bool, bool, DEFAULT_FRAME_FLATTENING_ENABLED, "", "") \144 143 macro(PrivateBrowsingEnabled, privateBrowsingEnabled, Bool, bool, false, "", "") \ 145 144 macro(TextAreasAreResizable, textAreasAreResizable, Bool, bool, DEFAULT_TEXT_AREAS_ARE_RESIZABLE, "", "") \ … … 316 315 macro(UserInterfaceDirectionPolicy, userInterfaceDirectionPolicy, UInt32, uint32_t, 0, "", "") \ 317 316 macro(SystemLayoutDirection, systemLayoutDirection, UInt32, uint32_t, 0, "", "") \ 317 macro(FrameFlattening, frameFlattening, UInt32, uint32_t, DEFAULT_FRAME_FLATTENING, "", "") \ 318 318 \ 319 319 -
trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp
r218196 r218480 145 145 void WKPreferencesSetFrameFlatteningEnabled(WKPreferencesRef preferencesRef, bool frameFlatteningEnabled) 146 146 { 147 toImpl(preferencesRef)->setFrameFlatteningEnabled(frameFlatteningEnabled); 147 // FIXME: Expose more frame flattening values. 148 toImpl(preferencesRef)->setFrameFlattening(frameFlatteningEnabled ? WebCore::FrameFlatteningFullyEnabled : WebCore::FrameFlatteningDisabled); 148 149 } 149 150 150 151 bool WKPreferencesGetFrameFlatteningEnabled(WKPreferencesRef preferencesRef) 151 152 { 152 return toImpl(preferencesRef)->frameFlatteningEnabled(); 153 // FIXME: Expose more frame flattening values. 154 return toImpl(preferencesRef)->frameFlattening() != WebCore::FrameFlatteningDisabled; 153 155 } 154 156 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp
r218332 r218480 1609 1609 g_return_val_if_fail(WEBKIT_IS_SETTINGS(settings), FALSE); 1610 1610 1611 return settings->priv->preferences->frameFlatteningEnabled(); 1611 // FIXME: Expose more frame flattening values. 1612 return settings->priv->preferences->frameFlattening() != WebCore::FrameFlatteningDisabled; 1612 1613 } 1613 1614 … … 1624 1625 1625 1626 WebKitSettingsPrivate* priv = settings->priv; 1626 bool currentValue = priv->preferences->frameFlattening Enabled();1627 bool currentValue = priv->preferences->frameFlattening() != WebCore::FrameFlatteningDisabled; 1627 1628 if (currentValue == enabled) 1628 1629 return; 1629 1630 1630 priv->preferences->setFrameFlatteningEnabled(enabled); 1631 // FIXME: Expose more frame flattening values. 1632 priv->preferences->setFrameFlattening(enabled ? WebCore::FrameFlatteningFullyEnabled : WebCore::FrameFlatteningDisabled); 1631 1633 g_object_notify(G_OBJECT(settings), "enable-frame-flattening"); 1632 1634 } -
trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
r218319 r218480 236 236 macro(WebKitAcceleratedCompositingEnabled, AcceleratedCompositingEnabled, acceleratedCompositingEnabled) \ 237 237 macro(WebKitCanvasUsesAcceleratedDrawing, CanvasUsesAcceleratedDrawing, canvasUsesAcceleratedDrawing) \ 238 macro(WebKitFrameFlatteningEnabled, FrameFlatteningEnabled, frameFlatteningEnabled) \239 238 macro(WebKitJavaEnabled, JavaEnabled, javaEnabled) \ 240 239 macro(WebKitJavaScriptEnabled, ScriptEnabled, javaScriptEnabled) \ … … 304 303 const HashSet<Page*>& pages = PageGroup::pageGroup(pageGroup->identifier())->pages(); 305 304 for (HashSet<Page*>::iterator iter = pages.begin(); iter != pages.end(); ++iter) 306 (*iter)->settings().setFrameFlattening Enabled(enabled);305 (*iter)->settings().setFrameFlattening(enabled ? FrameFlatteningFullyEnabled : FrameFlatteningDisabled); 307 306 } 308 307 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
r217862 r218480 565 565 void WebChromeClient::contentsSizeChanged(Frame& frame, const IntSize& size) const 566 566 { 567 if ( !m_page.corePage()->settings().frameFlatteningEnabled()) {567 if (m_page.corePage()->settings().frameFlattening() == FrameFlatteningDisabled) { 568 568 WebFrame* largestFrame = findLargestFrameInFrameSet(m_page); 569 569 if (largestFrame != m_cachedFrameSetLargestFrame.get()) { -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r218470 r218480 3055 3055 settings.setLocalStorageEnabled(store.getBoolValueForKey(WebPreferencesKey::localStorageEnabledKey())); 3056 3056 settings.setXSSAuditorEnabled(store.getBoolValueForKey(WebPreferencesKey::xssAuditorEnabledKey())); 3057 settings.setFrameFlattening Enabled(store.getBoolValueForKey(WebPreferencesKey::frameFlatteningEnabledKey()));3057 settings.setFrameFlattening(static_cast<WebCore::FrameFlattening>(store.getUInt32ValueForKey(WebPreferencesKey::frameFlatteningKey()))); 3058 3058 if (store.getBoolValueForKey(WebPreferencesKey::privateBrowsingEnabledKey()) && !usesEphemeralSession()) 3059 3059 setSessionID(SessionID::legacyPrivateSessionID()); -
trunk/Tools/ChangeLog
r218465 r218480 1 2017-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 1 11 2017-06-18 Chris Dumez <cdumez@apple.com> 2 12 -
trunk/Tools/DumpRenderTree/mac/DumpRenderTree.mm
r218406 r218480 904 904 [preferences setLoadsImagesAutomatically:YES]; 905 905 [preferences setLoadsSiteIconsIgnoringImageLoadingPreference:NO]; 906 [preferences setFrameFlattening Enabled:NO];906 [preferences setFrameFlattening:WebKitFrameFlatteningDisabled]; 907 907 [preferences setSpatialNavigationEnabled:NO]; 908 908 [preferences setMetaRefreshEnabled:YES];
Note: See TracChangeset
for help on using the changeset viewer.