Title: [253634] trunk/Source
Revision
253634
Author
simon.fra...@apple.com
Date
2019-12-17 11:25:54 -0800 (Tue, 17 Dec 2019)

Log Message

Change 'delegatesPageScaling' from a Setting to a flag on ScrollView
https://bugs.webkit.org/show_bug.cgi?id=205319

Reviewed by Tim Horton.

delegatesPageScaling() is never toggled at runtime (even by tests), and it should
be a flag on FrameView just like delegatesScrolling (maybe in future the flags can merge).

So remove the Setting, and have DrawingArea control whether page scaling is delegated.

In WebKit1, WebFrameLoaderClient::transitionToCommittedForNewPage() turns on delegated
page scaling for iOS.

Source/WebCore:

* page/Frame.cpp:
(WebCore::Frame::frameScaleFactor const):
* page/FrameSnapshotting.cpp:
(WebCore::snapshotFrameRectWithClip):
* page/FrameView.cpp:
(WebCore::FrameView::visibleContentScaleFactor const):
* page/Page.cpp:
(WebCore::Page::setPageScaleFactor):
* page/Settings.yaml:
* platform/ScrollView.cpp:
(WebCore::ScrollView::setDelegatesPageScaling):
* platform/ScrollView.h:
(WebCore::ScrollView::delegatesPageScaling const):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::addToOverlapMap const):

Source/WebKit:

* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
* WebProcess/WebPage/DrawingArea.h:
(WebKit::DrawingArea::usesDelegatedPageScaling const):
* WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
* WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
(WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
* WebProcess/WebPage/ios/FindControllerIOS.mm:
(WebKit::FindIndicatorOverlayClientIOS::drawRect):

Source/WebKitLegacy/mac:

* WebCoreSupport/WebFrameLoaderClient.mm:
(WebFrameLoaderClient::transitionToCommittedForNewPage):
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (253633 => 253634)


--- trunk/Source/WebCore/ChangeLog	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/ChangeLog	2019-12-17 19:25:54 UTC (rev 253634)
@@ -220,6 +220,37 @@
         * platform/graphics/Image.h:
         (WebCore::Image::orientation const):
 
+2019-12-16  Simon Fraser  <simon.fra...@apple.com>
+
+        Change 'delegatesPageScaling' from a Setting to a flag on ScrollView
+        https://bugs.webkit.org/show_bug.cgi?id=205319
+
+        Reviewed by Tim Horton.
+
+        delegatesPageScaling() is never toggled at runtime (even by tests), and it should
+        be a flag on FrameView just like delegatesScrolling (maybe in future the flags can merge).
+
+        So remove the Setting, and have DrawingArea control whether page scaling is delegated.
+        
+        In WebKit1, WebFrameLoaderClient::transitionToCommittedForNewPage() turns on delegated
+        page scaling for iOS.
+
+        * page/Frame.cpp:
+        (WebCore::Frame::frameScaleFactor const):
+        * page/FrameSnapshotting.cpp:
+        (WebCore::snapshotFrameRectWithClip):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::visibleContentScaleFactor const):
+        * page/Page.cpp:
+        (WebCore::Page::setPageScaleFactor):
+        * page/Settings.yaml:
+        * platform/ScrollView.cpp:
+        (WebCore::ScrollView::setDelegatesPageScaling):
+        * platform/ScrollView.h:
+        (WebCore::ScrollView::delegatesPageScaling const):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::addToOverlapMap const):
+
 2019-12-16  Ryosuke Niwa  <rn...@webkit.org>
 
         TextManipulationController should observe newly inserted or displayed contents

Modified: trunk/Source/WebCore/page/Frame.cpp (253633 => 253634)


--- trunk/Source/WebCore/page/Frame.cpp	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/page/Frame.cpp	2019-12-17 19:25:54 UTC (rev 253634)
@@ -919,9 +919,14 @@
     Page* page = this->page();
 
     // Main frame is scaled with respect to he container but inner frames are not scaled with respect to the main frame.
-    if (!page || &page->mainFrame() != this || settings().delegatesPageScaling())
+    if (!page || !isMainFrame())
         return 1;
 
+    if (FrameView* view = this->view()) {
+        if (view->delegatesPageScaling())
+            return 1;
+    }
+
     return page->pageScaleFactor();
 }
 

