Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 7eac12ec2ff9679924ce2d6adc86c943cacdccf4 https://github.com/WebKit/WebKit/commit/7eac12ec2ff9679924ce2d6adc86c943cacdccf4 Author: Jessica Cheung <jcheun...@apple.com> Date: 2025-01-24 (Fri, 24 Jan 2025)
Changed paths: M Source/WebCore/page/VisualViewport.cpp M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj A Tools/TestWebKitAPI/Tests/ios/VisualViewport.mm Log Message: ----------- usatoday.com: Rotating from landscape to portrait causes flickering https://bugs.webkit.org/show_bug.cgi?id=286367 rdar://93767145 Reviewed by Wenson Hsieh. usatoday.com has a visual viewport flickering issue when rotating from landscape to portrait. This issue happens when rotating from portrait to landscape as well, but does not flicker due to the width cutoffs set in javascript for the website. Additionally, this issue actually happens when we change the viewport width in the meta tag. In this scenario, the new width is calculated based on the current visual viewport scale and width. In our code, the issue was as follows: 1. Document::processViewport is called whenever the viewport meta tag changes 2. The scale is set - Layout change happens before VisibleContentRectUpdates 3. VisualViewport::update calls setNeedsVisualViewportResize() 4. A resize is dispatched - This is the extra/premature resize 5. (UI) WebpageProxy::updateVisibleContentRects is called which in turn calls (WEB) WebPage::updateVisibleContentRects 6. A resize is dispatched - This is the correct resize that we anticipate with updated width The scale is updated in the UI process but the width is updated in the Web process. Thus, the scale is updated ahead of the width and hits this section of code in VisualViewport.cpp: if (m_width != width || m_height != height || m_scale != scale) { if (document) document->setNeedsVisualViewportResize(); We hit m_scale != scale and call document->setNeedsVisualViewportResize(); prematurely, when we should be waiting until either the width or height changes as well. Thus, the issue of the extra resize(s) is fixed by removing the condition to check for scale changes when determining when to call resize. This is safe because visual viewport scales should never update independently from width/height. An API test was also added for this change. * Source/WebCore/page/VisualViewport.cpp: (WebCore::VisualViewport::update): * Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj: * Tools/TestWebKitAPI/Tests/ios/VisualViewport.mm: Added. (TestWebKitAPI::TEST(VisualViewport, RotationResize)): Canonical link: https://commits.webkit.org/289334@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes