[webkit-changes] [WebKit/WebKit] 815f89: [iOS] [UnifiedPDF] PDF documents sometimes flicker...
Wenson Hsieh
noreply at github.com
Fri Feb 28 16:58:39 PST 2025
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 815f89b9a45b74461caa2e42ffcda9c8a49c93e9
https://github.com/WebKit/WebKit/commit/815f89b9a45b74461caa2e42ffcda9c8a49c93e9
Author: Wenson Hsieh <wenson_hsieh at apple.com>
Date: 2025-02-28 (Fri, 28 Feb 2025)
Changed paths:
M Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm
M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h
M Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm
M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFPresentationController.mm
M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.h
M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm
M Source/WebKit/WebProcess/Plugins/PluginView.cpp
M Source/WebKit/WebProcess/Plugins/PluginView.h
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.h
M Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm
Log Message:
-----------
[iOS] [UnifiedPDF] PDF documents sometimes flicker during rotation (reenable dynamic viewport size updates)
https://bugs.webkit.org/show_bug.cgi?id=288868
rdar://145881576
Reviewed by Abrar Rahman Protyasha.
Reenable dynamic viewport size updates for unified PDF — see below for more details.
* Source/WebKit/UIProcess/API/ios/WKWebViewIOS.mm:
(-[WKWebView _beginAnimatedResizeWithUpdates:]):
Remove the `-_isDisplayingPDF` check when deciding whether or not to bail immediately from animated
resize. Instead, only avoid maintaining the current content width when Stage Manager is enabled,
when computing `animatedResizeOriginalContentWidth` (this prevents us from intentionally allowing
horizontal scrolling when resizing the window to a width narrower than the minimum content width).
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.h:
(WebKit::PDFPluginBase::didChangeSettings):
Remove all the plumbing added to hook Unified PDF into `finalizeRenderingUpdate`, now that we no
longer rely on `UnifiedPDFPlugin` to restore scroll positions.
(WebKit::PDFPluginBase::finalizeRenderingUpdate): Deleted.
* Source/WebKit/WebProcess/Plugins/PDF/PDFPluginBase.mm:
(WebKit::PDFPluginBase::webPage const):
Add a helper method to grab the `WebPage`.
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/PDFPresentationController.mm:
(WebKit::PDFPresentationController::pdfPositionForCurrentView const):
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.h:
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm:
(WebKit::UnifiedPDFPlugin::geometryDidChange):
Add a call to `scheduleFullEditorStateUpdate` (i.e. update selection geometry), in the case where
there's a selection and the size is changing. This ensures that the selection never shows up out of
place after resize, now that we no longer scroll as a result of restoring the anchor (which
previously updated the selection highlight as a byproduct).
(WebKit::UnifiedPDFPlugin::updateLayout):
Revert some now-unnecessary logic for restoring the anchor, in the `shouldSizeToFitContent` case.
Rather than using `PDFPresentationController::restorePDFPosition`, we now just use the same dynamic
viewport resize codepath that we use for normal webpages, which guarantees a smooth transition
(covered by an animated snapshot view) during rotation while keeping the center of the viewport
stable before and after the animated resize.
(WebKit::UnifiedPDFPlugin::finalizeRenderingUpdate): Deleted.
* Source/WebKit/WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::finalizeRenderingUpdate): Deleted.
* Source/WebKit/WebProcess/Plugins/PluginView.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::finalizeRenderingUpdate):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::setViewportConfigurationViewLayoutSize):
Pull this check for `plugin && !plugin->pluginHandlesPageScaleFactor()` out into a separate helper
method, which case can also use below.
(WebKit::WebPage::mainFramePlugInDefersScalingToViewport const):
(WebKit::WebPage::shouldEnableViewportBehaviorsForResizableWindows const):
Opt out of the normal "resizable windows" codepath for unified PDF, when Stage Manager is enabled.
This ensures that the width of the embed element always fits the viewport width, regardless of
window size (as opposed to falling back to horizontal scrolling).
Canonical link: https://commits.webkit.org/291407@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list