Modified: trunk/Source/WebCore/page/FrameSnapshotting.cpp (253633 => 253634)


--- trunk/Source/WebCore/page/FrameSnapshotting.cpp	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/page/FrameSnapshotting.cpp	2019-12-17 19:25:54 UTC (rev 253634)
@@ -105,7 +105,7 @@
 
     float scaleFactor = frame.page()->deviceScaleFactor();
 
-    if (frame.settings().delegatesPageScaling())
+    if (frame.view()->delegatesPageScaling())
         scaleFactor *= frame.page()->pageScaleFactor();
 
     if (options & SnapshotOptionsPaintWithIntegralScaleFactor)

Modified: trunk/Source/WebCore/page/FrameView.cpp (253633 => 253634)


--- trunk/Source/WebCore/page/FrameView.cpp	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/page/FrameView.cpp	2019-12-17 19:25:54 UTC (rev 253634)
@@ -3709,7 +3709,8 @@
 
 float FrameView::visibleContentScaleFactor() const
 {
-    if (!frame().isMainFrame() || !frame().settings().delegatesPageScaling())
+    // FIXME: This !delegatesPageScaling() is confusing. This function should probably be renamed to delegatedPageScaleFactor().
+    if (!frame().isMainFrame() || !delegatesPageScaling())
         return 1;
 
     Page* page = frame().page();

Modified: trunk/Source/WebCore/page/Page.cpp (253633 => 253634)


--- trunk/Source/WebCore/page/Page.cpp	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/page/Page.cpp	2019-12-17 19:25:54 UTC (rev 253634)
@@ -1031,11 +1031,11 @@
     LOG(Viewports, "Page::setPageScaleFactor %.2f - inStableState %d", scale, inStableState);
 
     Document* document = mainFrame().document();
-    FrameView* view = document->view();
+    RefPtr<FrameView> view = document->view();
 
     if (scale == m_pageScaleFactor) {
         if (view && view->scrollPosition() != origin) {
-            if (!m_settings->delegatesPageScaling())
+            if (!view->delegatesPageScaling())
                 document->updateLayoutIgnorePendingStylesheets();
 
             if (!view->delegatesScrolling())
@@ -1059,7 +1059,7 @@
 
     m_pageScaleFactor = scale;
 
-    if (!m_settings->delegatesPageScaling()) {
+    if (!view->delegatesPageScaling()) {
         view->setNeedsLayoutAfterViewConfigurationChange();
         view->setNeedsCompositingGeometryUpdate();
 
@@ -1075,7 +1075,7 @@
         view->setViewportConstrainedObjectsNeedLayout();
 
     if (view && view->scrollPosition() != origin) {
-        if (!m_settings->delegatesPageScaling() && document->renderView() && document->renderView()->needsLayout() && view->didFirstLayout())
+        if (!view->delegatesPageScaling() && document->renderView() && document->renderView()->needsLayout() && view->didFirstLayout())
             view->layoutContext().layout();
 
         if (!view->delegatesScrolling())

Modified: trunk/Source/WebCore/page/Settings.yaml (253633 => 253634)


--- trunk/Source/WebCore/page/Settings.yaml	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/page/Settings.yaml	2019-12-17 19:25:54 UTC (rev 253634)
@@ -379,9 +379,6 @@
 diagnosticLoggingEnabled:
   initial: false
 
-delegatesPageScaling:
-  initial: false
-
 plugInSnapshottingEnabled:
   initial: false
 

Modified: trunk/Source/WebCore/platform/ScrollView.cpp (253633 => 253634)


--- trunk/Source/WebCore/platform/ScrollView.cpp	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/platform/ScrollView.cpp	2019-12-17 19:25:54 UTC (rev 253634)
@@ -197,6 +197,11 @@
     delegatesScrollingDidChange();
 }
 
+void ScrollView::setDelegatesPageScaling(bool delegatesPageScaling)
+{
+    m_delegatesPageScaling = delegatesPageScaling;
+}
+
 IntPoint ScrollView::contentsScrollPosition() const
 {
 #if PLATFORM(IOS_FAMILY)

Modified: trunk/Source/WebCore/platform/ScrollView.h (253633 => 253634)


--- trunk/Source/WebCore/platform/ScrollView.h	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/platform/ScrollView.h	2019-12-17 19:25:54 UTC (rev 253634)
@@ -137,6 +137,9 @@
     bool delegatesScrolling() const { return m_delegatesScrolling; }
     WEBCORE_EXPORT void setDelegatesScrolling(bool);
 
+    bool delegatesPageScaling() const { return m_delegatesPageScaling; }
+    WEBCORE_EXPORT void setDelegatesPageScaling(bool);
+
     // Overridden by FrameView to create custom CSS scrollbars if applicable.
     virtual Ref<Scrollbar> createScrollbar(ScrollbarOrientation);
 
@@ -529,6 +532,8 @@
 
     bool m_paintsEntireContents { false };
     bool m_delegatesScrolling { false };
+    bool m_delegatesPageScaling { false };
+
 }; // class ScrollView
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (253633 => 253634)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2019-12-17 19:25:54 UTC (rev 253634)
@@ -1907,8 +1907,9 @@
 
     auto clippedBounds = extent.bounds;
     if (!clipRect.isInfinite()) {
-        // On iOS, pageScaleFactor() is not applied by RenderView, so we should not scale here.
-        if (!m_renderView.settings().delegatesPageScaling())
+        // With delegated page scaling, pageScaleFactor() is not applied by RenderView, so we should not scale here.
+        auto& frameView = m_renderView.frameView();
+        if (!frameView.delegatesPageScaling())
             clipRect.scale(pageScaleFactor());
 
         clippedBounds.intersect(clipRect);

Modified: trunk/Source/WebKit/ChangeLog (253633 => 253634)


--- trunk/Source/WebKit/ChangeLog	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKit/ChangeLog	2019-12-17 19:25:54 UTC (rev 253634)
@@ -101,6 +101,31 @@
         (WebKit::NetworkResourceLoader::startWithServiceWorker):
         (WebKit::NetworkResourceLoader::serviceWorkerDidNotHandle):
 
+2019-12-16  Simon Fraser  <simon.fra...@apple.com>
+
+        Change 'delegatesPageScaling' from a Setting to a flag on ScrollView
+        https://bugs.webkit.org/show_bug.cgi?id=205319
+
+        Reviewed by Tim Horton.
+
+        delegatesPageScaling() is never toggled at runtime (even by tests), and it should
+        be a flag on FrameView just like delegatesScrolling (maybe in future the flags can merge).
+
+        So remove the Setting, and have DrawingArea control whether page scaling is delegated.
+        
+        In WebKit1, WebFrameLoaderClient::transitionToCommittedForNewPage() turns on delegated
+        page scaling for iOS.
+
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage):
+        * WebProcess/WebPage/DrawingArea.h:
+        (WebKit::DrawingArea::usesDelegatedPageScaling const):
+        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h:
+        * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
+        (WebKit::RemoteLayerTreeDrawingArea::RemoteLayerTreeDrawingArea):
+        * WebProcess/WebPage/ios/FindControllerIOS.mm:
+        (WebKit::FindIndicatorOverlayClientIOS::drawRect):
+
 2019-12-16  Wenson Hsieh  <wenson_hs...@apple.com>
 
         -[UIWKDocumentContext markedTextRange] is wrong when the caret is not at the start of marked text

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (253633 => 253634)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2019-12-17 19:25:54 UTC (rev 253634)
@@ -1517,8 +1517,10 @@
 #if PLATFORM(COCOA)
     auto* drawingArea = webPage->drawingArea();
     view->setViewExposedRect(drawingArea->viewExposedRect());
-    if (isMainFrame)
+    if (isMainFrame) {
         view->setDelegatesScrolling(drawingArea->usesDelegatedScrolling());
+        view->setDelegatesPageScaling(drawingArea->usesDelegatedPageScaling());
+    }
 #endif
 
     if (webPage->scrollPinningBehavior() != DoNotPin)

Modified: trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h (253633 => 253634)


--- trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKit/WebProcess/WebPage/DrawingArea.h	2019-12-17 19:25:54 UTC (rev 253634)
@@ -107,6 +107,7 @@
 
     virtual bool supportsAsyncScrolling() const { return false; }
     virtual bool usesDelegatedScrolling() const { return false; }
+    virtual bool usesDelegatedPageScaling() const { return false; }
 
     virtual bool shouldUseTiledBackingForFrameView(const WebCore::FrameView&) const { return false; }
 

Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h (253633 => 253634)


--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h	2019-12-17 19:25:54 UTC (rev 253634)
@@ -80,6 +80,7 @@
 
     bool supportsAsyncScrolling() const override { return true; }
     bool usesDelegatedScrolling() const override { return true; }
+    bool usesDelegatedPageScaling() const override { return true; }
 
     void setLayerTreeStateIsFrozen(bool) override;
     bool layerTreeStateIsFrozen() const override { return m_isFlushingSuspended; }

Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm (253633 => 253634)


--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm	2019-12-17 19:25:54 UTC (rev 253634)
@@ -63,9 +63,6 @@
     , m_layerFlushTimer(*this, &RemoteLayerTreeDrawingArea::flushLayers)
 {
     webPage.corePage()->settings().setForceCompositingMode(true);
-#if PLATFORM(IOS_FAMILY)
-    webPage.corePage()->settings().setDelegatesPageScaling(true);
-#endif
     m_rootLayer->setName("drawing area root");
 
     m_commitQueue = dispatch_queue_create("com.apple.WebKit.WebContent.RemoteLayerTreeDrawingArea.CommitQueue", nullptr);

Modified: trunk/Source/WebKit/WebProcess/WebPage/ios/FindControllerIOS.mm (253633 => 253634)


--- trunk/Source/WebKit/WebProcess/WebPage/ios/FindControllerIOS.mm	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKit/WebProcess/WebPage/ios/FindControllerIOS.mm	2019-12-17 19:25:54 UTC (rev 253634)
@@ -62,7 +62,7 @@
 {
     float scaleFactor = m_frame.page()->deviceScaleFactor();
 
-    if (m_frame.settings().delegatesPageScaling())
+    if (m_frame.view() && m_frame.view()->delegatesPageScaling())
         scaleFactor *= m_frame.page()->pageScaleFactor();
 
     // If the page scale changed, we need to paint a new TextIndicator.

Modified: trunk/Source/WebKitLegacy/mac/ChangeLog (253633 => 253634)


--- trunk/Source/WebKitLegacy/mac/ChangeLog	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKitLegacy/mac/ChangeLog	2019-12-17 19:25:54 UTC (rev 253634)
@@ -1,3 +1,23 @@
+2019-12-16  Simon Fraser  <simon.fra...@apple.com>
+
+        Change 'delegatesPageScaling' from a Setting to a flag on ScrollView
+        https://bugs.webkit.org/show_bug.cgi?id=205319
+
+        Reviewed by Tim Horton.
+
+        delegatesPageScaling() is never toggled at runtime (even by tests), and it should
+        be a flag on FrameView just like delegatesScrolling (maybe in future the flags can merge).
+
+        So remove the Setting, and have DrawingArea control whether page scaling is delegated.
+        
+        In WebKit1, WebFrameLoaderClient::transitionToCommittedForNewPage() turns on delegated
+        page scaling for iOS.
+
+        * WebCoreSupport/WebFrameLoaderClient.mm:
+        (WebFrameLoaderClient::transitionToCommittedForNewPage):
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]):
+
 2019-12-16  Antti Koivisto  <an...@apple.com>
 
         Remove display:contents feature flag

Modified: trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm (253633 => 253634)


--- trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKitLegacy/mac/WebCoreSupport/WebFrameLoaderClient.mm	2019-12-17 19:25:54 UTC (rev 253634)
@@ -1473,6 +1473,7 @@
     if (isMainFrame) {
 #if PLATFORM(IOS_FAMILY)
         coreView->setDelegatesScrolling(true);
+        coreView->setDelegatesPageScaling(true);
 #endif
         coreView->setParentVisible(true);
     }

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebView.mm (253633 => 253634)


--- trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2019-12-17 19:19:48 UTC (rev 253633)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebView.mm	2019-12-17 19:25:54 UTC (rev 253634)
@@ -3044,7 +3044,6 @@
     settings.setPasswordEchoDurationInSeconds([preferences _passwordEchoDuration]);
 
     ASSERT_WITH_MESSAGE(settings.backForwardCacheSupportsPlugins(), "BackForwardCacheSupportsPlugins should be enabled on iOS.");
-    settings.setDelegatesPageScaling(true);
 
 #if ENABLE(TEXT_AUTOSIZING)
     settings.setMinimumZoomFontSize([preferences _minimumZoomFontSize]);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to